public void Basic()
        {
            var cs1 = new CompletableSubject();
            var cs2 = new CompletableSubject();

            var to = cs1
                     .TakeUntil(cs2)
                     .Test();

            Assert.True(cs1.HasObserver());
            Assert.True(cs2.HasObserver());

            cs1.OnCompleted();

            Assert.False(cs1.HasObserver());
            Assert.False(cs2.HasObserver());

            to.AssertResult();
        }
예제 #2
0
        public void Array_Max_Concurrency()
        {
            var cs1 = new CompletableSubject();
            var cs2 = new CompletableSubject();

            var to = CompletableSource.Merge(1, cs1, cs2)
                     .Test();

            Assert.True(cs1.HasObserver());
            Assert.False(cs2.HasObserver());

            cs1.OnCompleted();

            Assert.False(cs1.HasObserver());
            Assert.True(cs2.HasObserver());

            cs2.OnCompleted();

            to.AssertResult();
        }
예제 #3
0
        public void Race()
        {
            for (int i = 0; i < TestHelper.RACE_LOOPS; i++)
            {
                var cs1 = new CompletableSubject();
                var cs2 = new CompletableSubject();

                var to = new[] { cs1, cs2 }
                .ToObservable()
                .Merge()
                .Test();

                TestHelper.Race(() => {
                    cs1.OnCompleted();
                }, () => {
                    cs2.OnCompleted();
                });

                to.AssertResult();
            }
        }
        public void No_Timeout()
        {
            var ts = new TestScheduler();
            var us = new CompletableSubject();

            var to = us
                     .Timeout(TimeSpan.FromSeconds(1), ts)
                     .Test();

            to.AssertEmpty();

            ts.AdvanceTimeBy(100);

            Assert.True(us.HasObserver());

            us.OnCompleted();

            ts.AdvanceTimeBy(900);

            to.AssertResult();
        }
예제 #5
0
        public void Max_Concurrency()
        {
            var cs1 = new CompletableSubject();
            var cs2 = new CompletableSubject();

            var to = new[] { cs1, cs2 }
            .ToObservable()
            .FlatMap(v => v, maxConcurrency: 1)
            .Test();

            Assert.True(cs1.HasObserver());
            Assert.False(cs2.HasObserver());

            cs1.OnCompleted();

            Assert.False(cs1.HasObserver());
            Assert.True(cs2.HasObserver());

            cs2.OnCompleted();

            to.AssertResult();
        }
        public void Other_Dispose_Other()
        {
            var ts = new CompletableSubject();

            var cs = new CompletableSubject();

            var to = cs
                     .DelaySubscription(ts)
                     .Test();

            Assert.False(cs.HasObserver());

            ts.OnCompleted();

            Assert.True(cs.HasObserver());

            to.Dispose();

            Assert.False(cs.HasObserver());

            to.AssertEmpty();
        }
예제 #7
0
        public void Enumerable_Race()
        {
            for (int i = 0; i < TestHelper.RACE_LOOPS; i++)
            {
                var cs1 = new CompletableSubject();
                var cs2 = new CompletableSubject();

                var to = CompletableSource.Merge(new List <ICompletableSource>()
                {
                    cs1, cs2
                })
                         .Test();

                TestHelper.Race(() => {
                    cs1.OnCompleted();
                }, () => {
                    cs2.OnCompleted();
                });

                to.AssertResult();
            }
        }
        public void Error_Main_Delayed()
        {
            var count = 0;

            var us = new UnicastSubject <int>();
            var cs = new CompletableSubject();

            var to = us
                     .ConcatMap(v => {
                if (v == 2)
                {
                    return(cs);
                }
                return(CompletableSource.FromAction(() => count++));
            }, true)
                     .Test();

            to.AssertEmpty()
            .AssertSubscribed();

            us.OnNext(0);
            us.OnNext(1);
            us.OnNext(2);
            us.OnError(new InvalidOperationException());

            Assert.AreEqual(2, count);

            to.AssertEmpty();

            Assert.True(cs.HasObserver());

            Assert.AreEqual(2, count);

            cs.OnCompleted();

            to.AssertFailure(typeof(InvalidOperationException));

            Assert.AreEqual(2, count);
        }
예제 #9
0
        public void Basic()
        {
            var cs = new CompletableSubject();

            Assert.False(cs.HasObservers);
            Assert.False(cs.HasCompleted());
            Assert.False(cs.HasException());
            Assert.IsNull(cs.GetException());

            var to = cs.Test();

            Assert.True(cs.HasObserver());

            to.AssertEmpty();

            var bd = new BooleanDisposable();

            cs.OnSubscribe(bd);

            cs.OnCompleted();
            cs.OnError(new IndexOutOfRangeException());

            Assert.True(bd.IsDisposed());

            to.AssertResult();

            Assert.False(cs.HasObservers);
            Assert.True(cs.HasCompleted());
            Assert.False(cs.HasException());
            Assert.IsNull(cs.GetException());

            cs.Test().AssertResult();

            Assert.False(cs.HasObserver());
            Assert.True(cs.HasCompleted());
            Assert.False(cs.HasException());
            Assert.IsNull(cs.GetException());
        }
예제 #10
0
        public void Enumerable_Max_Concurrency()
        {
            var cs1 = new CompletableSubject();
            var cs2 = new CompletableSubject();

            var to = CompletableSource.Merge(new List <ICompletableSource>()
            {
                cs1, cs2
            }, maxConcurrency: 1)
                     .Test();

            Assert.True(cs1.HasObserver());
            Assert.False(cs2.HasObserver());

            cs1.OnCompleted();

            Assert.False(cs1.HasObserver());
            Assert.True(cs2.HasObserver());

            cs2.OnCompleted();

            to.AssertResult();
        }
예제 #11
0
        public void Race_Subscribe_Dispose()
        {
            for (int i = 0; i < TestHelper.RACE_LOOPS; i++)
            {
                var cs = new CompletableSubject();

                var to1 = cs.Test();

                var to2 = new TestObserver <object>();

                TestHelper.Race(() => {
                    to1.Dispose();
                }, () => {
                    cs.Subscribe(to2);
                });

                cs.OnCompleted();

                to1.AssertEmpty();

                to2.AssertResult();
            }
        }
        public void Race()
        {
            for (int i = 0; i < TestHelper.RACE_LOOPS; i++)
            {
                var cs1 = new CompletableSubject();
                var cs2 = new CompletableSubject();

                var to = CompletableSource.Amb(cs1, cs2).Test();

                to.AssertEmpty();

                TestHelper.Race(() => {
                    cs1.OnCompleted();
                }, () => {
                    cs2.OnCompleted();
                });

                Assert.False(cs1.HasObserver());
                Assert.False(cs2.HasObserver());

                to.AssertResult();
            }
        }
예제 #13
0
        public void Observer_Complete_Async()
        {
            for (int i = 0; i < TestHelper.RACE_LOOPS; i++)
            {
                var cs = new CompletableSubject();

                var to = new TestObserver <object>();

                var cdl = new CountdownEvent(1);

                Task.Factory.StartNew(() =>
                {
                    while (!cs.HasObserver())
                    {
                        ;
                    }
                    cs.OnCompleted();
                });

                cs.BlockingSubscribe(to);

                to.AssertResult();
            }
        }
예제 #14
0
        public void Array_Race_MaxConcurrent()
        {
            for (int k = 1; k < 4; k++)
            {
                for (int i = 0; i < TestHelper.RACE_LOOPS; i++)
                {
                    var cs1 = new CompletableSubject();
                    var cs2 = new CompletableSubject();

                    var to = CompletableSource.Merge(new [] { cs1, cs2 }, maxConcurrency: k)
                             .Test();

                    TestHelper.Race(() =>
                    {
                        cs1.OnCompleted();
                    }, () =>
                    {
                        cs2.OnCompleted();
                    });

                    to.AssertResult();
                }
            }
        }