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
12
13
14
15
16
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");
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
108 assertEquals("text/plain", response.getContentType());
109 assertEquals("text/html", response.getHeader("Content-Type"));
110 }
111 }