예제 #1
0
        public void When_Subscribe_With_Two_Node_Path_To_Property_And_Modify_Node_One_Then_OnNext_Changes()
        {
            // Arrange
            var obj = new TestObservableObject {ObservableChild = new TestObservableObject {Age = 3}};
            var replacementChild = new TestObservableObject {Age = 5};
            var scheduler = new TestScheduler();
            var observer = scheduler.CreateObserver<IPropertyChanged<TestObservableObject>>();
            var expected = new[]
            {
                OnNext(000, PropertyChanged.Create(obj.ObservableChild)),
                OnNext(010, PropertyChanged.Create(replacementChild)),
                OnNext(010, PropertyChanged.Create(replacementChild, "Age")),
            };

            var sut = obj.WhenAny(x => x.ObservableChild);

            // Act
            sut.Subscribe(observer);
            scheduler.AdvanceTo(10);
            obj.ObservableChild = replacementChild;
            obj.ObservableChild.Age = 17;

            // Assert
            Assert.AreEqual(expected, observer.Messages);
        }
        public void When_Path_Has_Null_Intermediary_Node_Then_Propagates_ProvertyValueChanged_With_HasValue_False()
        {
            // Arrange
            var childOne = new TestObservableObject {Age = 5};
            var childTwo = new TestObservableObject {Age = 17};
            var obj = new TestObservableObject {ObservableChild = childOne};
            var scheduler = new TestScheduler();

            var observer = scheduler.CreateObserver<IPropertyValueChanged<int>>();
            var expected = new[]
            {
                OnNext(000, PropertyValueChanged.CreateWithValue(childOne, "Age", childOne.Age)),
                OnNext(000, PropertyValueChanged.CreateWithValue(childOne, "Age", 20)),
                OnNext(100, PropertyValueChanged.CreateWithoutValue<TestObservableObject, int>(null, "Age")),
                OnNext(300, PropertyValueChanged.CreateWithValue(childTwo, "Age", childTwo.Age)),
            };

            var sut = obj.When(x => x.ObservableChild.Age);

            // Act
            sut.Subscribe(observer);
            obj.ObservableChild.Age = 20;
            scheduler.AdvanceTo(100);
            obj.ObservableChild = null;
            scheduler.AdvanceTo(300);
            obj.ObservableChild = childTwo;

            // Assert
            Assert.AreEqual(expected, observer.Messages);
        }
        public void When_Path_Has_Null_Intermediary_Node_Then_Skips_When_Invalid_Path()
        {
            // Arrange
            var childOne = new TestObservableObject {Age = 5};
            var childTwo = new TestObservableObject {Age = 17};
            var obj = new TestObservableObject {ObservableChild = childOne};
            var scheduler = new TestScheduler();

            var observer = scheduler.CreateObserver<int>();
            var expected = new[]
            {
                OnNext(000, childOne.Age),
                OnNext(000, 20),
                OnNext(300, childTwo.Age),
            };

            var sut = obj.WhenValue(x => x.ObservableChild.Age);

            // Act
            sut.Subscribe(observer);
            obj.ObservableChild.Age = 20;
            scheduler.AdvanceTo(100);
            obj.ObservableChild = null;
            scheduler.AdvanceTo(300);
            obj.ObservableChild = childTwo;

            // Assert
            Assert.AreEqual(expected, observer.Messages);
        }
예제 #4
0
        public void When_Subscribed_Then_OnNext_Changes()
        {
            // Arrange
            var obj = new TestObservableObject {ObservableChild = new TestObservableObject {Age = 3}};
            var replacementChild = new TestObservableObject {Age = 5};
            var scheduler = new TestScheduler();
            var observer = scheduler.CreateObserver<TestObservableObject>();
            var expected = new[]
            {
                OnNext(000, obj.ObservableChild),
                OnNext(010, replacementChild),
                OnNext(010, replacementChild),
                OnNext(020, replacementChild),
            };

            var sut = obj.WhenAny(x => x.ObservableChild).ForProperty<TestObservableObject>("Age", "Name");

            // Act
            sut.Subscribe(observer);
            scheduler.AdvanceTo(10);
            obj.ObservableChild = replacementChild;
            obj.ObservableChild.Age = 17;
            scheduler.AdvanceTo(20);
            obj.ObservableChild.Name = "Billy";

            // Assert
            Assert.AreEqual(expected, observer.Messages);
        }
예제 #5
0
        public void When_Setting_Property_To_Same_Value_Then_Does_Not_Fire_PropertyChanged()
        {
            // Arrange
            var propertyChangedCount = 0;
            var sut = new TestObservableObject {Age = 10};
            sut.PropertyChanged += (sender, args) => ++propertyChangedCount;

            // Act
            sut.Age = 10;

            // Assert
            Assert.AreEqual(0, propertyChangedCount);
        }
예제 #6
0
        public void When_Setting_Property_To_New_Value_And_Property_Changed_Suppressed_Then_Does_Not_Fire_PropertyChanged()
        {
            // Arrange
            var propertyChangedCount = 0;
            var sut = new TestObservableObject {Age = 10};
            sut.PropertyChanged += (sender, args) => ++propertyChangedCount;

            // Act
            using (sut.SuppressPropertyChanged())
                sut.Age = 3;

            // Assert
            Assert.AreEqual(0, propertyChangedCount);
        }
예제 #7
0
        public void When_Setting_Property_To_New_Value_Then_Fires_PropertyChanged()
        {
            // Arrange
            var propertyChanges = new List<PropertyChangedEventArgsEx>();
            var sut = new TestObservableObject {Age = 10};
            sut.PropertyChanged += (sender, args) => propertyChanges.Add((PropertyChangedEventArgsEx) args);
            var expectedPropertyChange = new PropertyChangedEventArgsEx("Age");

            // Act
            sut.Age = 5;

            // Assert
            Assert.AreEqual(5, sut.Age);
            Assert.AreEqual(1, propertyChanges.Count);
            Assert.AreEqual(expectedPropertyChange, propertyChanges[0]);
        }
예제 #8
0
        public void When_Subscribe_To_Property_With_Broken_Path_Then_OnNext_Initial_Image_With_Null_Source()
        {
            // Arrange
            var obj = new TestObservableObject();
            var scheduler = new TestScheduler();
            var observer = scheduler.CreateObserver<IPropertyChanged<TestObservableObject>>();
            var expected = new[]
            {
                OnNext(000, PropertyChanged.Create(default(TestObservableObject))),
            };

            var sut = obj.WhenAny(x => x.PocoChild.ObservableChild);

            // Act
            sut.Subscribe(observer);

            // Assert
            Assert.AreEqual(expected, observer.Messages);
        }
예제 #9
0
        public void When_Subscribe_With_One_Node_Path_To_Property_Then_OnNext_Initial_Image_And_Changes()
        {
            // Arrange
            var obj = new TestObservableObject {Age = 5};
            var scheduler = new TestScheduler();
            var observer = scheduler.CreateObserver<IPropertyChanged<TestObservableObject>>();
            var expected = new[]
            {
                OnNext(000, PropertyChanged.Create(obj)),
                OnNext(000, PropertyChanged.Create(obj, "Age")),
            };

            var sut = obj.WhenAny();

            // Act
            sut.Subscribe(observer);
            obj.Age = 10;

            // Assert
            Assert.AreEqual(expected, observer.Messages);
        }
        public void When_Subscribe_Then_Returns_Default_Value_At_Time_Of_Subscribe_And_Subsequent_Values()
        {
            // Arrange
            var obj = new TestObservableObject() {Age = 2};
            var scheduler = new TestScheduler();
            var observer = scheduler.CreateObserver<IPropertyChanged<TestObservableObject>>();
            var expected = new[]
            {
                OnNext(00, PropertyChanged.Create(obj)),
                OnNext(20, PropertyChanged.Create(obj, "Age")),
                OnNext(30, PropertyChanged.Create(obj, "Age")),
                OnNext(40, PropertyChanged.Create(obj, "Name")),
            };

            var sut = new NotifyPropertyChangedObservable<TestObservableObject>(obj.ToPropertyValueChangedObservable());

            // Act
            sut.Subscribe(observer);
            scheduler.AdvanceTo(20);
            obj.Age = 3;
            scheduler.AdvanceTo(30);
            obj.Age = 7;
            scheduler.AdvanceTo(40);
            obj.Name = "Fi";

            // Assert
            Assert.AreEqual(expected, observer.Messages);
        }
        public void When_Subscribe_Twice_Then_Correct_Notifications_For_Both_Observers()
        {
            // Arrange
            var obj = new TestObservableObject {Age = 3};
            var scheduler = new TestScheduler();
            var firstObserver = scheduler.CreateObserver<IPropertyChanged<TestObservableObject>>();
            var secondObserver = scheduler.CreateObserver<IPropertyChanged<TestObservableObject>>();
            var firstObservserExpected = new[]
            {
                OnNext(0, PropertyChanged.Create(obj)),
                OnNext(0, PropertyChanged.Create(obj, "Age")),
                OnNext(20, PropertyChanged.Create(obj, "Age")),
                OnNext(50, PropertyChanged.Create(obj, "Age")),
            };

            var secondObservserExpected = new[]
            {
                OnNext(50, PropertyChanged.Create(obj)),
                OnNext(50, PropertyChanged.Create(obj, "Age")),
            };

            var sut = new NotifyPropertyChangedObservable<TestObservableObject>(obj.ToPropertyValueChangedObservable());

            // Act
            sut.Subscribe(firstObserver);
            obj.Age = 5;
            scheduler.AdvanceTo(20);
            obj.Age = 6;
            scheduler.AdvanceTo(50);
            sut.Subscribe(secondObserver);
            obj.Age = 7;

            // Assert
            Assert.AreEqual(firstObservserExpected, firstObserver.Messages);
            Assert.AreEqual(secondObservserExpected, secondObserver.Messages);
        }
        public void When_Subscribe_With_Two_Node_Path_To_Property_And_Modify_Node_One_Then_OnNext_Changes()
        {
            // Arrange
            var childOne = new TestPoco {Age = 3};
            var childTwo = new TestPoco() {Age = 5};
            var obj = new TestObservableObject {PocoChild = childOne};
            var scheduler = new TestScheduler();
            var observer = scheduler.CreateObserver<IPropertyValueChanged<int>>();
            var expected = new[]
            {
                OnNext(000, PropertyValueChanged.CreateWithValue(childOne, "Age", 3)),
                OnNext(010, PropertyValueChanged.CreateWithValue(childTwo, "Age", 5)),
            };

            var sut = obj.When(x => x.PocoChild.Age);

            // Act
            sut.Subscribe(observer);
            scheduler.AdvanceTo(10);
            obj.PocoChild = childTwo;

            // Assert
            Assert.AreEqual(expected, observer.Messages);
        }
        public void When_Subscribe_With_One_Node_Path_To_Property_Then_OnNext_Changes()
        {
            // Arrange
            var obj = new TestObservableObject {Age = 5};
            var scheduler = new TestScheduler();
            var observer = scheduler.CreateObserver<int>();
            var expected = new[]
            {
                OnNext(000, 5),
            };

            var sut = obj.WhenValue(x => x.Age);

            // Act
            sut.Subscribe(observer);

            // Assert
            Assert.AreEqual(expected, observer.Messages);
        }
        public void When_Subscribe_With_Two_Node_Path_To_Property_And_Modify_Property_Then_OnNext_Changes()
        {
            // Arrange
            var obj = new TestObservableObject {ObservableChild = new TestObservableObject {Age = 3}};
            var scheduler = new TestScheduler();
            var observer = scheduler.CreateObserver<int>();
            var expected = new[]
            {
                OnNext(000, 3),
                OnNext(010, 5),
            };

            var sut = obj.WhenValue(x => x.ObservableChild.Age);

            // Act
            sut.Subscribe(observer);
            scheduler.AdvanceTo(10);
            obj.ObservableChild.Age = 5;

            // Assert
            Assert.AreEqual(expected, observer.Messages);
        }
        public void When_Subscribe_Then_Returns_Value_At_Time_Of_Subscribe_And_Subsequent_Values()
        {
            // Arrange
            var sourceObj = new TestObservableObject() {Age = 2};
            var scheduler = new TestScheduler();
            var observer = scheduler.CreateObserver<IPropertyValueChanged<int>>();
            var expected = new[]
            {
                OnNext(20, PropertyValueChanged.CreateWithValue(sourceObj, "Age", 5)),
                OnNext(30, PropertyValueChanged.CreateWithValue(sourceObj, "Age", 3)),
            };

            var sut = new NotifyPropertyValueChangedObservable<TestObservableObject, int>(sourceObj.ToPropertyValueChangedObservable(), "Age",
                x => x.Age);

            scheduler.AdvanceTo(10);
            sourceObj.Age = 5;
            scheduler.AdvanceTo(20);

            // Act

            sut.Subscribe(observer);
            scheduler.AdvanceTo(30);
            sourceObj.Age = 3;

            // Assert
            Assert.AreEqual(expected, observer.Messages);
        }
        public void When_Subscribe_Via_Interface_To_Source_That_Impl_INotifyPropertyChanged_Then_OnNext_Changes()
        {
            // Arrange
            var obj = new TestObservableObject {Age = 3} as ITestObject;
            var scheduler = new TestScheduler();
            var observer = scheduler.CreateObserver<IPropertyValueChanged<int>>();
            var expected = new[]
            {
                OnNext(000, PropertyValueChanged.CreateWithValue(obj, "Age", 3)),
                OnNext(010, PropertyValueChanged.CreateWithValue(obj, "Age", 5)),
            };

            var sut = obj.When(x => x.Age);

            // Act
            sut.Subscribe(observer);
            scheduler.AdvanceTo(10);
            obj.Age = 5;

            // Assert
            Assert.AreEqual(expected, observer.Messages);
        }