Syntriax.Engine/Engine.Tests/Core/UniverseObject_Tests.cs

273 lines
7.1 KiB
C#

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);
}
}