11using Microsoft . VisualStudio . TestTools . UnitTesting ;
22using System ;
33
4- namespace ConvertStringAndIntToEnumTests
4+ namespace ConvertStringAndIntToEnumTests ;
5+
6+ [ TestClass ]
7+ public class ConvertStringAndIntToEnumTests
58{
6- [ TestClass ]
7- public class ConvertStringAndIntToEnumTests
9+ [ TestMethod ]
10+ public void GivenValidEnumAsString_WhenConvertingToEnum_ThenCorrectlyConverted ( )
811 {
9- [ TestMethod ]
10- public void GivenValidEnumAsString_WhenConvertingToEnum_ThenCorrectlyConverted ( )
11- {
12- var inputString = "Sunday" ;
13-
14- DayOfWeek dayOfWeek = ( DayOfWeek ) Enum . Parse ( typeof ( DayOfWeek ) , inputString ) ;
15-
16- Assert . AreEqual ( DayOfWeek . Sunday , dayOfWeek ) ;
17- }
12+ var inputString = "Sunday" ;
13+ var mixedCaseInputString = "SaTurDaY" ;
1814
19- [ TestMethod ]
20- public void GivenInvalidEnumAsString_WhenConvertingToEnum_ThenFails ( )
21- {
22- var inputString = "Today" ;
23-
24- var isEnumParsed = Enum . TryParse ( inputString , true , out DayOfWeek dayOfWeek ) ;
25-
26- Assert . IsFalse ( isEnumParsed ) ;
27- }
15+ var weekDay = Enum . Parse < WeekDay > ( inputString ) ;
16+ var caseInsensitiveWeekDay = Enum . Parse < WeekDay > ( mixedCaseInputString , true ) ;
2817
29- [ TestMethod ]
30- public void GivenValidEnumAsStringInteger_WhenConvertingToEnum_ThenCorrectlyConverted ( )
31- {
32- var inputString = "0" ;
33-
34- var isEnumParsed = Enum . TryParse ( inputString , true , out DayOfWeek dayOfWeek ) ;
35-
36- Assert . IsTrue ( isEnumParsed ) ;
37- Assert . AreEqual ( DayOfWeek . Monday , dayOfWeek ) ;
38- }
18+ Assert . AreEqual ( WeekDay . Sunday , weekDay ) ;
19+ Assert . AreEqual ( WeekDay . Saturday , caseInsensitiveWeekDay ) ;
20+ }
3921
40- [ TestMethod ]
41- public void GivenValidEnumAsInteger_WhenConvertingToEnum_ThenCorrectlyConverted ( )
42- {
43- var inputInt = 2 ;
44-
45- var isEnumParsed = Enum . IsDefined ( typeof ( DayOfWeek ) , inputInt ) ;
46-
47- Assert . IsTrue ( isEnumParsed ) ;
48- DayOfWeek dayOfWeek = ( DayOfWeek ) inputInt ;
49- Assert . AreEqual ( DayOfWeek . Wednesday , dayOfWeek ) ;
50- }
22+ [ TestMethod ]
23+ public void GivenInvalidEnumAsString_WhenConvertingToEnum_ThenFails ( )
24+ {
25+ var inputString = "Today" ;
5126
52- [ TestMethod ]
53- public void GivenInvalidEnumAsInteger_WhenConvertingToEnum_ThenFails ( )
54- {
55- var inputInt = 9 ;
56-
57- var isEnumParsed = Enum . IsDefined ( typeof ( DayOfWeek ) , inputInt ) ;
58-
59- Assert . IsFalse ( isEnumParsed ) ;
60- }
27+ var isEnumParsed = Enum . TryParse ( inputString , true , out WeekDay weekDay ) ;
28+
29+ Assert . IsFalse ( isEnumParsed ) ;
30+ }
31+
32+ [ TestMethod ]
33+ public void GivenValidEnumAsStringInteger_WhenConvertingToEnum_ThenCorrectlyConverted ( )
34+ {
35+ var inputString = "0" ;
36+
37+ var isEnumParsed = Enum . TryParse ( inputString , true , out WeekDay weekDay ) ;
38+
39+ Assert . IsTrue ( isEnumParsed ) ;
40+ Assert . AreEqual ( WeekDay . Monday , weekDay ) ;
41+ }
42+
43+ [ TestMethod ]
44+ public void GivenNumericStringThatIsNotAMember_WhenConvertingToEnum_ThenParsesIntoAnUndefinedValue ( )
45+ {
46+ var inputString = "42" ;
47+
48+ var isEnumParsed = Enum . TryParse < WeekDay > ( inputString , out var weekDay ) ;
49+
50+ Assert . IsTrue ( isEnumParsed ) ;
51+ Assert . IsFalse ( Enum . IsDefined ( weekDay ) ) ;
52+ Assert . AreEqual ( "42" , weekDay . ToString ( ) ) ;
53+ }
54+
55+ [ TestMethod ]
56+ public void GivenValidEnumAsInteger_WhenConvertingToEnum_ThenCorrectlyConverted ( )
57+ {
58+ var inputInt = 2 ;
59+
60+ var isEnumParsed = Enum . IsDefined ( ( WeekDay ) inputInt ) ;
61+
62+ Assert . IsTrue ( isEnumParsed ) ;
63+ WeekDay weekDay = ( WeekDay ) inputInt ;
64+ Assert . AreEqual ( WeekDay . Wednesday , weekDay ) ;
65+ }
66+
67+ [ TestMethod ]
68+ public void GivenInvalidEnumAsInteger_WhenConvertingToEnum_ThenFails ( )
69+ {
70+ var inputInt = 9 ;
71+
72+ var isEnumParsed = Enum . IsDefined ( ( WeekDay ) inputInt ) ;
73+
74+ Assert . IsFalse ( isEnumParsed ) ;
75+ }
76+
77+ [ TestMethod ]
78+ public void GivenValidFlagsEnumAsInteger_WhenConvertingToEnum_ThenCorrectlyConverted ( )
79+ {
80+ var inputInt = 3 ;
81+ var parsedEnum = ( UserType ) inputInt ;
82+
83+ var isEnumParsed = Enum . IsDefined ( parsedEnum ) || parsedEnum . ToString ( ) . Contains ( "," ) ;
84+
85+ Assert . IsTrue ( isEnumParsed ) ;
86+ Assert . AreEqual ( UserType . Customer | UserType . Driver , parsedEnum ) ;
87+ }
88+
89+ [ TestMethod ]
90+ public void GivenInvalidFlagsEnumAsInteger_WhenConvertingToEnum_ThenFails ( )
91+ {
92+ var inputInt = 8 ;
93+ var parsedEnum = ( UserType ) inputInt ;
94+
95+ var isEnumParsed = Enum . IsDefined ( parsedEnum ) || parsedEnum . ToString ( ) . Contains ( "," ) ;
6196
62- [ TestMethod ]
63- public void GivenValidFlagsEnumAsInteger_WhenConvertingToEnum_ThenCorrectlyConverted ( )
97+ Assert . IsFalse ( isEnumParsed ) ;
98+ }
99+
100+ [ TestMethod ]
101+ public void GivenFlagsEnumValues_WhenCheckingAgainstTheDeclaredFlagsMask_ThenOnlyDeclaredCombinationsAreValid ( )
102+ {
103+ var allFlags = ( UserType ) 0 ;
104+
105+ foreach ( var flag in Enum . GetValues < UserType > ( ) )
64106 {
65- var inputInt = 3 ;
66- var parsedEnum = ( UserType ) inputInt ;
67-
68- var isEnumParsed = Enum . IsDefined ( typeof ( UserType ) , inputInt ) || parsedEnum . ToString ( ) . Contains ( "," ) ;
69-
70- Assert . IsTrue ( isEnumParsed ) ;
71- Assert . AreEqual ( UserType . Customer | UserType . Driver , parsedEnum ) ;
107+ allFlags |= flag ;
72108 }
73109
74- [ TestMethod ]
75- public void GivenInvalidFlagsEnumAsInteger_WhenConvertingToEnum_ThenFails ( )
110+ Assert . AreEqual ( ( UserType ) 7 , allFlags ) ;
111+
112+ for ( var inputInt = 0 ; inputInt <= 7 ; inputInt ++ )
76113 {
77- var inputInt = 8 ;
78114 var parsedEnum = ( UserType ) inputInt ;
79-
80- var isEnumParsed = Enum . IsDefined ( typeof ( UserType ) , inputInt ) || parsedEnum . ToString ( ) . Contains ( "," ) ;
81-
82- Assert . IsFalse ( isEnumParsed ) ;
115+
116+ Assert . IsTrue ( ( parsedEnum & ~ allFlags ) == 0 , $ "{ inputInt } should be a valid combination") ;
83117 }
118+
119+ var invalidEnum = ( UserType ) 8 ;
120+
121+ Assert . IsFalse ( ( invalidEnum & ~ allFlags ) == 0 ) ;
84122 }
85- }
123+ }
0 commit comments