using Chernobyl.Mathematics.Geometry;
using NUnit.Framework;
namespace Chernobyl.Mathematics.Collision
{
///
/// A base class test fixture that tests the
/// type.
///
public abstract class CollidableTests
{
[Test, Description("Ensures the ICollidable.OnCollisionStarted event " +
"is invoked when the ICollidable.HandleCollisionStarted(ICollidable) " +
"method has been invoked.")]
public virtual void CollisionStartedandEnded()
{
Circle circle = new Circle(40.5f);
ICollidable collidable = CreateCollidable();
collidable.OnCollisionStarted += (sender, e) =>
Assert.Pass("ICollidable.OnCollisionStarted event has been invoked, test passes");
collidable.HandleCollisionStarted(circle);
Assert.Fail("ICollidable.OnCollisionStarted event was NOT invoked.");
}
[Test, Description("Ensures the ICollidable.OnCollisionEnded event " +
"is invoked when the ICollidable.HandleCollisionEnded(ICollidable) " +
"method has been invoked.")]
public virtual void CollisionEnded()
{
Circle circle = new Circle(40.5f);
ICollidable collidable = CreateCollidable();
collidable.OnCollisionEnded += (sender, e) =>
Assert.Pass("ICollidable.OnCollisionEnded event has been invoked, test passes");
collidable.HandleCollisionStarted(circle);
collidable.HandleCollisionEnded(circle);
Assert.Fail("ICollidable.OnCollisionEnded event was NOT invoked.");
}
///
/// Should create an that can be collided
/// against for testing purposes. This method should always create a new
/// and never reuse the same instance.
///
/// The new to test with.
protected abstract ICollidable CreateCollidable();
}
}