using System.Collections; using System.Collections.Generic; using NUnit.Framework; using UnityEngine.TestTools; using UnityEditor; using UnityEngine.Rendering; namespace UnityEngine.XR.Management.Tests { [TestFixture(0, -1)] // No loaders, should never have any results [TestFixture(1, -1)] // 1 loader, fails so no active loaders [TestFixture(1, 0)] // All others, make sure the active loader is expected loader. [TestFixture(2, 0)] [TestFixture(2, 1)] [TestFixture(3, 2)] class ManualLifetimeTests { XRManagerSettings m_Manager; List m_Loaders = new List(); int m_LoaderCount; int m_LoaderIndexToWin; public ManualLifetimeTests(int loaderCount, int loaderIndexToWin) { m_LoaderCount = loaderCount; m_LoaderIndexToWin = loaderIndexToWin; } [SetUp] public void SetupXRManagerTest() { m_Manager = ScriptableObject.CreateInstance(); m_Manager.automaticLoading = false; m_Loaders = new List(); for (int i = 0; i < m_LoaderCount; i++) { DummyLoader dl = ScriptableObject.CreateInstance(typeof(DummyLoader)) as DummyLoader; dl.id = i; dl.shouldFail = (i != m_LoaderIndexToWin); m_Loaders.Add(dl); m_Manager.loaders.Add(dl); } } [TearDown] public void TeardownXRManagerTest() { Object.Destroy(m_Manager); m_Manager = null; } [UnityTest] public IEnumerator CheckActivatedLoader() { Assert.IsNotNull(m_Manager); yield return m_Manager.InitializeLoader(); if (m_LoaderIndexToWin < 0 || m_LoaderIndexToWin >= m_Loaders.Count) { Assert.IsNull(m_Manager.activeLoader); } else { Assert.IsNotNull(m_Manager.activeLoader); Assert.AreEqual(m_Loaders[m_LoaderIndexToWin], m_Manager.activeLoader); } m_Manager.DeinitializeLoader(); Assert.IsNull(m_Manager.activeLoader); m_Manager.loaders.Clear(); } } #if UNITY_EDITOR_WIN || UNITY_EDITOR_OSX #if UNITY_EDITOR_WIN [TestFixture(GraphicsDeviceType.Direct3D11, 0, new [] { GraphicsDeviceType.Direct3D11})] [TestFixture(GraphicsDeviceType.Direct3D11, 1, new [] { GraphicsDeviceType.Direct3D12, GraphicsDeviceType.Direct3D11})] [TestFixture(GraphicsDeviceType.Direct3D11, -1, new [] { GraphicsDeviceType.Direct3D12, GraphicsDeviceType.Vulkan})] [TestFixture(GraphicsDeviceType.Direct3D11, 0, new [] { GraphicsDeviceType.Null, GraphicsDeviceType.Vulkan})] [TestFixture(GraphicsDeviceType.Direct3D11, 1, new [] { GraphicsDeviceType.Vulkan, GraphicsDeviceType.Null})] #elif UNITY_EDITOR_OSX [TestFixture(GraphicsDeviceType.Metal, 0, new [] { GraphicsDeviceType.Metal})] [TestFixture(GraphicsDeviceType.Metal, 1, new [] { GraphicsDeviceType.Direct3D12, GraphicsDeviceType.Metal})] [TestFixture(GraphicsDeviceType.Metal, -1, new [] { GraphicsDeviceType.OpenGLES3, GraphicsDeviceType.Vulkan})] [TestFixture(GraphicsDeviceType.Metal, 0, new [] { GraphicsDeviceType.Null, GraphicsDeviceType.Vulkan})] [TestFixture(GraphicsDeviceType.Metal, 1, new [] { GraphicsDeviceType.Vulkan, GraphicsDeviceType.Null})] #endif class GraphicsAPICompatibilityTests { XRManagerSettings m_Manager; List m_Loaders = new List(); private GraphicsDeviceType m_PlayerSettingsDeviceType; private GraphicsDeviceType[] m_LoadersSupporteDeviceTypes; int m_LoaderIndexToWin; public GraphicsAPICompatibilityTests(GraphicsDeviceType playerSettingsDeviceType, int indexToWin, GraphicsDeviceType[] loaders) { m_LoaderIndexToWin = indexToWin; m_PlayerSettingsDeviceType = playerSettingsDeviceType; m_LoadersSupporteDeviceTypes = loaders; } [SetUp] public void SetupPlayerSettings() { GraphicsDeviceType[] deviceTypes = PlayerSettings.GetGraphicsAPIs(BuildTarget.StandaloneOSX); var oldGfxType = m_PlayerSettingsDeviceType; // If the type we want to check isn't the supported graphics type, then substitute it out // so we can still pass the tests. Semantics are the same regardless of actual devices. if (SystemInfo.graphicsDeviceType != m_PlayerSettingsDeviceType) { m_PlayerSettingsDeviceType = SystemInfo.graphicsDeviceType; for (int i = 0; i < m_LoadersSupporteDeviceTypes.Length; i++) { if (oldGfxType == m_LoadersSupporteDeviceTypes[i]) { m_LoadersSupporteDeviceTypes[i] = m_PlayerSettingsDeviceType; } } } #if UNITY_EDITOR_WIN PlayerSettings.SetGraphicsAPIs(BuildTarget.StandaloneWindows64, new[] { m_PlayerSettingsDeviceType }); #elif UNITY_EDITOR_OSX PlayerSettings.SetGraphicsAPIs(BuildTarget.StandaloneOSX, new[] { m_PlayerSettingsDeviceType }); #endif m_Manager = ScriptableObject.CreateInstance(); m_Manager.automaticLoading = false; m_Loaders = new List(); for (int i = 0; i < m_LoadersSupporteDeviceTypes.Length; i++) { DummyLoader dl = ScriptableObject.CreateInstance(typeof(DummyLoader)) as DummyLoader; dl.id = i; dl.supportedDeviceType = m_LoadersSupporteDeviceTypes[i]; dl.shouldFail = (i != m_LoaderIndexToWin); m_Loaders.Add(dl); m_Manager.loaders.Add(dl); } } [TearDown] public void TeadDown() { Object.Destroy(m_Manager); m_Manager = null; } [Test] public void CheckGraphicsAPICompatibilitySync() { m_Manager.InitializeLoaderSync(); if (m_LoaderIndexToWin < 0 || m_LoaderIndexToWin >= m_Loaders.Count) { Assert.IsNull(m_Manager.activeLoader); } else { Assert.IsNotNull(m_Manager.activeLoader); Assert.AreEqual(m_Loaders[m_LoaderIndexToWin], m_Manager.activeLoader); m_Manager.DeinitializeLoader(); } m_Manager.loaders.Clear(); } [UnityTest] public IEnumerator CheckGraphicsAPICompatibility() { yield return m_Manager.InitializeLoader(); if (m_LoaderIndexToWin < 0 || m_LoaderIndexToWin >= m_Loaders.Count) { Assert.IsNull(m_Manager.activeLoader); } else { Assert.IsNotNull(m_Manager.activeLoader); Assert.AreEqual(m_Loaders[m_LoaderIndexToWin], m_Manager.activeLoader); m_Manager.DeinitializeLoader(); } m_Manager.loaders.Clear(); } } #endif // UNITY_EDITOR_WIN || UNITY_EDITOR_OSX }