예제 #1
0
        public void AsObservable_InvalidSubscribe_ThrowsException()
        {
            IChannel <int>    c = Channel.Create <int>();
            IObservable <int> o = c.AsObservable();

            Assert.Throws <ArgumentNullException>("observer", () => o.Subscribe(null));
        }
예제 #2
0
        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();
        }
예제 #3
0
        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>()))
                    {
                    }
        }
예제 #4
0
        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);
        }
예제 #5
0
        public void AsObservable_SameSource_Idempotent()
        {
            IChannel <int> c = Channel.Create <int>();

            Assert.Same(c.AsObservable(), c.AsObservable());
        }