예제 #1
0
        public void Can_publish_events_by_type()
        {
            var handled = 0;
            var hub     = new MessageHub();

            hub.Subscribe <InheritedMessage>(e => handled++);
            object @event = new InheritedMessage {
                Id = 123, Value = "ABC"
            };
            var sent = hub.Publish(@event);

            Assert.True(sent, "did not send event to a known subscription");
            Assert.Equal(1, handled);
        }
예제 #2
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);
            }
        }
 public bool Handle(InheritedMessage message)
 {
     HandledInherited++;
     return(true);
 }