Author: johnh
Date: Thu Aug 21 16:24:39 2008
New Revision: 687895
URL: http://svn.apache.org/viewvc?rev=687895&view=rev
Log:
Adding mixed-type parse tree-based rewriter tests, along with a bugfix for a
tricky edge case consisting of mixed whitespace and script tags.
Modified:
incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/ParseTreeHtmlRewriter.java
incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/rewrite/ParseTreeHtmlRewriterTest.java
Modified:
incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/ParseTreeHtmlRewriter.java
URL:
http://svn.apache.org/viewvc/incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/ParseTreeHtmlRewriter.java?rev=687895&r1=687894&r2=687895&view=diff
==============================================================================
---
incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/ParseTreeHtmlRewriter.java
(original)
+++
incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/ParseTreeHtmlRewriter.java
Thu Aug 21 16:24:39 2008
@@ -150,8 +150,9 @@
for (GadgetHtmlNode node : nodes) {
wrapper.appendChild(node);
}
+
doJSTagConsolidation(getJsConcatBase(spec, rewriterFeature), wrapper,
gadgetUri);
-
+
// Replace nodes list with wrapper children.
// This stuff will be cleaned up with rewriter modularization by
introducing
// a well-defined top-level node for processing purposes.
@@ -214,7 +215,8 @@
}
scripts.add(scriptUri);
toRemove.add(cur);
- } else if (cur.isText() && cur.getText().matches("\\s*")) {
+ } else if (scripts.size() > 0 && cur.isText() &&
cur.getText().matches("\\s*")) {
+ // Whitespace after one or more scripts. Ignore and remove.
toRemove.add(cur);
} else if (scripts.size() > 0) {
processScripts = true;
Modified:
incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/rewrite/ParseTreeHtmlRewriterTest.java
URL:
http://svn.apache.org/viewvc/incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/rewrite/ParseTreeHtmlRewriterTest.java?rev=687895&r1=687894&r2=687895&view=diff
==============================================================================
---
incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/rewrite/ParseTreeHtmlRewriterTest.java
(original)
+++
incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/rewrite/ParseTreeHtmlRewriterTest.java
Thu Aug 21 16:24:39 2008
@@ -24,6 +24,7 @@
import org.apache.shindig.gadgets.parse.GadgetHtmlParser;
import org.apache.shindig.gadgets.parse.GadgetHtmlNodeTest;
import org.apache.shindig.gadgets.parse.ParsedHtmlNode;
+import org.apache.shindig.gadgets.parse.caja.CajaHtmlParser;
import org.apache.shindig.gadgets.rewrite.ContentRewriterFeature;
import org.apache.shindig.gadgets.rewrite.LinkRewriter;
@@ -47,6 +48,7 @@
private LinkRewriter noOpLinkRewriter;
private ContentRewriterFeature jsFeature;
private ContentRewriterFeature styleFeature;
+ private ContentRewriterFeature comboFeature;
private GadgetSpec spec;
private String concatBase;
private static final String LINK_PREFIX = "px-";
@@ -68,6 +70,7 @@
};
jsFeature = makeFeature("script");
styleFeature = makeFeature("style");
+ comboFeature = makeFeature("script", "style");
spec = EasyMock.createNiceMock(GadgetSpec.class);
expect(spec.getUrl()).andReturn(baseUri).anyTimes();
org.easymock.classextension.EasyMock.replay(spec);
@@ -362,4 +365,81 @@
".someid {background-image:url(\"" + LINK_PREFIX +
"http://a.b.com/bigimg.png\");float:right;width:165px;height:23px;margin-top:4px;margin-left:5px}</style>";
assertEquals(rewritten, rewriteHelper(s, p, styleFeature,
pfxLinkRewriter));
}
+
+ public void testMixedRewritingJSMergeTagAndScript() throws Exception {
+ String s = "<style> @import url(rewrite.css); </style>"
+ + "<link href=\"rewritelink.css\"/>"
+ + "<p id=\"foo\">foo</p>"
+ + "<p id=\"bar\">bar</p>"
+ + "<script src=\"http://a.b.com/1.js\"></script>"
+ + "<script src=\"http://a.b.com/2.js\"></script>";
+ ParsedHtmlNode[] styleKid = {
+ GadgetHtmlNodeTest.makeParsedTextNode(" @import url( rewrite.css ); ")
+ };
+ ParsedHtmlNode[] fooKid = {
+ GadgetHtmlNodeTest.makeParsedTextNode("foo")
+ };
+ ParsedHtmlNode[] barKid = {
+ GadgetHtmlNodeTest.makeParsedTextNode("bar")
+ };
+ String[][] linkAttr = { { "href", "rewritelink.css" } };
+ String[][] fooAttr = { { "id", "foo" } };
+ String[][] barAttr = { { "id", "bar" } };
+ String[][] attr1 = { { "src", "http://a.b.com/1.js" } };
+ String[][] attr2 = { { "src", "http://a.b.com/2.js" } };
+ ParsedHtmlNode[] p = {
+ GadgetHtmlNodeTest.makeParsedTagNode("style", null, styleKid),
+ GadgetHtmlNodeTest.makeParsedTagNode("link", linkAttr, null),
+ GadgetHtmlNodeTest.makeParsedTagNode("p", fooAttr, fooKid),
+ GadgetHtmlNodeTest.makeParsedTagNode("p", barAttr, barKid),
+ GadgetHtmlNodeTest.makeParsedTagNode("script", attr1, null),
+ GadgetHtmlNodeTest.makeParsedTagNode("script", attr2, null)
+ };
+ String rewritten =
+ "<style> @import url(\"" + LINK_PREFIX + "rewrite.css\"); </style>" +
+ "<link href=\"" + LINK_PREFIX + "rewritelink.css\"/>" +
+ "<p id=\"foo\">foo</p>" +
+ "<p id=\"bar\">bar</p>" +
+ "<script src=\"" + concatBase +
"1=http%3A%2F%2Fa.b.com%2F1.js&2=http%3A%2F%2Fa.b.com%2F2.js\"></script>";
+ assertEquals(rewritten, rewriteHelper(s, p, comboFeature,
pfxLinkRewriter));
+ }
+
+ public void testEndToEndGadgetWithCajaParsing() throws Exception {
+ String s = "<style type=\"text/css\"> @import url(rewrite.css); </style>\n"
+ + "<link href=\"rewritelink.css\"/>\n"
+ + "<p>A simple gadget to demonstrate the content rewriter</p>\n"
+ + "<div>\n"
+ + " This is a URL in content that was not rewritten
http://www.notrewritten.com\n"
+ + "</div>\n"
+ + "<div id=\"backgrdiv\">\n"
+ + " This div has a background <br/> image from imported CSS\n"
+ + "</div>\n"
+ + "<div id=\"backgrdiv2\">\n"
+ + " This div has a background <br/> image from linked CSS\n"
+ + "</div>\n"
+ + "<p> This <img src=\"img.png\"/> is an image tag that was
rewritten</p>\n"
+ + "<p id=\"foo\">foo</p>\n"
+ + "<p id=\"bar\">bar</p>\n"
+ + "<script src=\"/1.js\"></script>\n"
+ + "<script src=\"/2.js\"></script>";
+ CajaHtmlParser chp = new CajaHtmlParser();
+ ParsedHtmlNode[] p = chp.parse(s).toArray(new ParsedHtmlNode[0]);
+ String rewritten = "<style type=\"text/css\"> @import url(\"" +
LINK_PREFIX + "rewrite.css\"); </style>\n"
+ + "<link href=\"" + LINK_PREFIX + "rewritelink.css\"/>\n"
+ + "<p>A simple gadget to demonstrate the content rewriter</p>\n"
+ + "<div>\n"
+ + " This is a URL in content that was not rewritten
http://www.notrewritten.com\n"
+ + "</div>\n"
+ + "<div id=\"backgrdiv\">\n"
+ + " This div has a background <br/> image from imported CSS\n"
+ + "</div>\n"
+ + "<div id=\"backgrdiv2\">\n"
+ + " This div has a background <br/> image from linked CSS\n"
+ + "</div>\n"
+ + "<p> This <img src=\"" + LINK_PREFIX + "img.png\"/> is an image tag
that was rewritten</p>\n"
+ + "<p id=\"foo\">foo</p>\n"
+ + "<p id=\"bar\">bar</p>\n"
+ + "<script src=\"" + concatBase +
"1=http%3A%2F%2Fgadget.org%2F1.js&2=http%3A%2F%2Fgadget.org%2F2.js\"></script>";
+ assertEquals(rewritten, rewriteHelper(s, p, comboFeature,
pfxLinkRewriter));
+ }
}