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