public void TestSpeed()
        {
            var eventCount        = 1000;
            var subscriberCount   = 1000;
            var universalEventBus = new UniversalEventBus();

            for (int i = 0; i < subscriberCount; i++)
            {
                var subscriber = new MockEventSubscriberOne();
                universalEventBus.Subscribe <TestEventArgsOne>(subscriber.Handle);
            }

            var events = new List <TestEventArgsOne>();

            for (int i = 0; i < eventCount; i++)
            {
                events.Add(new TestEventArgsOne());
            }

            var stopwatch = new Stopwatch();

            stopwatch.Start();
            foreach (var testEventArgsOne in events)
            {
                universalEventBus.Broadcast(testEventArgsOne);
            }

            Console.WriteLine(stopwatch.ElapsedMilliseconds);
            Assert.Less(stopwatch.ElapsedMilliseconds, 2500);
        }
        public void TestBroadcastsToSubscribers()
        {
            var testEventArgsOne = new TestEventArgsOne();

            var universalEventBus = new UniversalEventBus();

            universalEventBus.Subscribe <TestEventArgsOne>(EventHandlerOne);

            universalEventBus.Broadcast(testEventArgsOne);

            Assert.AreEqual(testEventArgsOne, _argsOneRecieved);
        }
        public void TestUnsubscribes()
        {
            var testEventArgsOne = new TestEventArgsOne();

            var universalEventBus = new UniversalEventBus();

            universalEventBus.Subscribe <TestEventArgsOne>(EventHandlerOne);
            universalEventBus.Unsubscribe <TestEventArgsOne>(EventHandlerOne);

            universalEventBus.Broadcast(testEventArgsOne);

            Assert.IsNull(_argsOneRecieved);
        }
        public void TestSelectivelySendsMessages()
        {
            var testEventArgsOne = new TestEventArgsOne();
            var testEventArgsTwo = new TestEventArgsTwo();

            var universalEventBus = new UniversalEventBus();

            universalEventBus.Subscribe <TestEventArgsOne>(EventHandlerOne);
            universalEventBus.Subscribe <TestEventArgsTwo>(EventHandlerTwo);

            universalEventBus.Broadcast(testEventArgsOne);

            Assert.AreSame(testEventArgsOne, _argsOneRecieved);
            Assert.IsNull(_argsTwoRecieved);

            universalEventBus.Broadcast(testEventArgsTwo);
            Assert.AreSame(testEventArgsTwo, _argsTwoRecieved);
        }