Ejemplo n.º 1
0
        public void QuotedSubscribableOfT_Basics()
        {
            var xs = new Return <int>(42);

            var q = new QuotedSubscribable <int>(Expression.Constant(xs));

            var values = new List <int>();
            var e      = new ManualResetEvent(false);

            var s = q.Subscribe(Observer.Create <int>(values.Add, _ => Assert.Fail(), () => e.Set()));

            new SubscriptionInitializeVisitor(s).Start();
            e.WaitOne();

            Assert.IsTrue(new[] { 42 }.SequenceEqual(values));

            values.Clear();
            e.Reset();

            var d = ((IObservable <int>)q).Subscribe(values.Add, _ => Assert.Fail(), () => e.Set());

            new SubscriptionInitializeVisitor((ISubscription)d).Start();
            e.WaitOne();

            Assert.IsTrue(new[] { 42 }.SequenceEqual(values));
        }
Ejemplo n.º 2
0
        public void SelectMany_Environment_BridgeSubscribeFailure()
        {
            Run(client =>
            {
                var err = new Exception();

                var xs = client.CreateHotObservable(
                    OnNext(200, 2)
                    );

                var ys = client.CreateColdObservable(
                    OnNext(10, "bar")
                    );

                var qys = new QuotedSubscribable <string>(ys, Expression.Constant(ys, typeof(ISubscribable <string>)));

                var env = new TestExecutionEnvironment()
                {
                    BridgeSubscriptionError = err
                };

                var ctx = client.CreateContext(env);

                var res = client.Start(ctx, () =>
                                       from x in xs
                                       from y in qys
                                       select x + " - " + y,
                                       100, 150, 1000
                                       );

                res.Messages.AssertEqual(
                    OnError <string>(200, ex => ex is HigherOrderSubscriptionFailedException && ex.InnerException == err)
                    );
            });
        }
Ejemplo n.º 3
0
        public void Serializer_Qubscribable_WithPolicy()
        {
            var input = new QuotedSubscribable <int>(Subscribable.Empty <int>(), ((Expression <Func <ISubscribable <int> > >)(() => Subscribable.Empty <int>())).Body);

            var policy = new TestPolicy();

            Assert.AreEqual(0, policy.ConstantHoisterCalls);
            Assert.AreEqual(0, policy.DelegateCacheCalls);
            Assert.AreEqual(0, policy.InMemoryCacheCalls);
            Assert.AreEqual(0, policy.OutlineCompilationCalls);
            Assert.AreEqual(0, policy.ReflectionProviderCalls);
            Assert.AreEqual(0, policy.ExpressionFactoryCalls);

            var quotedResult = Roundtrip(input, new Serializer(policy, SerializerVersioning.v1));

            Assert.AreEqual(1, policy.ConstantHoisterCalls);
            Assert.AreEqual(1, policy.DelegateCacheCalls);
            Assert.AreEqual(1, policy.InMemoryCacheCalls);
            Assert.AreEqual(1, policy.OutlineCompilationCalls);
            Assert.AreEqual(1, policy.ReflectionProviderCalls);
            Assert.AreEqual(1, policy.ExpressionFactoryCalls);

            Assert.IsNotNull(quotedResult);
            Assert.AreEqual(input.Value.GetType(), quotedResult.Value.GetType());
        }
Ejemplo n.º 4
0
        public void Serializer_QubscribableRoundtrips()
        {
            var input = new QuotedSubscribable <int>(Subscribable.Empty <int>(), ((Expression <Func <ISubscribable <int> > >)(() => Subscribable.Empty <int>())).Body);

            var quotedResult = Roundtrip(input, new Serializer(DefaultExpressionPolicy.Instance, SerializerVersioning.v1));

            Assert.IsNotNull(quotedResult);
            Assert.AreEqual(input.Value.GetType(), quotedResult.Value.GetType());
        }
Ejemplo n.º 5
0
        public void SelectMany_Environment_SaveAndReload1()
        {
            Run(client =>
            {
                var state = client.CreateStateContainer();

                var checkpoints = new[] {
                    OnSave(250, state),
                    OnLoad(290, state),
                };

                var xs = client.CreateHotObservable(
                    OnNext(200, 2),
                    OnNext(300, 3),
                    OnNext(400, 5),
                    OnCompleted <int>(500)
                    );

                var ys = client.CreateColdObservable(
                    OnNext(10, "bar"),
                    OnNext(20, "foo"),
                    OnCompleted <string>(30)
                    );

                var qys = new QuotedSubscribable <string>(ys, Expression.Constant(ys, typeof(ISubscribable <string>)));

                var env = new TestExecutionEnvironment();

                var ctx = client.CreateContext(env);

                var res = client.Start(ctx, () =>
                                       (from x in xs
                                        from y in qys
                                        select x + " - " + y)
                                       .Apply(client, checkpoints),
                                       100, 150, 1000
                                       );

                res.Messages.AssertEqual(
                    OnNext <string>(210, "2 - bar"),
                    OnNext <string>(220, "2 - foo"),
                    OnNext <string>(310, "3 - bar"),
                    OnNext <string>(320, "3 - foo"),
                    OnNext <string>(410, "5 - bar"),
                    OnNext <string>(420, "5 - foo"),
                    OnCompleted <string>(500)
                    );

                xs.Subscriptions.AssertEqual(
                    Subscribe(150, 500)
                    );
            });
        }
Ejemplo n.º 6
0
        public void Switch_Environment_Simple()
        {
            Run(client =>
            {
                var ys1 = client.CreateHotObservable(
                    OnNext(200, 2),
                    OnNext(300, 3),
                    OnNext(400, 4),
                    OnCompleted <int>(500)
                    );

                var qys1 = new QuotedSubscribable <int>(ys1, Expression.Constant(ys1, typeof(ISubscribable <int>)));

                var ys2 = client.CreateHotObservable(
                    OnNext(400, 5),
                    OnCompleted <int>(500)
                    );

                var qys2 = new QuotedSubscribable <int>(ys2, Expression.Constant(ys2, typeof(ISubscribable <int>)));

                var xss = client.CreateHotObservable(
                    OnNext <ISubscribable <int> >(190, qys1),
                    OnNext <ISubscribable <int> >(350, qys2),
                    OnCompleted <ISubscribable <int> >(450)
                    );

                var env = new TestExecutionEnvironment();

                var ctx = client.CreateContext(env);

                var res = client.Start(ctx, () =>
                                       xss.Switch(),
                                       100, 150, 1000
                                       );

                res.Messages.AssertEqual(
                    OnNext <int>(200, 2),
                    OnNext <int>(300, 3),
                    OnNext <int>(400, 5),
                    OnCompleted <int>(500)
                    );

                xss.Subscriptions.AssertEqual(
                    Subscribe(150, 450)
                    );
            });
        }
Ejemplo n.º 7
0
        public void Throttle_Environment_SaveAndReload1()
        {
            Run(client =>
            {
                var state = client.CreateStateContainer();

                var checkpoints = new[] {
                    OnSave(260, state),
                    OnLoad(290, state),
                };

                var xs = client.CreateHotObservable(
                    OnNext(200, 2),
                    OnNext(300, 3),
                    OnNext(400, 5),
                    OnCompleted <int>(500)
                    );

                var ys = client.CreateColdObservable(
                    OnNext(50, "bar"),
                    OnCompleted <string>(70)
                    );

                var qys = new QuotedSubscribable <string>(ys, Expression.Constant(ys, typeof(ISubscribable <string>)));

                var env = new TestExecutionEnvironment();

                var ctx = client.CreateContext(env);

                var res = client.Start(ctx, () =>
                                       xs.Throttle(_ => qys).Apply(client, checkpoints),
                                       100, 150, 1000
                                       );

                res.Messages.AssertEqual(
                    OnNext <int>(250, 2),
                    OnNext <int>(350, 3),
                    OnNext <int>(450, 5),
                    OnCompleted <int>(500)
                    );

                xs.Subscriptions.AssertEqual(
                    Subscribe(150, 500)
                    );
            });
        }
Ejemplo n.º 8
0
        public void SelectMany_Settings_MaxConcurrentInnerSubscriptionCount()
        {
            Run(client =>
            {
                var env = new TestExecutionEnvironment();

                var ctx = client.CreateContext(env, settings: new Dictionary <string, object>
                {
                    { "rx://operators/bind/settings/maxConcurrentInnerSubscriptionCount", 5 },
                });

                var xs = client.CreateHotObservable <int>(
                    OnNext(210, 1),
                    OnNext(220, 2),
                    OnNext(230, 3),
                    OnNext(240, 4),
                    OnNext(250, 5),
                    OnNext(260, 6)
                    );

                var ys = client.CreateColdObservable <int>(
                    );

                var qys = new QuotedSubscribable <int>(ys, Expression.Constant(ys, typeof(ISubscribable <int>)));

                var res = client.Start(ctx, () =>
                                       xs.SelectMany(x => qys),
                                       100, 200, 1000);

                res.Messages.AssertEqual(
                    OnError <int>(260, ex => ex is InvalidOperationException)
                    );

                xs.Subscriptions.AssertEqual(
                    Subscribe(200, 260)
                    );
            });
        }