using NUnit.Framework; using Unity.XR.CoreUtils; using UnityEngine.XR.Management; using UnityEngine.InputSystem; using UnityEditor.XR.ARFoundation; using UnityEditor.XR.TestTooling; namespace UnityEngine.XR.Simulation.Tests { abstract class SimulationTestSetup : LoaderTestSetup { static bool noXrmOrActiveSimulationLoader => XRGeneralSettings.Instance == null || XRGeneralSettings.Instance.Manager == null || XRGeneralSettings.Instance.Manager.activeLoader == null || XRGeneralSettings.Instance.Manager.activeLoader is not SimulationLoader; /// /// Set up the SimulationLoader for runtime test. /// protected void SetupLoader() { if (noXrmOrActiveSimulationLoader) { base.SetupTest(); InitializeAndStart(); } else { m_XrGeneralSettings = XRGeneralSettings.Instance; m_Loader = m_XrGeneralSettings.Manager.activeLoader as SimulationLoader; } } /// /// Tear down the SimulationLoader after the runtime tests are complete. /// protected void TearDownLoader() { if (noXrmOrActiveSimulationLoader) { StopAndShutdown(); base.TearDownTest(); } } protected void AddXROrigin() { XROriginCreateUtil.CreateXROriginWithParent(null); CreateInputDevices(); } protected void RemoveXROrigin() { var xrOrigin = Object.FindAnyObjectByType(); if (xrOrigin != null) Object.Destroy(xrOrigin.gameObject); } void CreateInputDevices() { var keyboard = InputSystem.InputSystem.AddDevice(); keyboard.MakeCurrent(); var mouse = InputSystem.InputSystem.AddDevice(); mouse.MakeCurrent(); } protected TXRSubsystem GetSubsystem() where TXRSubsystem : class, ISubsystem, new() { // Simulation loader exist Assert.IsNotNull(m_Loader, $"No active {nameof(SimulationLoader)} is available."); return m_Loader.GetLoadedSubsystem(); } protected TSubsystem GetSimulationSubsystem() where TXRSubsystem : class, ISubsystem, new() where TSubsystem : class, ISubsystem, new() { var xrSubsystem = GetSubsystem(); // Subsystem exist Assert.IsNotNull(xrSubsystem, $"No active {typeof(TXRSubsystem).FullName} is available."); Assert.IsInstanceOf(xrSubsystem, $"No active {typeof(TSubsystem).FullName} is available."); return xrSubsystem as TSubsystem; } } }