From d37615bea848e83ff19c9d4fd3904f8c677f48bf Mon Sep 17 00:00:00 2001 From: Steven Kirk Date: Sat, 2 Mar 2019 16:34:29 +0100 Subject: [PATCH] Added failing test for #1898. Plus a couple of other empty binding path tests. --- .../Data/BindingTests.cs | 33 +++++++++++++++++++ .../Parsers/ExpressionNodeBuilderTests.cs | 9 +++++ .../ExpressionNodeBuilderTests_Errors.cs | 7 ++++ 3 files changed, 49 insertions(+) diff --git a/tests/Avalonia.Markup.UnitTests/Data/BindingTests.cs b/tests/Avalonia.Markup.UnitTests/Data/BindingTests.cs index 82b57224f0..baa1bca76a 100644 --- a/tests/Avalonia.Markup.UnitTests/Data/BindingTests.cs +++ b/tests/Avalonia.Markup.UnitTests/Data/BindingTests.cs @@ -273,6 +273,39 @@ namespace Avalonia.Markup.UnitTests.Data Assert.Equal(42, target.Value); } + [Fact] + public void Null_Path_Should_Bind_To_DataContext() + { + var target = new TextBlock { DataContext = "foo" }; + var binding = new Binding(); + + target.Bind(TextBlock.TextProperty, binding); + + Assert.Equal("foo", target.Text); + } + + [Fact] + public void Empty_Path_Should_Bind_To_DataContext() + { + var target = new TextBlock { DataContext = "foo" }; + var binding = new Binding { Path = string.Empty }; + + target.Bind(TextBlock.TextProperty, binding); + + Assert.Equal("foo", target.Text); + } + + [Fact] + public void Dot_Path_Should_Bind_To_DataContext() + { + var target = new TextBlock { DataContext = "foo" }; + var binding = new Binding { Path = "." }; + + target.Bind(TextBlock.TextProperty, binding); + + Assert.Equal("foo", target.Text); + } + /// /// Tests a problem discovered with ListBox with selection. /// diff --git a/tests/Avalonia.Markup.UnitTests/Parsers/ExpressionNodeBuilderTests.cs b/tests/Avalonia.Markup.UnitTests/Parsers/ExpressionNodeBuilderTests.cs index 2d687ff4f7..7061915a52 100644 --- a/tests/Avalonia.Markup.UnitTests/Parsers/ExpressionNodeBuilderTests.cs +++ b/tests/Avalonia.Markup.UnitTests/Parsers/ExpressionNodeBuilderTests.cs @@ -36,6 +36,15 @@ namespace Avalonia.Markup.UnitTests.Parsers AssertIsProperty(result[0], "F0o"); } + [Fact] + public void Should_Build_Dot() + { + var result = ToList(ExpressionObserverBuilder.Parse(".")); + + Assert.Equal(1, result.Count); + Assert.IsType(result[0]); + } + [Fact] public void Should_Build_Property_Chain() { diff --git a/tests/Avalonia.Markup.UnitTests/Parsers/ExpressionNodeBuilderTests_Errors.cs b/tests/Avalonia.Markup.UnitTests/Parsers/ExpressionNodeBuilderTests_Errors.cs index 347fc0a744..ac385b4cab 100644 --- a/tests/Avalonia.Markup.UnitTests/Parsers/ExpressionNodeBuilderTests_Errors.cs +++ b/tests/Avalonia.Markup.UnitTests/Parsers/ExpressionNodeBuilderTests_Errors.cs @@ -30,6 +30,13 @@ namespace Avalonia.Markup.UnitTests.Parsers () => ExpressionObserverBuilder.Parse("Foo.Bar.")); } + [Fact] + public void Expression_Cannot_Start_With_Period_Then_Token() + { + Assert.Throws( + () => ExpressionObserverBuilder.Parse(".Bar")); + } + [Fact] public void Expression_Cannot_Have_Empty_Indexer() {