diff --git a/strings-csharp/ConvertStringToBoolean/ConvertStringToBoolean/ConvertStringToBoolean.csproj b/strings-csharp/ConvertStringToBoolean/ConvertStringToBoolean/ConvertStringToBoolean.csproj index 2082704286..dfb40caafc 100644 --- a/strings-csharp/ConvertStringToBoolean/ConvertStringToBoolean/ConvertStringToBoolean.csproj +++ b/strings-csharp/ConvertStringToBoolean/ConvertStringToBoolean/ConvertStringToBoolean.csproj @@ -2,7 +2,9 @@ Exe - net5.0 + net10.0 + enable + enable diff --git a/strings-csharp/ConvertStringToBoolean/ConvertStringToBoolean/Program.cs b/strings-csharp/ConvertStringToBoolean/ConvertStringToBoolean/Program.cs index 9033525a46..33140b96ec 100644 --- a/strings-csharp/ConvertStringToBoolean/ConvertStringToBoolean/Program.cs +++ b/strings-csharp/ConvertStringToBoolean/ConvertStringToBoolean/Program.cs @@ -1,80 +1,7 @@ -using System; -using System.Linq; +using ConvertStringToBoolean; -namespace ConvertStringToBoolean -{ - public class Program - { - public static void Main() - { - ToBooleanMethod(); +StringToBoolean.ToBooleanMethod(); - ParseMethod(); +StringToBoolean.ParseMethod(); - TryParseMethod(); - } - - public static void ToBooleanMethod() - { - string[] validString = { null, "true", "True", " true ", "false", "False", " false" }; - - string[] invalidString = { "", string.Empty, "t", " yes ", "-1", "0", "1" }; - - var values = validString.Concat(invalidString); - - foreach (var value in values) - { - try - { - Console.WriteLine($"Converted '{value}' to {Convert.ToBoolean(value)}.\n"); - } - catch (FormatException) - { - Console.WriteLine($"Unable to convert '{value}' to a Boolean.\n"); - } - } - } - - public static void ParseMethod() - { - string[] validString = { "true", "True", " true ", "false", "False", " false" }; - - string[] invalidString = {null, "", string.Empty, "t", " yes ", "-1", "0", "1" }; - - var values = validString.Concat(invalidString); - - foreach (var value in values) - { - try - { - Console.WriteLine($"Converted '{value}' to {bool.Parse(value)}.\n"); - } - catch (Exception) - { - Console.WriteLine($"Unable to convert '{value}' to a Boolean.\n"); - } - } - } - - public static void TryParseMethod() - { - string[] validString = { "true", "True", " true ", "false", "False", " false" }; - - string[] invalidString = { null, "", string.Empty, "t", " yes ", "-1", "0", "1" }; - - var values = validString.Concat(invalidString); - - foreach (var value in values) - { - if (bool.TryParse(value, out bool booleanValue)) - { - Console.WriteLine($"Conversion successful: '{value}' to {booleanValue}.\n"); - } - else - { - Console.WriteLine($"Conversion Failed: '{value}' to {booleanValue}.\n"); - } - } - } - } -} +StringToBoolean.TryParseMethod(); diff --git a/strings-csharp/ConvertStringToBoolean/ConvertStringToBoolean/StringToBoolean.cs b/strings-csharp/ConvertStringToBoolean/ConvertStringToBoolean/StringToBoolean.cs new file mode 100644 index 0000000000..a52abf3f6d --- /dev/null +++ b/strings-csharp/ConvertStringToBoolean/ConvertStringToBoolean/StringToBoolean.cs @@ -0,0 +1,78 @@ +namespace ConvertStringToBoolean; + +public static class StringToBoolean +{ + public static void ToBooleanMethod() + { + string?[] validString = { null, "true", "True", " true ", "false", "False", " false" }; + + string[] invalidString = { "", string.Empty, "t", " yes ", "-1", "0", "1" }; + + var values = validString.Concat(invalidString); + + foreach (var value in values) + { + try + { + Console.WriteLine($"Converted '{value}' to {Convert.ToBoolean(value)}.\n"); + } + catch (FormatException) + { + Console.WriteLine($"Unable to convert '{value}' to a Boolean.\n"); + } + } + } + + public static void ParseMethod() + { + string[] validString = { "true", "True", " true ", "false", "False", " false" }; + + string?[] invalidString = { null, "", string.Empty, "t", " yes ", "-1", "0", "1" }; + + var values = validString.Concat(invalidString); + + foreach (var value in values) + { + try + { + Console.WriteLine($"Converted '{value}' to {bool.Parse(value!)}.\n"); + } + catch (ArgumentNullException) + { + Console.WriteLine("Unable to convert null to a Boolean.\n"); + } + catch (FormatException) + { + Console.WriteLine($"Unable to convert '{value}' to a Boolean.\n"); + } + } + } + + public static void TryParseMethod() + { + string[] validString = { "true", "True", " true ", "false", "False", " false" }; + + string?[] invalidString = { null, "", string.Empty, "t", " yes ", "-1", "0", "1" }; + + var values = validString.Concat(invalidString); + + foreach (var value in values) + { + if (bool.TryParse(value, out bool booleanValue)) + { + Console.WriteLine($"Conversion successful: '{value}' to {booleanValue}.\n"); + } + else + { + Console.WriteLine($"Conversion Failed: '{value}' to {booleanValue}.\n"); + } + } + } + + public static bool? ToBoolOrNull(string? value) => value?.Trim().ToLowerInvariant() switch + { + "true" or "yes" or "y" or "1" or "on" => true, + "false" or "no" or "n" or "0" or "off" => false, + _ => null + }; +} diff --git a/strings-csharp/ConvertStringToBoolean/ConvertStringToBooleanTests/ConvertStringToBooleanTests.cs b/strings-csharp/ConvertStringToBoolean/ConvertStringToBooleanTests/ConvertStringToBooleanTests.cs index 07bf8e5b43..574760d559 100644 --- a/strings-csharp/ConvertStringToBoolean/ConvertStringToBooleanTests/ConvertStringToBooleanTests.cs +++ b/strings-csharp/ConvertStringToBoolean/ConvertStringToBooleanTests/ConvertStringToBooleanTests.cs @@ -1,3 +1,4 @@ +using ConvertStringToBoolean; using Microsoft.VisualStudio.TestTools.UnitTesting; using System; @@ -13,6 +14,14 @@ public void GivenConvertToBoolean_WhenValid_ThenConversionSuccess() Assert.AreEqual(true, Convert.ToBoolean("True")); + Assert.AreEqual(true, Convert.ToBoolean("TRUE")); + + Assert.AreEqual(true, Convert.ToBoolean(" true ")); + + Assert.AreEqual(false, Convert.ToBoolean("false")); + + Assert.AreEqual(false, Convert.ToBoolean("False")); + Assert.AreEqual(false, Convert.ToBoolean(" false ")); Assert.AreEqual(false, Convert.ToBoolean("False ")); @@ -23,19 +32,23 @@ public void GivenConvertToBoolean_WhenValid_ThenConversionSuccess() [TestMethod] public void GivenConvertToBoolean_WhenInvalid_ThenConversionThrowsException() { - Assert.ThrowsException(() => Convert.ToBoolean("")); + Assert.ThrowsExactly(() => Convert.ToBoolean("")); + + Assert.ThrowsExactly(() => Convert.ToBoolean(string.Empty)); - Assert.ThrowsException(() => Convert.ToBoolean(string.Empty)); + Assert.ThrowsExactly(() => Convert.ToBoolean("t")); - Assert.ThrowsException(() => Convert.ToBoolean("t")); + Assert.ThrowsExactly(() => Convert.ToBoolean("y")); - Assert.ThrowsException(() => Convert.ToBoolean(" yes ")); + Assert.ThrowsExactly(() => Convert.ToBoolean("yes")); - Assert.ThrowsException(() => Convert.ToBoolean("-1")); + Assert.ThrowsExactly(() => Convert.ToBoolean(" yes ")); - Assert.ThrowsException(() => Convert.ToBoolean("0")); + Assert.ThrowsExactly(() => Convert.ToBoolean("-1")); - Assert.ThrowsException(() => Convert.ToBoolean("1")); + Assert.ThrowsExactly(() => Convert.ToBoolean("0")); + + Assert.ThrowsExactly(() => Convert.ToBoolean("1")); } [TestMethod] @@ -45,6 +58,14 @@ public void GivenboolParse_WhenValid_ThenConversionSuccess() Assert.AreEqual(true, bool.Parse("True")); + Assert.AreEqual(true, bool.Parse("TRUE")); + + Assert.AreEqual(true, bool.Parse(" true ")); + + Assert.AreEqual(false, bool.Parse("false")); + + Assert.AreEqual(false, bool.Parse("False")); + Assert.AreEqual(false, bool.Parse(" false ")); Assert.AreEqual(false, bool.Parse("False ")); @@ -53,21 +74,25 @@ public void GivenboolParse_WhenValid_ThenConversionSuccess() [TestMethod] public void GivenboolParse_WhenInvalid_ThenConversionThrowsException() { - Assert.ThrowsException(() => bool.Parse(null)); + Assert.ThrowsExactly(() => bool.Parse(null)); + + Assert.ThrowsExactly(() => bool.Parse("")); + + Assert.ThrowsExactly(() => bool.Parse(string.Empty)); - Assert.ThrowsException(() => bool.Parse("")); + Assert.ThrowsExactly(() => bool.Parse("t")); - Assert.ThrowsException(() => bool.Parse(string.Empty)); + Assert.ThrowsExactly(() => bool.Parse("y")); - Assert.ThrowsException(() => bool.Parse("t")); + Assert.ThrowsExactly(() => bool.Parse("yes")); - Assert.ThrowsException(() => bool.Parse(" yes ")); + Assert.ThrowsExactly(() => bool.Parse(" yes ")); - Assert.ThrowsException(() => bool.Parse("-1")); + Assert.ThrowsExactly(() => bool.Parse("-1")); - Assert.ThrowsException(() => bool.Parse("0")); + Assert.ThrowsExactly(() => bool.Parse("0")); - Assert.ThrowsException(() => bool.Parse("1")); + Assert.ThrowsExactly(() => bool.Parse("1")); } [TestMethod] @@ -77,17 +102,25 @@ public void GivenboolTryParse_WhenValid_ThenConversionSuccess() Assert.AreEqual(true, result1); - Assert.IsTrue(bool.TryParse("True", out bool result2)); + Assert.IsTrue(bool.TryParse("TRUE", out bool result2)); Assert.AreEqual(true, result2); - Assert.IsTrue(bool.TryParse(" false ", out bool result3)); + Assert.IsTrue(bool.TryParse(" true ", out bool result3)); - Assert.AreEqual(false, result3); + Assert.AreEqual(true, result3); - Assert.IsTrue(bool.TryParse(" False ", out bool result4)); + Assert.IsTrue(bool.TryParse("false", out bool result4)); Assert.AreEqual(false, result4); + + Assert.IsTrue(bool.TryParse("False", out bool result5)); + + Assert.AreEqual(false, result5); + + Assert.IsTrue(bool.TryParse(" false ", out bool result6)); + + Assert.AreEqual(false, result6); } [TestMethod] @@ -105,21 +138,55 @@ public void GivenboolTryParse_WhenInvalid_ThenNoExceptionReturnFalse() Assert.IsFalse(result3); - Assert.IsFalse(bool.TryParse(" yes ", out bool result4)); + Assert.IsFalse(bool.TryParse("y", out bool result4)); Assert.IsFalse(result4); - Assert.IsFalse(bool.TryParse("-1", out bool result5)); + Assert.IsFalse(bool.TryParse("yes", out bool result5)); Assert.IsFalse(result5); - Assert.IsFalse(bool.TryParse("0", out bool result6)); + Assert.IsFalse(bool.TryParse("-1", out bool result6)); Assert.IsFalse(result6); - Assert.IsFalse(bool.TryParse("1", out bool result7)); + Assert.IsFalse(bool.TryParse("0", out bool result7)); Assert.IsFalse(result7); + + Assert.IsFalse(bool.TryParse("1", out bool result8)); + + Assert.IsFalse(result8); + } + + [TestMethod] + public void GivenToBoolOrNull_WhenRecognisedTrueText_ThenReturnsTrue() + { + Assert.AreEqual(true, StringToBoolean.ToBoolOrNull("1")); + + Assert.AreEqual(true, StringToBoolean.ToBoolOrNull("yes")); + + Assert.AreEqual(true, StringToBoolean.ToBoolOrNull("Y")); + + Assert.AreEqual(true, StringToBoolean.ToBoolOrNull(" ON ")); + } + + [TestMethod] + public void GivenToBoolOrNull_WhenRecognisedFalseText_ThenReturnsFalse() + { + Assert.AreEqual(false, StringToBoolean.ToBoolOrNull("0")); + + Assert.AreEqual(false, StringToBoolean.ToBoolOrNull("no")); + + Assert.AreEqual(false, StringToBoolean.ToBoolOrNull("off")); + } + + [TestMethod] + public void GivenToBoolOrNull_WhenUnrecognisedText_ThenReturnsNull() + { + Assert.IsNull(StringToBoolean.ToBoolOrNull(null)); + + Assert.IsNull(StringToBoolean.ToBoolOrNull("maybe")); } } } diff --git a/strings-csharp/ConvertStringToBoolean/ConvertStringToBooleanTests/ConvertStringToBooleanTests.csproj b/strings-csharp/ConvertStringToBoolean/ConvertStringToBooleanTests/ConvertStringToBooleanTests.csproj index 5c45455c06..bdd3d5ba9f 100644 --- a/strings-csharp/ConvertStringToBoolean/ConvertStringToBooleanTests/ConvertStringToBooleanTests.csproj +++ b/strings-csharp/ConvertStringToBoolean/ConvertStringToBooleanTests/ConvertStringToBooleanTests.csproj @@ -1,16 +1,20 @@ - net5.0 + net10.0 false - - - - + + + + + + + +