|
1 | 1 | using NUnit.Framework;
|
| 2 | +using NUnit.Framework.Internal; |
2 | 3 |
|
3 | 4 | namespace DotNet.Extensions.Require.Test;
|
4 | 5 |
|
5 |
| -public sealed class PreconditionsTests |
| 6 | +public abstract class PreconditionsTests |
6 | 7 | {
|
| 8 | + protected abstract T Require<T>(T subject, bool condition, string expectation = ""); |
| 9 | + |
7 | 10 | [Test]
|
8 | 11 | public void Require_ThrowsArgumentException_WhenConditionIsFalse() =>
|
9 | 12 | Assert.Throws<ArgumentException>(
|
10 |
| - () => 1.Require(condition: false, "message") |
| 13 | + () => Require(subject: 1, condition: false, "message") |
11 | 14 | )?.WithMessage("message");
|
12 | 15 |
|
13 | 16 | [Test]
|
14 | 17 | public void Require_DoesNotThrow_WhenConditionIsTrue() =>
|
15 | 18 | Assert.DoesNotThrow(
|
16 |
| - () => 1.Require(condition: true, string.Empty) |
| 19 | + () => Require(subject: 1, condition: true) |
17 | 20 | );
|
18 | 21 |
|
19 | 22 | [Test]
|
20 | 23 | public void Require_Returns_TheValueOnWhichItIsCalled_WhenConditionIsTrue() =>
|
21 | 24 | Assert.AreEqual(
|
22 | 25 | expected: 1,
|
23 |
| - actual: 1.Require(condition: true, string.Empty) |
| 26 | + actual: Require(subject: 1, condition: true) |
| 27 | + ); |
| 28 | +} |
| 29 | + |
| 30 | +[TestFixture] |
| 31 | +public sealed class BasicRequire : PreconditionsTests |
| 32 | +{ |
| 33 | + protected override T Require<T>(T subject, bool condition, string expectation = "") => |
| 34 | + subject.Require(condition, expectation); |
| 35 | +} |
| 36 | + |
| 37 | +public sealed class RequireWithLazyMessage : PreconditionsTests |
| 38 | +{ |
| 39 | + protected override T Require<T>(T subject, bool condition, string expectation = "") => |
| 40 | + subject.Require(condition, expectation: () => expectation); |
| 41 | + |
| 42 | + [Test] |
| 43 | + public void Require_DoesNotCreateExpectationMessage_WhenConditionIsTrue() => |
| 44 | + Assert.DoesNotThrow( |
| 45 | + () => 1.Require(condition: true, () => throw new NUnitException("must not be called")) |
| 46 | + ); |
| 47 | +} |
| 48 | + |
| 49 | +public sealed class RequireWithLazilyConstructedMessage : PreconditionsTests |
| 50 | +{ |
| 51 | + protected override T Require<T>(T subject, bool condition, string expectation = "") => |
| 52 | + subject.Require(condition, expectation: _ => expectation); |
| 53 | + |
| 54 | + [Test] |
| 55 | + public void Require_CanUseTheValue_ToConstructTheExpectation() => |
| 56 | + Assert.Throws<ArgumentException>( |
| 57 | + () => 1.Require(condition: false, value => $"message with {value}") |
| 58 | + )?.WithMessage("message with 1"); |
| 59 | + |
| 60 | + [Test] |
| 61 | + public void Require_DoesNotBuildExpectationMessage_WhenConditionIsTrue() => |
| 62 | + Assert.DoesNotThrow( |
| 63 | + () => 1.Require(condition: true, value => throw new NUnitException($"must not be called for {value}")) |
| 64 | + ); |
| 65 | +} |
| 66 | + |
| 67 | +public abstract class RequireWithPredicate : PreconditionsTests |
| 68 | +{ |
| 69 | + protected abstract T Require<T>(T subject, Predicate<T> requirement, string expectation = ""); |
| 70 | + |
| 71 | + protected override T Require<T>(T subject, bool condition, string expectation = "") => |
| 72 | + Require(subject, requirement: _ => condition, expectation); |
| 73 | + |
| 74 | + [Test] |
| 75 | + public void RequirePredicate_WillBeGivenTheValue() => |
| 76 | + Assert.DoesNotThrow( |
| 77 | + () => 1.Require(requirement: value => value == 1, string.Empty) |
| 78 | + ); |
| 79 | +} |
| 80 | + |
| 81 | +[TestFixture] |
| 82 | +public sealed class RequireWithPredicateAndConstantMessage : RequireWithPredicate |
| 83 | +{ |
| 84 | + protected override T Require<T>(T subject, Predicate<T> requirement, string expectation = "") => |
| 85 | + subject.Require(requirement, expectation); |
| 86 | +} |
| 87 | + |
| 88 | +public sealed class RequireWithPredicateAndLazyMessage : RequireWithPredicate |
| 89 | +{ |
| 90 | + protected override T Require<T>(T subject, Predicate<T> requirement, string expectation = "") => |
| 91 | + subject.Require(requirement, expectation: () => expectation); |
| 92 | + |
| 93 | + [Test] |
| 94 | + public void Require_DoesNotCreateExpectationMessage_WhenRequirementYieldsTrue() => |
| 95 | + Assert.DoesNotThrow( |
| 96 | + () => 1.Require(requirement: _ => true, () => throw new NUnitException("must not be called")) |
| 97 | + ); |
| 98 | +} |
| 99 | + |
| 100 | +public sealed class RequireWithPredicateAndLazilyConstructedMessage : RequireWithPredicate |
| 101 | +{ |
| 102 | + protected override T Require<T>(T subject, Predicate<T> requirement, string expectation = "") => |
| 103 | + subject.Require(requirement, expectation: _ => expectation); |
| 104 | + |
| 105 | + [Test] |
| 106 | + public void Require_CanUseTheValue_ToConstructTheExpectation() => |
| 107 | + Assert.Throws<ArgumentException>( |
| 108 | + () => 1.Require(requirement: _ => false, value => $"message with {value}") |
| 109 | + )?.WithMessage("message with 1"); |
| 110 | + |
| 111 | + [Test] |
| 112 | + public void Require_DoesNotBuildExpectationMessage_WhenConditionIsTrue() => |
| 113 | + Assert.DoesNotThrow( |
| 114 | + () => 1.Require(requirement: _ => true, value => throw new NUnitException($"must not be called for {value}")) |
24 | 115 | );
|
25 | 116 | }
|
0 commit comments