123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129 |
- using System;
- using System.IO;
- using UnityEditor;
- using UnityEditor.XR.Management;
- using UnityEngine;
- using UnityEngine.XR.Management;
- namespace Unity.XR.TestTooling
- {
- // Mostly borrowed from XRManagement - this should probably live in that package.
- public abstract class ManagementTestSetup
- {
- protected static readonly string[] s_TestGeneralSettings = { "Temp", "Test" };
- protected static readonly string[] s_TempSettingsPath = {"Temp", "Test", "Settings" };
- /// <summary>
- /// When true, AssetDatabase.AddObjectToAsset will not be called to add XRManagerSettings to XRGeneralSettings.
- /// </summary>
- protected virtual bool TestManagerUpgradePath => false;
- protected string testPathToGeneralSettings;
- protected string testPathToSettings;
- private UnityEngine.Object currentSettings = null;
- protected XRManagerSettings testManager = null;
- protected XRGeneralSettings xrGeneralSettings = null;
- protected XRGeneralSettingsPerBuildTarget buildTargetSettings = null;
- public virtual void SetupTest()
- {
- testManager = ScriptableObject.CreateInstance<XRManagerSettings>();
- xrGeneralSettings = ScriptableObject.CreateInstance<XRGeneralSettings>() as XRGeneralSettings;
- xrGeneralSettings.Manager = testManager;
- testPathToSettings = GetAssetPathForComponents(s_TempSettingsPath);
- testPathToSettings = Path.Combine(testPathToSettings, "Test_XRGeneralSettings.asset");
- if (!string.IsNullOrEmpty(testPathToSettings))
- {
- AssetDatabase.CreateAsset(xrGeneralSettings, testPathToSettings);
- if (!TestManagerUpgradePath)
- {
- AssetDatabase.AddObjectToAsset(testManager, xrGeneralSettings);
- }
- AssetDatabase.SaveAssets();
- }
- testPathToGeneralSettings = GetAssetPathForComponents(s_TestGeneralSettings);
- testPathToGeneralSettings = Path.Combine(testPathToGeneralSettings, "Test_XRGeneralSettingsPerBuildTarget.asset");
- buildTargetSettings = ScriptableObject.CreateInstance<XRGeneralSettingsPerBuildTarget>();
- buildTargetSettings.SetSettingsForBuildTarget(BuildTargetGroup.Standalone, xrGeneralSettings);
- if (!string.IsNullOrEmpty(testPathToSettings))
- {
- AssetDatabase.CreateAsset(buildTargetSettings, testPathToGeneralSettings);
- AssetDatabase.SaveAssets();
- EditorBuildSettings.TryGetConfigObject(XRGeneralSettings.k_SettingsKey, out currentSettings);
- EditorBuildSettings.AddConfigObject(XRGeneralSettings.k_SettingsKey, buildTargetSettings, true);
- }
- }
- public virtual void TearDownTest()
- {
- EditorBuildSettings.RemoveConfigObject(XRGeneralSettings.k_SettingsKey);
- if (!string.IsNullOrEmpty(testPathToGeneralSettings))
- {
- AssetDatabase.DeleteAsset(testPathToGeneralSettings);
- }
- if (!string.IsNullOrEmpty(testPathToSettings))
- {
- AssetDatabase.DeleteAsset(testPathToSettings);
- }
-
- xrGeneralSettings.Manager = null;
- UnityEngine.Object.DestroyImmediate(xrGeneralSettings);
- xrGeneralSettings = null;
- UnityEngine.Object.DestroyImmediate(testManager);
- testManager = null;
- UnityEngine.Object.DestroyImmediate(buildTargetSettings);
- buildTargetSettings = null;
- if (currentSettings != null)
- EditorBuildSettings.AddConfigObject(XRGeneralSettings.k_SettingsKey, currentSettings, true);
- else
- EditorBuildSettings.RemoveConfigObject(XRGeneralSettings.k_SettingsKey);
- AssetDatabase.DeleteAsset(Path.Combine("Assets","Temp"));
- }
- public static string GetAssetPathForComponents(string[] pathComponents, string root = "Assets")
- {
- if (pathComponents.Length <= 0)
- return null;
- string path = root;
- foreach( var pc in pathComponents)
- {
- string subFolder = Path.Combine(path, pc);
- bool shouldCreate = true;
- foreach (var f in AssetDatabase.GetSubFolders(path))
- {
- if (String.Compare(Path.GetFullPath(f), Path.GetFullPath(subFolder), true) == 0)
- {
- shouldCreate = false;
- break;
- }
- }
- if (shouldCreate)
- AssetDatabase.CreateFolder(path, pc);
- path = subFolder;
- }
- return path;
- }
- }
- }
|