Files
BracerLib/Assets/Scripts/Tests/Properties/PropertyTests.cs
T

132 lines
4.4 KiB
C#

using System;
using System.Collections;
using BracerLib.Utility.Testing;
using UnityEngine;
using UnityEngine.Assertions;
using UnityEngine.TestTools;
namespace BracerLib.Tests.Properties
{
public class PropertyTests : TestBase
{
public class SomeObject : MonoBehaviour
{
public DependencyA dependencyA;
[SerializeField]
private DependencyB dependencyB1;
[SerializeField]
private DependencyB dependencyB2;
[SerializeField]
private DependencyB dependencyB3;
private DependencyC dependencyC;
private DependencyD dependencyD;
private ValueDependency valueDependency;
private int someValue;
public DependencyB DependencyB1 => dependencyB1;
public DependencyB DependencyB2 => dependencyB2;
public DependencyB DependencyB3 => dependencyB3;
public DependencyC DependencyC => dependencyC;
public DependencyD DependencyD => dependencyD;
public ValueDependency ValueDependency => valueDependency;
public int SomeValue => someValue;
}
public class DependencyA : MonoBehaviour
{
public int Value => 1;
}
public class DependencyB : MonoBehaviour
{
public int Value => 2;
}
public class DependencyC : MonoBehaviour
{
public int Value => 3;
}
[Serializable]
public class DependencyD { }
public struct ValueDependency
{
public int Value;
}
private GameObject setupGameObject;
private SomeObject setupSomeObject;
private DependencyA setupDependencyA;
protected override IEnumerator UnityOneTimeSetUp()
{
setupGameObject = new GameObject("setup");
setupSomeObject = setupGameObject.AddComponent<SomeObject>();
setupDependencyA = setupGameObject.AddComponent<DependencyA>();
setupSomeObject.dependencyA = setupDependencyA;
RegisterOneTimeTestObject(setupSomeObject);
yield return null;
}
[UnityTest]
public IEnumerator TestProperties()
{
Assert.IsNotNull(setupSomeObject);
Assert.IsNotNull(setupDependencyA);
// Set Serialized private Mono
var depB = new[] { setupGameObject.AddComponent<DependencyB>(), setupGameObject.AddComponent<DependencyB>(), setupGameObject.AddComponent<DependencyB>() };
SetObjectReference(setupSomeObject, "dependencyB1", depB[0]);
SetObjectReferences(setupSomeObject, ("dependencyB2", depB[1]), ("dependencyB3", depB[2]));
// Set Reflected private Mono
var depC = setupGameObject.AddComponent<DependencyC>();
SetReflectedValue(setupSomeObject, "dependencyC", depC);
// Set Reflected private POCO
// Set Reflected private value
var depD = new DependencyD();
var valueDependency = new ValueDependency { Value = 255 };
SetReflectedValues(setupSomeObject, ("dependencyD", depD), ("valueDependency", valueDependency));
yield return null;
Assert.IsNotNull(depB[0]);
Assert.IsNotNull(setupSomeObject.DependencyB1);
Assert.AreEqual(depB[0], setupSomeObject.DependencyB1);
Assert.IsNotNull(depB[1]);
Assert.IsNotNull(setupSomeObject.DependencyB2);
Assert.AreEqual(depB[1], setupSomeObject.DependencyB2);
Assert.IsNotNull(depB[2]);
Assert.IsNotNull(setupSomeObject.DependencyB3);
Assert.AreEqual(depB[2], setupSomeObject.DependencyB3);
Assert.IsNotNull(depC);
Assert.IsNotNull(setupSomeObject.DependencyC);
Assert.AreEqual(depC, setupSomeObject.DependencyC);
Assert.IsNotNull(depD);
Assert.IsNotNull(setupSomeObject.DependencyD);
Assert.AreEqual(depD, setupSomeObject.DependencyD);
Assert.AreEqual(setupSomeObject.ValueDependency.Value, valueDependency.Value);
}
[UnityTest]
public IEnumerator TestPropertyErrors()
{
yield return null;
SetReflectedValue(setupSomeObject, "someFakeValue", 1);
LogAssert.Expect(LogType.Warning, "There is no property someFakeValue to the target object.");
}
}
}