public void OneWayBindingTest() { ObservableNode sourceRoot = new ObservableNode(); ObservableNode source = new ObservableNode { Value = 1 }; DependencyObjectNode target = new DependencyObjectNode(); int sourcePropertyChangedCount = 0; int targetPropertyChangedCount = 0; source.PropertyChanged += (sender, e) => sourcePropertyChangedCount++; target.PropertyChanged += (sender, e) => targetPropertyChangedCount++; ConversionCounter conversionCounter = new ConversionCounter(); Binding binding = new Binding { Source = sourceRoot, Path = PropertyPath.Parse("Child.Value"), Mode = BindingMode.OneWay, Converter = conversionCounter }; target.SetValue(DependencyObjectNode.ValueProperty, binding); Assert.AreEqual(0, target.Value_ClrWrapper); Assert.AreEqual(0, conversionCounter.ConvertedCount); Assert.AreEqual(0, conversionCounter.ConvertedBackCount); sourceRoot.Child = source; Assert.AreEqual(1, target.Value_ClrWrapper); Assert.AreEqual(1, targetPropertyChangedCount); Assert.AreEqual(1, conversionCounter.ConvertedCount); Assert.AreEqual(0, conversionCounter.ConvertedBackCount); source.Value = 2; Assert.AreEqual(2, target.Value_ClrWrapper); Assert.AreEqual(1, sourcePropertyChangedCount); Assert.AreEqual(2, targetPropertyChangedCount); Assert.AreEqual(2, conversionCounter.ConvertedCount); Assert.AreEqual(0, conversionCounter.ConvertedBackCount); target.Value_ClrWrapper = 3; Assert.AreEqual(2, source.Value); Assert.AreEqual(1, sourcePropertyChangedCount); Assert.AreEqual(3, targetPropertyChangedCount); Assert.AreEqual(2, conversionCounter.ConvertedCount); Assert.AreEqual(0, conversionCounter.ConvertedBackCount); sourceRoot.Child = null; Assert.AreEqual(0, target.Value_ClrWrapper); Assert.AreEqual(4, targetPropertyChangedCount); Assert.AreEqual(2, conversionCounter.ConvertedCount); Assert.AreEqual(0, conversionCounter.ConvertedBackCount); }
public void OneWayBindingTest() { ObservableNode sourceRoot = new ObservableNode(); ObservableNode source = new ObservableNode { Value = 1 }; DependencyObjectNode target = new DependencyObjectNode(); int sourcePropertyChangedCount = 0; int targetPropertyChangedCount = 0; source.PropertyChanged += (sender, e) => sourcePropertyChangedCount++; target.PropertyChanged += (sender, e) => targetPropertyChangedCount++; ConversionCounter conversionCounter = new ConversionCounter(); Binding binding = new Binding { Source = sourceRoot, Path = PropertyPath.Parse("Child.Value"), Mode = BindingMode.OneWay, Converter = conversionCounter }; target.SetValue(DependencyObjectNode.ValueProperty, binding); Assert.AreEqual(0, target.Value_ClrWrapper); Assert.AreEqual(0, conversionCounter.ConvertedCount); Assert.AreEqual(0, conversionCounter.ConvertedBackCount); sourceRoot.Child = source; Assert.AreEqual(1, target.Value_ClrWrapper); Assert.AreEqual(1, targetPropertyChangedCount); Assert.AreEqual(1, conversionCounter.ConvertedCount); Assert.AreEqual(0, conversionCounter.ConvertedBackCount); source.Value = 2; Assert.AreEqual(2, target.Value_ClrWrapper); Assert.AreEqual(1, sourcePropertyChangedCount); Assert.AreEqual(2, targetPropertyChangedCount); Assert.AreEqual(2, conversionCounter.ConvertedCount); Assert.AreEqual(0, conversionCounter.ConvertedBackCount); target.Value_ClrWrapper = 3; Assert.AreEqual(2, source.Value); Assert.AreEqual(1, sourcePropertyChangedCount); Assert.AreEqual(3, targetPropertyChangedCount); Assert.AreEqual(2, conversionCounter.ConvertedCount); Assert.AreEqual(0, conversionCounter.ConvertedBackCount); sourceRoot.Child = null; Assert.AreEqual(0, target.Value_ClrWrapper); Assert.AreEqual(4, targetPropertyChangedCount); Assert.AreEqual(2, conversionCounter.ConvertedCount); Assert.AreEqual(0, conversionCounter.ConvertedBackCount); }
public void ObservableExpressionHybridPropertyTest() { DependencyObjectNode child = new DependencyObjectNode(); ObservableNode observableChild = new ObservableNode { Value = 1 }; DependencyObjectNode root = new DependencyObjectNode { Value_ClrWrapper = 0 }; int valueChangedCount = 0; ObservableExpression observer = new ObservableExpression(root, "Child.ObservableChild.Value"); observer.ValueChanged += (sender, e) => valueChangedCount++; Assert.AreEqual(ObservableValue.UnsetValue, observer.Value); root.Child_ClrWrapper = child; child.ObservableChild_ClrWrapper = observableChild; Assert.AreEqual(1, observer.Value); Assert.AreEqual(1, valueChangedCount); observableChild.Value = 2; Assert.AreEqual(2, observer.Value); Assert.AreEqual(2, valueChangedCount); root.Child_ClrWrapper = null; Assert.AreEqual(ObservableValue.UnsetValue, observer.Value); Assert.AreEqual(3, valueChangedCount); observer.Dispose(); root.Child_ClrWrapper = child; Assert.AreEqual(3, valueChangedCount); }
public void BindingFallbackValueTest() { ObservableNode sourceRoot = new ObservableNode(); ObservableNode source = new ObservableNode(); DependencyObjectNode target = new DependencyObjectNode(); Binding binding = new Binding { Source = sourceRoot, Path = PropertyPath.Parse("Child.Value2"), Mode = BindingMode.TwoWay, FallbackValue = "fallback", TargetNullValue = "null" }; target.SetValue(DependencyObjectNode.Value2Property, binding); Assert.AreEqual("fallback", target.Value2_ClrWrapper); sourceRoot.Child = source; Assert.AreEqual("null", target.Value2_ClrWrapper); source.Value2 = "value"; Assert.AreEqual("value", target.Value2_ClrWrapper); }
public void BindingFallbackValueTest() { ObservableNode sourceRoot = new ObservableNode(); ObservableNode source = new ObservableNode(); DependencyObjectNode target = new DependencyObjectNode(); Binding binding = new Binding { Source = sourceRoot, Path = PropertyPath.Parse("Child.Value2"), Mode = BindingMode.TwoWay, FallbackValue = "fallback", TargetNullValue = "null" }; target.SetValue(DependencyObjectNode.Value2Property, binding); Assert.AreEqual("fallback", target.Value2_ClrWrapper); sourceRoot.Child = source; Assert.AreEqual("null", target.Value2_ClrWrapper); source.Value2 = "value"; Assert.AreEqual("value", target.Value2_ClrWrapper); }
public void ObservableExpressionHybridPropertyTest() { DependencyObjectNode child = new DependencyObjectNode(); ObservableNode observableChild = new ObservableNode { Value = 1 }; DependencyObjectNode root = new DependencyObjectNode { Value_ClrWrapper = 0 }; int valueChangedCount = 0; ObservableExpression observer = new ObservableExpression(root, "Child.ObservableChild.Value"); observer.ValueChanged += (sender, e) => valueChangedCount++; Assert.AreEqual(ObservableValue.UnsetValue, observer.Value); root.Child_ClrWrapper = child; child.ObservableChild_ClrWrapper = observableChild; Assert.AreEqual(1, observer.Value); Assert.AreEqual(1, valueChangedCount); observableChild.Value = 2; Assert.AreEqual(2, observer.Value); Assert.AreEqual(2, valueChangedCount); root.Child_ClrWrapper = null; Assert.AreEqual(ObservableValue.UnsetValue, observer.Value); Assert.AreEqual(3, valueChangedCount); observer.Dispose(); root.Child_ClrWrapper = child; Assert.AreEqual(3, valueChangedCount); }
public void ObservableExpressionDependencyPropertyTest() { DependencyObjectNode child1 = new DependencyObjectNode { Value_ClrWrapper = 1 }; DependencyObjectNode child2 = new DependencyObjectNode { Value_ClrWrapper = 2 }; DependencyObjectNode root = new DependencyObjectNode { Value_ClrWrapper = 0 }; int valueChangedCount = 0; ObservableExpression observableExpression = new ObservableExpression(root, "Child.Value"); observableExpression.ValueChanged += (sender, e) => valueChangedCount++; Assert.AreEqual(ObservableValue.UnsetValue, observableExpression.Value); root.Child_ClrWrapper = child1; Assert.AreEqual(1, observableExpression.Value); Assert.AreEqual(1, valueChangedCount); child1.Value_ClrWrapper = 2; Assert.AreEqual(2, observableExpression.Value); Assert.AreEqual(2, valueChangedCount); root.Child_ClrWrapper = child2; Assert.AreEqual(2, observableExpression.Value); Assert.AreEqual(2, valueChangedCount); child1.Value_ClrWrapper = 3; Assert.AreEqual(2, observableExpression.Value); Assert.AreEqual(2, valueChangedCount); child2.Value_ClrWrapper = 3; Assert.AreEqual(3, observableExpression.Value); Assert.AreEqual(3, valueChangedCount); Assert.AreEqual(true, observableExpression.TrySetValue(4)); Assert.AreEqual(3, child1.Value_ClrWrapper); Assert.AreEqual(4, child2.Value_ClrWrapper); Assert.AreEqual(4, valueChangedCount); root.Child_ClrWrapper = null; Assert.AreEqual(ObservableValue.UnsetValue, observableExpression.Value); Assert.AreEqual(5, valueChangedCount); observableExpression.Dispose(); root.Child_ClrWrapper = child1; Assert.AreEqual(5, valueChangedCount); }
public void ObservableExpressionDependencyPropertyTest() { DependencyObjectNode child1 = new DependencyObjectNode { Value_ClrWrapper = 1 }; DependencyObjectNode child2 = new DependencyObjectNode { Value_ClrWrapper = 2 }; DependencyObjectNode root = new DependencyObjectNode { Value_ClrWrapper = 0 }; int valueChangedCount = 0; ObservableExpression observableExpression = new ObservableExpression(root, "Child.Value"); observableExpression.ValueChanged += (sender, e) => valueChangedCount++; Assert.AreEqual(ObservableValue.UnsetValue, observableExpression.Value); root.Child_ClrWrapper = child1; Assert.AreEqual(1, observableExpression.Value); Assert.AreEqual(1, valueChangedCount); child1.Value_ClrWrapper = 2; Assert.AreEqual(2, observableExpression.Value); Assert.AreEqual(2, valueChangedCount); root.Child_ClrWrapper = child2; Assert.AreEqual(2, observableExpression.Value); Assert.AreEqual(2, valueChangedCount); child1.Value_ClrWrapper = 3; Assert.AreEqual(2, observableExpression.Value); Assert.AreEqual(2, valueChangedCount); child2.Value_ClrWrapper = 3; Assert.AreEqual(3, observableExpression.Value); Assert.AreEqual(3, valueChangedCount); Assert.AreEqual(true, observableExpression.TrySetValue(4)); Assert.AreEqual(3, child1.Value_ClrWrapper); Assert.AreEqual(4, child2.Value_ClrWrapper); Assert.AreEqual(4, valueChangedCount); root.Child_ClrWrapper = null; Assert.AreEqual(ObservableValue.UnsetValue, observableExpression.Value); Assert.AreEqual(5, valueChangedCount); observableExpression.Dispose(); root.Child_ClrWrapper = child1; Assert.AreEqual(5, valueChangedCount); }