-
-
Notifications
You must be signed in to change notification settings - Fork 175
/
Copy pathSmartEnumComparerAttribute.cs
95 lines (79 loc) · 3.05 KB
/
SmartEnumComparerAttribute.cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
namespace Ardalis.SmartEnum.UnitTests
{
using FluentAssertions;
using System;
using Xunit;
public class SmartEnumComparerAttribute
{
public class VanillaStringEnum : SmartEnum<VanillaStringEnum, string>
{
protected VanillaStringEnum(string name, string value) : base(name, value) { }
public static VanillaStringEnum One = new VanillaStringEnum("One", "one");
public static VanillaStringEnum Two = new VanillaStringEnum("Two", "two");
}
[SmartEnumStringComparer(StringComparison.InvariantCultureIgnoreCase)]
public class CaseInsensitiveEnum : SmartEnum<CaseInsensitiveEnum, string>
{
protected CaseInsensitiveEnum(string name, string value) : base(name, value) { }
public static CaseInsensitiveEnum One = new CaseInsensitiveEnum("One", "one");
public static CaseInsensitiveEnum Two = new CaseInsensitiveEnum("Two", "two");
}
[SmartEnumStringComparer(StringComparison.InvariantCulture)]
public class CaseSensitiveEnum : SmartEnum<CaseSensitiveEnum, string>
{
protected CaseSensitiveEnum(string name, string value) : base(name, value) { }
public static CaseSensitiveEnum One = new CaseSensitiveEnum("One", "one");
public static CaseSensitiveEnum Two = new CaseSensitiveEnum("Two", "two");
}
[Fact]
public void VanillaStringEnum_FromValue_WhenStringDoesNotMatchCase_Throws()
{
//act
Assert.Throws<SmartEnumNotFoundException>(() =>
{
var actual = VanillaStringEnum.FromValue("ONE");
});
}
[Fact]
public void CaseInsensitiveEnum_FromValue_WhenStringDoesNotMatchCase_ReturnsItem()
{
//act
var actual = CaseInsensitiveEnum.FromValue("ONE");
//assert
actual.Should().Be(CaseInsensitiveEnum.One);
}
[Fact]
public void CaseSensitiveEnum_FromValue_WhenStringDoesNotMatchCase_Throws()
{
//act
Assert.Throws<SmartEnumNotFoundException>(() =>
{
var actual = CaseSensitiveEnum.FromValue("ONE");
});
}
[Fact]
public void VanillaStringEnum_FromValue_WhenStringMatchesCase_ReturnsItem()
{
//act
var actual = VanillaStringEnum.FromValue("one");
//assert
actual.Should().Be(VanillaStringEnum.One);
}
[Fact]
public void CaseInsensitiveEnum_FromValue_WhenStringMatchesCase_ReturnsItem()
{
//act
var actual = CaseInsensitiveEnum.FromValue("one");
//assert
actual.Should().Be(CaseInsensitiveEnum.One);
}
[Fact]
public void CaseSensitiveEnum_FromValue_WhenStringMatchesCase_ReturnsItem()
{
//act
var actual = CaseSensitiveEnum.FromValue("one");
//assert
actual.Should().Be(CaseSensitiveEnum.One);
}
}
}