private void TestTryProcess_DefFragmentWorks(bool hasParams)
        {
            XmlNode node = Globals.GetXmlNode("<def-fragment name=\"FragName\"" + (hasParams ? " params=\"some param\"" : "") + "><x/><y/></def-fragment>");
            RenderFunctionMember innerFunction = null;

            using (mocks.Ordered()) {
                Expect.Call(template.HasMember("FragName")).Return(false);
                Expect.Call(() => docProcessor.ProcessRecursive(null, null, null)).IgnoreArguments().Constraints(Is.Same(node.ChildNodes[0]), Is.Same(template), Is.NotSame(renderFunction)).Do((Action <XmlNode, ITemplate, IRenderFunction>)((_, __, x) => { innerFunction = (RenderFunctionMember)x; x.AddFragment(new LiteralFragment("[a]")); }));
                Expect.Call(() => docProcessor.ProcessRecursive(null, null, null)).IgnoreArguments().Constraints(Is.Same(node.ChildNodes[1]), Is.Same(template), Is.NotNull()).Do((Action <XmlNode, ITemplate, IRenderFunction>)((_, __, x) => { Assert.AreSame(innerFunction, x); x.AddFragment(new LiteralFragment("[b]")); }));
                Expect.Call(template.HasMember("FragName")).Return(false);
                Expect.Call(() => template.AddMember(null)).IgnoreArguments().Do((Action <IMember>)(m => Assert.AreSame(innerFunction, m)));
            }
            mocks.ReplayAll();
            Assert.IsTrue(new FunctionDefinitionAndCallNodeProcessor().TryProcess(docProcessor, node, false, template, innerFunction));

            Assert.AreEqual("FragName", innerFunction.Name);
            Assert.AreEqual(hasParams ? "some param" : "", innerFunction.Parameters);
            Assert.IsTrue(new[] { new LiteralFragment("[a]"), new LiteralFragment("[b]") }.SequenceEqual(innerFunction.Fragments));
            Assert.AreEqual(0, fragments.Count);
            mocks.VerifyAll();
        }