View Javadoc

1   package com.atlassian.core.filters;
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  /**
11   * This test only covers the actual encoding-related (i.e. content-type header) functionality of the
12   * AbstractEncodingFilter. See the related classes for tests for the other functionality.
13   *
14   * @see TestAbstractEncodingFilterContentLocationHandling
15   * @see TestAbstractEncodingFilterPunctuationReplacement
16   * @see TestAbstractEncodingFilterCachingHeaders
17   */
18  public class TestAbstractEncodingFilter extends TestCase
19  {
20      private StubEncodingFilter encodingFilter;
21      private ServletStubs.Request request;
22      private ServletStubs.Response response;
23  
24      protected void setUp() throws Exception
25      {
26          super.setUp();
27          encodingFilter = new StubEncodingFilter();
28  
29          request = ServletStubs.getRequestInstance();
30          response = ServletStubs.getResponseInstance();
31      }
32  
33      public void testDefaultContentTypeAndEncodingAreSet() throws Exception
34      {
35          encodingFilter.setEncoding("UTF-8");
36          encodingFilter.setContentType("text/plain");
37          
38          encodingFilter.doFilter(request, response);
39  
40          assertEquals("UTF-8", request.getCharacterEncoding());
41          assertEquals("text/plain", response.getContentType());
42      }
43  
44      public void testSetRawContentTypeAppendsEncoding() throws Exception
45      {
46          encodingFilter.setEncoding("UTF-8");
47          encodingFilter.setContentType("text/plain");
48          response.setCharacterEncoding("ISO-8859-1"); // not sure where this comes from normally
49  
50          encodingFilter.doFilter(request, response, new FilterChain() {
51              public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse)
52              {
53                  servletResponse.setContentType("text/html");
54              }
55          });
56  
57          assertEquals("UTF-8", request.getCharacterEncoding());
58          assertEquals("text/html;charset=ISO-8859-1", response.getContentType());
59      }
60  
61      public void testSetHtmlContentTypeWithCharsetIsIgnored() 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("text/html; charset=UTF-8");
70              }
71          });
72  
73          assertEquals("UTF-8", request.getCharacterEncoding());
74          assertEquals("content-type is unchanged", "text/plain", response.getContentType());
75      }
76  
77      public void testSetNonHtmlContentTypeWithCharsetWorks() 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                  servletResponse.setContentType("application/xml; charset=UTF-8");
86              }
87          });
88  
89          assertEquals("UTF-8", request.getCharacterEncoding());
90          assertEquals("application/xml; charset=UTF-8", response.getContentType());
91      }
92  
93      public void testSetContentTypeHeaderIsAppliedWithoutChanges() throws Exception
94      {
95          encodingFilter.setEncoding("UTF-8");
96          encodingFilter.setContentType("text/plain");
97  
98          encodingFilter.doFilter(request, response, new FilterChain() {
99              public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse)
100             {
101                 ((HttpServletResponse) servletResponse).setHeader("Content-Type", "text/html");
102             }
103         });
104 
105         assertEquals("UTF-8", request.getCharacterEncoding());
106 
107         // these differ because we're using a stub implementation
108         assertEquals("text/plain", response.getContentType());
109         assertEquals("text/html", response.getHeader("Content-Type"));
110     }
111 }