using System; using System.Collections; 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(); setupDependencyA = setupGameObject.AddComponent(); 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(), setupGameObject.AddComponent(), setupGameObject.AddComponent() }; SetObjectReference(setupSomeObject, "dependencyB1", depB[0]); SetObjectReferences(setupSomeObject, ("dependencyB2", depB[1]), ("dependencyB3", depB[2])); // Set Reflected private Mono var depC = setupGameObject.AddComponent(); 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."); } } }