示例#1
0
        public void Can_subscribe_with_multiple_hierarchical_consumers()
        {
            var hub = new MessageHub();

            var handler1 = new ManifoldHierarchicalMessageHandler();
            var handler2 = new ManifoldHierarchicalMessageHandler();
            var handler3 = new ManifoldHierarchicalMessageHandler();

            hub.Subscribe <IMessage>(handler1);
            hub.Subscribe <BaseMessage>(handler2);
            hub.Subscribe <InheritedMessage>(handler3);

            var sent = hub.Publish(new InheritedMessage());

            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 MessageAggregator();
            var publisher  = new MessagePublisher(aggregator);

            var handler = new ManifoldHierarchicalMessageHandler();

            aggregator.Subscribe(handler);

            var sent = publisher.Publish(new InheritedMessage());

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

            var sent = false;

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

            // Subscribe (manifold):
            {
                var handler = new ManifoldHierarchicalMessageHandler();
                hub.Subscribe(handler, (m, ex) => { errors++; });
                sent = hub.Publish(new ErrorMessage {
                    Error = true
                });
                Assert.False(sent);
                Assert.Equal(2, errors);
            }

            // SubscribeWithInterface:
            {
                hub.Subscribe(new ThrowingHandler());
                sent = hub.Publish(new ErrorMessage {
                    Error = true
                });
                Assert.False(sent);
                Assert.Equal(3, errors);
            }
        }