2019-06-15 00:51:06 +00:00
|
|
|
using NUnit.Framework;
|
|
|
|
using System.Linq;
|
|
|
|
|
|
|
|
using Encompass;
|
|
|
|
using System.Collections.Generic;
|
2019-06-15 01:13:24 +00:00
|
|
|
using System;
|
2019-06-15 00:51:06 +00:00
|
|
|
|
2019-06-15 19:32:56 +00:00
|
|
|
namespace Tests
|
|
|
|
{
|
2019-06-15 00:51:06 +00:00
|
|
|
public class EngineTest
|
|
|
|
{
|
2019-06-15 18:40:42 +00:00
|
|
|
static IEnumerable<MockComponent> resultComponents;
|
|
|
|
static MockComponent resultComponent;
|
2019-06-15 00:51:06 +00:00
|
|
|
|
2019-06-15 01:13:24 +00:00
|
|
|
public class ReadComponentsTestEngine : Engine
|
2019-06-15 00:51:06 +00:00
|
|
|
{
|
|
|
|
public override void Update(float dt)
|
|
|
|
{
|
2019-06-15 18:40:42 +00:00
|
|
|
resultComponents = this.ReadComponents<MockComponent>();
|
2019-06-15 00:51:06 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2019-06-15 01:13:24 +00:00
|
|
|
public class ReadComponentTestEngine : Engine
|
|
|
|
{
|
|
|
|
public override void Update(float dt)
|
|
|
|
{
|
2019-06-15 18:40:42 +00:00
|
|
|
resultComponent = this.ReadComponent<MockComponent>();
|
2019-06-15 01:13:24 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2019-06-15 00:51:06 +00:00
|
|
|
[Test]
|
|
|
|
public void ReadComponents()
|
|
|
|
{
|
|
|
|
var worldBuilder = new WorldBuilder();
|
2019-06-15 01:13:24 +00:00
|
|
|
worldBuilder.AddEngine<ReadComponentsTestEngine>();
|
2019-06-15 00:51:06 +00:00
|
|
|
|
|
|
|
var entity = worldBuilder.CreateEntity();
|
|
|
|
|
|
|
|
MockComponent mockComponent;
|
|
|
|
mockComponent.myInt = 0;
|
|
|
|
mockComponent.myString = "hello";
|
|
|
|
|
|
|
|
MockComponent mockComponentB;
|
|
|
|
mockComponentB.myInt = 1;
|
|
|
|
mockComponentB.myString = "howdy";
|
|
|
|
|
|
|
|
entity.AddComponent(mockComponent);
|
|
|
|
entity.AddComponent(mockComponentB);
|
|
|
|
|
|
|
|
var world = worldBuilder.Build();
|
|
|
|
|
|
|
|
world.Update(0.01f);
|
|
|
|
|
2019-06-15 18:40:42 +00:00
|
|
|
Assert.Contains(mockComponent, resultComponents.ToList());
|
|
|
|
Assert.Contains(mockComponentB, resultComponents.ToList());
|
2019-06-15 00:51:06 +00:00
|
|
|
}
|
2019-06-15 01:13:24 +00:00
|
|
|
|
|
|
|
[Test]
|
|
|
|
public void ReadComponent()
|
|
|
|
{
|
|
|
|
var worldBuilder = new WorldBuilder();
|
|
|
|
worldBuilder.AddEngine<ReadComponentTestEngine>();
|
|
|
|
|
|
|
|
var entity = worldBuilder.CreateEntity();
|
|
|
|
|
|
|
|
MockComponent mockComponent;
|
|
|
|
mockComponent.myInt = 0;
|
|
|
|
mockComponent.myString = "hello";
|
|
|
|
|
|
|
|
entity.AddComponent(mockComponent);
|
|
|
|
|
|
|
|
var world = worldBuilder.Build();
|
|
|
|
|
|
|
|
world.Update(0.01f);
|
|
|
|
|
2019-06-15 18:40:42 +00:00
|
|
|
Assert.AreEqual(mockComponent, resultComponent);
|
2019-06-15 01:13:24 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
[Test]
|
|
|
|
public void ReadComponentWhenMultipleComponents()
|
|
|
|
{
|
|
|
|
var worldBuilder = new WorldBuilder();
|
|
|
|
worldBuilder.AddEngine<ReadComponentTestEngine>();
|
|
|
|
|
|
|
|
var entity = worldBuilder.CreateEntity();
|
|
|
|
|
|
|
|
MockComponent mockComponent;
|
|
|
|
mockComponent.myInt = 0;
|
|
|
|
mockComponent.myString = "hello";
|
|
|
|
|
|
|
|
MockComponent mockComponentB;
|
|
|
|
mockComponentB.myInt = 1;
|
|
|
|
mockComponentB.myString = "howdy";
|
|
|
|
|
|
|
|
entity.AddComponent(mockComponent);
|
|
|
|
entity.AddComponent(mockComponentB);
|
|
|
|
|
|
|
|
var world = worldBuilder.Build();
|
|
|
|
|
|
|
|
Assert.Throws<InvalidOperationException>(() => world.Update(0.01f));
|
|
|
|
}
|
2019-06-15 07:39:08 +00:00
|
|
|
|
|
|
|
[Mutates(typeof(MockComponent))]
|
|
|
|
public class UpdateComponentTestEngine : Engine
|
|
|
|
{
|
|
|
|
public override void Update(float dt)
|
|
|
|
{
|
2019-06-15 18:40:42 +00:00
|
|
|
var component = this.ReadComponent<MockComponent>();
|
2019-06-15 19:32:56 +00:00
|
|
|
this.UpdateComponent(component, (MockComponent comp) =>
|
|
|
|
{
|
2019-06-15 18:40:42 +00:00
|
|
|
comp.myInt = 420;
|
|
|
|
comp.myString = "blaze it";
|
|
|
|
return comp;
|
|
|
|
});
|
|
|
|
resultComponent = this.ReadComponent<MockComponent>();
|
2019-06-15 07:39:08 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
[Test]
|
|
|
|
public void UpdateComponent()
|
|
|
|
{
|
|
|
|
var worldBuilder = new WorldBuilder();
|
|
|
|
worldBuilder.AddEngine<UpdateComponentTestEngine>();
|
|
|
|
|
|
|
|
var entity = worldBuilder.CreateEntity();
|
|
|
|
|
|
|
|
MockComponent mockComponent;
|
|
|
|
mockComponent.myInt = 0;
|
|
|
|
mockComponent.myString = "hello";
|
|
|
|
|
|
|
|
entity.AddComponent(mockComponent);
|
|
|
|
|
|
|
|
var world = worldBuilder.Build();
|
|
|
|
|
|
|
|
world.Update(0.01f);
|
|
|
|
|
2019-06-15 18:40:42 +00:00
|
|
|
Assert.AreEqual(420, resultComponent.myInt);
|
|
|
|
Assert.AreEqual("blaze it", resultComponent.myString);
|
2019-06-15 07:39:08 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
public class UndeclaredUpdateComponentTestEngine : Engine
|
|
|
|
{
|
|
|
|
public override void Update(float dt)
|
|
|
|
{
|
2019-06-15 18:40:42 +00:00
|
|
|
var component = this.ReadComponent<MockComponent>();
|
2019-06-15 19:32:56 +00:00
|
|
|
this.UpdateComponent(component, (MockComponent comp) =>
|
|
|
|
{
|
2019-06-15 18:40:42 +00:00
|
|
|
comp.myInt = 420;
|
|
|
|
comp.myString = "blaze it";
|
|
|
|
return comp;
|
|
|
|
});
|
2019-06-15 07:39:08 +00:00
|
|
|
component = this.ReadComponent<MockComponent>();
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
[Test]
|
|
|
|
public void UpdateUndeclaredComponent()
|
|
|
|
{
|
|
|
|
var worldBuilder = new WorldBuilder();
|
|
|
|
worldBuilder.AddEngine<UndeclaredUpdateComponentTestEngine>();
|
|
|
|
|
|
|
|
var entity = worldBuilder.CreateEntity();
|
|
|
|
|
|
|
|
MockComponent mockComponent;
|
|
|
|
mockComponent.myInt = 0;
|
|
|
|
mockComponent.myString = "hello";
|
|
|
|
|
|
|
|
entity.AddComponent(mockComponent);
|
|
|
|
|
|
|
|
var world = worldBuilder.Build();
|
|
|
|
|
2019-06-15 19:32:56 +00:00
|
|
|
var ex = Assert.Throws<IllegalComponentMutationException>(() => world.Update(0.01f));
|
2019-06-15 18:40:42 +00:00
|
|
|
Assert.That(ex.Message, Is.EqualTo("Engine UndeclaredUpdateComponentTestEngine tried to mutate undeclared Component MockComponent"));
|
2019-06-15 07:39:08 +00:00
|
|
|
}
|
2019-06-15 00:51:06 +00:00
|
|
|
}
|
|
|
|
}
|