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