using System;
using System.Collections.Generic;
using System.Runtime.InteropServices;
using NUnit.Framework;
using UnityEngine.Experimental.Rendering;
namespace UnityEngine.Rendering.Experimental.Tests.XR
{
[TestFixture]
class XRLayoutStackTests
{
private XRLayoutStack m_StackTest = new ();
[TearDown]
public void TearDown()
{
m_StackTest.Dispose();
}
[Test]
public void New_ReturnsNonNullObject()
{
var layout = m_StackTest.New();
Assert.NotNull(layout);
m_StackTest.Release();
}
[Test]
public void Top_AfterNew_ReturnsCorrectObject()
{
var layout = m_StackTest.New();
Assert.AreEqual(layout, m_StackTest.top);
m_StackTest.Release();
}
[Test]
public void NewNTimes_ReturnsTheTopToTheLatestElement()
{
var layouts = new List<XRLayout>();
const int k_Iterations = 5;
// Creating instances and adding them to the list
for (int i = 0; i < k_Iterations; i++)
{
layouts.Add(m_StackTest.New());
}
// Releasing instances and validating
for (int i = k_Iterations - 1; i >= 0; i--)
{
Assert.AreEqual(layouts[i], m_StackTest.top);
m_StackTest.Release();
}
Top_WithoutNew_ThrowsException();
}
[Test]
public void Top_WithoutNew_ThrowsException()
{
Assert.Throws<InvalidOperationException>(() =>
{
var top = m_StackTest.top;
});
}
[Test]
public void Release_WithoutNew_ThrowsException()
{
Assert.Throws<InvalidOperationException>(m_StackTest.Release);
}
[Test]
public void Dispose_WithoutRelease_ThrowsException()
{
m_StackTest.New();
Assert.Throws<Exception>(m_StackTest.Dispose);
m_StackTest.Release();
}
[Test]
public void CheckStackBetweenFramesReturnsTheSameXRLayout()
{
var stack = m_StackTest.New();
m_StackTest.Release();
const int k_Iterations = 5;
// Creating instances and adding them to the list
for (int i = 0; i < k_Iterations; i++)
{
m_StackTest.New();
Assert.AreEqual(stack, m_StackTest.top);
m_StackTest.Release();
}
}
}
}