public void ObservableExpressionCallsTest()
        {
            CallsTestElement element = new CallsTestElement();

            element.Value = 1;

            Assert.AreEqual(0, element.ValueGetterCallsCount);
            Assert.AreEqual(1, element.ValueSetterCallsCount);

            ObservableExpression observer = new ObservableExpression(element, "Value");

            Assert.AreEqual(1, element.ValueGetterCallsCount);
            Assert.AreEqual(1, element.ValueSetterCallsCount);
            Assert.AreEqual(1, observer.Value);

            Assert.IsTrue(observer.TrySetValue(2));

            Assert.AreEqual(2, element.ValueGetterCallsCount);
            Assert.AreEqual(2, element.ValueSetterCallsCount);
            Assert.AreEqual(2, observer.Value);

            Assert.IsTrue(observer.TrySetValue(2));

            Assert.AreEqual(2, element.ValueGetterCallsCount);
            Assert.AreEqual(2, element.ValueSetterCallsCount);
            Assert.AreEqual(2, observer.Value);

            Assert.IsTrue(observer.TrySetValue(3));

            Assert.AreEqual(3, element.ValueGetterCallsCount);
            Assert.AreEqual(3, element.ValueSetterCallsCount);
            Assert.AreEqual(3, observer.Value);
        }
        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);
        }
예제 #3
0
        public void ObservableExpressionClrPropertyTest()
        {
            ObservableNode child1 = new ObservableNode {
                Value = 1
            };
            ObservableNode child2 = new ObservableNode {
                Value = 2
            };

            ObservableNode root = new ObservableNode {
                Value = 0
            };

            int valueChangedCount = 0;

            ObservableExpression observableExpression = new ObservableExpression(root, "Child.Value");

            observableExpression.ValueChanged += (sender, oldValue, newValue) => valueChangedCount++;

            Assert.AreEqual(ObservableValue.UnsetValue, observableExpression.Value);

            root.Child = child1;

            Assert.AreEqual(1, observableExpression.Value);
            Assert.AreEqual(1, valueChangedCount);

            child1.Value = 2;

            Assert.AreEqual(2, observableExpression.Value);
            Assert.AreEqual(2, valueChangedCount);

            root.Child = child2;

            Assert.AreEqual(2, observableExpression.Value);
            Assert.AreEqual(2, valueChangedCount);

            child1.Value = 3;

            Assert.AreEqual(2, observableExpression.Value);
            Assert.AreEqual(2, valueChangedCount);

            child2.Value = 3;

            Assert.AreEqual(3, observableExpression.Value);
            Assert.AreEqual(3, valueChangedCount);

            Assert.AreEqual(true, observableExpression.TrySetValue(4));
            Assert.AreEqual(3, child1.Value);
            Assert.AreEqual(4, child2.Value);
            Assert.AreEqual(4, valueChangedCount);

            root.Child = null;

            Assert.AreEqual(ObservableValue.UnsetValue, observableExpression.Value);
            Assert.AreEqual(5, valueChangedCount);

            observableExpression.Dispose();

            root.Child = child1;
            Assert.AreEqual(5, valueChangedCount);
        }