From b13bba3dceed0b0a203488967da23963e5851a1e Mon Sep 17 00:00:00 2001 From: Vladimir Pecanac Date: Mon, 7 Sep 2026 13:42:30 +0200 Subject: [PATCH] ConvertStringAndIntToEnum: retarget net10.0, MSTest 4.3.3, rename DayOfWeek to WeekDay, generic Enum overloads 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. --- .../ConvertStringAndIntToEnumTests.cs | 174 +++++++++++------- .../ConvertStringAndIntToEnumTests.csproj | 10 +- .../DayOfWeek.cs | 13 -- .../UserType.cs | 19 +- .../ConvertStringAndIntToEnumTests/WeekDay.cs | 12 ++ 5 files changed, 132 insertions(+), 96 deletions(-) delete mode 100644 csharp-basic-topics/ConvertStringAndIntToEnum/ConvertStringAndIntToEnumTests/DayOfWeek.cs create mode 100644 csharp-basic-topics/ConvertStringAndIntToEnum/ConvertStringAndIntToEnumTests/WeekDay.cs diff --git a/csharp-basic-topics/ConvertStringAndIntToEnum/ConvertStringAndIntToEnumTests/ConvertStringAndIntToEnumTests.cs b/csharp-basic-topics/ConvertStringAndIntToEnum/ConvertStringAndIntToEnumTests/ConvertStringAndIntToEnumTests.cs index 991baf7a20..00b1b62561 100644 --- a/csharp-basic-topics/ConvertStringAndIntToEnum/ConvertStringAndIntToEnumTests/ConvertStringAndIntToEnumTests.cs +++ b/csharp-basic-topics/ConvertStringAndIntToEnum/ConvertStringAndIntToEnumTests/ConvertStringAndIntToEnumTests.cs @@ -1,85 +1,123 @@ using Microsoft.VisualStudio.TestTools.UnitTesting; using System; -namespace ConvertStringAndIntToEnumTests +namespace ConvertStringAndIntToEnumTests; + +[TestClass] +public class ConvertStringAndIntToEnumTests { - [TestClass] - public class ConvertStringAndIntToEnumTests + [TestMethod] + public void GivenValidEnumAsString_WhenConvertingToEnum_ThenCorrectlyConverted() { - [TestMethod] - public void GivenValidEnumAsString_WhenConvertingToEnum_ThenCorrectlyConverted() - { - var inputString = "Sunday"; - - DayOfWeek dayOfWeek = (DayOfWeek)Enum.Parse(typeof(DayOfWeek), inputString); - - Assert.AreEqual(DayOfWeek.Sunday, dayOfWeek); - } + var inputString = "Sunday"; + var mixedCaseInputString = "SaTurDaY"; - [TestMethod] - public void GivenInvalidEnumAsString_WhenConvertingToEnum_ThenFails() - { - var inputString = "Today"; - - var isEnumParsed = Enum.TryParse(inputString, true, out DayOfWeek dayOfWeek); - - Assert.IsFalse(isEnumParsed); - } + var weekDay = Enum.Parse(inputString); + var caseInsensitiveWeekDay = Enum.Parse(mixedCaseInputString, true); - [TestMethod] - public void GivenValidEnumAsStringInteger_WhenConvertingToEnum_ThenCorrectlyConverted() - { - var inputString = "0"; - - var isEnumParsed = Enum.TryParse(inputString, true, out DayOfWeek dayOfWeek); - - Assert.IsTrue(isEnumParsed); - Assert.AreEqual(DayOfWeek.Monday, dayOfWeek); - } + Assert.AreEqual(WeekDay.Sunday, weekDay); + Assert.AreEqual(WeekDay.Saturday, caseInsensitiveWeekDay); + } - [TestMethod] - public void GivenValidEnumAsInteger_WhenConvertingToEnum_ThenCorrectlyConverted() - { - var inputInt = 2; - - var isEnumParsed = Enum.IsDefined(typeof(DayOfWeek), inputInt); - - Assert.IsTrue(isEnumParsed); - DayOfWeek dayOfWeek = (DayOfWeek)inputInt; - Assert.AreEqual(DayOfWeek.Wednesday, dayOfWeek); - } + [TestMethod] + public void GivenInvalidEnumAsString_WhenConvertingToEnum_ThenFails() + { + var inputString = "Today"; - [TestMethod] - public void GivenInvalidEnumAsInteger_WhenConvertingToEnum_ThenFails() - { - var inputInt = 9; - - var isEnumParsed = Enum.IsDefined(typeof(DayOfWeek), inputInt); - - Assert.IsFalse(isEnumParsed); - } + var isEnumParsed = Enum.TryParse(inputString, true, out WeekDay weekDay); + + Assert.IsFalse(isEnumParsed); + } + + [TestMethod] + public void GivenValidEnumAsStringInteger_WhenConvertingToEnum_ThenCorrectlyConverted() + { + var inputString = "0"; + + var isEnumParsed = Enum.TryParse(inputString, true, out WeekDay weekDay); + + Assert.IsTrue(isEnumParsed); + Assert.AreEqual(WeekDay.Monday, weekDay); + } + + [TestMethod] + public void GivenNumericStringThatIsNotAMember_WhenConvertingToEnum_ThenParsesIntoAnUndefinedValue() + { + var inputString = "42"; + + var isEnumParsed = Enum.TryParse(inputString, out var weekDay); + + Assert.IsTrue(isEnumParsed); + Assert.IsFalse(Enum.IsDefined(weekDay)); + Assert.AreEqual("42", weekDay.ToString()); + } + + [TestMethod] + public void GivenValidEnumAsInteger_WhenConvertingToEnum_ThenCorrectlyConverted() + { + var inputInt = 2; + + var isEnumParsed = Enum.IsDefined((WeekDay)inputInt); + + Assert.IsTrue(isEnumParsed); + WeekDay weekDay = (WeekDay)inputInt; + Assert.AreEqual(WeekDay.Wednesday, weekDay); + } + + [TestMethod] + public void GivenInvalidEnumAsInteger_WhenConvertingToEnum_ThenFails() + { + var inputInt = 9; + + var isEnumParsed = Enum.IsDefined((WeekDay)inputInt); + + Assert.IsFalse(isEnumParsed); + } + + [TestMethod] + public void GivenValidFlagsEnumAsInteger_WhenConvertingToEnum_ThenCorrectlyConverted() + { + var inputInt = 3; + var parsedEnum = (UserType)inputInt; + + var isEnumParsed = Enum.IsDefined(parsedEnum) || parsedEnum.ToString().Contains(","); + + Assert.IsTrue(isEnumParsed); + Assert.AreEqual(UserType.Customer | UserType.Driver, parsedEnum); + } + + [TestMethod] + public void GivenInvalidFlagsEnumAsInteger_WhenConvertingToEnum_ThenFails() + { + var inputInt = 8; + var parsedEnum = (UserType)inputInt; + + var isEnumParsed = Enum.IsDefined(parsedEnum) || parsedEnum.ToString().Contains(","); - [TestMethod] - public void GivenValidFlagsEnumAsInteger_WhenConvertingToEnum_ThenCorrectlyConverted() + Assert.IsFalse(isEnumParsed); + } + + [TestMethod] + public void GivenFlagsEnumValues_WhenCheckingAgainstTheDeclaredFlagsMask_ThenOnlyDeclaredCombinationsAreValid() + { + var allFlags = (UserType)0; + + foreach (var flag in Enum.GetValues()) { - var inputInt = 3; - var parsedEnum = (UserType)inputInt; - - var isEnumParsed = Enum.IsDefined(typeof(UserType), inputInt) || parsedEnum.ToString().Contains(","); - - Assert.IsTrue(isEnumParsed); - Assert.AreEqual(UserType.Customer| UserType.Driver, parsedEnum); + allFlags |= flag; } - [TestMethod] - public void GivenInvalidFlagsEnumAsInteger_WhenConvertingToEnum_ThenFails() + Assert.AreEqual((UserType)7, allFlags); + + for (var inputInt = 0; inputInt <= 7; inputInt++) { - var inputInt = 8; var parsedEnum = (UserType)inputInt; - - var isEnumParsed = Enum.IsDefined(typeof(UserType), inputInt) || parsedEnum.ToString().Contains(","); - - Assert.IsFalse(isEnumParsed); + + Assert.IsTrue((parsedEnum & ~allFlags) == 0, $"{inputInt} should be a valid combination"); } + + var invalidEnum = (UserType)8; + + Assert.IsFalse((invalidEnum & ~allFlags) == 0); } -} \ No newline at end of file +} diff --git a/csharp-basic-topics/ConvertStringAndIntToEnum/ConvertStringAndIntToEnumTests/ConvertStringAndIntToEnumTests.csproj b/csharp-basic-topics/ConvertStringAndIntToEnum/ConvertStringAndIntToEnumTests/ConvertStringAndIntToEnumTests.csproj index 38a6dd3331..7af97066cb 100644 --- a/csharp-basic-topics/ConvertStringAndIntToEnum/ConvertStringAndIntToEnumTests/ConvertStringAndIntToEnumTests.csproj +++ b/csharp-basic-topics/ConvertStringAndIntToEnum/ConvertStringAndIntToEnumTests/ConvertStringAndIntToEnumTests.csproj @@ -1,17 +1,17 @@ - net7.0 + net10.0 enable false - - - - + + + + diff --git a/csharp-basic-topics/ConvertStringAndIntToEnum/ConvertStringAndIntToEnumTests/DayOfWeek.cs b/csharp-basic-topics/ConvertStringAndIntToEnum/ConvertStringAndIntToEnumTests/DayOfWeek.cs deleted file mode 100644 index 84d3a694f1..0000000000 --- a/csharp-basic-topics/ConvertStringAndIntToEnum/ConvertStringAndIntToEnumTests/DayOfWeek.cs +++ /dev/null @@ -1,13 +0,0 @@ -namespace ConvertStringAndIntToEnumTests -{ - public enum DayOfWeek - { - Monday, - Tuesday, - Wednesday, - Thursday, - Friday, - Saturday, - Sunday - } -} diff --git a/csharp-basic-topics/ConvertStringAndIntToEnum/ConvertStringAndIntToEnumTests/UserType.cs b/csharp-basic-topics/ConvertStringAndIntToEnum/ConvertStringAndIntToEnumTests/UserType.cs index aeca94ab11..7746952bc7 100644 --- a/csharp-basic-topics/ConvertStringAndIntToEnum/ConvertStringAndIntToEnumTests/UserType.cs +++ b/csharp-basic-topics/ConvertStringAndIntToEnum/ConvertStringAndIntToEnumTests/UserType.cs @@ -1,13 +1,12 @@ -using System; +using System; -namespace ConvertStringAndIntToEnumTests +namespace ConvertStringAndIntToEnumTests; + +[Flags] +public enum UserType { - [Flags] - public enum UserType - { - None = 0, - Customer = 1, - Driver = 2, - Admin = 4, - } + None = 0, + Customer = 1, + Driver = 2, + Admin = 4, } diff --git a/csharp-basic-topics/ConvertStringAndIntToEnum/ConvertStringAndIntToEnumTests/WeekDay.cs b/csharp-basic-topics/ConvertStringAndIntToEnum/ConvertStringAndIntToEnumTests/WeekDay.cs new file mode 100644 index 0000000000..59efcec735 --- /dev/null +++ b/csharp-basic-topics/ConvertStringAndIntToEnum/ConvertStringAndIntToEnumTests/WeekDay.cs @@ -0,0 +1,12 @@ +namespace ConvertStringAndIntToEnumTests; + +public enum WeekDay +{ + Monday, + Tuesday, + Wednesday, + Thursday, + Friday, + Saturday, + Sunday +}