Skip to content

Commit 97eb59d

Browse files
Add NUnit Extensions (#32)
* Add NUnit Extensions
1 parent 4ae69fa commit 97eb59d

18 files changed

Lines changed: 964 additions & 69 deletions
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
<Project Sdk="Microsoft.NET.Sdk">
2+
3+
<PropertyGroup>
4+
<TargetFramework>net6.0</TargetFramework>
5+
<IsPackable>false</IsPackable>
6+
</PropertyGroup>
7+
8+
<ItemGroup>
9+
<PackageReference Include="NUnit" Version="3.13.3" />
10+
<PackageReference Include="NUnit3TestAdapter" Version="4.3.0" />
11+
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.4.0" />
12+
</ItemGroup>
13+
14+
<ItemGroup>
15+
<ProjectReference Include="..\Galaxus.Functional\Galaxus.Functional.csproj" />
16+
<ProjectReference Include="..\Galaxus.Functional.NUnit\Galaxus.Functional.NUnit.csproj" />
17+
</ItemGroup>
18+
19+
</Project>
Lines changed: 204 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,204 @@
1+
using NUnit.Framework;
2+
using NUnit.Framework.Constraints;
3+
using NUnit.Framework.Internal;
4+
5+
namespace Galaxus.Functional.NUnit.Test;
6+
7+
[TestFixture]
8+
public class OptionConstraintTest
9+
{
10+
private static readonly Option<int> _some = 3.ToOption();
11+
private static readonly Option<string> _someString = "Hello World".ToOption();
12+
private static readonly Option<int> _none = Option<int>.None;
13+
14+
private class IsNone
15+
{
16+
[Test]
17+
public void OnNone_Succeeds()
18+
{
19+
Assert.That(_none, Is.None);
20+
}
21+
22+
private class OnSome
23+
{
24+
[Test]
25+
public void Fails()
26+
{
27+
Assert.That(Resolve(Is.None).ApplyTo(_some).Status, Is.EqualTo(ConstraintStatus.Failure));
28+
}
29+
30+
[Test]
31+
public void HasMeaningFullDescription()
32+
{
33+
Assert.That(Resolve(Is.None).ApplyTo(_some).Description, Is.EqualTo("an option of none"));
34+
}
35+
36+
[Test]
37+
public void ActualValueIsTypeOfActualValue()
38+
{
39+
var butWas = GetButWas(Resolve(Is.None).ApplyTo(_some));
40+
Assert.That(butWas, Is.EqualTo("3"));
41+
}
42+
}
43+
44+
private class OnNonOptionType
45+
{
46+
[Test]
47+
public void Fails()
48+
{
49+
Assert.That(Resolve(Is.None).ApplyTo("string").Status, Is.EqualTo(ConstraintStatus.Failure));
50+
}
51+
52+
[Test]
53+
public void HasMeaningFullDescription()
54+
{
55+
Assert.That(Resolve(Is.None).ApplyTo("string").Description, Is.EqualTo("an object of type Option"));
56+
}
57+
58+
[Test]
59+
public void ActualValueIsTypeOfActualValue()
60+
{
61+
var butWas = GetButWas(Resolve(Is.None).ApplyTo("string"));
62+
Assert.That(butWas, Is.EqualTo($"<{typeof(string)}>"));
63+
}
64+
}
65+
}
66+
67+
private class IsSome
68+
{
69+
[Test]
70+
public void OnSome_Succeeds()
71+
{
72+
Assert.That(_some, Is.Some);
73+
}
74+
75+
private class OnNone
76+
{
77+
[Test]
78+
public void Fails()
79+
{
80+
Assert.That(Resolve(Is.Some).ApplyTo(_none).Status, Is.EqualTo(ConstraintStatus.Failure));
81+
}
82+
83+
[Test]
84+
public void HasMeaningFullDescription()
85+
{
86+
Assert.That(
87+
Resolve(Is.Some).ApplyTo(_none).Description,
88+
Is.EqualTo("an option containing some value"));
89+
}
90+
91+
[Test]
92+
public void ActualValueIsTypeOfActualValue()
93+
{
94+
var butWas = GetButWas(Resolve(Is.Some).ApplyTo(_none));
95+
Assert.That(butWas, Is.EqualTo("None"));
96+
}
97+
}
98+
99+
private class OnNonOptionType
100+
{
101+
[Test]
102+
public void Fails()
103+
{
104+
Assert.That(Resolve(Is.Some).ApplyTo(3).Status, Is.EqualTo(ConstraintStatus.Failure));
105+
}
106+
107+
[Test]
108+
public void HasMeaningFullDescription()
109+
{
110+
Assert.That(Resolve(Is.Some).ApplyTo(3).Description, Is.EqualTo("an object of type Option"));
111+
}
112+
113+
[Test]
114+
public void ActualValueIsTypeOfActualValue()
115+
{
116+
var butWas = GetButWas(Resolve(Is.Some).ApplyTo(3));
117+
Assert.That(butWas, Is.EqualTo($"<{typeof(int)}>"));
118+
}
119+
}
120+
121+
private class WithValue
122+
{
123+
[Test]
124+
public void MatchingConstraint_Succeeds()
125+
{
126+
Assert.That(_some, Is.Some.WithValue.EqualTo(3));
127+
}
128+
129+
private class OnNone
130+
{
131+
[Test]
132+
public void Fails()
133+
{
134+
Assert.That(Resolve(Is.Some.WithValue.EqualTo(3)).ApplyTo(_none).Status, Is.EqualTo(ConstraintStatus.Failure));
135+
}
136+
137+
[Test]
138+
public void HasMeaningFullDescription()
139+
{
140+
Assert.That(
141+
Resolve(Is.Some.WithValue.EqualTo(3)).ApplyTo(_none).Description,
142+
Is.EqualTo("an option containing some value and it's value to be 3"));
143+
}
144+
145+
[Test]
146+
public void ActualValueIsNone()
147+
{
148+
var butWas = GetButWas(Resolve(Is.Some.WithValue.EqualTo(3)).ApplyTo(_none));
149+
Assert.That(butWas, Is.EqualTo("None"));
150+
}
151+
}
152+
153+
private class OnNonOptionType
154+
{
155+
[Test]
156+
public void Fails()
157+
{
158+
Assert.That(Resolve(Is.Some.WithValue.EqualTo(3)).ApplyTo(true).Status, Is.EqualTo(ConstraintStatus.Failure));
159+
}
160+
161+
[Test]
162+
public void HasMeaningFullDescription()
163+
{
164+
Assert.That(
165+
Resolve(Is.Some.WithValue.GreaterThan(2)).ApplyTo(true).Description,
166+
Is.EqualTo("an object of type Option and it's value to be greater than 2"));
167+
}
168+
169+
[Test]
170+
public void ActualValueIsTypeOfActualValue()
171+
{
172+
var butWas = GetButWas(Resolve(Is.Some.WithValue.GreaterThan(2)).ApplyTo(true));
173+
Assert.That(butWas, Is.EqualTo($"<{typeof(bool)}>"));
174+
}
175+
}
176+
177+
private class TestedOnMultipleConstraints
178+
{
179+
[Test]
180+
public void MatchingAll_Succeeds()
181+
{
182+
#pragma warning disable NUnit2041 // Incompatible types for comparison constraint
183+
Assert.That(_some, Is.Some.WithValue.GreaterThan(2).And.LessThan(4));
184+
#pragma warning restore NUnit2041
185+
}
186+
187+
[Test]
188+
public void PerformedOnOptionOfString()
189+
{
190+
Assert.That(_someString, Is.Some.WithValue.StartWith("hello").IgnoreCase.And.EndsWith("World").And.Length.GreaterThan(5));
191+
}
192+
}
193+
}
194+
}
195+
196+
private static IConstraint Resolve(IResolveConstraint expression) => expression.Resolve();
197+
198+
private static string GetButWas(ConstraintResult result)
199+
{
200+
var writer = new TextMessageWriter();
201+
result.WriteActualValueTo(writer);
202+
return writer.ToString();
203+
}
204+
}

0 commit comments

Comments
 (0)