private static void CreateConfigWithCallHandlers(ContainerElement c)
        {
            var interceptionElement = new InterceptionElement();
            var policy = new PolicyElement()
            {
                Name = "PolicyOne"
            };

            policy.MatchingRules.Add(new MatchingRuleElement()
            {
                Name = "All", TypeName = "AlwaysMatchingRule"
            });

            policy.CallHandlers.Add(new CallHandlerElement()
            {
                Name = "NamedRule"
            });

            policy.CallHandlers.Add(new CallHandlerElement()
            {
                Name     = "NameAndType",
                TypeName = "DoMoreRule"
            });

            policy.CallHandlers.Add(new CallHandlerElement()
            {
                Name     = "HandlerWithLifetime",
                TypeName = "DoSomethingRule",
                Lifetime = new LifetimeElement()
                {
                    TypeName = "singleton"
                }
            });

            var handlerWithMembers = new CallHandlerElement()
            {
                Name     = "HandlerWithElements",
                TypeName = "CallCountHandler"
            };

            handlerWithMembers.Injection.Add(new ConstructorElement());
            handlerWithMembers.Injection.Add(new PropertyElement()
            {
                Name = "MyProp"
            });

            policy.CallHandlers.Add(handlerWithMembers);

            interceptionElement.Policies.Add(policy);

            c.ConfiguringElements.Add(interceptionElement);
        }
        private static void CreateConfigWithMatchingRules(ContainerElement c)
        {
            var interceptionElement = new InterceptionElement();
            var policy = new PolicyElement()
            {
                Name = "PolicyOne"
            };

            policy.MatchingRules.Add(new MatchingRuleElement()
            {
                Name = "NameOnly"
            });

            policy.MatchingRules.Add(new MatchingRuleElement()
            {
                Name     = "NameAndType",
                TypeName = "AlwaysMatchingRule"
            });

            policy.MatchingRules.Add(new MatchingRuleElement
            {
                Name     = "RuleWithLifetime",
                TypeName = "AlwaysMatchingRule",
                Lifetime = new LifetimeElement()
                {
                    TypeName = "singleton"
                }
            });

            var ruleWithMembers = new MatchingRuleElement
            {
                Name     = "RuleWithElements",
                TypeName = "AlwaysMatchingRule"
            };

            ruleWithMembers.Injection.Add(new ConstructorElement());
            ruleWithMembers.Injection.Add(new PropertyElement()
            {
                Name = "MyProp"
            });

            policy.MatchingRules.Add(ruleWithMembers);

            interceptionElement.Policies.Add(policy);

            c.ConfiguringElements.Add(interceptionElement);
        }
        public void Then_PoliciesWithNoContentsAreSerialized()
        {
            var loadedConfig = SerializeAndLoadConfig("EmptyPolicies.config", c =>
            {
                var interceptionElement = new InterceptionElement();
                interceptionElement.Policies.Add(new PolicyElement()
                {
                    Name = "Policy1"
                });
                interceptionElement.Policies.Add(new PolicyElement()
                {
                    Name = "Policy2"
                });
                c.ConfiguringElements.Add(interceptionElement);
            });

            var policies = (InterceptionElement)loadedConfig.Containers.Default.ConfiguringElements[0];

            policies.Policies.Select(p => p.Name)
            .AssertContainsExactly("Policy1", "Policy2");
        }
        public void Then_PoliciesWithNoContentsAreSerialized()
        {
            var loadedConfig = SerializeAndLoadConfig("EmptyPolicies.config", c =>
            {
                var interceptionElement = new InterceptionElement();
                interceptionElement.Policies.Add(new PolicyElement()
                {
                    Name = "Policy1"
                });
                interceptionElement.Policies.Add(new PolicyElement()
                {
                    Name = "Policy2"
                });
                c.ConfiguringElements.Add(interceptionElement);
            });

            var policies = (InterceptionElement)loadedConfig.Containers.Default.ConfiguringElements[0];

            policies.Policies.Select(p => p.Name)
                .AssertContainsExactly("Policy1", "Policy2");
        }
        private static void CreateConfigWithCallHandlers(ContainerElement c)
        {
            var interceptionElement = new InterceptionElement();
            var policy = new PolicyElement() { Name = "PolicyOne" };
            policy.MatchingRules.Add(new MatchingRuleElement() { Name =  "All", TypeName = "AlwaysMatchingRule" });

            policy.CallHandlers.Add(new CallHandlerElement()
            {
                Name = "NamedRule"
            });

            policy.CallHandlers.Add(new CallHandlerElement()
            {
                Name = "NameAndType",
                TypeName = "DoMoreRule"
            });

            policy.CallHandlers.Add(new CallHandlerElement()
            {
                Name = "HandlerWithLifetime",
                TypeName = "DoSomethingRule",
                Lifetime = new LifetimeElement()
                {
                    TypeName = "singleton"
                }
            });

            var handlerWithMembers = new CallHandlerElement()
            {
                Name = "HandlerWithElements",
                TypeName = "CallCountHandler"
            };
            handlerWithMembers.Injection.Add(new ConstructorElement());
            handlerWithMembers.Injection.Add(new PropertyElement() { Name = "MyProp" });

            policy.CallHandlers.Add(handlerWithMembers);

            interceptionElement.Policies.Add(policy);

            c.ConfiguringElements.Add(interceptionElement);
        }
        private static void CreateConfigWithMatchingRules(ContainerElement c)
        {
            var interceptionElement = new InterceptionElement();
            var policy = new PolicyElement() {Name = "PolicyOne"};
            policy.MatchingRules.Add(new MatchingRuleElement()
            {
                Name = "NameOnly"
            });

            policy.MatchingRules.Add(new MatchingRuleElement()
            {
                Name = "NameAndType",
                TypeName = "AlwaysMatchingRule"
            });

            policy.MatchingRules.Add(new MatchingRuleElement
            {
                Name = "RuleWithLifetime",
                TypeName = "AlwaysMatchingRule",
                Lifetime = new LifetimeElement()
                {
                    TypeName = "singleton"
                }
            });

            var ruleWithMembers = new MatchingRuleElement
            {
                Name = "RuleWithElements",
                TypeName = "AlwaysMatchingRule"
            };
            ruleWithMembers.Injection.Add(new ConstructorElement());
            ruleWithMembers.Injection.Add(new PropertyElement() { Name = "MyProp" } );

            policy.MatchingRules.Add(ruleWithMembers);

            interceptionElement.Policies.Add(policy);

            c.ConfiguringElements.Add(interceptionElement);
        }