You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@shindig.apache.org by et...@apache.org on 2008/10/22 02:34:24 UTC

svn commit: r706820 - in /incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/servlet: GadgetRenderingServletTest.java HttpServletResponseRecorder.java

Author: etnu
Date: Tue Oct 21 17:34:24 2008
New Revision: 706820

URL: http://svn.apache.org/viewvc?rev=706820&view=rev
Log:
New tests for ensuring proper output encoding is always set.


Modified:
    incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/servlet/GadgetRenderingServletTest.java
    incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/servlet/HttpServletResponseRecorder.java

Modified: incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/servlet/GadgetRenderingServletTest.java
URL: http://svn.apache.org/viewvc/incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/servlet/GadgetRenderingServletTest.java?rev=706820&r1=706819&r2=706820&view=diff
==============================================================================
--- incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/servlet/GadgetRenderingServletTest.java (original)
+++ incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/servlet/GadgetRenderingServletTest.java Tue Oct 21 17:34:24 2008
@@ -19,24 +19,33 @@
 package org.apache.shindig.gadgets.servlet;
 
 import static org.easymock.EasyMock.expect;
+import static org.easymock.EasyMock.isA;
 import static org.junit.Assert.assertEquals;
 
+import org.apache.shindig.gadgets.GadgetContext;
 import org.apache.shindig.gadgets.http.HttpRequest;
+import org.apache.shindig.gadgets.render.Renderer;
+import org.apache.shindig.gadgets.render.RenderingResults;
 
-import org.easymock.EasyMock;
 import org.easymock.IMocksControl;
+import org.easymock.classextension.EasyMock;
 import org.junit.Test;
 
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
 
 public class GadgetRenderingServletTest {
+  private static final String NON_ASCII_STRING
+      = "Games, HQ, Mang\u00E1, Anime e tudo que um bom nerd ama";
+
   private final IMocksControl control = EasyMock.createNiceControl();
   private final HttpServletRequest request = control.createMock(HttpServletRequest.class);
   private final HttpServletResponse response = control.createMock(HttpServletResponse.class);
+  private final Renderer renderer = control.createMock(Renderer.class);
   public final HttpServletResponseRecorder recorder = new HttpServletResponseRecorder(response);
   private final GadgetRenderingServlet servlet = new GadgetRenderingServlet();
 
+
   @Test
   public void dosHeaderRejected() throws Exception {
     expect(request.getHeader(HttpRequest.DOS_PREVENTION_HEADER)).andReturn("foo");
@@ -45,4 +54,19 @@
 
     assertEquals(HttpServletResponse.SC_FORBIDDEN, recorder.getHttpStatusCode());
   }
+
+  @Test
+  public void outputEncodingIsUtf8() throws Exception {
+    servlet.setRenderer(renderer);
+    expect(renderer.render(isA(GadgetContext.class)))
+        .andReturn(RenderingResults.ok(NON_ASCII_STRING));
+    control.replay();
+
+    servlet.doGet(request, recorder);
+
+
+    assertEquals("UTF-8", recorder.getCharacterEncoding());
+    assertEquals("text/html", recorder.getContentType());
+    assertEquals(NON_ASCII_STRING, recorder.getResponseAsString());
+  }
 }

Modified: incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/servlet/HttpServletResponseRecorder.java
URL: http://svn.apache.org/viewvc/incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/servlet/HttpServletResponseRecorder.java?rev=706820&r1=706819&r2=706820&view=diff
==============================================================================
--- incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/servlet/HttpServletResponseRecorder.java (original)
+++ incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/servlet/HttpServletResponseRecorder.java Tue Oct 21 17:34:24 2008
@@ -24,7 +24,10 @@
 
 import java.io.ByteArrayOutputStream;
 import java.io.IOException;
+import java.io.OutputStreamWriter;
 import java.io.PrintWriter;
+import java.io.UnsupportedEncodingException;
+import java.nio.charset.Charset;
 import java.util.Map;
 
 import javax.servlet.ServletOutputStream;
@@ -36,10 +39,11 @@
  */
 public class HttpServletResponseRecorder extends HttpServletResponseWrapper {
   private final ByteArrayOutputStream baos = new ByteArrayOutputStream();
-  private final PrintWriter writer = new PrintWriter(baos);
+  private PrintWriter writer;
   private final Map<String, String> headers = Maps.newTreeMap(String.CASE_INSENSITIVE_ORDER);
   private int httpStatusCode = 200;
   private String contentType;
+  private String encoding = Charset.defaultCharset().name();
 
   public HttpServletResponseRecorder(HttpServletResponse response) {
     super(response);
@@ -47,7 +51,7 @@
 
   public String getResponseAsString() {
     try {
-      writer.close();
+      getWriter().close();
       return new String(baos.toByteArray(), "UTF-8");
     } catch (IOException e) {
       return null;
@@ -67,7 +71,10 @@
   }
 
   @Override
-  public PrintWriter getWriter() {
+  public PrintWriter getWriter() throws UnsupportedEncodingException {
+    if (writer == null) {
+      writer = new PrintWriter(new OutputStreamWriter(baos, encoding));
+    }
     return writer;
   }
 
@@ -112,25 +119,42 @@
   }
 
   @Override
-  public void setStatus(int httpStatusCode, String msg) {
-    writer.write(msg);
-    this.httpStatusCode = httpStatusCode;
+  public void setStatus(int httpStatusCode, String msg)  {
+    try {
+      getWriter().write(msg);
+      this.httpStatusCode = httpStatusCode;
+    } catch (UnsupportedEncodingException e) {
+      throw new RuntimeException(e);
+    }
   }
 
   @Override
   public void sendError(int httpStatusCode, String msg) {
-    writer.write(msg);
-    this.httpStatusCode = httpStatusCode;
+    try {
+      getWriter().write(msg);
+      this.httpStatusCode = httpStatusCode;
+    } catch (UnsupportedEncodingException e) {
+      throw new RuntimeException(e);
+    }
   }
-  
+
   @Override
   public void setContentType(String type) {
-    setHeader("Content-Type", type);
     this.contentType = type;
   }
-  
+
   @Override
   public String getContentType() {
     return contentType;
   }
+
+  @Override
+  public void setCharacterEncoding(String encoding) {
+    this.encoding = encoding;
+  }
+
+  @Override
+  public String getCharacterEncoding() {
+    return encoding;
+  }
 }