Skip to content

Commit ac4de28

Browse files
ConvertStringAndIntToEnum: retarget net10.0, MSTest 4.3.3, rename DayOfWeek to WeekDay, generic Enum overloads (#2184)
Rename the sample enum off DayOfWeek so it no longer collides with System.DayOfWeek, which declares the opposite member ordering. Lift Enum.Parse and Enum.IsDefined to the generic overloads, move the three files to file-scoped namespaces, and add two tests: a numeric string that is not a member parsed through Enum.TryParse, and a mask check over the declared UserType flags for the values 0 through 8.
1 parent 7f6610a commit ac4de28

5 files changed

Lines changed: 132 additions & 96 deletions

File tree

Lines changed: 106 additions & 68 deletions
Original file line numberDiff line numberDiff line change
@@ -1,85 +1,123 @@
11
using Microsoft.VisualStudio.TestTools.UnitTesting;
22
using 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+
}
Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,17 @@
11
<Project Sdk="Microsoft.NET.Sdk">
22

33
<PropertyGroup>
4-
<TargetFramework>net7.0</TargetFramework>
4+
<TargetFramework>net10.0</TargetFramework>
55
<Nullable>enable</Nullable>
66

77
<IsPackable>false</IsPackable>
88
</PropertyGroup>
99

1010
<ItemGroup>
11-
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="16.11.0" />
12-
<PackageReference Include="MSTest.TestAdapter" Version="2.2.7" />
13-
<PackageReference Include="MSTest.TestFramework" Version="2.2.7" />
14-
<PackageReference Include="coverlet.collector" Version="3.1.0" />
11+
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="18.9.0" />
12+
<PackageReference Include="MSTest.TestAdapter" Version="4.3.3" />
13+
<PackageReference Include="MSTest.TestFramework" Version="4.3.3" />
14+
<PackageReference Include="coverlet.collector" Version="10.0.1" />
1515
</ItemGroup>
1616

1717
</Project>

‎csharp-basic-topics/ConvertStringAndIntToEnum/ConvertStringAndIntToEnumTests/DayOfWeek.cs‎

Lines changed: 0 additions & 13 deletions
This file was deleted.
Lines changed: 9 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,12 @@
1-
using System;
1+
using System;
22

3-
namespace ConvertStringAndIntToEnumTests
3+
namespace ConvertStringAndIntToEnumTests;
4+
5+
[Flags]
6+
public enum UserType
47
{
5-
[Flags]
6-
public enum UserType
7-
{
8-
None = 0,
9-
Customer = 1,
10-
Driver = 2,
11-
Admin = 4,
12-
}
8+
None = 0,
9+
Customer = 1,
10+
Driver = 2,
11+
Admin = 4,
1312
}
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
namespace ConvertStringAndIntToEnumTests;
2+
3+
public enum WeekDay
4+
{
5+
Monday,
6+
Tuesday,
7+
Wednesday,
8+
Thursday,
9+
Friday,
10+
Saturday,
11+
Sunday
12+
}

0 commit comments

Comments
 (0)