diff --git a/EvilDICOM.Core/EvilDICOM.Core.Tests/DecimalStringTests.cs b/EvilDICOM.Core/EvilDICOM.Core.Tests/DecimalStringTests.cs index f4d9de5a..e28dace7 100644 --- a/EvilDICOM.Core/EvilDICOM.Core.Tests/DecimalStringTests.cs +++ b/EvilDICOM.Core/EvilDICOM.Core.Tests/DecimalStringTests.cs @@ -3,6 +3,8 @@ using EvilDICOM.Core.Element; using EvilDICOM.Core.Helpers; using Microsoft.VisualStudio.TestTools.UnitTesting; +using System.Globalization; +using System.Threading; namespace EvilDICOM.Core.Tests { @@ -82,13 +84,53 @@ public void DData__Setter_InvalidUnderlyingType_Throws() } [TestMethod] - public void ToString_VerifyOutput() + public void ToString_VerifyOutput_CurrentCultureInsensitive_AreNotEqual() { const string expected = "(300A,0082) : BeamDoseSpecificationPoint (DecimalString) -> 1 | -3.5 | 2.5"; - var actual = _decimalString.ToString(); - Assert.AreEqual(expected, actual); + var currentThread = Thread.CurrentThread; + var currentCulture = currentThread.CurrentCulture; + + currentThread.CurrentCulture = CreateNonDotSeparatorCulture(); + + try + { + var actual = _decimalString.ToString(); + Assert.AreNotEqual(expected, actual); + } + finally + { + currentThread.CurrentCulture = currentCulture; + } + } + + [TestMethod] + public void ToString_VerifyOutput_CurrentCultureSensitive_AreEqual() + { + const string expected = "(300A,0082) : BeamDoseSpecificationPoint (DecimalString) -> 1 | -3*5 | 2*5"; + var currentThread = Thread.CurrentThread; + var currentCulture = currentThread.CurrentCulture; + + currentThread.CurrentCulture = CreateNonDotSeparatorCulture(); + + try + { + var actual = _decimalString.ToString(); + Assert.AreEqual(expected, actual); + } + finally + { + currentThread.CurrentCulture = currentCulture; + } + } + + private static CultureInfo CreateNonDotSeparatorCulture() + { + var nonDotSeparatorCulture = (CultureInfo)CultureInfo.InvariantCulture.Clone(); + nonDotSeparatorCulture.NumberFormat.NumberGroupSeparator = "@"; + nonDotSeparatorCulture.NumberFormat.NumberDecimalSeparator = "*"; + return nonDotSeparatorCulture; } #endregion } -} \ No newline at end of file +} diff --git a/EvilDICOM.Core/EvilDICOM.Core/IO/Data/StringDataComposer.cs b/EvilDICOM.Core/EvilDICOM.Core/IO/Data/StringDataComposer.cs index 85d5b29d..0024ed2f 100644 --- a/EvilDICOM.Core/EvilDICOM.Core/IO/Data/StringDataComposer.cs +++ b/EvilDICOM.Core/EvilDICOM.Core/IO/Data/StringDataComposer.cs @@ -2,6 +2,7 @@ using System.Linq; using EvilDICOM.Core.Element; using DateTime = System.DateTime; +using System.Globalization; namespace EvilDICOM.Core.IO.Data { @@ -11,7 +12,7 @@ public static string ComposeAgeString(Age data) { if (data != null) { - string ageString = String.Format("{0:00#}", data.Number); + string ageString = String.Format(CultureInfo.InvariantCulture, "{0:00#}", data.Number); switch (data.Units) { case Age.Unit.DAYS: @@ -37,7 +38,7 @@ public static string ComposeDate(DateTime? data) if (data != null) { var date = (DateTime) data; - return date.ToString("yyyyMMdd"); + return date.ToString("yyyyMMdd", CultureInfo.InvariantCulture); } return string.Empty; } @@ -47,7 +48,7 @@ public static string ComposeDateTime(DateTime? data) if (data != null) { var date = (DateTime) data; - return date.ToString("yyyyMMddHHmmss.ffffff"); + return date.ToString("yyyyMMddHHmmss.ffffff", CultureInfo.InvariantCulture); } return string.Empty; } @@ -56,7 +57,7 @@ public static string ComposeDecimalString(double[] data) { if (data != null) { - return String.Join("\\", data.Select(d => d.ToString()).ToArray()); + return String.Join("\\", data.Select(d => d.ToString(CultureInfo.InvariantCulture)).ToArray()); } return string.Empty; } @@ -65,7 +66,7 @@ public static string ComposeIntegerString(int[] data) { if (data != null) { - return String.Join("\\", data.Select(d => d.ToString()).ToArray()); + return String.Join("\\", data.Select(d => d.ToString(CultureInfo.InvariantCulture)).ToArray()); } return string.Empty; } @@ -75,9 +76,9 @@ public static string ComposeTime(DateTime? data) if (data != null) { var date = (DateTime) data; - return date.ToString("HHmmss.ffffff"); + return date.ToString("HHmmss.ffffff", CultureInfo.InvariantCulture); } return string.Empty; } } -} \ No newline at end of file +}