public void ThrowsIfNotNotifyingTest() { var fake = new FakeInpc(); var exception = Assert.Throws <ArgumentException>(() => new NestedObservable <FakeInpc, int>(fake, x => x.Name.Length)); Console.WriteLine(exception.Message); }
public void ThreeLevels() { var args = new List <EventPattern <PropertyChangedEventArgs> >(); var fake = new FakeInpc(); var observable = new NestedObservable <FakeInpc, bool>(fake, x => x.Next.Next.Value); observable.Subscribe(args.Add); fake.Next = new Level(); Assert.AreEqual(0, args.Count); fake.Next.Next = new Level { Next = new Level() }; Assert.AreEqual(1, args.Count); fake.Next.Next = null; Assert.AreEqual(2, args.Count); fake.Next = null; Assert.AreEqual(2, args.Count); fake.Next = new Level { Next = new Level { Value = true } }; Assert.AreEqual(3, args.Count); fake.Next.Next.Value = false; Assert.AreEqual(4, args.Count); fake.Next.Next = null; Assert.AreEqual(5, args.Count); fake.Next = null; Assert.AreEqual(5, args.Count); }
public void ToTrackingCaptureInitial() { var fake = new FakeInpc(); var strings = new List <string>(); fake.ToTrackingObservable(x => x.Name, true).Subscribe(x => strings.Add(x.CurrentValue)); CollectionAssert.AreEqual(new string[] { null }, strings); fake.Name = "El Kurro"; CollectionAssert.AreEqual(new string[] { null, "El Kurro" }, strings); }
public void ReactsOnStringEmptyOrNull(string prop) { int count = 0; var fake = new FakeInpc(); var observable = fake.ToObservable(x => x.Prop1, false); var disposable = observable.Subscribe(x => count++); Assert.AreEqual(0, count); fake.OnPropertyChanged(prop); // This means all properties changed according to wpf convention Assert.AreEqual(1, count); }
public void MemoryLeakNoDisposeTest() { var fake = new FakeInpc(); var wr = new WeakReference(fake); var subscription = fake.ToObservable().Subscribe(); fake = null; GC.Collect(); Assert.IsFalse(wr.IsAlive); var s = subscription.ToString(); // touching it after GC.Collect for no optimizations }
public void ExplicitNoSignalInitial() { int count = 0; var fake = new FakeInpc { Prop1 = false, Prop2 = true }; var observable = fake.ToObservable(x => x.Prop1, false); var disposable = observable.Subscribe(x => count++); Assert.AreEqual(0, count); fake.Prop1 = !fake.Prop1; Assert.AreEqual(1, count); }
public void SignalsInitial() { int count = 0; var fake = new FakeInpc { Prop1 = false, Prop2 = true }; var observable = fake.ToObservable(x => x.Prop1, true); // Default true captures initial value var disposable = observable.Subscribe(x => count++); Assert.AreEqual(1, count); fake.Prop1 = !fake.Prop1; Assert.AreEqual(2, count); }
public void TwoLevelsValueType() { var args = new List <EventPattern <PropertyChangedEventArgs> >(); var fake = new FakeInpc(); var observable = new NestedObservable <FakeInpc, bool>(fake, x => x.Next.Value); observable.Subscribe(args.Add); fake.Next = new Level(); Assert.AreEqual(1, args.Count); fake.Next.Value = !fake.Next.Value; Assert.AreEqual(2, args.Count); fake.Next = null; Assert.AreEqual(3, args.Count); }
public void ThreeLevelsExisting() { int count = 0; var fake = new FakeInpc { Next = new Level { Next = new Level() } }; var observable = fake.ToObservable(x => x.Next.Next.Value); var disposable = observable.Subscribe(x => count++); Assert.AreEqual(1, count); fake.Next.Next.Value = !fake.Next.Next.Value; Assert.AreEqual(2, count); }
public void StringEmptyOrNull(string prop) { int count = 0; var next = new Level(); var fake = new FakeInpc { Next = next }; var observable = fake.ToObservable(x => x.Next.Value, false); var disposable = observable.Subscribe(x => count++); fake.OnPropertyChanged(prop); Assert.AreEqual(1, count); next.OnPropertyChanged(prop); Assert.AreEqual(2, count); }
public void NoCaptureOfInitial() { int count = 0; var fake = new FakeInpc { Prop1 = false, Prop2 = true, Next = new Level { Value = true } }; var observable = fake.ToObservable(x => x.Next.Value, false); var disposable = observable.Subscribe(x => count++); Assert.AreEqual(0, count); fake.Next.Value = !fake.Next.Value; Assert.AreEqual(1, count); }
public void TwoLevels() { int count = 0; var fake = new FakeInpc(); var observable = fake.ToObservable(x => x.Next.Value); var disposable = observable.Subscribe(x => count++); Assert.AreEqual(1, count); fake.Next = new Level(); Assert.AreEqual(2, count); fake.Next.Value = !fake.Next.Value; Assert.AreEqual(3, count); fake.Next = null; Assert.AreEqual(4, count); }
public void StopsListeningOnDispose() { int count = 0; var fake = new FakeInpc { Prop1 = true }; var observable = fake.ToObservable(); var disposable = observable.Subscribe(x => count++); fake.Prop1 = !fake.Prop1; Assert.AreEqual(1, count); disposable.Dispose(); fake.Prop1 = !fake.Prop1; Assert.AreEqual(1, count); }
public void Reacts() { int count = 0; var fake = new FakeInpc { Prop1 = false, Prop2 = true }; var observable = fake.ToObservable(); var disposable = observable.Subscribe(x => count++); Assert.AreEqual(0, count); fake.Prop1 = !fake.Prop1; Assert.AreEqual(1, count); fake.Prop2 = !fake.Prop2; Assert.AreEqual(2, count); }
public void Reacts() { int count = 0; var fake = new FakeInpc { Prop1 = false, Prop2 = true }; var observable = fake.ToObservable(x => x.Prop1, false); var disposable = observable.Subscribe(x => count++); Assert.AreEqual(0, count); fake.Prop1 = !fake.Prop1; Assert.AreEqual(1, count); fake.Prop2 = !fake.Prop2; // No notification when changing other property Assert.AreEqual(1, count); }
public void ExplicitNoSignalInitial() { int count = 0; var fake = new FakeInpc { Prop1 = false, Prop2 = true }; var observable = fake.ToObservable(x => x.Next.Value, false); // Default true captures initial value var disposable = observable.Subscribe(x => count++); Assert.AreEqual(0, count); fake.Next = new Level { Value = true }; Assert.AreEqual(1, count); }
public void MemoryLeakTest() { var fake = new FakeInpc(); var level1 = new Level(); var wr = new WeakReference(level1); Assert.IsTrue(wr.IsAlive); var subscription = fake.ToObservable(x => x.Next.Value).Subscribe(); fake.Next = level1; fake.Next = null; level1 = null; subscription.Dispose(); GC.Collect(); Assert.IsFalse(wr.IsAlive); }
public void TwoLevelsExisting() { var args = new List <EventPattern <PropertyChangedEventArgs> >(); var fake = new FakeInpc { Next = new Level { Next = new Level() } }; var observable = new NestedObservable <FakeInpc, Level>(fake, x => x.Next.Next); observable.Subscribe(args.Add); fake.Next.Next = new Level(); Assert.AreEqual(1, args.Count); fake.Next.Next = null; Assert.AreEqual(2, args.Count); fake.Next = null; Assert.AreEqual(2, args.Count); }
public void Reacts() { var args = new List <EventPattern <PropertyChangedEventArgs> >(); var fake = new FakeInpc(); var observable = fake.ToObservable(x => x.Next.Value); observable.Subscribe(args.Add); Assert.AreEqual(1, args.Count); fake.Next = new Level { Value = false }; Assert.AreEqual(2, args.Count); fake.Next.Value = true; Assert.AreEqual(3, args.Count); Level level1 = fake.Next; fake.Next = null; Assert.AreEqual(4, args.Count); level1.Value = !level1.Value; Assert.AreEqual(4, args.Count); }