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

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

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

            to.Dispose();

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

            to.AssertEmpty();
        }
        public void Basic_Other()
        {
            var cs1 = new CompletableSubject();
            var cs2 = new CompletableSubject();

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

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

            cs2.OnCompleted();

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

            to.AssertResult();
        }
        public void Error_Other()
        {
            var cs1 = new CompletableSubject();
            var cs2 = new CompletableSubject();

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

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

            cs2.OnError(new InvalidOperationException());

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

            to.AssertFailure(typeof(InvalidOperationException));
        }
        public void Observable_Basic_Other_OnNext()
        {
            var cs1 = new CompletableSubject();
            var cs2 = new UnicastSubject <int>();

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

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

            cs2.OnNext(1);

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

            to.AssertResult();
        }