Browse Source

Renamed ExpressionSubject -> BindingExpression.

`ExpressionSubject` wasn't a good name as the important thing it isn't
convert an `ExpressionObserver` into an `ISubject`. The important thing
it does is insert an `IValueConverter` into the pipeline.
Steven Kirk 9 years ago
parent
commit
079d481e36

+ 1 - 1
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,

+ 1 - 1
src/Markup/Avalonia.Markup/Avalonia.Markup.csproj

@@ -46,7 +46,7 @@
     <Compile Include="Data\EmptyExpressionNode.cs" />
     <Compile Include="Data\ExpressionNodeBuilder.cs" />
     <Compile Include="Data\ExpressionParseException.cs" />
-    <Compile Include="Data\ExpressionSubject.cs" />
+    <Compile Include="Data\BindingExpression.cs" />
     <Compile Include="ControlLocator.cs" />
     <Compile Include="Data\Plugins\DataAnnotationsValidationPlugin.cs" />
     <Compile Include="Data\Plugins\ExceptionValidationPlugin.cs" />

+ 6 - 6
src/Markup/Avalonia.Markup/Data/ExpressionSubject.cs → src/Markup/Avalonia.Markup/Data/BindingExpression.cs

@@ -12,10 +12,10 @@ using Avalonia.Utilities;
 namespace Avalonia.Markup.Data
 {
     /// <summary>
-    /// Turns an <see cref="ExpressionObserver"/> 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.
     /// </summary>
-    public class ExpressionSubject : ISubject<object>, IDescription
+    public class BindingExpression : ISubject<object>, IDescription
     {
         private readonly ExpressionObserver _inner;
         private readonly Type _targetType;
@@ -28,7 +28,7 @@ namespace Avalonia.Markup.Data
         /// </summary>
         /// <param name="inner">The <see cref="ExpressionObserver"/>.</param>
         /// <param name="targetType">The type to convert the value to.</param>
-        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 <paramref name="converter"/>.
         /// </param>
         /// <param name="priority">The binding priority.</param>
-        public ExpressionSubject(
+        public BindingExpression(
             ExpressionObserver inner,
             Type targetType,
             IValueConverter converter,
@@ -66,7 +66,7 @@ namespace Avalonia.Markup.Data
         /// A parameter to pass to <paramref name="converter"/>.
         /// </param>
         /// <param name="priority">The binding priority.</param>
-        public ExpressionSubject(
+        public BindingExpression(
             ExpressionObserver inner, 
             Type targetType,
             object fallbackValue,

+ 1 - 1
tests/Avalonia.Markup.UnitTests/Avalonia.Markup.UnitTests.csproj

@@ -111,7 +111,7 @@
     <Compile Include="Data\ExpressionObserverTests_SetValue.cs" />
     <Compile Include="Data\ExpressionObserverTests_Task.cs" />
     <Compile Include="Data\ExpressionObserverTests_DataValidation.cs" />
-    <Compile Include="Data\ExpressionSubjectTests.cs" />
+    <Compile Include="Data\BindingExpressionTests.cs" />
     <Compile Include="DefaultValueConverterTests.cs" />
     <Compile Include="Properties\AssemblyInfo.cs" />
     <Compile Include="UnitTestSynchronizationContext.cs" />

+ 24 - 25
tests/Avalonia.Markup.UnitTests/Data/ExpressionSubjectTests.cs → 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<BindingNotification>(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<IValueConverter>();
-            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<IValueConverter>();
-            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<IValueConverter>();
-            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<object>();
 
             target.Subscribe(x => result.Add(x));

+ 3 - 3
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<DefaultValueConverter>(((ExpressionSubject)result).Converter);
+            Assert.IsType<DefaultValueConverter>(((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]

+ 3 - 7
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);