示例#1
0
        public void Complete_Dispose_Other()
        {
            var cs = new CompletableSubject();

            var to = new TestObserver <object>();

            cs.Subscribe(() => { to.Dispose(); });
            cs.Subscribe(to);

            cs.OnCompleted();

            to.AssertEmpty();
        }
示例#2
0
        public IDisposable Subscribe(ICompletableObserver observer)
        {
            if (_isDisposed)
            {
                throw new ObjectDisposedException(nameof(Lapse));
            }

            if (_subject == null)
            {
                _subject = new CompletableSubject();
            }

            if (!_isSubscribed)
            {
                _isSubscribed = true;
                _action?.Invoke(this);

                if (_isDisposed)
                {
                    observer.OnCompleted();
                    return(Disposable.Empty);
                }
            }

            return(_subject.Subscribe(observer));
        }
示例#3
0
        public void Dispose()
        {
            var cs = new CompletableSubject();

            var complete = 0;
            var error    = default(Exception);

            var d = cs.Subscribe(() => complete++, e => error = e);

            Assert.True(cs.HasObserver());

            d.Dispose();

            Assert.False(cs.HasObserver());

            Assert.AreEqual(0, complete);
            Assert.IsNull(error);
        }
示例#4
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();
            }
        }