public void WhenCombineLatest_AndSomeExistingValues_ShouldSubscribeToPropertyChanges() { // Arrange List <Tuple <bool, string, object> > tuples = new List <Tuple <bool, string, object> >(); var vm = new MyObservableObject(false, null); vm.Something = "Woot"; vm.ADynamicValue = vm; Observable.CombineLatest( vm.WhenPropertyChanged(x => x.IsChecked), vm.WhenPropertyChanged(x => x.Something), vm.WhenPropertyChanged(x => x.ADynamicValue), Tuple.Create) .Throttle(TimeSpan.FromMilliseconds(100), _ctx.Default) .Subscribe(arg => tuples.Add(arg)); // Act tuples.Clear(); vm.IsChecked = true; Assert.That(tuples.Count, Is.EqualTo(1)); Assert.That(tuples[0].Item1, Is.EqualTo(true)); Assert.That(tuples[0].Item2, Is.EqualTo("Woot")); Assert.That(tuples[0].Item3, Is.EqualTo((object)vm)); }
public void ShouldReturnDefaultOrNullForUninitializedDynamicProperties() { // Arrange var obj = new MyObservableObject(false, null); // Assert/Assert Assert.That(obj.GetDynamicValue <int>("SomeProp"), Is.EqualTo(default(int))); Assert.That(obj.GetDynamicValue <int?>("SomeOtherProp"), Is.Null); Assert.That(obj.GetDynamicValue <string>("SomethingElse"), Is.Null); }
public void ShouldGetSetDynamicProperties() { // Arrange var obj = new MyObservableObject(false, null); // Act obj.SetDynamicValue <int>("SomeProp", 123); // Assert Assert.That(obj.GetDynamicValue <int>("SomeProp"), Is.EqualTo(123)); }
public void ShouldClearDynamicPropertiesOnDispose() { // Arrange var obj = new MyObservableObject(false, null); obj.SetDynamicValue <object>("ObjectProp", new ObservableObjectBase()); Assert.That(obj.GetDynamicValue <object>("ObjectProp"), Is.Not.Null); // Act obj.Dispose(); // Assert Assert.That(obj.GetDynamicValue <object>("ObjectProp"), Is.Null); }
public void WhenDisposingParentShouldDispose() { // Arrange var container = new UnityContainer(); var parent = new MyObservableObject(); var collection = new ViewModelTraitCollection(parent, container); // Act var b0 = collection.Add <MyViewModelTrait>(); parent.Dispose(); // Assert Assert.That(b0.IsDisposed, Is.True); }
public void WhenAddBehaviourShouldAdd() { // Arrange var container = new UnityContainer(); var parent = new MyObservableObject(); var collection = new ViewModelTraitCollection(parent, container); // Act var b = collection.Add <MyViewModelTrait>(); // Assert Assert.That(b, Is.Not.Null); Assert.That(collection.Contains <MyViewModelTrait>(), Is.True); Assert.That(b.Target, Is.EqualTo(parent)); }
public void ShouldDisposeWith() { // Arrange string somethingReceived = null; var vm = new MyObservableObject(false, null); vm.WhenPropertyChanged(x => x.Something).Subscribe(arg => somethingReceived = arg).DisposeWith(vm); // Act vm.Something = "Hello"; vm.Dispose(); vm.Something = "World"; // Assert Assert.That(vm.IsChecked, Is.False); Assert.That(somethingReceived, Is.EqualTo("Hello")); }
public void ShouldRaisePropertyChangedOnDynamicValueSet() { // Arrange var obj = new MyObservableObject(false, null); List <string> propertiesNotified = new List <string>(); obj.PropertyChanged += (s, e) => propertiesNotified.Add(e.PropertyName); // Act obj.SetDynamicValue <int>("SomeProp", 123); obj.SetDynamicValue <int>("SomeOtherProp", 456); obj.SetDynamicValue <int>("SomeProp", 789); // Assert Assert.That(propertiesNotified.Count, Is.EqualTo(3)); Assert.That(propertiesNotified, Is.EquivalentTo(new[] { "SomeProp", "SomeOtherProp", "SomeProp" })); }
public void ShouldSubscribeToPropertyChanges() { // Arrange bool boolReceived = false; string somethingReceived = null; var vm = new MyObservableObject(false, null); vm.WhenPropertyChanged(x => x.IsChecked).Subscribe(arg => boolReceived = arg); vm.WhenPropertyChanged(x => x.Something).Subscribe(arg => somethingReceived = arg); // Act vm.IsChecked = true; // Assert Assert.That(vm.IsChecked, Is.True); Assert.That(boolReceived, Is.True); Assert.That(somethingReceived, Is.Null); }
public void ShouldFireObservableEventsOnDynamicValueSet() { // Arrange var obj = new MyObservableObject(false, null); List <object> objectsReceived = new List <object>(); obj.WhenPropertyChanged(x => x.ADynamicValue).Subscribe(v => objectsReceived.Add(v)); objectsReceived.Clear(); // Act obj.SetDynamicValue <object>("ADynamicValue", 123); obj.ADynamicValue = "Testing"; obj.SetDynamicValue <object>("ADynamicValue", "Dynamic"); // Assert Assert.That(objectsReceived.Count, Is.EqualTo(3)); Assert.That(objectsReceived, Is.EquivalentTo(new object[] { 123, "Testing", "Dynamic" })); }
public void ShouldSubscribeToPropertyChanges2() { // Arrange bool boolReceived = false; string somethingReceived = null; var vm = new MyObservableObject(false, null); vm.WhenPropertyChanged(x => x.IsChecked).Subscribe(arg => boolReceived = arg); vm.WhenPropertyChanged(x => x.Something).Subscribe(arg => somethingReceived = arg); // Act vm.Something = "Hello"; vm.Something = "World"; // Assert Assert.That(vm.IsChecked, Is.False); Assert.That(boolReceived, Is.False); Assert.That(somethingReceived, Is.EqualTo("World")); }
public void ShouldNotRaisePropertyChangedOnDynamicValueSetToSameValue() { // Arrange var obj = new MyObservableObject(false, null); List <string> propertiesNotified = new List <string>(); obj.PropertyChanged += (s, e) => propertiesNotified.Add(e.PropertyName); // Act obj.SetDynamicValue <string>("Hi there!", "SomeProp"); obj.SetDynamicValue <string>("Hi there!", "SomeProp"); obj.SetDynamicValue <int>(456, "SomeOtherProp"); obj.SetDynamicValue <int>(456, "SomeOtherProp"); obj.SetDynamicValue <bool?>(true, "SomeNullableProp"); obj.SetDynamicValue <bool?>(true, "SomeNullableProp"); // Assert Assert.That(propertiesNotified.Count, Is.EqualTo(3)); Assert.That(propertiesNotified, Is.EquivalentTo(new[] { "SomeProp", "SomeOtherProp", "SomeNullableProp" })); }
public void WhenAddBehaviourTwiceShouldReplace() { // Arrange var container = new UnityContainer(); var parent = new MyObservableObject(); var collection = new ViewModelTraitCollection(parent, container); // Act var b0 = collection.Add <MyViewModelTrait>(); b0.Id = "b0"; var b1 = collection.Add <MyViewModelTrait>(); b1.Id = "b1"; // Assert Assert.That(b0, Is.Not.Null); Assert.That(b1, Is.Not.Null); Assert.That(collection.Contains <MyViewModelTrait>(), Is.True); Assert.That(b0.IsDisposed, Is.True); Assert.That(b1.IsDisposed, Is.False); Assert.That(b1.Target, Is.EqualTo(parent)); }
public void WhenCombineLatest_ShouldSubscribeToPropertyChanges() { // Arrange List <Tuple <bool, string, object> > tuples = new List <Tuple <bool, string, object> >(); var vm = new MyObservableObject(false, null); Observable.CombineLatest( vm.WhenPropertyChanged(x => x.IsChecked), vm.WhenPropertyChanged(x => x.Something), vm.WhenPropertyChanged(x => x.ADynamicValue), Tuple.Create) .Throttle(TimeSpan.FromMilliseconds(100), _ctx.Default) .Subscribe(arg => tuples.Add(arg)); Assert.That(tuples.Contains(Tuple.Create(false, (string)null, (object)null))); // Act 1 tuples.Clear(); vm.IsChecked = true; Assert.That(tuples.Contains(Tuple.Create(true, (string)null, (object)null))); // Act 2 tuples.Clear(); vm.Something = "Woot"; Assert.That(tuples.Contains(Tuple.Create(true, "Woot", (object)null))); // Act 3 tuples.Clear(); vm.ADynamicValue = vm; Assert.That(tuples.Contains(Tuple.Create(true, "Woot", (object)vm))); // Act 3 tuples.Clear(); vm.IsChecked = false; Assert.That(tuples.Contains(Tuple.Create(false, "Woot", (object)vm))); }