예제 #1
0
        public void MultiSubjectProxy_Untyped_AsObserver()
        {
            Run(client =>
            {
                var env = new TestExecutionEnvironment();
                var ctx = client.CreateContext(env);

                var inputUri     = new Uri("test://stream/input");
                var outputUri    = new Uri("test://stream/output");
                var sf           = env.Reactive.GetStreamFactory <int, int>(new Uri("rx://subject/inner/untyped"));
                var inputStream  = sf.Create(inputUri, null);
                var outputStream = sf.Create(outputUri, null);

                var inputProxy  = new MultiSubjectProxy(inputUri);
                var outputProxy = new MultiSubjectProxy(outputUri);
                var observer    = new MockObserver <int>(client);
                var inputSub    = SubscribeRoot(inputProxy.GetObservable <int>(), outputProxy.GetObserver <int>());
                var outputSub   = SubscribeRoot(outputProxy.GetObservable <int>(), observer);
                new SubscriptionInitializeVisitor(inputSub).Initialize(ctx);
                new SubscriptionInitializeVisitor(outputSub).Initialize(ctx);

                Schedule(client, 10, () => inputStream.OnNext(1));
                Schedule(client, 20, () => inputStream.OnNext(2));
                Schedule(client, 30, () => inputStream.OnNext(3));
                client.Start();

                observer.Messages.AssertEqual(
                    OnNext(10, 1),
                    OnNext(20, 2),
                    OnNext(30, 3)
                    );
            });
        }
예제 #2
0
        public void MultiSubjectProxy_AsObserver_OnCompleted()
        {
            Run(client =>
            {
                var env = new TestExecutionEnvironment();
                var ctx = client.CreateContext(env);

                var inputUri     = new Uri("test://stream/input");
                var outputUri    = new Uri("test://stream/output");
                var sf           = env.Reactive.GetStreamFactory <int, int>(new Uri("rx://subject/inner"));
                var inputStream  = sf.Create(inputUri, null);
                var outputStream = sf.Create(outputUri, null);

                var inputProxy  = new MultiSubjectProxy <int, int>(inputUri);
                var outputProxy = new MultiSubjectProxy <int, int>(outputUri);
                var observer    = new MockObserver <int>(client);
                var inputSub    = SubscribeRoot(inputProxy, outputProxy.CreateObserver());
                var outputSub   = SubscribeRoot(outputProxy, observer);
                new SubscriptionInitializeVisitor(inputSub).Initialize(ctx);
                new SubscriptionInitializeVisitor(outputSub).Initialize(ctx);

                Schedule(client, 10, () => inputStream.OnCompleted());
                client.Start();

                observer.Messages.AssertEqual(
                    OnCompleted <int>(10)
                    );
            });
        }
예제 #3
0
        public void MultiSubjectProxy_AsObservable()
        {
            Run(client =>
            {
                var env = new TestExecutionEnvironment();
                var ctx = client.CreateContext(env);

                var uri    = new Uri("test://stream");
                var sf     = env.Reactive.GetStreamFactory <int, int>(new Uri("rx://subject/inner"));
                var stream = sf.Create(uri, null);

                var proxy    = new MultiSubjectProxy <int, int>(uri);
                var observer = new MockObserver <int>(client);
                var sub      = ((IObservable <int>)proxy).Subscribe(observer);
                new SubscriptionInitializeVisitor((ISubscription)sub).Initialize(ctx);

                Schedule(client, 10, () => stream.OnNext(1));
                Schedule(client, 20, () => stream.OnNext(2));
                Schedule(client, 30, () => stream.OnNext(3));
                client.Start();

                observer.Messages.AssertEqual(
                    OnNext(10, 1),
                    OnNext(20, 2),
                    OnNext(30, 3)
                    );
            });
        }
예제 #4
0
        public void MultiSubjectProxy_Untyped_AsObserver_AsSubscription()
        {
            Run(client =>
            {
                var env = new TestExecutionEnvironment();
                var ctx = client.CreateContext(env);

                var uri      = new Uri("test://subject");
                var observer = new SubscriptionObserver <int>();
                var subject  = new TestSubject(observer);
                env.AddArtifact(uri, subject);

                var proxy = new MultiSubjectProxy(uri);
                var sub   = SubscribeRoot(new Never <int>(), proxy.GetObserver <int>());
                new SubscriptionInitializeVisitor(sub).Initialize(ctx);
                Assert.IsTrue(observer.IsAcceptCalled);

                sub.Dispose();
                Assert.IsTrue(observer.IsDisposeCalled);
            });
        }
예제 #5
0
 public void MultiSubjectProxy_Untyped_ArgumentChecks()
 {
     AssertEx.ThrowsException <ArgumentNullException>(() => _ = new MultiSubjectProxy(null), ex => Assert.AreEqual("uri", ex.ParamName));
 }