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(); }
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)); }
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); }
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(); } }