using System; using UnitTestSharp; namespace Ariadne.UnitTests { public class InvertedLatchTests : TestFixture { public class CtorTests : TestFixture { public void NullLatch_Throws() { CheckThrow(typeof(ArgumentNullException)); new InvertedLatch(null); } public void LatchThatHasItsInverse_Throws() { CheckThrow(typeof(InvalidOperationException)); new InvertedLatch(new Latch()); } } public class IsSetTests : TestFixture { public void IsTheOppositeOfTheLatch() { var latch = new Latch(); CheckTrue(latch.Inverse.IsSet); latch.Set(); CheckFalse(latch.Inverse.IsSet); latch.Clear(); CheckTrue(latch.Inverse.IsSet); } } public class ContradictsTests : TestFixture { public void Latch_IsContradicted() { var latch = new Latch(); CheckTrue(latch.Inverse.Contradicts(latch)); } public void ItselfAndOtherConditions_AreNot() { var latch = new Latch(); CheckFalse(latch.Inverse.Contradicts(latch.Inverse)); CheckFalse(latch.Inverse.Contradicts(new Latch())); CheckFalse(latch.Inverse.Contradicts(new Latch().Inverse)); } } public class NotOperatorTests : TestFixture { public void ReturnsTheLatch() { var latch = new Latch(); CheckTrue(ReferenceEquals(latch, !!latch)); } public void NullInverse_Throws() { InvertedLatch inverse = null; CheckThrow(typeof(ArgumentNullException)); Latch ignored = !inverse; } } } }