WuhuIslandTesting/Library/PackageCache/com.unity.xr.management@4.2.1/Tests/Editor/PackageManagementTests.cs
2025-01-07 02:06:59 +01:00

211 lines
7.7 KiB
C#

using NUnit.Framework;
using System;
using System.Collections;
using System.IO;
using System.Linq;
using System.Text.RegularExpressions;
using UnityEngine;
using UnityEngine.TestTools;
using UnityEngine.XR.Management;
using UnityEditor.XR.Management.Metadata;
using Unity.XR.Management.TestPackage;
using Unity.XR.Management.TestPackage.Editor;
namespace UnityEditor.XR.Management.Tests
{
class PackageManagementTests
{
internal static readonly string[] s_TempSettingsPath = { "Temp", "Test" };
XRGeneralSettingsPerBuildTarget m_TestSettingsPerBuildTarget = null;
XRGeneralSettings m_TestSettings = null;
XRManagerSettings m_Settings = null;
[SetUp]
public void SetUp()
{
AssetDatabase.DeleteAsset("Assets/XR");
AssetDatabase.CreateFolder("Assets", "XR");
m_Settings = ScriptableObject.CreateInstance<XRManagerSettings>() as XRManagerSettings;
m_Settings.name = "Actual testable settings.";
m_TestSettings = ScriptableObject.CreateInstance<XRGeneralSettings>() as XRGeneralSettings;
m_TestSettings.Manager = m_Settings;
m_TestSettings.name = "Standalone Settings Container.";
m_TestSettingsPerBuildTarget = ScriptableObject.CreateInstance<XRGeneralSettingsPerBuildTarget>() as XRGeneralSettingsPerBuildTarget;
m_TestSettingsPerBuildTarget.SetSettingsForBuildTarget(BuildTargetGroup.Standalone, m_TestSettings);
var testPath = XRGeneralSettingsTests.GetAssetPathForComponents(s_TempSettingsPath);
if (!string.IsNullOrEmpty(testPath))
{
AssetDatabase.CreateAsset(m_TestSettingsPerBuildTarget, Path.Combine(testPath, "Test_XRGeneralSettings.asset"));
AssetDatabase.AddObjectToAsset(m_TestSettings, AssetDatabase.GetAssetOrScenePath(m_TestSettingsPerBuildTarget));
AssetDatabase.CreateFolder(testPath, "Settings");
testPath = Path.Combine(testPath, "Settings");
AssetDatabase.CreateAsset(m_Settings, Path.Combine(testPath, "Test_XRSettingsManager.asset"));
m_TestSettings.AssignedSettings = m_Settings;
AssetDatabase.SaveAssets();
}
EditorBuildSettings.AddConfigObject(XRGeneralSettings.k_SettingsKey, m_TestSettingsPerBuildTarget, true);
XRPackageInitializationBootstrap.BeginPackageInitialization();
TestPackage pkg = new TestPackage();
XRPackageMetadataStore.AddPluginPackage(pkg);
XRPackageInitializationBootstrap.InitPackage(pkg);
TestLoaderBase.WasAssigned = false;
TestLoaderBase.WasUnassigned = false;
}
[TearDown]
public void Teardown()
{
AssetDatabase.DeleteAsset("Assets/Temp");
AssetDatabase.DeleteAsset("Assets/XR");
}
private string LoaderTypeNameForBuildTarget(BuildTargetGroup buildTargetGroup)
{
var loaders = XRPackageMetadataStore.GetLoadersForBuildTarget(buildTargetGroup);
var filteredLoaders = from l in loaders where String.Compare(l.loaderType, typeof(TestLoaderOne).FullName) == 0 select l;
if (filteredLoaders.Any())
{
var loaderInfo = filteredLoaders.First();
return loaderInfo.loaderType;
}
return "";
}
private bool AssignLoaderToSettings(XRManagerSettings settings, string loaderTypeName, BuildTargetGroup buildTargetGroup = BuildTargetGroup.Standalone)
{
if (String.IsNullOrEmpty(loaderTypeName))
return false;
return XRPackageMetadataStore.AssignLoader(m_Settings, loaderTypeName, buildTargetGroup);
}
private bool SettingsHasLoaderOfType(XRManagerSettings settings, string loaderTypeName)
{
bool wasFound = false;
foreach (var l in m_Settings.activeLoaders)
{
if (String.Compare(l.GetType().FullName, loaderTypeName) == 0)
wasFound = true;
}
return wasFound;
}
[UnityTest]
public IEnumerator TestLoaderAssignment()
{
Assert.IsNotNull(m_Settings);
string loaderTypeName = LoaderTypeNameForBuildTarget(BuildTargetGroup.Standalone);
Assert.IsFalse(String.IsNullOrEmpty(loaderTypeName));
bool wasFound = false;
foreach (var l in m_Settings.activeLoaders)
{
if (String.Compare(l.GetType().FullName, loaderTypeName) == 0)
wasFound = true;
}
Assert.IsFalse(wasFound);
Assert.IsTrue(XRPackageMetadataStore.AssignLoader(m_Settings, loaderTypeName, BuildTargetGroup.Standalone));
yield return null;
Assert.IsTrue(SettingsHasLoaderOfType(m_Settings, loaderTypeName));
Assert.IsTrue(TestLoaderBase.WasAssigned);
}
[Test]
public void TestLoaderAssignmentSerializes()
{
Assert.IsNotNull(m_Settings);
string loaderTypeName = LoaderTypeNameForBuildTarget(BuildTargetGroup.Standalone);
Assert.IsFalse(String.IsNullOrEmpty(loaderTypeName));
AssignLoaderToSettings(m_Settings, loaderTypeName);
Assert.IsTrue(SettingsHasLoaderOfType(m_Settings, loaderTypeName));
m_Settings = null;
var settings = EditorUtilities.GetInstanceOfTypeFromAssetDatabase<XRManagerSettings>();
m_Settings = settings as XRManagerSettings;
Assert.IsNotNull(m_Settings);
Assert.IsTrue(SettingsHasLoaderOfType(m_Settings, loaderTypeName));
Assert.IsTrue(TestLoaderBase.WasAssigned);
}
[Test]
public void TestLoaderRemoval()
{
Assert.IsNotNull(m_Settings);
string loaderTypeName = LoaderTypeNameForBuildTarget(BuildTargetGroup.Standalone);
Assert.IsFalse(String.IsNullOrEmpty(loaderTypeName));
AssignLoaderToSettings(m_Settings, loaderTypeName);
Assert.IsTrue(SettingsHasLoaderOfType(m_Settings, loaderTypeName));
Assert.IsTrue(XRPackageMetadataStore.RemoveLoader(m_Settings, loaderTypeName, BuildTargetGroup.Standalone));
m_Settings = null;
var settings = EditorUtilities.GetInstanceOfTypeFromAssetDatabase<XRManagerSettings>();
m_Settings = settings as XRManagerSettings;
Assert.IsNotNull(m_Settings);
Assert.IsFalse(SettingsHasLoaderOfType(m_Settings, loaderTypeName));
Assert.IsTrue(TestLoaderBase.WasUnassigned);
}
[UnityTest]
public IEnumerator TestInvalidPackageErrorsOut()
{
#if !UNITY_2020_2_OR_NEWER
XRPackageMetadataStore.InstallPackageAndAssignLoaderForBuildTarget("com.unity.invalid.package.id", String.Empty, BuildTargetGroup.Standalone);
LogAssert.Expect(LogType.Error, new Regex(@"Management error"));
while (XRPackageMetadataStore.isDoingQueueProcessing)
{
yield return null;
}
#else
yield return null;
#endif //UNITY_2020_2_OR_NEWER
}
[UnityTest]
public IEnumerator TestNoPackageIdErrorsOut()
{
#if !UNITY_2020_2_OR_NEWER
XRPackageMetadataStore.InstallPackageAndAssignLoaderForBuildTarget("", String.Empty, BuildTargetGroup.Standalone);
LogAssert.Expect(LogType.Error, new Regex(@"no package id"));
while (XRPackageMetadataStore.isDoingQueueProcessing)
{
yield return null;
}
#else
yield return null;
#endif //UNITY_2020_2_OR_NEWER
}
}
}