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


Reply via email to