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)); }
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) ); }); }
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()); }
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()); }
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) ); }); }
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) ); }); }
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) ); }); }
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) ); }); }