Пример #1
0
        public void OnCompleteInnerFirst()
        {
            var src1 = new Subject <int>();
            var src2 = new Subject <int>();
            var src3 = new Subject <int>();

            var src = new ListBehaviorSubject <IObservable <int> >();

            var list = new List <int>();

            bool completed = false;

            var sub = src.Switch().Subscribe(change => change.Apply(list), () => completed = true);

            src.OnAdd(src1);
            src.OnAdd(src2);
            src.OnAdd(src3);

            src1.OnCompleted();
            Assert.IsFalse(completed);
            src3.OnCompleted();
            Assert.IsFalse(completed);
            src2.OnCompleted();
            Assert.IsFalse(completed);
            src.OnCompleted();
            Assert.IsTrue(completed);

            sub.Dispose();
        }
Пример #2
0
        public void OnComplete()
        {
            var lbs1 = new ListBehaviorSubject <int>();
            var lbs2 = new ListBehaviorSubject <int>();

            lbs1.OnAdd(1);
            lbs1.OnAdd(2);

            lbs2.OnAdd(3);
            lbs2.OnAdd(4);

            var source = new BehaviorSubject <IObservableList <int> >(lbs1);

            var list = new List <int>();

            var completed = false;

            var sub = source
                      .Switch()
                      .Subscribe(
                Observer.Create <ListChange <int> >(
                    change => change.Apply(list),
                    () => completed = true));

            lbs1.OnCompleted();

            // Inner completion doesn't imply completion until outer is complete
            Assert.IsFalse(completed);
            CollectionAssert.AreEqual(new[] { 1, 2 }, list);

            source.OnNext(lbs2);

            CollectionAssert.AreEqual(new[] { 3, 4 }, list);

            source.OnCompleted();

            // Outer completion implies completion when last inner is complete
            Assert.IsFalse(completed);

            lbs2.OnCompleted();

            Assert.IsTrue(completed);

            CollectionAssert.AreEqual(new[] { 3, 4 }, list);

            sub.Dispose();
        }
Пример #3
0
        public void Completed2()
        {
            var left  = new ListBehaviorSubject <int>();
            var right = new ListBehaviorSubject <int>();

            var list = new List <int>();

            bool completed = false;

            var sub = left.Concat(right)
                      .Subscribe(Observer.Create <ListChange <int> >(change => change.Apply(list), () => completed = true));

            right.OnCompleted();
            Assert.IsFalse(completed);
            left.OnCompleted();
            Assert.IsTrue(completed);
        }
Пример #4
0
        public void OnComplete()
        {
            var src = new ListBehaviorSubject <int>();

            var list = new List <int>();

            var completed = false;

            var sub = src.Where(i => i > 2).Subscribe(change => change.Apply(list), () => completed = true);

            Assert.IsFalse(completed);

            src.OnCompleted();

            Assert.IsTrue(completed);

            sub.Dispose();
        }
Пример #5
0
        public void Replay_handles_completion()
        {
            var lbs = new ListBehaviorSubject <int>();

            lbs.OnAdd(1);

            var replay = lbs.Replay();

            lbs.OnAdd(2);

            var list      = new List <int>();
            var completed = false;
            var sub       = replay.Subscribe(Observer.Create <ListChange <int> >(change => change.Apply(list), () => completed = true));

            CollectionAssert.AreEqual(new int[] { }, list);

            var conn = replay.Connect();

            CollectionAssert.AreEqual(new[] { 1, 2 }, list);

            Assert.IsFalse(completed);

            lbs.OnCompleted();

            Assert.IsTrue(completed);

            var list2      = new List <int>();
            var completed2 = false;
            var sub2       = replay.Subscribe(Observer.Create <ListChange <int> >(change => change.Apply(list2), () => completed2 = true));

            Assert.IsTrue(completed2);

            sub2.Dispose();
            sub.Dispose();
            conn.Dispose();
        }