View Javadoc

1   package com.atlassian.core.filters.encoding;
2   
3   import junit.framework.TestCase;
4   
5   import javax.servlet.FilterChain;
6   import javax.servlet.ServletRequest;
7   import javax.servlet.ServletResponse;
8   import javax.servlet.http.HttpServletResponse;
9   
10  import com.atlassian.core.filters.StubEncodingFilter;
11  import com.atlassian.core.filters.ServletStubs;
12  
13  public class TestFixedHtmlEncodingResponseWrapper extends TestCase
14  {
15      private StubEncodingFilter encodingFilter;
16      private ServletStubs.Request request;
17      private ServletStubs.Response response;
18  
19      protected void setUp() throws Exception
20      {
21          super.setUp();
22          encodingFilter = new StubEncodingFilter();
23  
24          request = ServletStubs.getRequestInstance();
25          response = ServletStubs.getResponseInstance();
26      }
27  
28      public void testSetRawContentTypeAppendsEncoding() throws Exception
29      {
30          encodingFilter.setEncoding("UTF-8");
31          encodingFilter.setContentType("text/plain");
32          response.setCharacterEncoding("ISO-8859-1"); // not sure where this comes from normally
33  
34          encodingFilter.doFilter(request, response, new FilterChain() {
35              public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse)
36              {
37                  servletResponse.setContentType("text/html");
38              }
39          });
40  
41          assertEquals("UTF-8", request.getCharacterEncoding());
42          assertEquals("text/html;charset=ISO-8859-1", response.getContentType());
43      }
44  
45      public void testSetHtmlContentTypeWithCharsetIsIgnored() throws Exception
46      {
47          encodingFilter.setEncoding("UTF-8");
48          encodingFilter.setContentType("text/plain");
49  
50          encodingFilter.doFilter(request, response, new FilterChain() {
51              public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse)
52              {
53                  servletResponse.setContentType("text/html; charset=UTF-8");
54              }
55          });
56  
57          assertEquals("UTF-8", request.getCharacterEncoding());
58          assertEquals("content-type is unchanged", "text/plain", response.getContentType());
59      }
60  
61      public void testSetNonHtmlContentTypeWithCharsetWorks() throws Exception
62      {
63          encodingFilter.setEncoding("UTF-8");
64          encodingFilter.setContentType("text/plain");
65  
66          encodingFilter.doFilter(request, response, new FilterChain() {
67              public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse)
68              {
69                  servletResponse.setContentType("application/xml; charset=UTF-8");
70              }
71          });
72  
73          assertEquals("UTF-8", request.getCharacterEncoding());
74          assertEquals("application/xml; charset=UTF-8", response.getContentType());
75      }
76  
77      public void testSetContentTypeHeaderIsAppliedWithoutChanges() throws Exception
78      {
79          encodingFilter.setEncoding("UTF-8");
80          encodingFilter.setContentType("text/plain");
81  
82          encodingFilter.doFilter(request, response, new FilterChain() {
83              public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse)
84              {
85                  ((HttpServletResponse) servletResponse).setHeader("Content-Type", "text/html");
86              }
87          });
88  
89          assertEquals("UTF-8", request.getCharacterEncoding());
90  
91          // these differ because we're using a stub implementation
92          assertEquals("text/plain", response.getContentType());
93          assertEquals("text/html", response.getHeader("Content-Type"));
94      }
95  }