|
|
|
@ -2,6 +2,7 @@ |
|
|
|
using Avalonia.Data.Core; |
|
|
|
using Avalonia.Markup.Parsers; |
|
|
|
using Avalonia.Markup.Xaml.Parsers; |
|
|
|
using Avalonia.Utilities; |
|
|
|
using Xunit; |
|
|
|
|
|
|
|
namespace Avalonia.Markup.Xaml.UnitTests.Parsers |
|
|
|
@ -12,7 +13,7 @@ namespace Avalonia.Markup.Xaml.UnitTests.Parsers |
|
|
|
public void Parses_Name() |
|
|
|
{ |
|
|
|
var target = new PropertyParser(); |
|
|
|
var reader = new Reader("Foo"); |
|
|
|
var reader = new CharacterReader("Foo"); |
|
|
|
var (ns, owner, name) = target.Parse(reader); |
|
|
|
|
|
|
|
Assert.Null(ns); |
|
|
|
@ -24,7 +25,7 @@ namespace Avalonia.Markup.Xaml.UnitTests.Parsers |
|
|
|
public void Parses_Owner_And_Name() |
|
|
|
{ |
|
|
|
var target = new PropertyParser(); |
|
|
|
var reader = new Reader("Foo.Bar"); |
|
|
|
var reader = new CharacterReader("Foo.Bar"); |
|
|
|
var (ns, owner, name) = target.Parse(reader); |
|
|
|
|
|
|
|
Assert.Null(ns); |
|
|
|
@ -36,7 +37,7 @@ namespace Avalonia.Markup.Xaml.UnitTests.Parsers |
|
|
|
public void Parses_Namespace_Owner_And_Name() |
|
|
|
{ |
|
|
|
var target = new PropertyParser(); |
|
|
|
var reader = new Reader("foo:Bar.Baz"); |
|
|
|
var reader = new CharacterReader("foo:Bar.Baz"); |
|
|
|
var (ns, owner, name) = target.Parse(reader); |
|
|
|
|
|
|
|
Assert.Equal("foo", ns); |
|
|
|
@ -48,7 +49,7 @@ namespace Avalonia.Markup.Xaml.UnitTests.Parsers |
|
|
|
public void Parses_Owner_And_Name_With_Parentheses() |
|
|
|
{ |
|
|
|
var target = new PropertyParser(); |
|
|
|
var reader = new Reader("(Foo.Bar)"); |
|
|
|
var reader = new CharacterReader("(Foo.Bar)"); |
|
|
|
var (ns, owner, name) = target.Parse(reader); |
|
|
|
|
|
|
|
Assert.Null(ns); |
|
|
|
@ -60,7 +61,7 @@ namespace Avalonia.Markup.Xaml.UnitTests.Parsers |
|
|
|
public void Parses_Namespace_Owner_And_Name_With_Parentheses() |
|
|
|
{ |
|
|
|
var target = new PropertyParser(); |
|
|
|
var reader = new Reader("(foo:Bar.Baz)"); |
|
|
|
var reader = new CharacterReader("(foo:Bar.Baz)"); |
|
|
|
var (ns, owner, name) = target.Parse(reader); |
|
|
|
|
|
|
|
Assert.Equal("foo", ns); |
|
|
|
@ -72,7 +73,7 @@ namespace Avalonia.Markup.Xaml.UnitTests.Parsers |
|
|
|
public void Fails_With_Empty_String() |
|
|
|
{ |
|
|
|
var target = new PropertyParser(); |
|
|
|
var reader = new Reader(""); |
|
|
|
var reader = new CharacterReader(""); |
|
|
|
|
|
|
|
var ex = Assert.Throws<ExpressionParseException>(() => target.Parse(reader)); |
|
|
|
Assert.Equal(0, ex.Column); |
|
|
|
@ -83,7 +84,7 @@ namespace Avalonia.Markup.Xaml.UnitTests.Parsers |
|
|
|
public void Fails_With_Only_Whitespace() |
|
|
|
{ |
|
|
|
var target = new PropertyParser(); |
|
|
|
var reader = new Reader(" "); |
|
|
|
var reader = new CharacterReader(" "); |
|
|
|
|
|
|
|
var ex = Assert.Throws<ExpressionParseException>(() => target.Parse(reader)); |
|
|
|
Assert.Equal(0, ex.Column); |
|
|
|
@ -94,7 +95,7 @@ namespace Avalonia.Markup.Xaml.UnitTests.Parsers |
|
|
|
public void Fails_With_Leading_Whitespace() |
|
|
|
{ |
|
|
|
var target = new PropertyParser(); |
|
|
|
var reader = new Reader(" Foo"); |
|
|
|
var reader = new CharacterReader(" Foo"); |
|
|
|
|
|
|
|
var ex = Assert.Throws<ExpressionParseException>(() => target.Parse(reader)); |
|
|
|
Assert.Equal(0, ex.Column); |
|
|
|
@ -105,7 +106,7 @@ namespace Avalonia.Markup.Xaml.UnitTests.Parsers |
|
|
|
public void Fails_With_Trailing_Whitespace() |
|
|
|
{ |
|
|
|
var target = new PropertyParser(); |
|
|
|
var reader = new Reader("Foo "); |
|
|
|
var reader = new CharacterReader("Foo "); |
|
|
|
|
|
|
|
var ex = Assert.Throws<ExpressionParseException>(() => target.Parse(reader)); |
|
|
|
Assert.Equal(3, ex.Column); |
|
|
|
@ -116,7 +117,7 @@ namespace Avalonia.Markup.Xaml.UnitTests.Parsers |
|
|
|
public void Fails_With_Invalid_Property_Name() |
|
|
|
{ |
|
|
|
var target = new PropertyParser(); |
|
|
|
var reader = new Reader("123"); |
|
|
|
var reader = new CharacterReader("123"); |
|
|
|
|
|
|
|
var ex = Assert.Throws<ExpressionParseException>(() => target.Parse(reader)); |
|
|
|
Assert.Equal(0, ex.Column); |
|
|
|
@ -127,7 +128,7 @@ namespace Avalonia.Markup.Xaml.UnitTests.Parsers |
|
|
|
public void Fails_With_Trailing_Junk() |
|
|
|
{ |
|
|
|
var target = new PropertyParser(); |
|
|
|
var reader = new Reader("Foo%"); |
|
|
|
var reader = new CharacterReader("Foo%"); |
|
|
|
|
|
|
|
var ex = Assert.Throws<ExpressionParseException>(() => target.Parse(reader)); |
|
|
|
Assert.Equal(3, ex.Column); |
|
|
|
@ -138,7 +139,7 @@ namespace Avalonia.Markup.Xaml.UnitTests.Parsers |
|
|
|
public void Fails_With_Invalid_Property_Name_After_Owner() |
|
|
|
{ |
|
|
|
var target = new PropertyParser(); |
|
|
|
var reader = new Reader("Foo.123"); |
|
|
|
var reader = new CharacterReader("Foo.123"); |
|
|
|
|
|
|
|
var ex = Assert.Throws<ExpressionParseException>(() => target.Parse(reader)); |
|
|
|
Assert.Equal(4, ex.Column); |
|
|
|
@ -149,7 +150,7 @@ namespace Avalonia.Markup.Xaml.UnitTests.Parsers |
|
|
|
public void Fails_With_Whitespace_Between_Owner_And_Name() |
|
|
|
{ |
|
|
|
var target = new PropertyParser(); |
|
|
|
var reader = new Reader("Foo. Bar"); |
|
|
|
var reader = new CharacterReader("Foo. Bar"); |
|
|
|
|
|
|
|
var ex = Assert.Throws<ExpressionParseException>(() => target.Parse(reader)); |
|
|
|
Assert.Equal(4, ex.Column); |
|
|
|
@ -160,7 +161,7 @@ namespace Avalonia.Markup.Xaml.UnitTests.Parsers |
|
|
|
public void Fails_With_Too_Many_Segments() |
|
|
|
{ |
|
|
|
var target = new PropertyParser(); |
|
|
|
var reader = new Reader("Foo.Bar.Baz"); |
|
|
|
var reader = new CharacterReader("Foo.Bar.Baz"); |
|
|
|
|
|
|
|
var ex = Assert.Throws<ExpressionParseException>(() => target.Parse(reader)); |
|
|
|
Assert.Equal(8, ex.Column); |
|
|
|
@ -171,7 +172,7 @@ namespace Avalonia.Markup.Xaml.UnitTests.Parsers |
|
|
|
public void Fails_With_Too_Many_Namespaces() |
|
|
|
{ |
|
|
|
var target = new PropertyParser(); |
|
|
|
var reader = new Reader("foo:bar:Baz"); |
|
|
|
var reader = new CharacterReader("foo:bar:Baz"); |
|
|
|
|
|
|
|
var ex = Assert.Throws<ExpressionParseException>(() => target.Parse(reader)); |
|
|
|
Assert.Equal(8, ex.Column); |
|
|
|
@ -182,7 +183,7 @@ namespace Avalonia.Markup.Xaml.UnitTests.Parsers |
|
|
|
public void Fails_With_Parens_But_No_Owner() |
|
|
|
{ |
|
|
|
var target = new PropertyParser(); |
|
|
|
var reader = new Reader("(Foo)"); |
|
|
|
var reader = new CharacterReader("(Foo)"); |
|
|
|
|
|
|
|
var ex = Assert.Throws<ExpressionParseException>(() => target.Parse(reader)); |
|
|
|
Assert.Equal(1, ex.Column); |
|
|
|
@ -193,7 +194,7 @@ namespace Avalonia.Markup.Xaml.UnitTests.Parsers |
|
|
|
public void Fails_With_Parens_And_Namespace_But_No_Owner() |
|
|
|
{ |
|
|
|
var target = new PropertyParser(); |
|
|
|
var reader = new Reader("(foo:Bar)"); |
|
|
|
var reader = new CharacterReader("(foo:Bar)"); |
|
|
|
|
|
|
|
var ex = Assert.Throws<ExpressionParseException>(() => target.Parse(reader)); |
|
|
|
Assert.Equal(1, ex.Column); |
|
|
|
@ -204,7 +205,7 @@ namespace Avalonia.Markup.Xaml.UnitTests.Parsers |
|
|
|
public void Fails_With_Missing_Close_Parens() |
|
|
|
{ |
|
|
|
var target = new PropertyParser(); |
|
|
|
var reader = new Reader("(Foo.Bar"); |
|
|
|
var reader = new CharacterReader("(Foo.Bar"); |
|
|
|
|
|
|
|
var ex = Assert.Throws<ExpressionParseException>(() => target.Parse(reader)); |
|
|
|
Assert.Equal(8, ex.Column); |
|
|
|
@ -215,7 +216,7 @@ namespace Avalonia.Markup.Xaml.UnitTests.Parsers |
|
|
|
public void Fails_With_Unexpected_Close_Parens() |
|
|
|
{ |
|
|
|
var target = new PropertyParser(); |
|
|
|
var reader = new Reader("Foo.Bar)"); |
|
|
|
var reader = new CharacterReader("Foo.Bar)"); |
|
|
|
|
|
|
|
var ex = Assert.Throws<ExpressionParseException>(() => target.Parse(reader)); |
|
|
|
Assert.Equal(7, ex.Column); |
|
|
|
|