Skip to content

Commit 0dfba3b

Browse files
authored
Merge pull request #4253 from Sergio0694/bugfix/aspectratio-localized-parsing
Fixed culture sensitivity when parsing AspectRatio components
2 parents 0d73af7 + 7642602 commit 0dfba3b

File tree

5 files changed

+78
-20
lines changed

5 files changed

+78
-20
lines changed

Microsoft.Toolkit.Uwp.UI.Controls.Primitives/ConstrainedBox/AspectRatio.cs

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
// The .NET Foundation licenses this file to you under the MIT license.
33
// See the LICENSE file in the project root for more information.
44

5-
using System;
5+
using System.Globalization;
66

77
namespace Microsoft.Toolkit.Uwp.UI.Controls
88
{
@@ -75,11 +75,14 @@ public static AspectRatio ConvertToAspectRatio(string rawString)
7575

7676
if (ratio.Length == 2)
7777
{
78-
return new AspectRatio(Convert.ToDouble(ratio[0]), Convert.ToDouble(ratio[1]));
78+
double width = double.Parse(ratio[0], NumberStyles.Float, CultureInfo.InvariantCulture);
79+
double height = double.Parse(ratio[1], NumberStyles.Float, CultureInfo.InvariantCulture);
80+
81+
return new AspectRatio(width, height);
7982
}
8083
else if (ratio.Length == 1)
8184
{
82-
return new AspectRatio(Convert.ToDouble(ratio[0]));
85+
return new AspectRatio(double.Parse(ratio[0], NumberStyles.Float, CultureInfo.InvariantCulture));
8386
}
8487

8588
return new AspectRatio(1);

Microsoft.Toolkit.Uwp.UI.Controls.Primitives/ConstrainedBox/ConstrainedBox.Properties.cs

Lines changed: 0 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -2,14 +2,7 @@
22
// The .NET Foundation licenses this file to you under the MIT license.
33
// See the LICENSE file in the project root for more information.
44

5-
using System;
6-
using System.Collections.Generic;
7-
using System.Linq;
8-
using System.Text;
9-
using System.Threading.Tasks;
10-
using Windows.Foundation;
115
using Windows.UI.Xaml;
12-
using Windows.UI.Xaml.Controls;
136

147
namespace Microsoft.Toolkit.Uwp.UI.Controls
158
{

Microsoft.Toolkit.Uwp.UI.Controls.Primitives/ConstrainedBox/ConstrainedBox.cs

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3,10 +3,6 @@
33
// See the LICENSE file in the project root for more information.
44

55
using System;
6-
using System.Collections.Generic;
7-
using System.Linq;
8-
using System.Text;
9-
using System.Threading.Tasks;
106
using Windows.Foundation;
117
using Windows.UI.Xaml;
128
using Windows.UI.Xaml.Controls;

UnitTests/UnitTests.UWP/UI/Controls/Test_ConstrainedBox.Alignment.cs

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,14 +2,11 @@
22
// The .NET Foundation licenses this file to you under the MIT license.
33
// See the LICENSE file in the project root for more information.
44

5-
using System.Linq;
65
using System.Threading.Tasks;
76
using Microsoft.Toolkit.Uwp;
87
using Microsoft.Toolkit.Uwp.UI;
98
using Microsoft.Toolkit.Uwp.UI.Controls;
109
using Microsoft.VisualStudio.TestTools.UnitTesting;
11-
using Microsoft.VisualStudio.TestTools.UnitTesting.AppContainer;
12-
using Windows.Foundation;
1310
using Windows.UI.Xaml;
1411
using Windows.UI.Xaml.Controls;
1512
using Windows.UI.Xaml.Markup;

UnitTests/UnitTests.UWP/UI/Controls/Test_ConstrainedBox.AspectRatio.cs

Lines changed: 72 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,14 +2,12 @@
22
// The .NET Foundation licenses this file to you under the MIT license.
33
// See the LICENSE file in the project root for more information.
44

5-
using System.Linq;
5+
using System.Globalization;
66
using System.Threading.Tasks;
77
using Microsoft.Toolkit.Uwp;
88
using Microsoft.Toolkit.Uwp.UI;
99
using Microsoft.Toolkit.Uwp.UI.Controls;
1010
using Microsoft.VisualStudio.TestTools.UnitTesting;
11-
using Microsoft.VisualStudio.TestTools.UnitTesting.AppContainer;
12-
using Windows.Foundation;
1311
using Windows.UI.Xaml;
1412
using Windows.UI.Xaml.Controls;
1513
using Windows.UI.Xaml.Markup;
@@ -92,5 +90,76 @@ await App.DispatcherQueue.EnqueueAsync(async () =>
9290
Assert.AreEqual(200, child.ActualHeight, 0.01, "Actual height does not meet expected value of 200");
9391
});
9492
}
93+
94+
[TestCategory("ConstrainedBox")]
95+
[TestMethod]
96+
public void Test_ConstrainedBox_AspectRatioParsing_WidthAndHeight()
97+
{
98+
CultureInfo currentCulture = CultureInfo.CurrentCulture;
99+
100+
try
101+
{
102+
CultureInfo.CurrentCulture = CultureInfo.InvariantCulture;
103+
104+
AspectRatio ratio = AspectRatio.ConvertToAspectRatio("1.666:1.2");
105+
106+
Assert.AreEqual(ratio.Width, 1.666);
107+
Assert.AreEqual(ratio.Height, 1.2);
108+
109+
// Explicit tests for other culture infos, see https://github.com/CommunityToolkit/WindowsCommunityToolkit/issues/4252
110+
CultureInfo.CurrentCulture = CultureInfo.GetCultureInfo("it-IT");
111+
112+
ratio = AspectRatio.ConvertToAspectRatio("1.666:1.2");
113+
114+
Assert.AreEqual(ratio.Width, 1.666);
115+
Assert.AreEqual(ratio.Height, 1.2);
116+
117+
CultureInfo.CurrentCulture = CultureInfo.GetCultureInfo("fr-FR");
118+
119+
ratio = AspectRatio.ConvertToAspectRatio("1.666:1.2");
120+
121+
Assert.AreEqual(ratio.Width, 1.666);
122+
Assert.AreEqual(ratio.Height, 1.2);
123+
}
124+
finally
125+
{
126+
CultureInfo.CurrentCulture = currentCulture;
127+
}
128+
}
129+
130+
[TestCategory("ConstrainedBox")]
131+
[TestMethod]
132+
public void Test_ConstrainedBox_AspectRatioParsing_Ratio()
133+
{
134+
CultureInfo currentCulture = CultureInfo.CurrentCulture;
135+
136+
try
137+
{
138+
CultureInfo.CurrentCulture = CultureInfo.InvariantCulture;
139+
140+
AspectRatio ratio = AspectRatio.ConvertToAspectRatio("1.666");
141+
142+
Assert.AreEqual(ratio.Width, 1.666);
143+
Assert.AreEqual(ratio.Height, 1);
144+
145+
CultureInfo.CurrentCulture = CultureInfo.GetCultureInfo("it-IT");
146+
147+
ratio = AspectRatio.ConvertToAspectRatio("1.666");
148+
149+
Assert.AreEqual(ratio.Width, 1.666);
150+
Assert.AreEqual(ratio.Height, 1);
151+
152+
CultureInfo.CurrentCulture = CultureInfo.GetCultureInfo("fr-FR");
153+
154+
ratio = AspectRatio.ConvertToAspectRatio("1.666");
155+
156+
Assert.AreEqual(ratio.Width, 1.666);
157+
Assert.AreEqual(ratio.Height, 1);
158+
}
159+
finally
160+
{
161+
CultureInfo.CurrentCulture = currentCulture;
162+
}
163+
}
95164
}
96165
}

0 commit comments

Comments
 (0)