public void SubscribableBase_Assert_StoppedAfterOnError() { var sub = new MySubscribable(); var res = -1; var o = Observer.Create <int>( x => { res *= x; }, ex => { Assert.IsTrue(ex.Message == "foo"); res *= -1; }, () => { Assert.Fail(); } ); sub.Subscribe(o); sub.Observer.OnNext(42); sub.Observer.OnError(new Exception("foo")); AssertEx.ThrowsException <InvalidOperationException>(() => sub.Observer.OnNext(42), ex => ex.Message.Contains("terminated")); AssertEx.ThrowsException <InvalidOperationException>(() => sub.Observer.OnError(new Exception()), ex => ex.Message.Contains("terminated")); AssertEx.ThrowsException <InvalidOperationException>(() => sub.Observer.OnCompleted(), ex => ex.Message.Contains("terminated")); Assert.AreEqual(42, res); }
public void SubscribableBase_Assert_ThrowWhileBusy_OnCompleted() { var sub = new MySubscribable(); var s = new ManualResetEvent(false); var e = new ManualResetEvent(false); var o = Observer.Create <int>( x => { e.WaitOne(); }, ex => { e.WaitOne(); }, () => { s.Set(); e.WaitOne(); } ); sub.Subscribe(o); var t = Task.Run(() => sub.Observer.OnCompleted()); s.WaitOne(); AssertEx.ThrowsException <InvalidOperationException>(() => sub.Observer.OnNext(43), ex => ex.Message.Contains("processing")); AssertEx.ThrowsException <InvalidOperationException>(() => sub.Observer.OnError(new Exception()), ex => ex.Message.Contains("processing")); AssertEx.ThrowsException <InvalidOperationException>(() => sub.Observer.OnCompleted(), ex => ex.Message.Contains("processing")); e.Set(); t.Wait(); AssertEx.ThrowsException <InvalidOperationException>(() => sub.Observer.OnNext(42), ex => ex.Message.Contains("terminated")); AssertEx.ThrowsException <InvalidOperationException>(() => sub.Observer.OnError(new Exception()), ex => ex.Message.Contains("terminated")); AssertEx.ThrowsException <InvalidOperationException>(() => sub.Observer.OnCompleted(), ex => ex.Message.Contains("terminated")); }