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");
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
92 assertEquals("text/plain", response.getContentType());
93 assertEquals("text/html", response.getHeader("Content-Type"));
94 }
95 }