feat: simple behaviour controller tests added
This commit is contained in:
parent
57807c2a62
commit
3c23ac7f1e
267
Engine.Tests/BehaviourController_Tests.cs
Normal file
267
Engine.Tests/BehaviourController_Tests.cs
Normal file
@ -0,0 +1,267 @@
|
|||||||
|
using Syntriax.Engine.Core;
|
||||||
|
using Syntriax.Engine.Core.Exceptions;
|
||||||
|
|
||||||
|
namespace Engine.Tests;
|
||||||
|
|
||||||
|
public class BehaviourController_Tests
|
||||||
|
{
|
||||||
|
[Fact]
|
||||||
|
public void GetRequiredBehaviour()
|
||||||
|
{
|
||||||
|
IBehaviourController behaviourController = CreateUniverseObject().BehaviourController;
|
||||||
|
|
||||||
|
behaviourController.AddBehaviour<BehaviourX>();
|
||||||
|
Assert.NotNull(behaviourController.GetRequiredBehaviour<BehaviourX>());
|
||||||
|
}
|
||||||
|
|
||||||
|
[Fact]
|
||||||
|
public void GetRequiredBehaviourRaisesExceptionIfNotFound()
|
||||||
|
{
|
||||||
|
IBehaviourController behaviourController = CreateUniverseObject().BehaviourController;
|
||||||
|
|
||||||
|
Assert.Throws<BehaviourNotFoundException>(behaviourController.GetRequiredBehaviour<BehaviourX>);
|
||||||
|
}
|
||||||
|
|
||||||
|
[Fact]
|
||||||
|
public void AddSingleBehaviour()
|
||||||
|
{
|
||||||
|
IBehaviourController behaviourController = CreateUniverseObject().BehaviourController;
|
||||||
|
|
||||||
|
Assert.NotNull(behaviourController.AddBehaviour<BehaviourX>());
|
||||||
|
Assert.NotNull(behaviourController.GetBehaviour<BehaviourX>());
|
||||||
|
}
|
||||||
|
|
||||||
|
[Fact]
|
||||||
|
public void AddMultipleBehaviours()
|
||||||
|
{
|
||||||
|
IBehaviourController behaviourController = CreateUniverseObject().BehaviourController;
|
||||||
|
|
||||||
|
BehaviourX behaviourX = behaviourController.AddBehaviour<BehaviourX>();
|
||||||
|
BehaviourY behaviourY = behaviourController.AddBehaviour<BehaviourY>();
|
||||||
|
|
||||||
|
bool isXFound = false;
|
||||||
|
bool isYFound = false;
|
||||||
|
|
||||||
|
foreach (IBehaviour behaviour in behaviourController.GetBehaviours<IBehaviour>())
|
||||||
|
{
|
||||||
|
if (behaviour == behaviourX) isXFound = true;
|
||||||
|
if (behaviour == behaviourY) isYFound = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
Assert.True(isXFound && isYFound);
|
||||||
|
}
|
||||||
|
|
||||||
|
[Fact]
|
||||||
|
public void AddThenRemoveBehaviour()
|
||||||
|
{
|
||||||
|
IBehaviourController behaviourController = CreateUniverseObject().BehaviourController;
|
||||||
|
|
||||||
|
behaviourController.AddBehaviour<BehaviourX>();
|
||||||
|
behaviourController.RemoveBehaviour<BehaviourX>();
|
||||||
|
Assert.Null(behaviourController.GetBehaviour<BehaviourX>());
|
||||||
|
}
|
||||||
|
|
||||||
|
[Fact]
|
||||||
|
public void GetOrAddBehaviourExtension()
|
||||||
|
{
|
||||||
|
IBehaviourController behaviourController = CreateUniverseObject().BehaviourController;
|
||||||
|
|
||||||
|
Assert.Null(behaviourController.GetBehaviour<BehaviourX>());
|
||||||
|
Assert.NotNull(behaviourController.GetOrAddBehaviour<BehaviourX>());
|
||||||
|
}
|
||||||
|
|
||||||
|
[Fact]
|
||||||
|
public void GetOrAddBehaviourExtensionFallback()
|
||||||
|
{
|
||||||
|
IBehaviourController behaviourController = CreateUniverseObject().BehaviourController;
|
||||||
|
|
||||||
|
Assert.Null(behaviourController.GetBehaviour<IBehaviour>());
|
||||||
|
Assert.NotNull(behaviourController.GetOrAddBehaviour<IBehaviour, BehaviourX>());
|
||||||
|
}
|
||||||
|
|
||||||
|
[Fact]
|
||||||
|
public void RemoveSpecificBehaviourViaGeneric()
|
||||||
|
{
|
||||||
|
IBehaviourController behaviourController = CreateUniverseObject().BehaviourController;
|
||||||
|
|
||||||
|
behaviourController.AddBehaviour<BehaviourX>();
|
||||||
|
behaviourController.AddBehaviour<BehaviourY>();
|
||||||
|
behaviourController.RemoveBehaviour<BehaviourY>();
|
||||||
|
|
||||||
|
Assert.NotNull(behaviourController.GetBehaviour<BehaviourX>());
|
||||||
|
Assert.Null(behaviourController.GetBehaviour<BehaviourY>());
|
||||||
|
}
|
||||||
|
|
||||||
|
[Fact]
|
||||||
|
public void RemoveSpecificBehaviourViaReference()
|
||||||
|
{
|
||||||
|
IBehaviourController behaviourController = CreateUniverseObject().BehaviourController;
|
||||||
|
|
||||||
|
behaviourController.AddBehaviour<BehaviourX>();
|
||||||
|
|
||||||
|
BehaviourY behaviourYFirst = behaviourController.AddBehaviour<BehaviourY>();
|
||||||
|
BehaviourY behaviourYSecond = behaviourController.AddBehaviour<BehaviourY>();
|
||||||
|
|
||||||
|
behaviourController.RemoveBehaviour(behaviourYFirst);
|
||||||
|
|
||||||
|
Assert.Equal(behaviourController.GetBehaviour<BehaviourY>(), behaviourYSecond);
|
||||||
|
Assert.NotNull(behaviourController.GetBehaviour<BehaviourX>());
|
||||||
|
}
|
||||||
|
|
||||||
|
[Fact]
|
||||||
|
public void AddBehaviourSameTypeCreatesSeparateInstances()
|
||||||
|
{
|
||||||
|
IBehaviourController behaviourController = CreateUniverseObject().BehaviourController;
|
||||||
|
|
||||||
|
BehaviourY first = behaviourController.AddBehaviour<BehaviourY>();
|
||||||
|
BehaviourY second = behaviourController.AddBehaviour<BehaviourY>();
|
||||||
|
|
||||||
|
Assert.NotSame(first, second);
|
||||||
|
}
|
||||||
|
|
||||||
|
[Fact]
|
||||||
|
public void BehaviourAddedEvents()
|
||||||
|
{
|
||||||
|
IBehaviourController behaviourController = CreateUniverseObject().BehaviourController;
|
||||||
|
|
||||||
|
IBehaviourController? sender = null;
|
||||||
|
IBehaviourController.BehaviourAddedArguments? arguments = null;
|
||||||
|
|
||||||
|
behaviourController.OnBehaviourAdded.AddListener((s, a) =>
|
||||||
|
{
|
||||||
|
sender = s;
|
||||||
|
arguments = a;
|
||||||
|
});
|
||||||
|
|
||||||
|
behaviourController.AddBehaviour<BehaviourX>();
|
||||||
|
|
||||||
|
Assert.NotNull(sender);
|
||||||
|
Assert.NotNull(arguments);
|
||||||
|
}
|
||||||
|
|
||||||
|
[Fact]
|
||||||
|
public void BehaviourRemovedEvents()
|
||||||
|
{
|
||||||
|
IBehaviourController behaviourController = CreateUniverseObject().BehaviourController;
|
||||||
|
|
||||||
|
IBehaviourController? sender = null;
|
||||||
|
IBehaviourController.BehaviourRemovedArguments? arguments = null;
|
||||||
|
|
||||||
|
behaviourController.OnBehaviourRemoved.AddListener((s, a) =>
|
||||||
|
{
|
||||||
|
sender = s;
|
||||||
|
arguments = a;
|
||||||
|
});
|
||||||
|
|
||||||
|
behaviourController.AddBehaviour<BehaviourX>();
|
||||||
|
behaviourController.RemoveBehaviour<BehaviourX>();
|
||||||
|
|
||||||
|
Assert.NotNull(sender);
|
||||||
|
Assert.NotNull(arguments);
|
||||||
|
}
|
||||||
|
|
||||||
|
#region Hierarchy Structure
|
||||||
|
|
||||||
|
private static IUniverseObject CreateUniverseObject()
|
||||||
|
{
|
||||||
|
UniverseObject universeObject = new();
|
||||||
|
BehaviourController behaviourController = new();
|
||||||
|
|
||||||
|
universeObject.Assign(new StateEnable());
|
||||||
|
universeObject.StateEnable.Assign(universeObject);
|
||||||
|
|
||||||
|
behaviourController.Assign(new StateEnable());
|
||||||
|
behaviourController.StateEnable.Assign(behaviourController);
|
||||||
|
|
||||||
|
behaviourController.Assign(universeObject);
|
||||||
|
universeObject.Assign(behaviourController);
|
||||||
|
|
||||||
|
universeObject.Initialize();
|
||||||
|
behaviourController.Initialize();
|
||||||
|
|
||||||
|
return universeObject;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static IUniverseObject CreateParentChildScenario()
|
||||||
|
{
|
||||||
|
IUniverseObject parentUO = CreateUniverseObject().SetUniverseObject("Parent");
|
||||||
|
IUniverseObject middleUO = CreateUniverseObject().SetUniverseObject("Middle", parentUO);
|
||||||
|
IUniverseObject childUO = CreateUniverseObject().SetUniverseObject("Child", middleUO);
|
||||||
|
|
||||||
|
parentUO.BehaviourController.AddBehaviour<BehaviourY>();
|
||||||
|
middleUO.BehaviourController.AddBehaviour<BehaviourX>();
|
||||||
|
childUO.BehaviourController.AddBehaviour<BehaviourY>();
|
||||||
|
|
||||||
|
return middleUO;
|
||||||
|
}
|
||||||
|
|
||||||
|
[Fact]
|
||||||
|
public void ParentChildScenarioGetBehaviourInParent()
|
||||||
|
{
|
||||||
|
IUniverseObject universeObject = CreateParentChildScenario();
|
||||||
|
|
||||||
|
Assert.NotNull(universeObject.BehaviourController.GetBehaviourInParent<BehaviourY>());
|
||||||
|
}
|
||||||
|
|
||||||
|
[Fact]
|
||||||
|
public void ParentChildScenarioGetBehaviourInChildren()
|
||||||
|
{
|
||||||
|
IUniverseObject universeObject = CreateParentChildScenario();
|
||||||
|
|
||||||
|
Assert.NotNull(universeObject.BehaviourController.GetBehaviourInChildren<BehaviourY>());
|
||||||
|
}
|
||||||
|
|
||||||
|
[Fact]
|
||||||
|
public void ParentChildScenarioGetBehaviourInChildrenOnSameObject()
|
||||||
|
{
|
||||||
|
IUniverseObject universeObject = CreateParentChildScenario();
|
||||||
|
|
||||||
|
Assert.NotNull(universeObject.BehaviourController.GetBehaviourInChildren<BehaviourX>());
|
||||||
|
}
|
||||||
|
|
||||||
|
[Fact]
|
||||||
|
public void ParentChildScenarioGetBehaviourInParentOnSameObject()
|
||||||
|
{
|
||||||
|
IUniverseObject universeObject = CreateParentChildScenario();
|
||||||
|
|
||||||
|
Assert.NotNull(universeObject.BehaviourController.GetBehaviourInParent<BehaviourX>());
|
||||||
|
}
|
||||||
|
|
||||||
|
[Fact]
|
||||||
|
public void ParentChildScenarioGetBehaviourInParentRaisesExceptionIfNotFound()
|
||||||
|
{
|
||||||
|
IUniverseObject universeObject = CreateParentChildScenario();
|
||||||
|
|
||||||
|
Assert.Throws<BehaviourNotFoundException>(universeObject.BehaviourController.GetRequiredBehaviourInParent<BehaviourZ>);
|
||||||
|
}
|
||||||
|
|
||||||
|
[Fact]
|
||||||
|
public void ParentChildScenarioGetBehaviourInChildrenRaisesExceptionIfNotFound()
|
||||||
|
{
|
||||||
|
IUniverseObject universeObject = CreateParentChildScenario();
|
||||||
|
|
||||||
|
Assert.Throws<BehaviourNotFoundException>(universeObject.BehaviourController.GetRequiredBehaviourInChildren<BehaviourZ>);
|
||||||
|
}
|
||||||
|
|
||||||
|
[Fact]
|
||||||
|
public void ParentChildScenarioGetBehaviourInChildrenOnSameObjectRaisesExceptionIfNotFound()
|
||||||
|
{
|
||||||
|
IUniverseObject universeObject = CreateParentChildScenario();
|
||||||
|
|
||||||
|
Assert.Throws<BehaviourNotFoundException>(universeObject.BehaviourController.GetRequiredBehaviourInChildren<BehaviourZ>);
|
||||||
|
}
|
||||||
|
|
||||||
|
[Fact]
|
||||||
|
public void ParentChildScenarioGetBehaviourInParentOnSameObjectRaisesExceptionIfNotFound()
|
||||||
|
{
|
||||||
|
IUniverseObject universeObject = CreateParentChildScenario();
|
||||||
|
|
||||||
|
Assert.Throws<BehaviourNotFoundException>(universeObject.BehaviourController.GetRequiredBehaviourInParent<BehaviourZ>);
|
||||||
|
}
|
||||||
|
|
||||||
|
#endregion
|
||||||
|
|
||||||
|
private class BehaviourX : BehaviourBase;
|
||||||
|
private class BehaviourY : BehaviourBase;
|
||||||
|
private class BehaviourZ : BehaviourBase;
|
||||||
|
}
|
@ -1,10 +0,0 @@
|
|||||||
namespace Engine.Tests;
|
|
||||||
|
|
||||||
public class UnitTest1
|
|
||||||
{
|
|
||||||
[Fact]
|
|
||||||
public void Test1()
|
|
||||||
{
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
|
Loading…
x
Reference in New Issue
Block a user