public void BroadcastProcessor_OneProcessorThrows()
        {
            bool start1Called = false;
            bool start2Called = false;
            bool end1Called   = false;
            bool end2Called   = false;
            var  processor1   = new TestActivityProcessor(
                ss =>
            {
                start1Called = true;
                Assert.False(start2Called);
                Assert.False(end1Called);
                Assert.False(end2Called);

                throw new Exception("Start exception");
            }, se =>
            {
                end1Called = true;
                Assert.True(start1Called);
                Assert.True(start2Called);
                Assert.False(end2Called);
                throw new Exception("End exception");
            });

            var processor2 = new TestActivityProcessor(
                ss =>
            {
                start2Called = true;
                Assert.True(start1Called);
                Assert.False(end1Called);
                Assert.False(end2Called);
            }, se =>
            {
                end2Called = true;
                Assert.True(start1Called);
                Assert.True(start2Called);
                Assert.True(end1Called);
            });

            var broadcastProcessor = new BroadcastActivityProcessor(new[] { processor1, processor2 });

            var activity = new Activity("somename");

            broadcastProcessor.OnStart(activity);
            Assert.True(start1Called);
            Assert.True(start2Called);

            broadcastProcessor.OnEnd(activity);
            Assert.True(end1Called);
            Assert.True(end2Called);
        }
        public void BroadcastProcessor_CallsAllProcessorSequentially()
        {
            bool start1Called = false;
            bool start2Called = false;
            bool end1Called   = false;
            bool end2Called   = false;
            var  processor1   = new TestActivityProcessor(
                ss =>
            {
                start1Called = true;
                Assert.False(start2Called);
                Assert.False(end1Called);
                Assert.False(end2Called);
            }, se =>
            {
                end1Called = true;
                Assert.True(start1Called);
                Assert.True(start2Called);
                Assert.False(end2Called);
            });
            var processor2 = new TestActivityProcessor(
                ss =>
            {
                start2Called = true;
                Assert.True(start1Called);
                Assert.False(end1Called);
                Assert.False(end2Called);
            }, se =>
            {
                end2Called = true;
                Assert.True(start1Called);
                Assert.True(start2Called);
                Assert.True(end1Called);
            });

            var broadcastProcessor = new BroadcastActivityProcessor(new[] { processor1, processor2 });

            var activity = new Activity("somename");

            broadcastProcessor.OnStart(activity);
            Assert.True(start1Called);
            Assert.True(start2Called);

            broadcastProcessor.OnEnd(activity);
            Assert.True(end1Called);
            Assert.True(end2Called);
        }