public void ReturnsDisposable1()
            {
                Action <object, DateTime> action = (s, e) => { };
                var result = new AppEventBus().Register(action, new object());

                Assert.IsNotNull(result);
                result.Dispose();
                Assert.IsTrue(result.IsDisposed);
            }
            public void PublishesToAllRegistered()
            {
                // prepare
                bool a = false, b = false;
                var  bus = new AppEventBus();

                // execute
                bus.Register <DateTime>((s1, e1) => a = true);
                bus.Register <DateTime>((s2, e2) => b = true);
                bus.Publish(new object(), DateTime.Now);

                // verify
                Assert.IsTrue(a);
                Assert.IsTrue(b);
            }
            public void DoesNotPublishToOthers()
            {
                // prepare
                bool a = false, b = false, c = false;
                var  bus = new AppEventBus();

                // execute
                bus.Register <DateTime>((s1, e1) => a = true);
                bus.Register <DateTime>((s2, e2) => b = true);
                bus.Register <TimeSpan>((s3, e3) => c = true);
                bus.Publish(new object(), DateTime.Now);

                // verify
                Assert.IsTrue(a);
                Assert.IsTrue(b);
                Assert.IsFalse(c);
            }
            public void WorksManyTimes()
            {
                // prepare
                object o1 = new object();
                bool   a = false, b = false, c = false;
                var    bus = new AppEventBus();

                // execute
                bus.Register <DateTime>((s1, e1) => a = true);
                bus.Register <DateTime>((s2, e2) => b = true, o1);
                bus.Register <TimeSpan>((s3, e3) => c = true);
                bus.Publish(o1, DateTime.Now);

                // verify
                Assert.IsTrue(a);
                Assert.IsFalse(b);
                Assert.IsFalse(c);

                // execute
                a = b = c = false;
                bus.Publish(o1, DateTime.Now);

                // verify
                Assert.IsTrue(a);
                Assert.IsFalse(b);
                Assert.IsFalse(c);

                // execute
                a = b = c = false;
                bus.Publish(o1, DateTime.Now);

                // verify
                Assert.IsTrue(a);
                Assert.IsFalse(b);
                Assert.IsFalse(c);
            }