/// <summary> /// Subscribe to a specific set of columns/fields for a given row key /// </summary> /// <param name="rowKey">Row key to index on</param> /// <param name="columns">Set of columns to subscribe to</param> /// <returns>Observable value representing the subscription</returns> public IObservable<IConstituentRow> Subscribe(object rowKey, IEnumerable<IColumn> columns) { var compositeSubscription = new CompositeSubscription(columns); foreach (var table in columns.Select(c => c.Table).Distinct()) compositeSubscription.AddTable(table, Subscribe(rowKey)); return compositeSubscription; }
public void dispose_of_subscription_removes_it_from_composite() { var subscription = new MockSubscription<MessageA>(); var c = new CompositeSubscription { subscription }; c.ShouldHaveCount(1); subscription.Dispose(); c.ShouldHaveCount(0); }
public void Adapter_subscriptions_can_also_be_disposed() { var b = new MethodScanner("Handle").MakeBuilder(); var disposableSub = new DisposableSubscription(b.BuildSubscriptions(new SomeHandler()).First()); ISubscriptionResolver resolver = new CompositeSubscription(); resolver.Add(disposableSub); var subs = resolver.GetSubscriptionsFor(new MessageA()); subs.ShouldHaveCount(1); disposableSub.GetDisposer().Dispose(); subs = resolver.GetSubscriptionsFor(new MessageA()); subs.ShouldHaveCount(0); }
public void push_message_on_empty_composite_is_legal() { var c = new CompositeSubscription(); (new System.Action(()=>(c as ISubscription).Push(new MessageA()))).DoesNotThrow(); }
public void push_delegates_to_all_childs() { var c = new CompositeSubscription {new MockSubscription<MessageA>(), new MockSubscription<MessageA>()}; c.Push(new MessageA()); c.OfType<MockSubscription<MessageA>>().All(m=>m.Received == 1).ShouldBeTrue(); }
public void empty_composite_would_handle_any_message() { var c = new CompositeSubscription(); (c as ISubscription).Handles(typeof(MessageA)).ShouldBeTrue(); }
public void composite_enumerator_works() { var c = new CompositeSubscription { new MockSubscription<MessageA>(), new MockSubscription<MessageA>() }; c.ShouldHaveCount(2); }
public void adding_disparate_handlers_is_not_validated_by_composite() { var c = new CompositeSubscription {new MockSubscription<MessageA>(), new MockSubscription<MessageB>()}; c.ShouldHaveCount(2); }
public void push_message_on_empty_composite_is_legal() { var c = new CompositeSubscription(); (c as ISubscription).Push(new MessageA()); }
public void CompositeSubscription_ShrinkingBehavior() { #pragma warning disable IDE0079 // Remove unnecessary suppression #pragma warning disable CA1829 // Use Length/Count property instead of Count() when available (tests IEnumerable<T> implementation) var cs = new CompositeSubscription(16); var N = 100; var ds1 = Enumerable.Range(0, N).Select(i => (i, s: new MySub())).ToList(); foreach (var(i, s) in ds1) { cs.Add(s); } Start(cs); foreach (var(i, s) in ds1) { Assert.AreEqual(1, s.StartCount); } var rand = new Random(1983); ds1 = ds1.OrderBy(_ => rand.Next()).ToList(); var R = 2 * N / 3; var rs = ds1.Take(R); var n = ds1.Count; foreach (var(i, s) in rs) { var d = s; cs.Remove(d); Assert.AreEqual(1, d.DisposedCount); --n; Assert.AreEqual(n, cs.Count); Assert.AreEqual(n, cs.Count()); } var ds2 = Enumerable.Range(0, N).Select(i => (i, s: new MySub())).ToList(); foreach (var(i, s) in ds2) { cs.Add(s); } Start(cs); foreach (var(i, s) in ds1.Skip(R)) { Assert.AreEqual(2, s.StartCount); } foreach (var(i, s) in ds2) { Assert.AreEqual(1, s.StartCount); } var es = ds1.Skip(R).Concat(ds2).OrderBy(_ => rand.Next()).ToList(); var Q = 9 * es.Count / 10; var qs = es.Take(Q); n = cs.Count; foreach (var(i, s) in qs) { var d = s; cs.Remove(d); Assert.AreEqual(1, d.DisposedCount); --n; Assert.AreEqual(n, cs.Count); Assert.AreEqual(n, cs.Count()); } var ts = es.Skip(Q).ToList(); foreach (var(i, s) in ts) { var d = s; Assert.AreEqual(0, d.DisposedCount); } cs.Dispose(); foreach (var(i, s) in ts) { var d = s; Assert.AreEqual(1, d.DisposedCount); } #pragma warning restore CA1829 #pragma warning restore IDE0079 }