From f24ab044f78edf98fb9bd69c2b624adbc5da1c1e Mon Sep 17 00:00:00 2001 From: Steven Kirk Date: Wed, 15 Jun 2016 00:26:00 +0200 Subject: [PATCH] Added failing binding tests. --- .../Data/BindingTests.cs | 54 ++++++++++++++++++- 1 file changed, 53 insertions(+), 1 deletion(-) diff --git a/tests/Avalonia.Markup.Xaml.UnitTests/Data/BindingTests.cs b/tests/Avalonia.Markup.Xaml.UnitTests/Data/BindingTests.cs index ca65b763f5..c5a1744810 100644 --- a/tests/Avalonia.Markup.Xaml.UnitTests/Data/BindingTests.cs +++ b/tests/Avalonia.Markup.Xaml.UnitTests/Data/BindingTests.cs @@ -1,11 +1,13 @@ // Copyright (c) The Avalonia Project. All rights reserved. // Licensed under the MIT license. See licence.md file in the project root for full license information. -using Moq; +using System; +using System.Collections.Generic; using Avalonia.Controls; using Avalonia.Data; using Avalonia.Markup.Data; using Avalonia.Markup.Xaml.Data; +using Moq; using ReactiveUI; using Xunit; @@ -112,6 +114,24 @@ namespace Avalonia.Markup.Xaml.UnitTests.Data Assert.Equal("baz", source.Foo); } + [Fact] + public void Broken_Binding_Should_Use_Default_Value_Instead_Of_Inherited_Value() + { + var parent = new InheritanceTest() + { + Baz = 9, + DataContext = "data", + }; + + var child = new InheritanceTest(); + var bazBinding = new Binding("Missing"); + parent.Child = child; + + child.Bind(InheritanceTest.BazProperty, bazBinding); + + Assert.Equal(6, child.Baz); + } + [Fact] public void DataContext_Binding_Should_Use_Parent_DataContext() { @@ -159,6 +179,26 @@ namespace Avalonia.Markup.Xaml.UnitTests.Data Assert.Equal("foo", child.DataContext); } + [Fact] + public void DataContext_Binding_Should_Produce_Correct_Results() + { + var root = new Decorator + { + DataContext = new { Foo = "bar" }, + }; + + var child = new Control(); + var dataContextBinding = new Binding("Foo"); + var values = new List(); + + child.GetObservable(Border.DataContextProperty).Subscribe(x => values.Add(x)); + child.Bind(ContentControl.DataContextProperty, dataContextBinding); + + root.Child = child; + + Assert.Equal(new[] { null, "bar" }, values); + } + [Fact] public void Should_Use_DefaultValueConverter_When_No_Converter_Specified() { @@ -337,5 +377,17 @@ namespace Avalonia.Markup.Xaml.UnitTests.Data Bind(BarProperty, this.GetObservable(FooProperty)); } } + + private class InheritanceTest : Decorator + { + public static readonly StyledProperty BazProperty = + AvaloniaProperty.Register("Baz", defaultValue: 6, inherits: true); + + public int Baz + { + get { return GetValue(BazProperty); } + set { SetValue(BazProperty, value); } + } + } } }