diff --git a/test/Spring/Spring.Core.Tests/Globalization/CultureInfoUtils.cs b/test/Spring/Spring.Core.Tests/Globalization/CultureInfoUtils.cs index 181debc8..3bb3fb8c 100644 --- a/test/Spring/Spring.Core.Tests/Globalization/CultureInfoUtils.cs +++ b/test/Spring/Spring.Core.Tests/Globalization/CultureInfoUtils.cs @@ -20,6 +20,7 @@ using System; using System.Globalization; +using Microsoft.Win32; namespace Spring.Globalization { @@ -43,12 +44,21 @@ namespace Spring.Globalization { foreach (CultureInfo ci in CultureInfo.GetCultures(CultureTypes.AllCultures)) { + //address changes in 2006 (see blog posts above) if (ci.Name.Equals("sr-Latn-CS")) { srLatn = "sr-Latn-CS"; srCyrl = "sr-Cyrl-CS"; break; } + + //address changes introduced in Windows 10 "November 2015 Update" (build 10586) + if (ci.Name.Equals("sr-Latn-RS")) + { + srLatn = "sr-Latn-RS"; + srCyrl = "sr-Cyrl-RS"; + break; + } } } @@ -62,11 +72,48 @@ namespace Spring.Globalization get { return srLatn; } } - public static bool OperatingSystemIsLaterThanWindows7 + public static bool OperatingSystemIsAfterWindows7 { get { return Environment.OSVersion.Version.Major >= 6 && Environment.OSVersion.Version.Minor >= 2; } } - + + public static bool OperatingSystemIsAfterWindows7AndBeforeWindows10Build10586 + { + get { return OperatingSystemIsAfterWindows7 && !OperatingSystemIsAtLeastWindows10Build10586; } + } + + public static bool OperatingSystemIsAtLeastWindows10Build10586 + { + get + { + try + { + var registryBuildNumberString = Registry.GetValue("HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion", "CurrentBuildNumber", string.Empty) as string; + + //if null or empty, we coudn't find the value or it couldn't be cast to a string + if (!string.IsNullOrEmpty(registryBuildNumberString)) + { + int buildNumber; + + //if we can convert the value to an int... + if (int.TryParse(registryBuildNumberString, out buildNumber)) + { + //do the comparison + return buildNumber >= 10586; + } + } + } + catch (Exception) + { + //if anythign at all goes wrong, presume we're not on Windows 10 Build 10586 or later + return false; + } + + //if we get this far, we can't tell WTF is going on, so just return FALSE + return false; + } + } + public static bool ClrIsVersion4OrLater { get { return Environment.Version.Major >= 4; } diff --git a/test/Spring/Spring.Core.Tests/Globalization/Formatters/CurrencyFormatterTests.cs b/test/Spring/Spring.Core.Tests/Globalization/Formatters/CurrencyFormatterTests.cs index dee506fa..3b686ff8 100644 --- a/test/Spring/Spring.Core.Tests/Globalization/Formatters/CurrencyFormatterTests.cs +++ b/test/Spring/Spring.Core.Tests/Globalization/Formatters/CurrencyFormatterTests.cs @@ -1,4 +1,4 @@ -#region License +#region License /* * Copyright 2002-2010 the original author or authors. @@ -19,7 +19,7 @@ #endregion using System; - +using System.Globalization; using NUnit.Framework; namespace Spring.Globalization.Formatters @@ -66,13 +66,22 @@ namespace Spring.Globalization.Formatters fmt = new CurrencyFormatter(CultureInfoUtils.SerbianLatinCultureName); - if (CultureInfoUtils.OperatingSystemIsLaterThanWindows7 && CultureInfoUtils.ClrIsVersion4OrLater) + if (CultureInfoUtils.OperatingSystemIsAfterWindows7AndBeforeWindows10Build10586 && CultureInfoUtils.ClrIsVersion4OrLater) { Assert.AreEqual("1.234,00 din.", fmt.Format(1234)); Assert.AreEqual("1.234,56 din.", fmt.Format(1234.56)); Assert.AreEqual("-1.234,00 din.", fmt.Format(-1234)); Assert.AreEqual("-1.234,56 din.", fmt.Format(-1234.56)); } + + else if (CultureInfoUtils.OperatingSystemIsAtLeastWindows10Build10586 && CultureInfoUtils.ClrIsVersion4OrLater) + { + Assert.AreEqual("1.234 RSD", fmt.Format(1234)); + Assert.AreEqual("1.235 RSD", fmt.Format(1234.56)); + Assert.AreEqual("-1.234 RSD", fmt.Format(-1234)); + Assert.AreEqual("-1.235 RSD", fmt.Format(-1234.56)); + } + else { Assert.AreEqual("1.234,00 Din.", fmt.Format(1234)); @@ -83,7 +92,7 @@ namespace Spring.Globalization.Formatters fmt = new CurrencyFormatter(CultureInfoUtils.SerbianCyrillicCultureName); - if (CultureInfoUtils.OperatingSystemIsLaterThanWindows7 && CultureInfoUtils.ClrIsVersion4OrLater) + if (CultureInfoUtils.OperatingSystemIsAfterWindows7 && CultureInfoUtils.ClrIsVersion4OrLater) { Assert.AreEqual("1.234,00 дин.", fmt.Format(1234)); Assert.AreEqual("1.234,56 дин.", fmt.Format(1234.56)); @@ -111,13 +120,20 @@ namespace Spring.Globalization.Formatters fmt = new CurrencyFormatter(CultureInfoUtils.SerbianLatinCultureName); - if (CultureInfoUtils.OperatingSystemIsLaterThanWindows7 && CultureInfoUtils.ClrIsVersion4OrLater) + if (CultureInfoUtils.OperatingSystemIsAfterWindows7AndBeforeWindows10Build10586 && CultureInfoUtils.ClrIsVersion4OrLater) { Assert.AreEqual(1234, fmt.Parse("1.234,00 din.")); Assert.AreEqual(1234.56, fmt.Parse("1.234,56 din.")); Assert.AreEqual(-1234, fmt.Parse("-1.234,00 din.")); Assert.AreEqual(-1234.56, fmt.Parse("-1.234,56 din.")); } + + else if (CultureInfoUtils.OperatingSystemIsAtLeastWindows10Build10586) + { + Assert.AreEqual(1234, fmt.Parse("1.234 RSD")); + Assert.AreEqual(-1234, fmt.Parse("-1.234 RSD")); + } + else { Assert.AreEqual(1234, fmt.Parse("1.234,00 Din.")); @@ -128,7 +144,7 @@ namespace Spring.Globalization.Formatters fmt = new CurrencyFormatter(CultureInfoUtils.SerbianCyrillicCultureName); - if (CultureInfoUtils.OperatingSystemIsLaterThanWindows7 && CultureInfoUtils.ClrIsVersion4OrLater) + if (CultureInfoUtils.OperatingSystemIsAfterWindows7 && CultureInfoUtils.ClrIsVersion4OrLater) { Assert.AreEqual(1234, fmt.Parse("1.234,00 дин.")); Assert.AreEqual(1234.56, fmt.Parse("1.234,56 дин.")); @@ -159,22 +175,36 @@ namespace Spring.Globalization.Formatters fmt = new CurrencyFormatter(CultureInfoUtils.SerbianLatinCultureName); fmt.PositivePattern = 1; fmt.CurrencySymbol = "din"; - Assert.AreEqual("1.234,00din", fmt.Format(1234)); - Assert.AreEqual("1.234,56din", fmt.Format(1234.56)); - Assert.AreEqual("-1.234,00 din", fmt.Format(-1234)); - Assert.AreEqual("-1.234,56 din", fmt.Format(-1234.56)); + + if (CultureInfoUtils.OperatingSystemIsAtLeastWindows10Build10586) + { + Assert.AreEqual("1.234din", fmt.Format(1234)); + Assert.AreEqual("1.235din", fmt.Format(1234.56)); + Assert.AreEqual("-1.234 din", fmt.Format(-1234)); + Assert.AreEqual("-1.235 din", fmt.Format(-1234.56)); + } + else + { + Assert.AreEqual("1.234,00din", fmt.Format(1234)); + Assert.AreEqual("1.234,56din", fmt.Format(1234.56)); + Assert.AreEqual("-1.234,00 din", fmt.Format(-1234)); + Assert.AreEqual("-1.234,56 din", fmt.Format(-1234.56)); + } + + fmt = new CurrencyFormatter(CultureInfoUtils.SerbianCyrillicCultureName); fmt.GroupSizes = new int[] { 1, 2 }; fmt.GroupSeparator = "'"; - if (CultureInfoUtils.OperatingSystemIsLaterThanWindows7 && CultureInfoUtils.ClrIsVersion4OrLater) + if (CultureInfoUtils.OperatingSystemIsAfterWindows7 && CultureInfoUtils.ClrIsVersion4OrLater) { Assert.AreEqual("1'23'4,00 дин.", fmt.Format(1234)); Assert.AreEqual("1'23'4,56 дин.", fmt.Format(1234.56)); Assert.AreEqual("-1'23'4,00 дин.", fmt.Format(-1234)); Assert.AreEqual("-1'23'4,56 дин.", fmt.Format(-1234.56)); } + else { Assert.AreEqual("1'23'4,00 Дин.", fmt.Format(1234)); @@ -207,7 +237,7 @@ namespace Spring.Globalization.Formatters fmt.GroupSizes = new int[] { 1, 2 }; fmt.GroupSeparator = "'"; - if (CultureInfoUtils.OperatingSystemIsLaterThanWindows7 && CultureInfoUtils.ClrIsVersion4OrLater) + if (CultureInfoUtils.OperatingSystemIsAfterWindows7 && CultureInfoUtils.ClrIsVersion4OrLater) { Assert.AreEqual(1234, fmt.Parse("1'23'4,00 дин.")); Assert.AreEqual(1234.56, fmt.Parse("1'23'4,56 дин.")); diff --git a/test/Spring/Spring.Core.Tests/Globalization/Formatters/DateTimeFormatterTests.cs b/test/Spring/Spring.Core.Tests/Globalization/Formatters/DateTimeFormatterTests.cs index f7e5c7a1..aa31bb05 100644 --- a/test/Spring/Spring.Core.Tests/Globalization/Formatters/DateTimeFormatterTests.cs +++ b/test/Spring/Spring.Core.Tests/Globalization/Formatters/DateTimeFormatterTests.cs @@ -71,7 +71,7 @@ namespace Spring.Globalization.Formatters Console.WriteLine("Steve: " + Environment.Version); - if (CultureInfoUtils.OperatingSystemIsLaterThanWindows7 && CultureInfoUtils.ClrIsVersion4OrLater) + if (CultureInfoUtils.OperatingSystemIsAfterWindows7AndBeforeWindows10Build10586 && CultureInfoUtils.ClrIsVersion4OrLater) { Assert.AreEqual("14. avgust 2004.", fmt.Format(new DateTime(2004, 8, 14))); Assert.AreEqual("24. avgust 1974.", fmt.Format(new DateTime(1974, 8, 24))); @@ -84,7 +84,7 @@ namespace Spring.Globalization.Formatters fmt = new DateTimeFormatter("dd-MMM-yyyy", CultureInfoUtils.SerbianCyrillicCultureName); - if (CultureInfoUtils.OperatingSystemIsLaterThanWindows7 && CultureInfoUtils.ClrIsVersion4OrLater) + if (CultureInfoUtils.OperatingSystemIsAfterWindows7AndBeforeWindows10Build10586 && CultureInfoUtils.ClrIsVersion4OrLater) { Assert.AreEqual("14-авг.-2004", fmt.Format(new DateTime(2004, 8, 14))); Assert.AreEqual("24-авг.-1974", fmt.Format(new DateTime(1974, 8, 24))); @@ -110,7 +110,7 @@ namespace Spring.Globalization.Formatters fmt = new DateTimeFormatter("D", CultureInfoUtils.SerbianLatinCultureName); - if (CultureInfoUtils.OperatingSystemIsLaterThanWindows7 && CultureInfoUtils.ClrIsVersion4OrLater) + if (CultureInfoUtils.OperatingSystemIsAfterWindows7AndBeforeWindows10Build10586 && CultureInfoUtils.ClrIsVersion4OrLater) { Assert.AreEqual(new DateTime(2004, 8, 14), fmt.Parse("14. avgust 2004.")); Assert.AreEqual(new DateTime(1974, 8, 24), fmt.Parse("24. avgust 1974.")); @@ -123,7 +123,7 @@ namespace Spring.Globalization.Formatters fmt = new DateTimeFormatter("dd-MMM-yyyy", CultureInfoUtils.SerbianCyrillicCultureName); - if (CultureInfoUtils.OperatingSystemIsLaterThanWindows7 && CultureInfoUtils.ClrIsVersion4OrLater) + if (CultureInfoUtils.OperatingSystemIsAfterWindows7AndBeforeWindows10Build10586 && CultureInfoUtils.ClrIsVersion4OrLater) { Assert.AreEqual(new DateTime(2004, 8, 14), fmt.Parse("14-авг.-2004")); Assert.AreEqual(new DateTime(1974, 8, 24), fmt.Parse("24-авг.-1974"));