public void CallsHandlersResolvedByHandlerProviderAndRegisteredHandlers()
        {
            var events = new List <EventA> {
                new EventA(), new EventA(), new EventA()
            };
            var secondEventHandler = new EventAHandler();

            _eventBus.Register <EventA>(secondEventHandler.HandleEvent);
            events.ForEach(e => _eventBus.Raise(e));
            Assert.IsTrue(_eventAHandler.Values.SequenceEqual(events.Select(e => e.Value)));
            Assert.IsTrue(secondEventHandler.Values.SequenceEqual(events.Select(e => e.Value)));
        }
        public void Setup()
        {
            _container = new WindsorContainer();
            var handlerProvider = new WindsorHandlerProvider(_container.Kernel);

            _eventBus = new EventBus();
            _eventBus.RegisterProvider(handlerProvider);
            _eventAHandler = new EventAHandler();
            _container.Register(
                Component.For <IEventHandler <EventA> >().Instance(_eventAHandler)
                );
        }
        public void HandlerProviderHandlersGetReleased()
        {
            var handlerProvider = new Mock <IHandlerProvider>();
            var handler         = new EventAHandler();

            handlerProvider.Setup(hp => hp.GetHandlers <EventA>())
            .Returns(new[] { handler })
            .Verifiable();
            var eventBus = new EventBus();

            eventBus.RegisterProvider(handlerProvider.Object);
            eventBus.Raise(new EventA());
            handlerProvider.Verify(hp => hp.ReleaseHandler(handler));
        }
        public void CallsHandlersRegisteredAsDelegates()
        {
            var eventBus = new EventBus();
            var handler  = new EventAHandler();
            var handler2 = new SecondEventAHander();

            eventBus.Register <EventA>(handler.HandleEvent);
            eventBus.Register <EventA>(handler2.HandleEvent);
            var events = new List <EventA> {
                new EventA(), new EventA(), new EventA()
            };

            events.ForEach(e => eventBus.Raise(e));
            Assert.IsTrue(handler.Values.SequenceEqual(events.Select(e => e.Value)));
            Assert.IsTrue(handler2.Values.SequenceEqual(events.Select(e => e.Value)));
        }