public void RaiseSafelyDoesntThrowExceptionFromEventHandler()
        {
            var eventBus = new EventBus();
            var handler  = new EvilEventHandler();

            eventBus.Register <EventB>(handler.HandleEvent);
            eventBus.RaiseSafely(new EventB());
        }
        public void RaiseSafelyProtectsAgainstExceptionsThrownByExceptionHandler()
        {
            var eventBus         = new EventBus();
            var handler          = new EvilEventHandler();
            var exceptionHandler = new EvilExeptionEventHandler();

            eventBus.Register <EventB>(handler.HandleEvent);
            eventBus.Register <ExceptionEvent>(exceptionHandler.HandleEvent);
            eventBus.RaiseSafely(new EventB());
            // No exceptions thrown.
        }
        public void RegisteredExceptionHandlerCatchesExceptionWhenEventRaisedSafely()
        {
            var eventBus         = new EventBus();
            var handler          = new EvilEventHandler();
            var exceptionHandler = new ExceptionHandler();

            eventBus.Register <EventB>(handler.HandleEvent);
            eventBus.Register <ExceptionEvent>(exceptionHandler.HandleEvent);
            eventBus.RaiseSafely(new EventB());
            Assert.IsNotNull(exceptionHandler.ExceptionMessages.First(message => message == "Boo!"));
        }