Skip to content

Commit 428ecff

Browse files
committed
Added enum equivalence classes
1 parent a002b79 commit 428ecff

File tree

4 files changed

+94
-0
lines changed

4 files changed

+94
-0
lines changed
Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,53 @@
1+
using NTestDataBuilder.EquivalenceClasses;
2+
using Shouldly;
3+
using Xunit;
4+
5+
namespace NTestDataBuilder.Tests.EquivalenceClasses
6+
{
7+
public class EnumEquivalenceClassesTests
8+
{
9+
public AnonymousValueFixture Any { get; private set; }
10+
11+
public EnumEquivalenceClassesTests()
12+
{
13+
Any = new AnonymousValueFixture();
14+
}
15+
16+
[Fact]
17+
public void WhenGettingAnyOfEnum_ThenReturnSequentialtEnumValueEveryTimeUntilItWrapsAroundAgain()
18+
{
19+
var values = new[]
20+
{
21+
Any.Of<TestEnum>(),
22+
Any.Of<TestEnum>(),
23+
Any.Of<TestEnum>(),
24+
Any.Of<TestEnum>(),
25+
Any.Of<TestEnum>()
26+
};
27+
28+
values.ShouldBe(new []{TestEnum.One, TestEnum.Two, TestEnum.Three, TestEnum.Four, TestEnum.One});
29+
}
30+
31+
[Fact]
32+
public void WhenGettingAnyEnumExceptOneValue_ThenReturnSequentialEnumValueExceptTheExceptionEveryTimeUntilItWrapsAroundAgain()
33+
{
34+
var values = new[]
35+
{
36+
Any.Except(TestEnum.Two),
37+
Any.Except(TestEnum.Two),
38+
Any.Except(TestEnum.Two),
39+
Any.Except(TestEnum.Two)
40+
};
41+
42+
values.ShouldBe(new[] { TestEnum.One, TestEnum.Three, TestEnum.Four, TestEnum.One });
43+
}
44+
}
45+
46+
enum TestEnum
47+
{
48+
One,
49+
Two,
50+
Three,
51+
Four
52+
}
53+
}

NTestDataBuilder.Tests/NTestDataBuilder.Tests.csproj

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -60,6 +60,7 @@
6060
<Compile Include="DataSources\DataSourceConventionTests.cs" />
6161
<Compile Include="EquivalenceClasses\PersonEquivalenceClassesTests.cs" />
6262
<Compile Include="EquivalenceClasses\IntegerEquivalenceClassesTests.cs" />
63+
<Compile Include="EquivalenceClasses\EnumEquivalenceClassesTests.cs" />
6364
<Compile Include="EquivalenceClasses\StringEquivalenceClassesTests.cs" />
6465
<Compile Include="AsProxyTests.cs" />
6566
<Compile Include="BuildListTests.cs" />
Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
using System;
2+
using System.Linq;
3+
using Ploeh.AutoFixture;
4+
5+
namespace NTestDataBuilder.EquivalenceClasses
6+
{
7+
/// <summary>
8+
/// Extension methods that describe equivalence classes for generating anonymous enum values.
9+
/// </summary>
10+
public static class EnumEquivalenceClasses
11+
{
12+
/// <summary>
13+
/// Generate and return an enum from any available values in the enum.
14+
/// </summary>
15+
/// <param name="fixture">The fixture to generate an enum for</param>
16+
/// <returns>The generated enum</returns>
17+
public static TEnum Of<TEnum>(this AnonymousValueFixture fixture)
18+
where TEnum : struct, IComparable, IFormattable, IConvertible
19+
{
20+
return fixture.Fixture.Create<TEnum>();
21+
}
22+
23+
/// <summary>
24+
/// Generate and return an enum from any values in the enum except the provided exceptions.
25+
/// </summary>
26+
/// <param name="fixture">The fixture to generate an enum for</param>
27+
/// <param name="except">A list of exceptions; recommend you specify by label for readability</param>
28+
/// <returns>The generated enum</returns>
29+
public static TEnum Except<TEnum>(this AnonymousValueFixture fixture, params TEnum[] except)
30+
where TEnum : struct, IComparable, IFormattable, IConvertible
31+
{
32+
var value = fixture.Fixture.Create<TEnum>();
33+
while (except.Contains(value))
34+
value = fixture.Fixture.Create<TEnum>();
35+
36+
return value;
37+
}
38+
}
39+
}

NTestDataBuilder/NTestDataBuilder.csproj

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -72,6 +72,7 @@
7272
<Compile Include="DataSources\Person\PersonNameSuffixSource.cs" />
7373
<Compile Include="DataSources\Person\PersonNameTitleSource.cs" />
7474
<Compile Include="DummyContext.cs" />
75+
<Compile Include="EquivalenceClasses\EnumEquivalenceClasses.cs" />
7576
<Compile Include="EquivalenceClasses\GeographyEquivalenceClassescs.cs" />
7677
<Compile Include="EquivalenceClasses\IntegerEquivalenceClasses.cs" />
7778
<Compile Include="EquivalenceClasses\PersonEquivalenceClasses.cs" />

0 commit comments

Comments
 (0)