using NUnit.Framework; using System.Collections.Generic; using UnityEngine.Experimental.Rendering; using UnityEngine.XR; namespace UnityEngine.Rendering.Experimental.Tests.XR { [TestFixture] class XRLayoutTests { private XRDisplaySubsystem m_CurrentSubsystem; private Camera m_Camera; private XRLayout m_LayoutTest = new (); [SetUp] public void Setup() { var go = new GameObject(nameof(XRLayoutTests)); m_Camera = go.AddComponent(); } [TearDown] public void TearDown() { m_LayoutTest.Clear(); Object.DestroyImmediate(m_Camera.gameObject); Assert.IsEmpty(m_LayoutTest.GetActivePasses()); } [Test] public void EmptyPassAreAdded() { const int k_Iterations = 5; for (int i = 0; i < k_Iterations; ++i) { m_LayoutTest.AddCamera(m_Camera, false); } Assert.AreEqual(k_Iterations, m_LayoutTest.GetActivePasses().Count); foreach (var pass in m_LayoutTest.GetActivePasses()) { Assert.AreEqual(m_Camera, pass.Item1); Assert.AreEqual(XRSystem.emptyPass, pass.Item2); } } public static IEnumerable s_TestCasesMultiPass { get { yield return new TestCaseData(0, 0, 0); yield return new TestCaseData(1, 0, 0); yield return new TestCaseData(1, 1, 1); yield return new TestCaseData(2, 1, 2); yield return new TestCaseData(3, 2, 6); yield return new TestCaseData(20, 2, 40); } } [Test] [TestCaseSource(nameof(s_TestCasesMultiPass))] public void CreateDefaultLayoutMockMultipass(int renderPassCount, int renderParameterCount, int expectedActivePassesCount) { Assert.AreEqual(expectedActivePassesCount, renderPassCount * renderParameterCount); for (int renderPassIndex = 0; renderPassIndex < renderPassCount; ++renderPassIndex) { for (int renderParamIndex = 0; renderParamIndex < renderParameterCount; ++renderParamIndex) { m_LayoutTest.AddPass(m_Camera, new XRPass()); } } Assert.AreEqual(expectedActivePassesCount, m_LayoutTest.GetActivePasses().Count); } public static IEnumerable s_TestCasesSinglePass { get { yield return new TestCaseData(0, 0, 0); yield return new TestCaseData(1, 0, 1); yield return new TestCaseData(1, 1, 1); yield return new TestCaseData(2, 1, 2); yield return new TestCaseData(3, 1, 3); yield return new TestCaseData(20, 1, 20); } } [Test] [TestCaseSource(nameof(s_TestCasesSinglePass))] public void CreateDefaultLayoutMockSinglepass(int renderPassCount, int renderParameterCount, int expectedActivePassesCount) { for (int renderPassIndex = 0; renderPassIndex < renderPassCount; ++renderPassIndex) { var xrPass = new XRPass(); for (int renderParamIndex = 0; renderParamIndex < renderParameterCount; ++renderParamIndex) { xrPass.AddView(new XRView()); } m_LayoutTest.AddPass(m_Camera, xrPass); } Assert.AreEqual(expectedActivePassesCount, m_LayoutTest.GetActivePasses().Count); } } }