public void AsObservable_InvalidSubscribe_ThrowsException() { IChannel <int> c = Channel.Create <int>(); IObservable <int> o = c.AsObservable(); Assert.Throws <ArgumentNullException>("observer", () => o.Subscribe(null)); }
public void AsObservable_Subscribe_DisposeMultipleTimes_Success() { IChannel <int> c = Channel.Create <int>(); IObservable <int> o = c.AsObservable(); IDisposable d = o.Subscribe(new DelegateObserver <int>()); d.Dispose(); d.Dispose(); }
public void AsObservable_Subscribe_Dispose_Success() { IChannel <int> c = Channel.Create <int>(); IObservable <int> o = c.AsObservable(); using (o.Subscribe(new DelegateObserver <int>())) { } using (o.Subscribe(new DelegateObserver <int>())) using (o.Subscribe(new DelegateObserver <int>())) using (o.Subscribe(new DelegateObserver <int>())) { } }
public async Task AsObserver_AllDataPushed(int numSubscribers, bool completeWithError) { if (RequiresSingleReaderWriter) { return; } IChannel <int> c = CreateChannel(); int received = 0; var tcs = new TaskCompletionSource <Exception>(); IObservable <int> o = c.AsObservable(); for (int s = 0; s < numSubscribers; s++) { o.Subscribe(new DelegateObserver <int> { OnNextDelegate = i => received += i, OnCompletedDelegate = () => tcs.TrySetResult(null), OnErrorDelegate = e => tcs.TrySetResult(e), }); } Task[] writes = new Task[10]; for (int i = 0; i < writes.Length; i++) { writes[i] = c.WriteAsync(i + 1); } await Task.WhenAll(writes); c.Complete(completeWithError ? new FormatException() : null); Exception result = await tcs.Task; if (completeWithError) { Assert.IsType <FormatException>(result); } else { Assert.Null(result); } Assert.Equal(numSubscribers * (writes.Length * (writes.Length + 1)) / 2, received); }
public void AsObservable_SameSource_Idempotent() { IChannel <int> c = Channel.Create <int>(); Assert.Same(c.AsObservable(), c.AsObservable()); }