Пример #1
0
        public void Can_subscribe_with_multiple_hierarchical_consumers()
        {
            var aggregator = new Hub();

            ManifoldHierarchicalEventHandler handler1 = new ManifoldHierarchicalEventHandler();
            ManifoldHierarchicalEventHandler handler2 = new ManifoldHierarchicalEventHandler();
            ManifoldHierarchicalEventHandler handler3 = new ManifoldHierarchicalEventHandler();

            aggregator.Subscribe <IEvent>(handler1);
            aggregator.Subscribe <BaseEvent>(handler2);
            aggregator.Subscribe <InheritedEvent>(handler3);

            var sent = aggregator.Publish(new InheritedEvent());

            Assert.True(sent);
            Assert.Equal(1, handler1.HandledInterface);
            Assert.Equal(0, handler1.HandledBase);
            Assert.Equal(0, handler1.HandledInherited);

            Assert.Equal(0, handler2.HandledInterface);
            Assert.Equal(1, handler2.HandledBase);
            Assert.Equal(0, handler2.HandledInherited);

            Assert.Equal(0, handler3.HandledInterface);
            Assert.Equal(0, handler3.HandledBase);
            Assert.Equal(1, handler3.HandledInherited);
        }
Пример #2
0
        public void Can_subscribe_with_manifold_hierarchical_consumer()
        {
            var aggregator = new Hub();

            ManifoldHierarchicalEventHandler handler = new ManifoldHierarchicalEventHandler();

            aggregator.Subscribe(handler);

            var sent = aggregator.Publish(new InheritedEvent());

            Assert.True(sent);
            Assert.Equal(1, handler.HandledInterface);
            Assert.Equal(1, handler.HandledBase);
            Assert.Equal(1, handler.HandledInherited);
        }
Пример #3
0
        public void Can_handle_error_with_callback()
        {
            var errors = 0;

            var hub = new Hub();

            var sent = false;

            // SubscribeWithDelegate:
            {
                hub.Subscribe <InheritedEvent>(e => { throw new Exception(); }, ex => { errors++; });
                object @event = new InheritedEvent {
                    Id = 123, Value = "ABC"
                };
                sent = hub.Publish(@event);
                Assert.False(sent, "publishing a failed event should bubble as false to the publish result");
                Assert.Equal(1, errors);
            }

            // SubscribeWithDelegateAndTopic:
            {
                hub.Subscribe <StringEvent>(se => { throw new Exception(); }, @event => @event.Text == "bababooey!",
                                            ex => { errors++; });
                sent = hub.Publish(new StringEvent("not bababooey!"));
                Assert.False(sent);
                Assert.Equal(1, errors);
                sent = hub.Publish(new StringEvent("bababooey!"));
                Assert.False(sent);
                Assert.Equal(2, errors);
            }

            // Subscribe (manifold):
            {
                var handler = new ManifoldHierarchicalEventHandler();
                hub.Subscribe(handler, ex => { errors++; });
                sent = hub.Publish(new ErrorEvent());
                Assert.False(sent);
                Assert.Equal(3, errors);
            }

            // SubscribeWithInterface:
            {
                hub.Subscribe(new ErroringHandler());
                sent = hub.Publish(new ErrorEvent());
                Assert.False(sent);
                Assert.Equal(4, errors);
            }
        }