public void Handlers_should_be_notified_and_return_values()
        {
            var bus = TinyBusControl.Create();

            var resultA = new TestMessageString {
                Text = "TestA"
            };
            var resultB = new TestMessageInt {
                Value = 77
            };
            var resultC = new TestMessageString {
                Text = "TestC"
            };

            var handlerA = new TestHandler <TestMessageString>(bus, resultA);
            var handlerB = new TestHandler <TestMessageInt>(bus, resultB);
            var handlerC = new TestHandler <TestMessageString>(bus, resultC);

            var message = new TestMessageString
            {
                Text = "input"
            };

            var testresult = bus.Publish(message).Result;

            Assert.IsNotNull(testresult.Single(x => x.Compares(resultA)));
            Assert.IsNotNull(testresult.Single(x => x.Compares(resultC)));

            Assert.IsTrue(testresult.Length == 2);

            Assert.IsTrue(handlerA.ReceivedValue.Compares(message));
            Assert.IsTrue(handlerB.ReceivedValue == null);
            Assert.IsTrue(handlerC.ReceivedValue.Compares(message));
        }
        public void Handlers_should_work_parallel()
        {
            var bus = TinyBusControl.Create();

            const int count   = 10;
            const int sleepMs = 1000;

            var handlers = new List <TestHandler <TestMessageString> >();

            for (var t = 0; t < count; t++)
            {
                handlers.Add(new TestHandler <TestMessageString>(bus, new TestMessageString(), sleepMs));
            }

            var message = new TestMessageString
            {
                Text = "input"
            };

            var sw = new Stopwatch();

            sw.Start();

            var testresult = bus.Publish(message).Result;

            sw.Stop();

            Assert.IsTrue(testresult.Length == count);
            Assert.IsTrue(handlers.All(x => message.Compares(x.ReceivedValue)));

            Assert.IsTrue(sw.Elapsed.Milliseconds < count * sleepMs);

            Console.WriteLine("Processing took ms: " + sw.Elapsed.TotalMilliseconds);
        }
        public void Handlers_should_get_copies_of_message()
        {
            var bus = TinyBusControl.Create();

            bus.Handle((TestMessageInt tm) =>
            {
                tm.Value += 1;
                return(tm);
            });

            bus.Handle((TestMessageInt tm) =>
            {
                tm.Value += 2;
                return(tm);
            });

            const int value = 7;

            var result = bus.Publish(new TestMessageInt {
                Value = value
            }).Result;

            Assert.IsTrue(result.Sum(x => x.Value - value) == 3);
        }