public void SelectorChain()
        {
            IApplicationContext      context   = TestUtils.GetContext(@"Config\selectorChainParserTests.xml");
            IMessageSelector         selector1 = (IMessageSelector)context.GetObject("selector1");
            IMessageSelector         selector2 = (IMessageSelector)context.GetObject("selector2");
            MessageSelectorChain     chain     = (MessageSelectorChain)context.GetObject("selectorChain");
            IList <IMessageSelector> selectors = GetSelectors(chain);

            Assert.That(GetStrategy(chain), Is.EqualTo(MessageSelectorChain.VotingStrategyKind.All));
            Assert.That(selectors[0], Is.EqualTo(selector1));
            Assert.That(selectors[1], Is.EqualTo(selector2));
            Assert.IsTrue(chain.Accept(new StringMessage("test")));
        }
        public void NestedSelectorChain()
        {
            IApplicationContext  context   = TestUtils.GetContext(@"Config\selectorChainParserTests.xml");
            IMessageSelector     selector1 = (IMessageSelector)context.GetObject("selector1");
            IMessageSelector     selector2 = (IMessageSelector)context.GetObject("selector2");
            IMessageSelector     selector3 = (IMessageSelector)context.GetObject("selector3");
            IMessageSelector     selector4 = (IMessageSelector)context.GetObject("selector4");
            IMessageSelector     selector5 = (IMessageSelector)context.GetObject("selector5");
            IMessageSelector     selector6 = (IMessageSelector)context.GetObject("selector6");
            MessageSelectorChain chain1    = (MessageSelectorChain)context.GetObject("nestedSelectorChain");

            Assert.That(GetStrategy(chain1), Is.EqualTo(MessageSelectorChain.VotingStrategyKind.Majority));
            IList <IMessageSelector> selectorList1 = GetSelectors(chain1);

            Assert.That(selectorList1[0], Is.EqualTo(selector1));
            Assert.IsTrue(selectorList1[1] is MessageSelectorChain);
            MessageSelectorChain chain2 = (MessageSelectorChain)selectorList1[1];

            Assert.That(GetStrategy(chain2), Is.EqualTo(MessageSelectorChain.VotingStrategyKind.All));
            IList <IMessageSelector> selectorList2 = GetSelectors(chain2);

            Assert.That(selectorList2[0], Is.EqualTo(selector2));
            Assert.IsTrue(selectorList2[1] is MessageSelectorChain);
            MessageSelectorChain chain3 = (MessageSelectorChain)selectorList2[1];

            Assert.That(GetStrategy(chain3), Is.EqualTo(MessageSelectorChain.VotingStrategyKind.Any));
            IList <IMessageSelector> selectorList3 = GetSelectors(chain3);

            Assert.That(selectorList3[0], Is.EqualTo(selector3));
            Assert.That(selectorList3[1], Is.EqualTo(selector4));
            Assert.That(selectorList2[2], Is.EqualTo(selector5));
            Assert.IsTrue(selectorList1[2] is MessageSelectorChain);
            MessageSelectorChain chain4 = (MessageSelectorChain)selectorList1[2];

            Assert.That(GetStrategy(chain4), Is.EqualTo(MessageSelectorChain.VotingStrategyKind.MajorityOrTie));
            IList <IMessageSelector> selectorList4 = GetSelectors(chain4);

            Assert.That(selectorList4[0], Is.EqualTo(selector6));
            Assert.IsTrue(chain1.Accept(new StringMessage("test1")));
            Assert.IsTrue(chain2.Accept(new StringMessage("test2")));
            Assert.IsTrue(chain3.Accept(new StringMessage("test3")));
            Assert.IsTrue(chain4.Accept(new StringMessage("test4")));
        }
 private static IList <IMessageSelector> GetSelectors(MessageSelectorChain chain)
 {
     return((IList <IMessageSelector>)TestUtils.GetFieldValue(chain, "_selectors"));
 }
 private static MessageSelectorChain.VotingStrategyKind GetStrategy(MessageSelectorChain chain)
 {
     return((MessageSelectorChain.VotingStrategyKind)TestUtils.GetFieldValue(chain, "_votingStrategy"));
 }