using NUnit.Framework; using System.Collections.Generic; namespace UnityEngine.XR.ARSubsystems.Tests { public class XRTestSubsystemDescriptor : SubsystemDescriptor { } public class XRTestSubsystem : XRSubsystem { public int startCount { get; private set; } public int stopCount { get; private set; } public int destroyCount { get; private set; } protected override void OnStart() => ++startCount; protected override void OnStop() => ++stopCount; protected override void OnDestroyed() => ++destroyCount; } [TestFixture] public class XRSubsystemTestFixture { static XRTestSubsystem RegisterAndCreate() { SubsystemRegistration.CreateDescriptor(new XRTestSubsystemDescriptor { id = "Test Subsystem", subsystemImplementationType = typeof(XRTestSubsystem), }); var descriptors = new List(); SubsystemManager.GetSubsystemDescriptors(descriptors); return descriptors[0].Create(); } [Test] public void IsRunningAfterStartCalled() { var subsystem = RegisterAndCreate(); subsystem.Start(); Assert.IsTrue(subsystem.running); subsystem.Destroy(); } [Test] public void IsNotRunningAfterStopCalled() { var subsystem = RegisterAndCreate(); subsystem.Start(); subsystem.Stop(); Assert.IsFalse(subsystem.running); subsystem.Destroy(); } [Test] public void DestroyCallsStopWhenRunning() { var subsystem = RegisterAndCreate(); subsystem.Start(); Assert.AreEqual(0, subsystem.stopCount); subsystem.Destroy(); Assert.IsFalse(subsystem.running); Assert.AreEqual(1, subsystem.stopCount); } [Test] public void DestroyDoesNotCallStopWhenNotRunning() { var subsystem = RegisterAndCreate(); subsystem.Start(); subsystem.Stop(); Assert.IsFalse(subsystem.running); Assert.AreEqual(1, subsystem.stopCount); subsystem.Destroy(); Assert.AreEqual(1, subsystem.stopCount); } [Test] public void DestroyOnlyCalledOnce() { var subsystem = RegisterAndCreate(); Assert.AreEqual(0, subsystem.destroyCount); subsystem.Destroy(); Assert.AreEqual(1, subsystem.destroyCount); subsystem.Destroy(); subsystem.Destroy(); subsystem.Destroy(); subsystem.Destroy(); Assert.AreEqual(1, subsystem.destroyCount); } [Test] public void StartOnlyCalledWhenNotRunning() { var subsystem = RegisterAndCreate(); Assert.AreEqual(0, subsystem.startCount); subsystem.Start(); Assert.IsTrue(subsystem.running); Assert.AreEqual(1, subsystem.startCount); subsystem.Start(); Assert.IsTrue(subsystem.running); Assert.AreEqual(1, subsystem.startCount); subsystem.Stop(); Assert.IsFalse(subsystem.running); subsystem.Start(); Assert.IsTrue(subsystem.running); Assert.AreEqual(2, subsystem.startCount); subsystem.Destroy(); } [Test] public void StopOnlyCalledWhenRunning() { var subsystem = RegisterAndCreate(); subsystem.Stop(); Assert.AreEqual(0, subsystem.stopCount); subsystem.Start(); Assert.IsTrue(subsystem.running); Assert.AreEqual(0, subsystem.stopCount); subsystem.Stop(); Assert.IsFalse(subsystem.running); Assert.AreEqual(1, subsystem.stopCount); subsystem.Stop(); Assert.AreEqual(1, subsystem.startCount); subsystem.Start(); Assert.IsTrue(subsystem.running); subsystem.Stop(); Assert.IsFalse(subsystem.running); Assert.AreEqual(2, subsystem.stopCount); subsystem.Destroy(); } } }