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