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); }
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); }
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); }
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); }
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]); }
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); }
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); }