From 22b3a342a81d3af7f829b13936cc720aac55af0e Mon Sep 17 00:00:00 2001 From: Syntriax Date: Tue, 5 Aug 2025 09:48:50 +0300 Subject: [PATCH] feat: basic universe object tests --- Engine.Tests/Core/UniverseObject_Tests.cs | 272 ++++++++++++++++++++++ 1 file changed, 272 insertions(+) create mode 100644 Engine.Tests/Core/UniverseObject_Tests.cs diff --git a/Engine.Tests/Core/UniverseObject_Tests.cs b/Engine.Tests/Core/UniverseObject_Tests.cs new file mode 100644 index 0000000..4ece05e --- /dev/null +++ b/Engine.Tests/Core/UniverseObject_Tests.cs @@ -0,0 +1,272 @@ +using Syntriax.Engine.Core; + +namespace Engine.Tests; + +public class UniverseObject_Tests +{ + private static IUniverseObject CreateUniverseObject() + { + UniverseObject universeObject = new(); + BehaviourController behaviourController = new(); + + universeObject.Assign(new StateEnable()); + + behaviourController.Assign(new StateEnable()); + behaviourController.StateEnable.Assign(behaviourController); + + behaviourController.Assign(universeObject); + universeObject.Assign(behaviourController); + + universeObject.Initialize(); + behaviourController.Initialize(); + + return universeObject; + } + + [Fact] + public void AddChildren() + { + IUniverseObject parentUO = CreateUniverseObject(); + IUniverseObject childUO = CreateUniverseObject(); + + parentUO.AddChild(childUO); + Assert.NotEmpty(parentUO.Children); + Assert.Equal(parentUO.Children[0], childUO); + Assert.Equal(childUO.Parent, parentUO); + } + + [Fact] + public void RemoveChildren() + { + IUniverseObject parentUO = CreateUniverseObject(); + IUniverseObject childUO = CreateUniverseObject(); + + parentUO.AddChild(childUO); + Assert.NotEmpty(parentUO.Children); + Assert.Contains(childUO, parentUO.Children); + Assert.Equal(childUO.Parent, parentUO); + + parentUO.RemoveChild(childUO); + Assert.Empty(parentUO.Children); + Assert.Null(childUO.Parent); + } + + [Fact] + public void SetParentValue() + { + IUniverseObject parentUO = CreateUniverseObject(); + IUniverseObject childUO = CreateUniverseObject(); + + childUO.Parent = parentUO; + Assert.Contains(childUO, parentUO.Children); + Assert.Equal(childUO.Parent, parentUO); + } + + [Fact] + public void SetParentNull() + { + IUniverseObject parentUO = CreateUniverseObject(); + IUniverseObject childUO = CreateUniverseObject(); + + parentUO.AddChild(childUO); + + childUO.Parent = null; + Assert.Empty(parentUO.Children); + Assert.Null(childUO.Parent); + } + + [Fact] + public void AddChildrenEvents() + { + IUniverseObject parentUO = CreateUniverseObject(); + IUniverseObject childUO = CreateUniverseObject(); + + IUniverseObject? sender = null; + IUniverseObject.ChildrenAddedArguments? arguments = null; + + parentUO.OnChildrenAdded.AddListener((s, a) => + { + sender = s; + arguments = a; + }); + + parentUO.AddChild(childUO); + Assert.NotNull(sender); + Assert.NotNull(arguments); + Assert.Equal(parentUO, sender); + Assert.Equal(childUO, arguments.Value.ChildrenAdded); + } + + [Fact] + public void RemoveChildrenEvents() + { + IUniverseObject parentUO = CreateUniverseObject(); + IUniverseObject childUO = CreateUniverseObject(); + + IUniverseObject? sender = null; + IUniverseObject.ChildrenRemovedArguments? arguments = null; + + parentUO.AddChild(childUO); + + parentUO.OnChildrenRemoved.AddListener((s, a) => + { + sender = s; + arguments = a; + }); + + parentUO.RemoveChild(childUO); + + Assert.NotNull(sender); + Assert.NotNull(arguments); + Assert.Equal(parentUO, sender); + Assert.Equal(childUO, arguments.Value.ChildrenRemoved); + } + + [Fact] + public void SetParentEvents() + { + IUniverseObject parentUO = CreateUniverseObject(); + IUniverseObject childUO = CreateUniverseObject(); + + IUniverseObject? sender = null; + IUniverseObject.ParentChangedArguments? arguments = null; + + childUO.OnParentChanged.AddListener((s, a) => + { + sender = s; + arguments = a; + }); + + childUO.Parent = parentUO; + + Assert.NotNull(sender); + Assert.NotNull(arguments); + Assert.Equal(childUO, sender); + Assert.Null(arguments.Value.PreviousParent); + Assert.Equal(parentUO, arguments.Value.CurrentParent); + } + + [Fact] + public void UnsetParentEvents() + { + IUniverseObject parentUO = CreateUniverseObject(); + IUniverseObject childUO = CreateUniverseObject(); + + IUniverseObject? sender = null; + IUniverseObject.ParentChangedArguments? arguments = null; + + childUO.Parent = parentUO; + + childUO.OnParentChanged.AddListener((s, a) => + { + sender = s; + arguments = a; + }); + + childUO.Parent = null; + + Assert.NotNull(sender); + Assert.NotNull(arguments); + Assert.Equal(childUO, sender); + Assert.Equal(parentUO, arguments.Value.PreviousParent); + Assert.Null(arguments.Value.CurrentParent); + } + + [Fact] + public void Active() + { + IUniverseObject universeObject = CreateUniverseObject(); + universeObject.StateEnable.Enabled = true; + + Assert.True(universeObject.IsActive); + } + + [Fact] + public void NotActiveWhenDisabled() + { + IUniverseObject universeObject = CreateUniverseObject(); + universeObject.StateEnable.Enabled = false; + + Assert.False(universeObject.IsActive); + } + + [Fact] + public void ActiveEvents() + { + IUniverseObject universeObject = CreateUniverseObject(); + universeObject.StateEnable.Enabled = true; + + IActive? sender = null; + IActive.ActiveChangedArguments? arguments = null; + + universeObject.OnActiveChanged.AddListener((s, a) => + { + sender = s; + arguments = a; + }); + + universeObject.StateEnable.Enabled = false; + + Assert.NotNull(sender); + Assert.NotNull(arguments); + + Assert.False(universeObject.IsActive); + Assert.True(arguments.Value.PreviousState); + } + + [Fact] + public void NotActiveEvents() + { + IUniverseObject universeObject = CreateUniverseObject(); + universeObject.StateEnable.Enabled = false; + + IActive? sender = null; + IActive.ActiveChangedArguments? arguments = null; + + universeObject.OnActiveChanged.AddListener((s, a) => + { + sender = s; + arguments = a; + }); + + universeObject.StateEnable.Enabled = true; + + Assert.NotNull(sender); + Assert.NotNull(arguments); + + Assert.True(universeObject.IsActive); + Assert.False(arguments.Value.PreviousState); + } + + [Fact] + public void SetName() + { + IUniverseObject universeObject = CreateUniverseObject(); + universeObject.Name = "Test"; + Assert.Equal("Test", universeObject.Name); + } + + [Fact] + public void SetNameEvents() + { + IUniverseObject universeObject = CreateUniverseObject(); + universeObject.Name = "Previous"; + + INameable? sender = null; + INameable.NameChangedArguments? arguments = null; + + universeObject.OnNameChanged.AddListener((s, a) => + { + sender = s; + arguments = a; + }); + + universeObject.Name = "Test"; + + Assert.NotNull(sender); + Assert.NotNull(arguments); + + Assert.Equal("Test", universeObject.Name); + Assert.Equal("Previous", arguments.Value.PreviousName); + } +}