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);
        }
Ejemplo n.º 4
0
        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);
        }
Ejemplo n.º 5
0
        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
        }
Ejemplo n.º 6
0
        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);
        }
Ejemplo n.º 7
0
        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);
        }
Ejemplo n.º 9
0
        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);
        }
Ejemplo n.º 10
0
        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);
        }
Ejemplo n.º 11
0
        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);
        }
Ejemplo n.º 12
0
        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);
        }
Ejemplo n.º 13
0
        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);
        }
Ejemplo n.º 14
0
        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);
        }
Ejemplo n.º 15
0
        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);
        }
Ejemplo n.º 16
0
        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);
        }
Ejemplo n.º 19
0
        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);
        }