Files
MonoGame.Extended/Source/Tests/MonoGame.Extended.Entities.Tests/AspectTests.cs
T
2018-06-22 22:59:52 +10:00

88 lines
2.8 KiB
C#

using System.Collections.Specialized;
using MonoGame.Extended.Sprites;
using Xunit;
namespace MonoGame.Extended.Entities.Tests
{
public class DummyComponent
{
}
public class AspectTests
{
private readonly ComponentManager _componentManager;
private readonly BitVector32 _entityA;
private readonly BitVector32 _entityB;
public AspectTests()
{
_componentManager = new ComponentManager();
_entityA = new BitVector32
{
[1 << _componentManager.GetComponentTypeId(typeof(Transform2))] = true,
[1 << _componentManager.GetComponentTypeId(typeof(Sprite))] = true,
[1 << _componentManager.GetComponentTypeId(typeof(DummyComponent))] = true
};
_entityB = new BitVector32
{
[1 << _componentManager.GetComponentTypeId(typeof(Transform2))] = true,
[1 << _componentManager.GetComponentTypeId(typeof(Sprite))] = true,
};
}
[Fact]
public void EmptyAspectMatchesAllComponents()
{
var componentManager = new ComponentManager();
var emptyAspect = Aspect.All()
.Build(componentManager);
Assert.True(emptyAspect.IsInterested(_entityA));
Assert.True(emptyAspect.IsInterested(_entityB));
}
[Fact]
public void IsInterestedInAllComponents()
{
var allAspect = Aspect
.All(typeof(Sprite), typeof(Transform2), typeof(DummyComponent))
.Build(_componentManager);
Assert.True(allAspect.IsInterested(_entityA));
Assert.False(allAspect.IsInterested(_entityB));
}
[Fact]
public void IsInterestedInEitherOneOfTheComponents()
{
var eitherOneAspect = Aspect
.One(typeof(Transform2), typeof(DummyComponent))
.Build(_componentManager);
Assert.True(eitherOneAspect.IsInterested(_entityA));
Assert.True(eitherOneAspect.IsInterested(_entityB));
}
[Fact]
public void IsInterestedInJustOneComponent()
{
var oneAspect = Aspect
.One(typeof(DummyComponent))
.Build(_componentManager);
Assert.True(oneAspect.IsInterested(_entityA));
Assert.False(oneAspect.IsInterested(_entityB));
}
[Fact]
public void IsInterestedInExcludingOneComponent()
{
var oneAspect = Aspect
.Exclude(typeof(DummyComponent))
.Build(_componentManager);
Assert.False(oneAspect.IsInterested(_entityA));
Assert.True(oneAspect.IsInterested(_entityB));
}
}
}