@Test public void dontVisitSeparatedJsNotSplit() throws Exception { ContentRewriterFeature.Config config = config(null, false, false); Node sep1 = elem("div"); Node sep2 = elem("span"); seqNodes(js1, sep1, js2, sep2, js3); assertEquals(VisitStatus.BYPASS, getVisitStatusJs(config, js1)); assertEquals(VisitStatus.BYPASS, getVisitStatusJs(config, sep1)); assertEquals(VisitStatus.BYPASS, getVisitStatusJs(config, js2)); assertEquals(VisitStatus.BYPASS, getVisitStatusJs(config, sep2)); assertEquals(VisitStatus.BYPASS, getVisitStatusJs(config, js3)); }
@Test public void dontVisitCssWithoutAttribs() throws Exception { Node node = elem("link", "href", CSS1_URL_STR); seqNodes(node, css1); assertEquals(VisitStatus.BYPASS, getVisitStatusCss(node, null)); }
private VisitStatus getVisitStatusCss(Node node, String rewriteRegex) throws Exception { // True, but never used (splitJS support) ContentRewriterFeature.Config config = config(rewriteRegex, true); return getVisitStatusCss(config, node); }
private VisitStatus getVisitStatusJs(Node node, String rewriteRegex, boolean splitJs) throws Exception { ContentRewriterFeature.Config config = config(rewriteRegex, splitJs); return getVisitStatusJs(config, node); }
@Test public void dontVisitUnknown() throws Exception { assertEquals(VisitStatus.BYPASS, getVisitStatusJs(elem("div"), null, true, false)); assertEquals(VisitStatus.BYPASS, getVisitStatusJs(elem("div"), null, true, true)); assertEquals(VisitStatus.BYPASS, getVisitStatusCss(elem("div"), null, false)); assertEquals(VisitStatus.BYPASS, getVisitStatusCss(elem("div"), null, true)); }
@Test public void concatSingleCss() throws Exception { List<Node> nodes = seqNodes(css1); Node parent = css1.getParentNode(); // Sanity check. assertEquals(1, parent.getChildNodes().getLength()); SimpleConcatUriManager mgr = simpleMgr(); ConcatVisitor.Css rewriter = new ConcatVisitor.Css(config(null, false, true), mgr); assertTrue(rewriter.revisit(gadget(), nodes)); // There should be one CSS node child which is rewritten. assertEquals(1, parent.getChildNodes().getLength()); Element concatNode = (Element)parent.getChildNodes().item(0); Uri concatUri = Uri.parse(concatNode.getAttribute("href")); assertEquals(CONCAT_BASE_URI.getScheme(), concatUri.getScheme()); assertEquals(CONCAT_BASE_URI.getAuthority(), concatUri.getAuthority()); assertEquals(CONCAT_BASE_URI.getPath(), concatUri.getPath()); assertEquals(CSS1_URL_STR, concatUri.getQueryParameter("1")); assertNull(concatUri.getQueryParameter("2")); }
@Test public void visitCssButNotMiddleWhenNotRewritable() throws Exception { ContentRewriterFeature.Config config = config(".*two.*", true, true); seqNodes(css1, css2, css3); assertEquals(VisitStatus.RESERVE_NODE, getVisitStatusCss(config, css1)); assertEquals(VisitStatus.BYPASS, getVisitStatusCss(config, css2)); assertEquals(VisitStatus.RESERVE_NODE, getVisitStatusCss(config, css3)); }
@Test public void dontVisitContigJsMiddleNotRewritable() throws Exception { ContentRewriterFeature.Config config = config(".*two.*", false); seqNodes(js1, js2, js3); assertEquals(VisitStatus.BYPASS, getVisitStatusJs(config, js1)); assertEquals(VisitStatus.BYPASS, getVisitStatusJs(config, js2)); assertEquals(VisitStatus.BYPASS, getVisitStatusJs(config, js3)); }
@Test public void visitSplitJsSeparated() throws Exception { seqNodes(js1, elem("span"), js2, elem("div"), js3); assertEquals(VisitStatus.RESERVE_NODE, getVisitStatusJs(js1, null, true, false)); assertEquals(VisitStatus.RESERVE_NODE, getVisitStatusJs(js2, null, true, false)); assertEquals(VisitStatus.RESERVE_NODE, getVisitStatusJs(js3, null, true, false)); }
@Test public void visitSplitJsContiguous() throws Exception { seqNodes(js1, js2, js3); assertEquals(VisitStatus.RESERVE_NODE, getVisitStatusJs(js1, null, true, false)); assertEquals(VisitStatus.RESERVE_NODE, getVisitStatusJs(js2, null, true, false)); assertEquals(VisitStatus.RESERVE_NODE, getVisitStatusJs(js3, null, true, false)); }
@Test public void dontVisitJsWithoutSrc() throws Exception { assertEquals(VisitStatus.BYPASS, getVisitStatusJs(elem("script"), null, false, false)); assertEquals(VisitStatus.BYPASS, getVisitStatusJs(elem("script"), null, false, true)); }
@Test public void visitContigCss() throws Exception { seqNodes(css1, css2, css3); assertEquals(VisitStatus.RESERVE_NODE, getVisitStatusCss(css1, null, false)); assertEquals(VisitStatus.RESERVE_NODE, getVisitStatusCss(css2, null, false)); assertEquals(VisitStatus.RESERVE_NODE, getVisitStatusCss(css3, null, false)); }
@Test public void visitSplitJsSingle() throws Exception { assertEquals(VisitStatus.RESERVE_NODE, getVisitStatusJs(js1, null, true, false)); }
private VisitStatus getVisitStatusCss(ContentRewriterFeature.Config config, Node node) throws RewritingException { return new ConcatVisitor.Css(config, null).visit(gadget(), node); }
@Test public void concatSingleJs() throws Exception { List<Node> nodes = seqNodes(js1); Node parent = js1.getParentNode(); // Sanity check. assertEquals(1, parent.getChildNodes().getLength()); SimpleConcatUriManager mgr = simpleMgr(); ConcatVisitor.Js rewriter = new ConcatVisitor.Js(config(null, false, true), mgr); assertTrue(rewriter.revisit(gadget(), nodes)); // There should be one JS node child which is rewritten. assertEquals(1, parent.getChildNodes().getLength()); Element concatNode = (Element)parent.getChildNodes().item(0); Uri concatUri = Uri.parse(concatNode.getAttribute("src")); assertEquals(CONCAT_BASE_URI.getScheme(), concatUri.getScheme()); assertEquals(CONCAT_BASE_URI.getAuthority(), concatUri.getAuthority()); assertEquals(CONCAT_BASE_URI.getPath(), concatUri.getPath()); assertEquals(JS1_URL_STR, concatUri.getQueryParameter("1")); assertNull(concatUri.getQueryParameter("2")); }
@Test public void dontVisitContigCssMiddleNotRewritable() throws Exception { ContentRewriterFeature.Config config = config(".*two.*", true, false); seqNodes(css1, css2, css3); assertEquals(VisitStatus.BYPASS, getVisitStatusCss(config, css1)); assertEquals(VisitStatus.BYPASS, getVisitStatusCss(config, css2)); assertEquals(VisitStatus.BYPASS, getVisitStatusCss(config, css3)); }
@Test public void visitJsButNotMiddleWhenNotRewritable() throws Exception { ContentRewriterFeature.Config config = config(".*two.*", false, true); seqNodes(js1, js2, js3); assertEquals(VisitStatus.RESERVE_NODE, getVisitStatusJs(config, js1)); assertEquals(VisitStatus.BYPASS, getVisitStatusJs(config, js2)); assertEquals(VisitStatus.RESERVE_NODE, getVisitStatusJs(config, js3)); }
@Test public void visitSplitJsSeparated() throws Exception { seqNodes(js1, elem("span"), js2, elem("div"), js3); assertEquals(VisitStatus.RESERVE_NODE, getVisitStatusJs(js1, null, true, false)); assertEquals(VisitStatus.RESERVE_NODE, getVisitStatusJs(js2, null, true, false)); assertEquals(VisitStatus.RESERVE_NODE, getVisitStatusJs(js3, null, true, false)); }
@Test public void dontVisitUnknown() throws Exception { assertEquals(VisitStatus.BYPASS, getVisitStatusJs(elem("div"), null, true, false)); assertEquals(VisitStatus.BYPASS, getVisitStatusJs(elem("div"), null, true, true)); assertEquals(VisitStatus.BYPASS, getVisitStatusCss(elem("div"), null, false)); assertEquals(VisitStatus.BYPASS, getVisitStatusCss(elem("div"), null, true)); }