You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@shindig.apache.org by zh...@apache.org on 2010/08/02 20:47:34 UTC

svn commit: r981658 - in /shindig/trunk/java/gadgets/src: main/java/org/apache/shindig/gadgets/rewrite/DomWalker.java test/java/org/apache/shindig/gadgets/rewrite/DomWalkerTest.java

Author: zhoresh
Date: Mon Aug  2 18:47:33 2010
New Revision: 981658

URL: http://svn.apache.org/viewvc?rev=981658&view=rev
Log:
Change DomWalker to handle empty content in response
Patch provided by Gagan http://codereview.appspot.com/1689055/show

Modified:
    shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/DomWalker.java
    shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/rewrite/DomWalkerTest.java

Modified: shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/DomWalker.java
URL: http://svn.apache.org/viewvc/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/DomWalker.java?rev=981658&r1=981657&r2=981658&view=diff
==============================================================================
--- shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/DomWalker.java (original)
+++ shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/DomWalker.java Mon Aug  2 18:47:33 2010
@@ -28,6 +28,7 @@ import org.apache.shindig.gadgets.http.H
 import org.apache.shindig.gadgets.http.HttpResponseBuilder;
 import org.apache.shindig.gadgets.spec.GadgetSpec;
 import org.apache.shindig.gadgets.uri.UriCommon.Param;
+import org.apache.commons.lang.StringUtils;
 
 import org.w3c.dom.Document;
 import org.w3c.dom.Node;
@@ -139,7 +140,7 @@ public final class DomWalker {
 
     public void rewrite(HttpRequest request, HttpResponseBuilder builder)
         throws RewritingException {
-      if (RewriterUtils.isHtml(request, builder)) {
+      if (RewriterUtils.isHtml(request, builder) && !StringUtils.isEmpty(builder.getContent())) {
         Gadget context = makeGadget(request);
         rewrite(makeVisitors(context, request.getGadget()), context, builder);
       }

Modified: shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/rewrite/DomWalkerTest.java
URL: http://svn.apache.org/viewvc/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/rewrite/DomWalkerTest.java?rev=981658&r1=981657&r2=981658&view=diff
==============================================================================
--- shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/rewrite/DomWalkerTest.java (original)
+++ shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/rewrite/DomWalkerTest.java Mon Aug  2 18:47:33 2010
@@ -19,7 +19,10 @@
 package org.apache.shindig.gadgets.rewrite;
 
 import com.google.common.collect.Lists;
+import org.apache.shindig.common.uri.Uri;
 import org.apache.shindig.gadgets.Gadget;
+import org.apache.shindig.gadgets.http.HttpRequest;
+import org.apache.shindig.gadgets.http.HttpResponseBuilder;
 import org.junit.Before;
 import org.junit.Test;
 import org.w3c.dom.Node;
@@ -38,11 +41,12 @@ public class DomWalkerTest extends DomWa
   private Node subchild1;
   private Node text1;
   private Node text2;
-  
+
+  @Override
   @Before
   public void setUp() {
     super.setUp();
-    
+
     // Create a base document with structure:
     // <root>
     //   <child1>text1</child1>
@@ -64,11 +68,11 @@ public class DomWalkerTest extends DomWa
     root.appendChild(child2);
     doc.appendChild(root);
   }
-  
+
   @Test
   public void allBypassDoesNothing() throws Exception {
     Gadget gadget = gadget();
-    
+
     // Visitor always bypasses nodes, never gets called with revisit(),
     // but visits every node in the document.
     DomWalker.Visitor visitor = createMock(DomWalker.Visitor.class);
@@ -85,20 +89,20 @@ public class DomWalkerTest extends DomWa
     expect(visitor.visit(gadget, text2))
         .andReturn(DomWalker.Visitor.VisitStatus.BYPASS).once();
     replay(visitor);
-    
+
     MutableContent mc = getContent(0);
-    
+
     DomWalker.Rewriter rewriter = getRewriter(visitor);
     rewriter.rewrite(gadget, mc);
-    
+
     // Verifying mutations on MutableContent completes the test.
     verify(mc);
   }
-  
+
   @Test
   public void allMutateMutatesEveryTime() throws Exception {
     Gadget gadget = gadget();
-    
+
     // Visitor mutates every node it sees immediately and inline.
     DomWalker.Visitor visitor = createMock(DomWalker.Visitor.class);
     expect(visitor.visit(gadget, root))
@@ -114,20 +118,20 @@ public class DomWalkerTest extends DomWa
     expect(visitor.visit(gadget, text2))
         .andReturn(DomWalker.Visitor.VisitStatus.MODIFY).once();
     replay(visitor);
-    
+
     MutableContent mc = getContent(6);
-    
+
     DomWalker.Rewriter rewriter = getRewriter(visitor);
     rewriter.rewrite(gadget, mc);
-    
+
     // Verifying mutations on MutableContent completes the test.
     verify(mc);
   }
-  
+
   @Test
   public void allReserveNodeReservesAll() throws Exception {
     Gadget gadget = gadget();
-    
+
     // Visitor mutates every node it sees immediately and inline.
     DomWalker.Visitor visitor = createMock(DomWalker.Visitor.class);
     expect(visitor.visit(gadget, root))
@@ -142,27 +146,27 @@ public class DomWalkerTest extends DomWa
         .andReturn(DomWalker.Visitor.VisitStatus.RESERVE_NODE).once();
     expect(visitor.visit(gadget, text2))
         .andReturn(DomWalker.Visitor.VisitStatus.RESERVE_NODE).once();
-    
+
     // All nodes are revisited in DFS order.
     List<Node> allReserved =
         Lists.newArrayList(root, child1, text1, child2, subchild1, text2);
     expect(visitor.revisit(gadget, allReserved))
         .andReturn(true).once();
     replay(visitor);
-    
+
     MutableContent mc = getContent(1);  // Mutated each revisit.
-    
+
     DomWalker.Rewriter rewriter = getRewriter(visitor);
     rewriter.rewrite(gadget, mc);
-    
+
     // Verifying mutations on MutableContent completes the test.
     verify(mc);
   }
-  
+
   @Test
   public void reserveRootPrecludesAllElse() throws Exception {
     Gadget gadget = gadget();
-    
+
     // Visitor1 reserves root, visitor2 never gets anything.
     DomWalker.Visitor visitor1 = createMock(DomWalker.Visitor.class);
     expect(visitor1.visit(gadget, root))
@@ -172,20 +176,20 @@ public class DomWalkerTest extends DomWa
         .andReturn(true).once();
     DomWalker.Visitor visitor2 = createMock(DomWalker.Visitor.class);
     replay(visitor1, visitor2);
-    
+
     MutableContent mc = getContent(1);  // Mutated once by revisit.
-    
+
     DomWalker.Rewriter rewriter = getRewriter(visitor1, visitor2);
     rewriter.rewrite(gadget, mc);
-    
+
     // Verifying mutations on MutableContent completes the test.
     verify(mc);
   }
-  
+
   @Test
   public void allMixedModes() throws Exception {
     Gadget gadget = gadget();
-    
+
     // Visitor1 reserves single text node 1
     DomWalker.Visitor visitor1 = createMock(DomWalker.Visitor.class);
     expect(visitor1.visit(gadget, root))
@@ -203,7 +207,7 @@ public class DomWalkerTest extends DomWa
     List<Node> reserved1 = Lists.newArrayList(child1);
     expect(visitor1.revisit(gadget, reserved1))
         .andReturn(false).once();
-    
+
     // Visitor2 reserves tree of subchild 1
     DomWalker.Visitor visitor2 = createMock(DomWalker.Visitor.class);
     expect(visitor2.visit(gadget, root))
@@ -218,7 +222,7 @@ public class DomWalkerTest extends DomWa
     List<Node> reserved2 = Lists.newArrayList(subchild1);
     expect(visitor2.revisit(gadget, reserved2))
         .andReturn(true).once();
-    
+
     // Visitor3 modifies child 2
     DomWalker.Visitor visitor3 = createMock(DomWalker.Visitor.class);
     expect(visitor3.visit(gadget, root))
@@ -229,14 +233,14 @@ public class DomWalkerTest extends DomWa
     expect(visitor3.visit(gadget, child2))
         .andReturn(DomWalker.Visitor.VisitStatus.MODIFY).once();
     // No visitation of tree of subchild 1
-    
+
     replay(visitor1, visitor2, visitor3);
-    
+
     MutableContent mc = getContent(2);  // Once v2.revisit(), once v3.visit()
-    
+
     DomWalker.Rewriter rewriter = getRewriter(visitor1, visitor2, visitor3);
     rewriter.rewrite(gadget, mc);
-    
+
     // As before, MutableContent verification is the test.
     verify(mc);
   }
@@ -264,10 +268,25 @@ public class DomWalkerTest extends DomWa
     assertTrue(exceptionCaught);
   }
 
+  // Throws UnsupportedOperationException if rewrite() method does not stop
+  // on seeing empty content.
+  @Test
+  public void rewriteDoesNothingWhenContentIsEmpty() throws Exception {
+    DomWalker.Rewriter rewriter = getRewriter();
+
+    HttpRequest req = new HttpRequest(Uri.parse("http://www.example.org"));
+    HttpResponseBuilder builder = new HttpResponseBuilder()
+        .setResponse(null)
+        .addHeader("Content-Type", "text/html");
+    rewriter.rewrite(req, builder);
+
+    assertEquals("", builder.getContent());
+  }
+
   private DomWalker.Rewriter getRewriter(DomWalker.Visitor... visitors) {
     return new DomWalker.Rewriter(Lists.newArrayList(visitors));
   }
-  
+
   private MutableContent getContent(int docChangedTimes) {
     MutableContent mc = createMock(MutableContent.class);
     expect(mc.getDocument()).andReturn(doc).once();