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();