diff --git a/src/Markup/Avalonia.Markup.Xaml/Data/Binding.cs b/src/Markup/Avalonia.Markup.Xaml/Data/Binding.cs index 832a25be27..086257f24c 100644 --- a/src/Markup/Avalonia.Markup.Xaml/Data/Binding.cs +++ b/src/Markup/Avalonia.Markup.Xaml/Data/Binding.cs @@ -135,7 +135,7 @@ namespace Avalonia.Markup.Xaml.Data fallback = null; } - var subject = new ExpressionSubject( + var subject = new BindingExpression( observer, targetProperty?.PropertyType ?? typeof(object), fallback, diff --git a/src/Markup/Avalonia.Markup/Avalonia.Markup.csproj b/src/Markup/Avalonia.Markup/Avalonia.Markup.csproj index 9edfd2957d..738f381f4e 100644 --- a/src/Markup/Avalonia.Markup/Avalonia.Markup.csproj +++ b/src/Markup/Avalonia.Markup/Avalonia.Markup.csproj @@ -46,7 +46,7 @@ - + diff --git a/src/Markup/Avalonia.Markup/Data/ExpressionSubject.cs b/src/Markup/Avalonia.Markup/Data/BindingExpression.cs similarity index 96% rename from src/Markup/Avalonia.Markup/Data/ExpressionSubject.cs rename to src/Markup/Avalonia.Markup/Data/BindingExpression.cs index cb587c683b..0f4c091bff 100644 --- a/src/Markup/Avalonia.Markup/Data/ExpressionSubject.cs +++ b/src/Markup/Avalonia.Markup/Data/BindingExpression.cs @@ -12,10 +12,10 @@ using Avalonia.Utilities; namespace Avalonia.Markup.Data { /// - /// Turns an into a subject that can be bound two-way with - /// a value converter. + /// Binds to an expression on an object using a type value converter to convert the values + /// that are send and received. /// - public class ExpressionSubject : ISubject, IDescription + public class BindingExpression : ISubject, IDescription { private readonly ExpressionObserver _inner; private readonly Type _targetType; @@ -28,7 +28,7 @@ namespace Avalonia.Markup.Data /// /// The . /// The type to convert the value to. - public ExpressionSubject(ExpressionObserver inner, Type targetType) + public BindingExpression(ExpressionObserver inner, Type targetType) : this(inner, targetType, DefaultValueConverter.Instance) { } @@ -43,7 +43,7 @@ namespace Avalonia.Markup.Data /// A parameter to pass to . /// /// The binding priority. - public ExpressionSubject( + public BindingExpression( ExpressionObserver inner, Type targetType, IValueConverter converter, @@ -66,7 +66,7 @@ namespace Avalonia.Markup.Data /// A parameter to pass to . /// /// The binding priority. - public ExpressionSubject( + public BindingExpression( ExpressionObserver inner, Type targetType, object fallbackValue, diff --git a/tests/Avalonia.Markup.UnitTests/Avalonia.Markup.UnitTests.csproj b/tests/Avalonia.Markup.UnitTests/Avalonia.Markup.UnitTests.csproj index 55160f1698..66d234ac19 100644 --- a/tests/Avalonia.Markup.UnitTests/Avalonia.Markup.UnitTests.csproj +++ b/tests/Avalonia.Markup.UnitTests/Avalonia.Markup.UnitTests.csproj @@ -111,7 +111,7 @@ - + diff --git a/tests/Avalonia.Markup.UnitTests/Data/ExpressionSubjectTests.cs b/tests/Avalonia.Markup.UnitTests/Data/BindingExpressionTests.cs similarity index 89% rename from tests/Avalonia.Markup.UnitTests/Data/ExpressionSubjectTests.cs rename to tests/Avalonia.Markup.UnitTests/Data/BindingExpressionTests.cs index 1af35d692b..c53dc417b0 100644 --- a/tests/Avalonia.Markup.UnitTests/Data/ExpressionSubjectTests.cs +++ b/tests/Avalonia.Markup.UnitTests/Data/BindingExpressionTests.cs @@ -2,26 +2,25 @@ // Licensed under the MIT license. See licence.md file in the project root for full license information. using System; -using System.ComponentModel; +using System.Collections.Generic; using System.Globalization; using System.Reactive.Linq; -using Moq; +using System.Threading; using Avalonia.Data; using Avalonia.Markup.Data; -using Xunit; -using System.Threading; -using System.Collections.Generic; using Avalonia.UnitTests; +using Moq; +using Xunit; namespace Avalonia.Markup.UnitTests.Data { - public class ExpressionSubjectTests + public class BindingExpressionTests { [Fact] public async void Should_Get_Simple_Property_Value() { var data = new Class1 { StringValue = "foo" }; - var target = new ExpressionSubject(new ExpressionObserver(data, "StringValue"), typeof(string)); + var target = new BindingExpression(new ExpressionObserver(data, "StringValue"), typeof(string)); var result = await target.Take(1); Assert.Equal("foo", result); @@ -31,7 +30,7 @@ namespace Avalonia.Markup.UnitTests.Data public void Should_Set_Simple_Property_Value() { var data = new Class1 { StringValue = "foo" }; - var target = new ExpressionSubject(new ExpressionObserver(data, "StringValue"), typeof(string)); + var target = new BindingExpression(new ExpressionObserver(data, "StringValue"), typeof(string)); target.OnNext("bar"); @@ -44,7 +43,7 @@ namespace Avalonia.Markup.UnitTests.Data Thread.CurrentThread.CurrentUICulture = CultureInfo.InvariantCulture; var data = new Class1 { StringValue = "5.6" }; - var target = new ExpressionSubject(new ExpressionObserver(data, "StringValue"), typeof(double)); + var target = new BindingExpression(new ExpressionObserver(data, "StringValue"), typeof(double)); var result = await target.Take(1); Assert.Equal(5.6, result); @@ -54,7 +53,7 @@ namespace Avalonia.Markup.UnitTests.Data public async void Getting_Invalid_Double_String_Should_Return_BindingError() { var data = new Class1 { StringValue = "foo" }; - var target = new ExpressionSubject(new ExpressionObserver(data, "StringValue"), typeof(double)); + var target = new BindingExpression(new ExpressionObserver(data, "StringValue"), typeof(double)); var result = await target.Take(1); Assert.IsType(result); @@ -64,7 +63,7 @@ namespace Avalonia.Markup.UnitTests.Data public async void Should_Coerce_Get_Null_Double_String_To_UnsetValue() { var data = new Class1 { StringValue = null }; - var target = new ExpressionSubject(new ExpressionObserver(data, "StringValue"), typeof(double)); + var target = new BindingExpression(new ExpressionObserver(data, "StringValue"), typeof(double)); var result = await target.Take(1); Assert.Equal(AvaloniaProperty.UnsetValue, result); @@ -76,7 +75,7 @@ namespace Avalonia.Markup.UnitTests.Data Thread.CurrentThread.CurrentUICulture = CultureInfo.InvariantCulture; var data = new Class1 { StringValue = (5.6).ToString() }; - var target = new ExpressionSubject(new ExpressionObserver(data, "StringValue"), typeof(double)); + var target = new BindingExpression(new ExpressionObserver(data, "StringValue"), typeof(double)); target.OnNext(6.7); @@ -89,7 +88,7 @@ namespace Avalonia.Markup.UnitTests.Data Thread.CurrentThread.CurrentUICulture = CultureInfo.InvariantCulture; var data = new Class1 { DoubleValue = 5.6 }; - var target = new ExpressionSubject(new ExpressionObserver(data, "DoubleValue"), typeof(string)); + var target = new BindingExpression(new ExpressionObserver(data, "DoubleValue"), typeof(string)); var result = await target.Take(1); Assert.Equal((5.6).ToString(), result); @@ -101,7 +100,7 @@ namespace Avalonia.Markup.UnitTests.Data Thread.CurrentThread.CurrentUICulture = CultureInfo.InvariantCulture; var data = new Class1 { DoubleValue = 5.6 }; - var target = new ExpressionSubject(new ExpressionObserver(data, "DoubleValue"), typeof(string)); + var target = new BindingExpression(new ExpressionObserver(data, "DoubleValue"), typeof(string)); target.OnNext("6.7"); @@ -114,7 +113,7 @@ namespace Avalonia.Markup.UnitTests.Data Thread.CurrentThread.CurrentUICulture = CultureInfo.InvariantCulture; var data = new Class1 { StringValue = "foo" }; - var target = new ExpressionSubject( + var target = new BindingExpression( new ExpressionObserver(data, "StringValue"), typeof(int), 42, @@ -135,7 +134,7 @@ namespace Avalonia.Markup.UnitTests.Data Thread.CurrentThread.CurrentUICulture = CultureInfo.InvariantCulture; var data = new Class1 { StringValue = "foo" }; - var target = new ExpressionSubject( + var target = new BindingExpression( new ExpressionObserver(data, "StringValue", true), typeof(int), 42, @@ -156,7 +155,7 @@ namespace Avalonia.Markup.UnitTests.Data Thread.CurrentThread.CurrentUICulture = CultureInfo.InvariantCulture; var data = new Class1 { StringValue = "foo" }; - var target = new ExpressionSubject( + var target = new BindingExpression( new ExpressionObserver(data, "StringValue"), typeof(int), "bar", @@ -178,7 +177,7 @@ namespace Avalonia.Markup.UnitTests.Data Thread.CurrentThread.CurrentUICulture = CultureInfo.InvariantCulture; var data = new Class1 { StringValue = "foo" }; - var target = new ExpressionSubject( + var target = new BindingExpression( new ExpressionObserver(data, "StringValue", true), typeof(int), "bar", @@ -198,7 +197,7 @@ namespace Avalonia.Markup.UnitTests.Data public void Setting_Invalid_Double_String_Should_Not_Change_Target() { var data = new Class1 { DoubleValue = 5.6 }; - var target = new ExpressionSubject(new ExpressionObserver(data, "DoubleValue"), typeof(string)); + var target = new BindingExpression(new ExpressionObserver(data, "DoubleValue"), typeof(string)); target.OnNext("foo"); @@ -209,7 +208,7 @@ namespace Avalonia.Markup.UnitTests.Data public void Setting_Invalid_Double_String_Should_Use_FallbackValue() { var data = new Class1 { DoubleValue = 5.6 }; - var target = new ExpressionSubject( + var target = new BindingExpression( new ExpressionObserver(data, "DoubleValue"), typeof(string), "9.8", @@ -224,7 +223,7 @@ namespace Avalonia.Markup.UnitTests.Data public void Should_Coerce_Setting_Null_Double_To_Default_Value() { var data = new Class1 { DoubleValue = 5.6 }; - var target = new ExpressionSubject(new ExpressionObserver(data, "DoubleValue"), typeof(string)); + var target = new BindingExpression(new ExpressionObserver(data, "DoubleValue"), typeof(string)); target.OnNext(null); @@ -235,7 +234,7 @@ namespace Avalonia.Markup.UnitTests.Data public void Should_Coerce_Setting_UnsetValue_Double_To_Default_Value() { var data = new Class1 { DoubleValue = 5.6 }; - var target = new ExpressionSubject(new ExpressionObserver(data, "DoubleValue"), typeof(string)); + var target = new BindingExpression(new ExpressionObserver(data, "DoubleValue"), typeof(string)); target.OnNext(AvaloniaProperty.UnsetValue); @@ -247,7 +246,7 @@ namespace Avalonia.Markup.UnitTests.Data { var data = new Class1 { DoubleValue = 5.6 }; var converter = new Mock(); - var target = new ExpressionSubject( + var target = new BindingExpression( new ExpressionObserver(data, "DoubleValue"), typeof(string), converter.Object, @@ -263,7 +262,7 @@ namespace Avalonia.Markup.UnitTests.Data { var data = new Class1 { DoubleValue = 5.6 }; var converter = new Mock(); - var target = new ExpressionSubject( + var target = new BindingExpression( new ExpressionObserver(data, "DoubleValue"), typeof(string), converter.Object, @@ -279,7 +278,7 @@ namespace Avalonia.Markup.UnitTests.Data { var data = new Class1 { DoubleValue = 5.6 }; var converter = new Mock(); - var target = new ExpressionSubject(new ExpressionObserver(data, "DoubleValue", true), typeof(string)); + var target = new BindingExpression(new ExpressionObserver(data, "DoubleValue", true), typeof(string)); var result = new List(); target.Subscribe(x => result.Add(x)); diff --git a/tests/Avalonia.Markup.Xaml.UnitTests/Data/BindingTests.cs b/tests/Avalonia.Markup.Xaml.UnitTests/Data/BindingTests.cs index b07a031e15..210ad2ab0b 100644 --- a/tests/Avalonia.Markup.Xaml.UnitTests/Data/BindingTests.cs +++ b/tests/Avalonia.Markup.Xaml.UnitTests/Data/BindingTests.cs @@ -200,7 +200,7 @@ namespace Avalonia.Markup.Xaml.UnitTests.Data var result = binding.Initiate(target, TextBox.TextProperty).Subject; - Assert.IsType(((ExpressionSubject)result).Converter); + Assert.IsType(((BindingExpression)result).Converter); } [Fact] @@ -216,7 +216,7 @@ namespace Avalonia.Markup.Xaml.UnitTests.Data var result = binding.Initiate(target, TextBox.TextProperty).Subject; - Assert.Same(converter.Object, ((ExpressionSubject)result).Converter); + Assert.Same(converter.Object, ((BindingExpression)result).Converter); } [Fact] @@ -233,7 +233,7 @@ namespace Avalonia.Markup.Xaml.UnitTests.Data var result = binding.Initiate(target, TextBox.TextProperty).Subject; - Assert.Same("foo", ((ExpressionSubject)result).ConverterParameter); + Assert.Same("foo", ((BindingExpression)result).ConverterParameter); } [Fact] diff --git a/tests/Avalonia.Markup.Xaml.UnitTests/Data/BindingTests_DataValidation.cs b/tests/Avalonia.Markup.Xaml.UnitTests/Data/BindingTests_DataValidation.cs index 4f175ccf5b..5dd8d0cdf9 100644 --- a/tests/Avalonia.Markup.Xaml.UnitTests/Data/BindingTests_DataValidation.cs +++ b/tests/Avalonia.Markup.Xaml.UnitTests/Data/BindingTests_DataValidation.cs @@ -2,15 +2,11 @@ // Licensed under the MIT license. See licence.md file in the project root for full license information. using System; -using System.Collections.Generic; -using System.Linq; using System.Reactive.Linq; using Avalonia.Controls; using Avalonia.Data; using Avalonia.Markup.Data; using Avalonia.Markup.Xaml.Data; -using Moq; -using ReactiveUI; using Xunit; namespace Avalonia.Markup.Xaml.UnitTests.Data @@ -27,7 +23,7 @@ namespace Avalonia.Markup.Xaml.UnitTests.Data var target = new Binding(nameof(Class1.Foo)); var instanced = target.Initiate(textBlock, TextBlock.TextProperty, enableDataValidation: false); - var subject = (ExpressionSubject)instanced.Subject; + var subject = (BindingExpression)instanced.Subject; object result = null; subject.Subscribe(x => result = x); @@ -45,7 +41,7 @@ namespace Avalonia.Markup.Xaml.UnitTests.Data var target = new Binding(nameof(Class1.Foo)); var instanced = target.Initiate(textBlock, TextBlock.TextProperty, enableDataValidation: true); - var subject = (ExpressionSubject)instanced.Subject; + var subject = (BindingExpression)instanced.Subject; object result = null; subject.Subscribe(x => result = x); @@ -63,7 +59,7 @@ namespace Avalonia.Markup.Xaml.UnitTests.Data var target = new Binding(nameof(Class1.Foo)) { Priority = BindingPriority.TemplatedParent }; var instanced = target.Initiate(textBlock, TextBlock.TextProperty, enableDataValidation: true); - var subject = (ExpressionSubject)instanced.Subject; + var subject = (BindingExpression)instanced.Subject; object result = null; subject.Subscribe(x => result = x);