/// <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
        }
示例#11
0
        public void empty_composite_would_handle_any_message()
        {
            var c = new CompositeSubscription();

            (c as ISubscription).Handles(typeof(MessageA)).ShouldBeTrue();
        }
示例#12
0
        public void push_message_on_empty_composite_is_legal()
        {
            var c = new CompositeSubscription();

            (c as ISubscription).Push(new MessageA());
        }