diff --git a/MultiversalDiplomacy/Adjudicate/OrderValidation.cs b/MultiversalDiplomacy/Adjudicate/OrderValidation.cs index 553e47c..7b2afe2 100644 --- a/MultiversalDiplomacy/Adjudicate/OrderValidation.cs +++ b/MultiversalDiplomacy/Adjudicate/OrderValidation.cs @@ -27,6 +27,16 @@ public class OrderValidation this.Order = order; this.Valid = valid; this.Reason = reason; + + if (this.Valid != (this.Reason == ValidationReason.Valid)) + { + throw new ArgumentException("Only valid orders should have the Valid reason"); + } + } + + public override string ToString() + { + return this.Valid ? "Valid" : $"Invalid ({this.Reason})"; } } diff --git a/MultiversalDiplomacyTests/Is.cs b/MultiversalDiplomacyTests/Is.cs new file mode 100644 index 0000000..5e36e88 --- /dev/null +++ b/MultiversalDiplomacyTests/Is.cs @@ -0,0 +1,12 @@ +using MultiversalDiplomacy.Adjudicate; + +namespace MultiversalDiplomacyTests; + +public class Is : NUnit.Framework.Is +{ + public static OrderValidationConstraint Valid + => new OrderValidationConstraint(true, ValidationReason.Valid); + + public static OrderValidationConstraint Invalid(ValidationReason expected) + => new OrderValidationConstraint(false, expected); +} diff --git a/MultiversalDiplomacyTests/MovementAdjudicatorTest.cs b/MultiversalDiplomacyTests/MovementAdjudicatorTest.cs index 8c81001..ec23950 100644 --- a/MultiversalDiplomacyTests/MovementAdjudicatorTest.cs +++ b/MultiversalDiplomacyTests/MovementAdjudicatorTest.cs @@ -17,15 +17,8 @@ public class MovementAdjudicatorTest setup.ValidateOrders(new MovementPhaseAdjudicator()); - Assert.Multiple(() => - { - Assert.That(order.Validation.Valid, Is.True, "Unexpected validation result"); - Assert.That( - order.Validation.Reason, - Is.EqualTo(ValidationReason.Valid), - "Unexpected validation reason"); - Assert.That(order.Replacement, Is.Null, "Unexpected order replacement"); - }); + Assert.That(order.Validation, Is.Valid, "Unexpected validation result"); + Assert.That(order.Replacement, Is.Null, "Unexpected order replacement"); } [Test] @@ -37,15 +30,8 @@ public class MovementAdjudicatorTest setup.ValidateOrders(new MovementPhaseAdjudicator()); - Assert.Multiple(() => - { - Assert.That(order.Validation.Valid, Is.True, "Unexpected validation result"); - Assert.That( - order.Validation.Reason, - Is.EqualTo(ValidationReason.Valid), - "Unexpected validation reason"); - Assert.That(order.Replacement, Is.Null, "Unexpected order replacement"); - }); + Assert.That(order.Validation, Is.Valid, "Unexpected validation result"); + Assert.That(order.Replacement, Is.Null, "Unexpected order replacement"); } [Test] @@ -57,15 +43,8 @@ public class MovementAdjudicatorTest setup.ValidateOrders(new MovementPhaseAdjudicator()); - Assert.Multiple(() => - { - Assert.That(order.Validation.Valid, Is.True, "Unexpected validation result"); - Assert.That( - order.Validation.Reason, - Is.EqualTo(ValidationReason.Valid), - "Unexpected validation reason"); - Assert.That(order.Replacement, Is.Null, "Unexpected order replacement"); - }); + Assert.That(order.Validation, Is.Valid, "Unexpected validation result"); + Assert.That(order.Replacement, Is.Null, "Unexpected order replacement"); } [Test] @@ -77,15 +56,8 @@ public class MovementAdjudicatorTest setup.ValidateOrders(new MovementPhaseAdjudicator()); - Assert.Multiple(() => - { - Assert.That(order.Validation.Valid, Is.True, "Unexpected validation result"); - Assert.That( - order.Validation.Reason, - Is.EqualTo(ValidationReason.Valid), - "Unexpected validation reason"); - Assert.That(order.Replacement, Is.Null, "Unexpected order replacement"); - }); + Assert.That(order.Validation, Is.Valid, "Unexpected validation result"); + Assert.That(order.Replacement, Is.Null, "Unexpected order replacement"); } [Test] @@ -97,14 +69,7 @@ public class MovementAdjudicatorTest setup.ValidateOrders(new MovementPhaseAdjudicator()); - Assert.Multiple(() => - { - Assert.That(order.Validation.Valid, Is.True, "Unexpected validation result"); - Assert.That( - order.Validation.Reason, - Is.EqualTo(ValidationReason.Valid), - "Unexpected validation reason"); - Assert.That(order.Replacement, Is.Null, "Unexpected order replacement"); - }); + Assert.That(order.Validation, Is.Valid, "Unexpected validation result"); + Assert.That(order.Replacement, Is.Null, "Unexpected order replacement"); } -} \ No newline at end of file +} diff --git a/MultiversalDiplomacyTests/OrderValidationConstraint.cs b/MultiversalDiplomacyTests/OrderValidationConstraint.cs new file mode 100644 index 0000000..ece27bd --- /dev/null +++ b/MultiversalDiplomacyTests/OrderValidationConstraint.cs @@ -0,0 +1,30 @@ +using MultiversalDiplomacy.Adjudicate; + +using NUnit.Framework.Constraints; + +namespace MultiversalDiplomacyTests; + +public class OrderValidationConstraint : Constraint +{ + private bool valid; + private ValidationReason expectedReason; + + public override string Description + { + get => this.valid ? "Valid" : $"Invalid ({this.expectedReason})"; + } + + public OrderValidationConstraint(bool valid, ValidationReason expected) + { + this.valid = valid; + this.expectedReason = expected; + } + + public override ConstraintResult ApplyTo(TActual actual) + { + bool success = actual is OrderValidation validation + && validation.Valid == this.valid + && validation.Reason == this.expectedReason; + return new ConstraintResult(this, actual, success); + } +}