package com.google.sitebricks.rendering.control; import com.google.common.collect.Maps; import com.google.sitebricks.Respond; import com.google.sitebricks.RespondersForTesting; import com.google.sitebricks.compiler.ExpressionCompileException; import com.google.sitebricks.compiler.HtmlParser; import com.google.sitebricks.compiler.HtmlTemplateCompiler; import com.google.sitebricks.compiler.MvelEvaluatorCompiler; import org.jsoup.nodes.Node; import org.testng.annotations.DataProvider; import org.testng.annotations.Test; import java.util.List; /** * @author Dhanji R. Prasanna (dhanji@gmail.com) */ public class RequireWidgetTest { private static final String REQUIRE_TAGS = "requireTags"; @DataProvider(name = REQUIRE_TAGS) public Object[][] getRequires() { return new Object[][]{ {"<link rel=\"thing.css\"/>"}, {"<script type=\"text/javascript\"> @import 'thing.css' javascript dude bleod </script>"}, }; } @Test(dataProvider = REQUIRE_TAGS) public final void requireWidgetsRenderToHeadTag(final String requireString) throws ExpressionCompileException { final Respond respond = RespondersForTesting.newRespond(); respond.require(requireString); respond.require(requireString); WidgetChain chain = new ProceedingWidgetChain(); final MvelEvaluatorCompiler compiler = new MvelEvaluatorCompiler(Object.class); chain.addWidget(new HeaderWidget(new TerminalWidgetChain(), Maps.<String, String>newHashMap(), compiler)); List<Node> nodes = HtmlParser.parse("<html>" + requireString + "</html>"); Node node = nodes.get(0).childNode(0); WidgetChain inner = Chains.terminal(); if (!node.childNodes().isEmpty()) inner = Chains.singleton(new TextWidget(node.childNode(0).toString(), compiler)); chain.addWidget(new RequireWidget(new XmlWidget(inner, node.nodeName(), compiler, HtmlTemplateCompiler.parseAttribs(node.attributes())))); chain.addWidget(new RequireWidget(new XmlWidget(inner, node.nodeName(), compiler, HtmlTemplateCompiler.parseAttribs(node.attributes())))); chain.addWidget(new RequireWidget(new XmlWidget(inner, node.nodeName(), compiler, HtmlTemplateCompiler.parseAttribs(node.attributes())))); //render chain.render(new Object(), respond); final String expected = "<head>" + requireString + "</head>"; final String output = respond.toString(); assert expected.equals(output) : "Header not correctly rendered. Was: \n" + output + "\n-- but expected: --\n" + expected; } }