diff --git a/src/TimeZoneConverter/TZConvert.cs b/src/TimeZoneConverter/TZConvert.cs index e5470f0..44bbea2 100644 --- a/src/TimeZoneConverter/TZConvert.cs +++ b/src/TimeZoneConverter/TZConvert.cs @@ -124,6 +124,12 @@ public static string IanaToWindows(string ianaTimeZoneName) /// true if successful, false otherwise. public static bool TryIanaToWindows(string ianaTimeZoneName, [MaybeNullWhen(false)] out string windowsTimeZoneId) { + if (string.IsNullOrWhiteSpace(ianaTimeZoneName)) + { + windowsTimeZoneId = null; + return false; + } + return IanaMap.TryGetValue(ianaTimeZoneName, out windowsTimeZoneId!); } @@ -337,6 +343,12 @@ public static TimeZoneInfo GetTimeZoneInfo(string windowsOrIanaTimeZoneId) public static bool TryGetTimeZoneInfo(string windowsOrIanaTimeZoneId, [MaybeNullWhen(false)] out TimeZoneInfo timeZoneInfo) { + if (string.IsNullOrWhiteSpace(windowsOrIanaTimeZoneId)) + { + timeZoneInfo = null; + return false; + } + if (string.Equals(windowsOrIanaTimeZoneId, "UTC", StringComparison.OrdinalIgnoreCase)) { timeZoneInfo = TimeZoneInfo.Utc; @@ -395,6 +407,11 @@ public static IList IanaToRails(string ianaTimeZoneName) /// true if successful, false otherwise. public static bool TryIanaToRails(string ianaTimeZoneName, out IList railsTimeZoneNames) { + if (string.IsNullOrWhiteSpace(ianaTimeZoneName)) + { + railsTimeZoneNames = Array.Empty(); + return false; + } // in the case of an Etc/GMT+/-n zone, use the Rails fixed-offset zone. For example, `Etc/GMT-6` -> `+06:00` or `Etc/GMT+3` -> `-03:00` if (ianaTimeZoneName.StartsWith("Etc/GMT", StringComparison.OrdinalIgnoreCase)) @@ -466,6 +483,12 @@ public static string RailsToIana(string railsTimeZoneName) /// true if successful, false otherwise. public static bool TryRailsToIana(string railsTimeZoneName, [MaybeNullWhen(false)] out string ianaTimeZoneName) { + if (string.IsNullOrWhiteSpace(railsTimeZoneName)) + { + ianaTimeZoneName = null; + return false; + } + return RailsMap.TryGetValue(railsTimeZoneName, out ianaTimeZoneName); } diff --git a/test/TimeZoneConverter.Tests/MiscTests.cs b/test/TimeZoneConverter.Tests/MiscTests.cs new file mode 100644 index 0000000..6ee5591 --- /dev/null +++ b/test/TimeZoneConverter.Tests/MiscTests.cs @@ -0,0 +1,73 @@ +using Xunit.Abstractions; + +namespace TimeZoneConverter.Tests; + +public class MiscTests() +{ +#pragma warning disable CS8625 + + [Fact] + public void No_Exception_From_TryGetTimeZoneInfo() + { + Assert.False(TZConvert.TryGetTimeZoneInfo(null, out var _)); + Assert.False(TZConvert.TryGetTimeZoneInfo("", out var _)); + Assert.False(TZConvert.TryGetTimeZoneInfo(" ", out var _)); + Assert.False(TZConvert.TryGetTimeZoneInfo("blah", out var _)); + } + + [Fact] + public void No_Exception_From_TryIanaToRails() + { + Assert.False(TZConvert.TryIanaToRails(null, out var _)); + Assert.False(TZConvert.TryIanaToRails("", out var _)); + Assert.False(TZConvert.TryIanaToRails(" ", out var _)); + Assert.False(TZConvert.TryIanaToRails("blah", out var _)); + } + + [Fact] + public void No_Exception_From_TryIanaToWindows() + { + Assert.False(TZConvert.TryIanaToWindows(null, out var _)); + Assert.False(TZConvert.TryIanaToWindows("", out var _)); + Assert.False(TZConvert.TryIanaToWindows(" ", out var _)); + Assert.False(TZConvert.TryIanaToWindows("blah", out var _)); + } + + [Fact] + public void No_Exception_From_TryRailsToIana() + { + Assert.False(TZConvert.TryRailsToIana(null, out var _)); + Assert.False(TZConvert.TryRailsToIana("", out var _)); + Assert.False(TZConvert.TryRailsToIana(" ", out var _)); + Assert.False(TZConvert.TryRailsToIana("blah", out var _)); + } + + [Fact] + public void No_Exception_From_TryRailsToWindows() + { + Assert.False(TZConvert.TryRailsToWindows(null, out var _)); + Assert.False(TZConvert.TryRailsToWindows("", out var _)); + Assert.False(TZConvert.TryRailsToWindows(" ", out var _)); + Assert.False(TZConvert.TryRailsToWindows("blah", out var _)); + } + + [Fact] + public void No_Exception_From_TryWindowsToIana() + { + Assert.False(TZConvert.TryWindowsToIana(null, out var _)); + Assert.False(TZConvert.TryWindowsToIana("", out var _)); + Assert.False(TZConvert.TryWindowsToIana(" ", out var _)); + Assert.False(TZConvert.TryWindowsToIana("blah", out var _)); + } + + [Fact] + public void No_Exception_From_TryWindowsToRails() + { + Assert.False(TZConvert.TryWindowsToRails(null, out var _)); + Assert.False(TZConvert.TryWindowsToRails("", out var _)); + Assert.False(TZConvert.TryWindowsToRails(" ", out var _)); + Assert.False(TZConvert.TryWindowsToRails("blah", out var _)); + } + +#pragma warning restore CS8625 +}