Browse Source

tmp: improve points parser issue:3813 pr:3814 merged

0.9.2.18
Andrey Kunchev 6 years ago
parent
commit
52fd4bde20
  1. 10
      src/Markup/Avalonia.Markup.Xaml/Converters/PointsListTypeConverter.cs
  2. 44
      tests/Avalonia.Markup.Xaml.UnitTests/Converters/PointsListTypeConverterTests.cs

10
src/Markup/Avalonia.Markup.Xaml/Converters/PointsListTypeConverter.cs

@ -7,7 +7,7 @@ using System.Globalization;
namespace Avalonia.Markup.Xaml.Converters
{
using System.ComponentModel;
using System.ComponentModel;
public class PointsListTypeConverter : TypeConverter
{
@ -19,11 +19,11 @@ namespace Avalonia.Markup.Xaml.Converters
public override object ConvertFrom(ITypeDescriptorContext context, CultureInfo culture, object value)
{
string strValue = (string)value;
string[] pointStrs = strValue.Split(new[] { ' ', '\t', '\r', '\n' }, StringSplitOptions.RemoveEmptyEntries);
var result = new List<Point>(pointStrs.Length);
foreach (var pointStr in pointStrs)
string[] pointStrs = strValue.Split(new[] { ' ', '\t', '\r', '\n', ',' }, StringSplitOptions.RemoveEmptyEntries);
var result = new List<Point>(pointStrs.Length / 2);
for (int i = 0; i < pointStrs.Length; i += 2)
{
result.Add(Point.Parse(pointStr));
result.Add(Point.Parse($"{pointStrs[i]} {pointStrs[i + 1]}"));
}
return result;

44
tests/Avalonia.Markup.Xaml.UnitTests/Converters/PointsListTypeConverterTests.cs

@ -0,0 +1,44 @@
using System.Collections.Generic;
using Avalonia.Controls.Shapes;
using Avalonia.Markup.Xaml.Converters;
using Xunit;
namespace Avalonia.Markup.Xaml.UnitTests.Converters
{
public class PointsListTypeConverterTests
{
[Theory]
[InlineData("1,2 3,4")]
[InlineData("1 2 3 4")]
[InlineData("1 2,3 4")]
[InlineData("1,2,3,4")]
public void TypeConverter_Should_Parse(string input)
{
var conv = new PointsListTypeConverter();
var points = (IList<Point>)conv.ConvertFrom(input);
Assert.Equal(2, points.Count);
Assert.Equal(new Point(1, 2), points[0]);
Assert.Equal(new Point(3, 4), points[1]);
}
[Theory]
[InlineData("1,2 3,4")]
[InlineData("1 2 3 4")]
[InlineData("1 2,3 4")]
[InlineData("1,2,3,4")]
public void Should_Parse_Points_in_Xaml(string input)
{
var xaml = $"<Polygon xmlns='https://github.com/avaloniaui' Points='{input}' />";
var loader = new AvaloniaXamlLoader();
var polygon = (Polygon)loader.Load(xaml);
var points = polygon.Points;
Assert.Equal(2, points.Count);
Assert.Equal(new Point(1, 2), points[0]);
Assert.Equal(new Point(3, 4), points[1]);
}
}
}
Loading…
Cancel
Save