2026-06-02 18:57:47 -04:00
|
|
|
using System;
|
|
|
|
|
using System.Collections;
|
2026-06-05 22:28:13 -04:00
|
|
|
using BracerLib.Utility.Testing;
|
2026-06-02 18:57:47 -04:00
|
|
|
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.");
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|