Browse Source

Require culture when parsing numbers.

pull/145/head
Steven Kirk 11 years ago
parent
commit
ac9d0ad9d4
  1. 17
      Tests/Perspex.Controls.UnitTests/GridLengthTests.cs
  2. 9
      Tests/Perspex.SceneGraph.UnitTests/ThicknessTests.cs
  3. 2
      src/Markup/Perspex.Markup.Xaml/Converters/GridLengthTypeConverter.cs
  4. 2
      src/Markup/Perspex.Markup.Xaml/Converters/ThicknessTypeConverter.cs
  5. 3
      src/Perspex.Controls/ColumnDefinitions.cs
  6. 13
      src/Perspex.Controls/GridLength.cs
  7. 3
      src/Perspex.Controls/RowDefinitions.cs

17
Tests/Perspex.Controls.UnitTests/GridLengthTests.cs

@ -2,6 +2,7 @@
// Licensed under the MIT license. See licence.md file in the project root for full license information.
using System;
using System.Globalization;
using System.Linq;
using Xunit;
@ -12,7 +13,7 @@ namespace Perspex.Controls.UnitTests
[Fact]
public void Parse_Should_Parse_Auto()
{
var result = GridLength.Parse("Auto");
var result = GridLength.Parse("Auto", CultureInfo.InvariantCulture);
Assert.Equal(GridLength.Auto, result);
}
@ -20,7 +21,7 @@ namespace Perspex.Controls.UnitTests
[Fact]
public void Parse_Should_Parse_Auto_Lowercase()
{
var result = GridLength.Parse("auto");
var result = GridLength.Parse("auto", CultureInfo.InvariantCulture);
Assert.Equal(GridLength.Auto, result);
}
@ -28,7 +29,7 @@ namespace Perspex.Controls.UnitTests
[Fact]
public void Parse_Should_Parse_Star()
{
var result = GridLength.Parse("*");
var result = GridLength.Parse("*", CultureInfo.InvariantCulture);
Assert.Equal(new GridLength(1, GridUnitType.Star), result);
}
@ -36,7 +37,7 @@ namespace Perspex.Controls.UnitTests
[Fact]
public void Parse_Should_Parse_Star_Value()
{
var result = GridLength.Parse("2*");
var result = GridLength.Parse("2*", CultureInfo.InvariantCulture);
Assert.Equal(new GridLength(2, GridUnitType.Star), result);
}
@ -44,7 +45,7 @@ namespace Perspex.Controls.UnitTests
[Fact]
public void Parse_Should_Parse_Pixel_Value()
{
var result = GridLength.Parse("2");
var result = GridLength.Parse("2", CultureInfo.InvariantCulture);
Assert.Equal(new GridLength(2, GridUnitType.Pixel), result);
}
@ -52,13 +53,13 @@ namespace Perspex.Controls.UnitTests
[Fact]
public void Parse_Should_Throw_FormatException_For_Invalid_String()
{
Assert.Throws<FormatException>(() => GridLength.Parse("2x"));
Assert.Throws<FormatException>(() => GridLength.Parse("2x", CultureInfo.InvariantCulture));
}
[Fact]
public void ParseLengths_Accepts_Comma_Separators()
{
var result = GridLength.ParseLengths("*,Auto,2*,4").ToList();
var result = GridLength.ParseLengths("*,Auto,2*,4", CultureInfo.InvariantCulture).ToList();
Assert.Equal(
new[]
@ -74,7 +75,7 @@ namespace Perspex.Controls.UnitTests
[Fact]
public void ParseLengths_Accepts_Space_Separators()
{
var result = GridLength.ParseLengths("* Auto 2* 4").ToList();
var result = GridLength.ParseLengths("* Auto 2* 4", CultureInfo.InvariantCulture).ToList();
Assert.Equal(
new[]

9
Tests/Perspex.SceneGraph.UnitTests/ThicknessTests.cs

@ -1,6 +1,7 @@
// Copyright (c) The Perspex Project. All rights reserved.
// Licensed under the MIT license. See licence.md file in the project root for full license information.
using System.Globalization;
using Xunit;
namespace Perspex.SceneGraph.UnitTests.Media
@ -10,7 +11,7 @@ namespace Perspex.SceneGraph.UnitTests.Media
[Fact]
public void Parse_Parses_Single_Uniform_Size()
{
var result = Thickness.Parse("1.2");
var result = Thickness.Parse("1.2", CultureInfo.InvariantCulture);
Assert.Equal(new Thickness(1.2), result);
}
@ -18,7 +19,7 @@ namespace Perspex.SceneGraph.UnitTests.Media
[Fact]
public void Parse_Parses_Horizontal_Vertical()
{
var result = Thickness.Parse("1.2,3.4");
var result = Thickness.Parse("1.2,3.4", CultureInfo.InvariantCulture);
Assert.Equal(new Thickness(1.2, 3.4), result);
}
@ -26,7 +27,7 @@ namespace Perspex.SceneGraph.UnitTests.Media
[Fact]
public void Parse_Parses_Left_Top_Right_Bottom()
{
var result = Thickness.Parse("1.2, 3.4, 5, 6");
var result = Thickness.Parse("1.2, 3.4, 5, 6", CultureInfo.InvariantCulture);
Assert.Equal(new Thickness(1.2, 3.4, 5, 6), result);
}
@ -34,7 +35,7 @@ namespace Perspex.SceneGraph.UnitTests.Media
[Fact]
public void Parse_Accepts_Spaces()
{
var result = Thickness.Parse("1.2 3.4 5 6");
var result = Thickness.Parse("1.2 3.4 5 6", CultureInfo.InvariantCulture);
Assert.Equal(new Thickness(1.2, 3.4, 5, 6), result);
}

2
src/Markup/Perspex.Markup.Xaml/Converters/GridLengthTypeConverter.cs

@ -22,7 +22,7 @@ namespace Perspex.Markup.Xaml.Converters
public object ConvertFrom(IXamlTypeConverterContext context, CultureInfo culture, object value)
{
return GridLength.Parse((string)value);
return GridLength.Parse((string)value, culture);
}
public object ConvertTo(IXamlTypeConverterContext context, CultureInfo culture, object value, Type destinationType)

2
src/Markup/Perspex.Markup.Xaml/Converters/ThicknessTypeConverter.cs

@ -21,7 +21,7 @@ namespace Perspex.Markup.Xaml.Converters
public object ConvertFrom(IXamlTypeConverterContext context, CultureInfo culture, object value)
{
return Thickness.Parse((string)value);
return Thickness.Parse((string)value, culture);
}
public object ConvertTo(IXamlTypeConverterContext context, CultureInfo culture, object value, Type destinationType)

3
src/Perspex.Controls/ColumnDefinitions.cs

@ -1,6 +1,7 @@
// Copyright (c) The Perspex Project. All rights reserved.
// Licensed under the MIT license. See licence.md file in the project root for full license information.
using System.Globalization;
using System.Linq;
using Perspex.Collections;
@ -24,7 +25,7 @@ namespace Perspex.Controls
/// <param name="s">A string representation of the column definitions.</param>
public ColumnDefinitions(string s)
{
AddRange(GridLength.ParseLengths(s).Select(x => new ColumnDefinition(x)));
AddRange(GridLength.ParseLengths(s, CultureInfo.InvariantCulture).Select(x => new ColumnDefinition(x)));
}
}
}

13
src/Perspex.Controls/GridLength.cs

@ -3,6 +3,7 @@
using System;
using System.Collections.Generic;
using System.Globalization;
using System.Linq;
namespace Perspex.Controls
@ -178,8 +179,9 @@ namespace Perspex.Controls
/// Parses a string to return a <see cref="GridLength"/>.
/// </summary>
/// <param name="s">The string.</param>
/// <param name="culture">The current culture.</param>
/// <returns>The <see cref="GridLength"/>.</returns>
public static GridLength Parse(string s)
public static GridLength Parse(string s, CultureInfo culture)
{
s = s.ToUpperInvariant();
@ -190,12 +192,12 @@ namespace Perspex.Controls
else if (s.EndsWith("*"))
{
var valueString = s.Substring(0, s.Length - 1).Trim();
var value = valueString.Length > 0 ? double.Parse(valueString) : 1;
var value = valueString.Length > 0 ? double.Parse(valueString, culture) : 1;
return new GridLength(value, GridUnitType.Star);
}
else
{
var value = double.Parse(s);
var value = double.Parse(s, culture);
return new GridLength(value, GridUnitType.Pixel);
}
}
@ -204,10 +206,11 @@ namespace Perspex.Controls
/// Parses a string to return a collection of <see cref="GridLength"/>s.
/// </summary>
/// <param name="s">The string.</param>
/// <param name="culture">The current culture.</param>
/// <returns>The <see cref="GridLength"/>.</returns>
public static IEnumerable<GridLength> ParseLengths(string s)
public static IEnumerable<GridLength> ParseLengths(string s, CultureInfo culture)
{
return s.Split(new[] { ',', ' ' }).Select(x => Parse(x));
return s.Split(new[] { ',', ' ' }).Select(x => Parse(x, culture));
}
}
}

3
src/Perspex.Controls/RowDefinitions.cs

@ -1,6 +1,7 @@
// Copyright (c) The Perspex Project. All rights reserved.
// Licensed under the MIT license. See licence.md file in the project root for full license information.
using System.Globalization;
using System.Linq;
using Perspex.Collections;
@ -24,7 +25,7 @@ namespace Perspex.Controls
/// <param name="s">A string representation of the row definitions.</param>
public RowDefinitions(string s)
{
AddRange(GridLength.ParseLengths(s).Select(x => new RowDefinition(x)));
AddRange(GridLength.ParseLengths(s, CultureInfo.InvariantCulture).Select(x => new RowDefinition(x)));
}
}
}
Loading…
Cancel
Save