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(); }