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); }
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); }
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); } }