1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 package org.seasar.cubby.filter;
18
19 import static org.easymock.EasyMock.anyObject;
20 import static org.easymock.EasyMock.createMock;
21 import static org.easymock.EasyMock.expect;
22 import static org.easymock.EasyMock.expectLastCall;
23 import static org.easymock.EasyMock.getCurrentArguments;
24 import static org.easymock.EasyMock.isA;
25 import static org.easymock.EasyMock.replay;
26 import static org.easymock.EasyMock.verify;
27 import static org.junit.Assert.assertEquals;
28
29 import java.io.IOException;
30 import java.util.HashMap;
31 import java.util.Map;
32
33 import javax.servlet.FilterChain;
34 import javax.servlet.FilterConfig;
35 import javax.servlet.ServletException;
36 import javax.servlet.ServletRequest;
37 import javax.servlet.ServletResponse;
38 import javax.servlet.http.HttpServletRequest;
39 import javax.servlet.http.HttpServletResponse;
40
41 import org.easymock.IAnswer;
42 import org.junit.Test;
43
44 public class EncodingFilterTest {
45
46 @Test
47 public void setEncoding1() throws ServletException, IOException {
48 FilterConfig config = createMock(FilterConfig.class);
49 expect(config.getInitParameter("encoding")).andReturn("UTF-8");
50 expect(config.getInitParameter("forceEncoding")).andReturn(null);
51 expect(config.getInitParameter("URIEncoding")).andReturn(null);
52 expect(config.getInitParameter("URIBytesEncoding")).andReturn(null);
53
54 HttpServletRequest request = createMockHttpServletRequest();
55 expect(request.getCharacterEncoding()).andReturn(null);
56 request.setCharacterEncoding("UTF-8");
57
58 HttpServletResponse response = createMock(HttpServletResponse.class);
59
60 FilterChain chain = createMock(FilterChain.class);
61 chain.doFilter(isA(ServletRequest.class), isA(ServletResponse.class));
62
63 replay(config, request, response, chain);
64
65 EncodingFilter filter = new EncodingFilter();
66 filter.init(config);
67 filter.doFilter(request, response, chain);
68 filter.destroy();
69
70 verify(config, request, response, chain);
71 }
72
73 @Test
74 public void setEncoding2() throws ServletException, IOException {
75 FilterConfig config = createMock(FilterConfig.class);
76 expect(config.getInitParameter("encoding")).andReturn("UTF-8");
77 expect(config.getInitParameter("forceEncoding")).andReturn(null);
78 expect(config.getInitParameter("URIEncoding")).andReturn(null);
79 expect(config.getInitParameter("URIBytesEncoding")).andReturn(null);
80
81 HttpServletRequest request = createMockHttpServletRequest();
82 expect(request.getCharacterEncoding()).andReturn("Shift_JIS");
83
84 HttpServletResponse response = createMock(HttpServletResponse.class);
85
86 FilterChain chain = createMock(FilterChain.class);
87 chain.doFilter(isA(ServletRequest.class), isA(ServletResponse.class));
88
89 replay(config, request, response, chain);
90
91 EncodingFilter filter = new EncodingFilter();
92 filter.init(config);
93 filter.doFilter(request, response, chain);
94 filter.destroy();
95
96 verify(config, request, response, chain);
97 }
98
99 @Test
100 public void setForceEncoding1() throws ServletException, IOException {
101 FilterConfig config = createMock(FilterConfig.class);
102 expect(config.getInitParameter("encoding")).andReturn("UTF-8");
103 expect(config.getInitParameter("forceEncoding")).andReturn("true");
104 expect(config.getInitParameter("URIEncoding")).andReturn(null);
105 expect(config.getInitParameter("URIBytesEncoding")).andReturn(null);
106
107 HttpServletRequest request = createMockHttpServletRequest();
108 expect(request.getCharacterEncoding()).andReturn("Shift_JIS");
109 request.setCharacterEncoding("UTF-8");
110
111 HttpServletResponse response = createMock(HttpServletResponse.class);
112
113 FilterChain chain = createMock(FilterChain.class);
114 chain.doFilter(isA(ServletRequest.class), isA(ServletResponse.class));
115
116 replay(config, request, response, chain);
117
118 EncodingFilter filter = new EncodingFilter();
119 filter.init(config);
120 filter.doFilter(request, response, chain);
121 filter.destroy();
122
123 verify(config, request, response, chain);
124 }
125
126 @Test
127 public void setForceEncoding2() throws ServletException, IOException {
128 FilterConfig config = createMock(FilterConfig.class);
129 expect(config.getInitParameter("encoding")).andReturn("UTF-8");
130 expect(config.getInitParameter("forceEncoding")).andReturn("true");
131 expect(config.getInitParameter("URIEncoding")).andReturn(null);
132 expect(config.getInitParameter("URIBytesEncoding")).andReturn(null);
133
134 HttpServletRequest request = createMockHttpServletRequest();
135 expect(request.getCharacterEncoding()).andReturn("Shift_JIS");
136 request.setCharacterEncoding("UTF-8");
137
138 HttpServletResponse response = createMock(HttpServletResponse.class);
139
140 FilterChain chain = createMock(FilterChain.class);
141 chain.doFilter(isA(ServletRequest.class), isA(ServletResponse.class));
142
143 replay(config, request, response, chain);
144
145 EncodingFilter filter = new EncodingFilter();
146 filter.init(config);
147 filter.doFilter(request, response, chain);
148 filter.destroy();
149
150 verify(config, request, response, chain);
151 }
152
153 @Test
154 public void setForceEncoding3() throws ServletException, IOException {
155 FilterConfig config = createMock(FilterConfig.class);
156 expect(config.getInitParameter("encoding")).andReturn("UTF-8");
157 expect(config.getInitParameter("forceEncoding")).andReturn("false");
158 expect(config.getInitParameter("URIEncoding")).andReturn(null);
159 expect(config.getInitParameter("URIBytesEncoding")).andReturn(null);
160
161 HttpServletRequest request = createMockHttpServletRequest();
162 expect(request.getCharacterEncoding()).andReturn("Shift_JIS");
163
164 HttpServletResponse response = createMock(HttpServletResponse.class);
165
166 FilterChain chain = createMock(FilterChain.class);
167 chain.doFilter(isA(ServletRequest.class), isA(ServletResponse.class));
168
169 replay(config, request, response, chain);
170
171 EncodingFilter filter = new EncodingFilter();
172 filter.init(config);
173 filter.doFilter(request, response, chain);
174 filter.destroy();
175
176 verify(config, request, response, chain);
177 }
178
179 @Test
180 public void doURIEncoding1() throws ServletException, IOException {
181 FilterConfig config = createMock(FilterConfig.class);
182 expect(config.getInitParameter("encoding")).andReturn("UTF-8");
183 expect(config.getInitParameter("forceEncoding")).andReturn("false");
184 expect(config.getInitParameter("URIEncoding")).andReturn("UTF-8");
185 expect(config.getInitParameter("URIBytesEncoding")).andReturn(null);
186
187 HttpServletRequest request = createMockHttpServletRequest();
188 expect(request.getCharacterEncoding()).andReturn(null);
189 request.setCharacterEncoding("UTF-8");
190 expect(request.getServletPath()).andReturn(
191 new String("あいうえおABC123".getBytes("UTF-8"), "ISO-8859-1"));
192 expect(request.getPathInfo()).andReturn(
193 new String("かきくけこXYZ987".getBytes("UTF-8"), "ISO-8859-1"));
194
195 HttpServletResponse response = createMock(HttpServletResponse.class);
196
197 FilterChain chain = createMock(FilterChain.class);
198 chain.doFilter(isA(ServletRequest.class), isA(ServletResponse.class));
199 expectLastCall().andAnswer(new IAnswer<Object>() {
200
201 public Object answer() throws Throwable {
202 HttpServletRequest request = (HttpServletRequest) getCurrentArguments()[0];
203 assertEquals("あいうえおABC123", request.getServletPath());
204 assertEquals("かきくけこXYZ987", request.getPathInfo());
205 return null;
206 }
207
208 });
209
210 replay(config, request, response, chain);
211
212 EncodingFilter filter = new EncodingFilter();
213 filter.init(config);
214 filter.doFilter(request, response, chain);
215 filter.destroy();
216
217 verify(config, request, response, chain);
218 }
219
220 @Test
221 public void doURIEncoding2() throws ServletException, IOException {
222 FilterConfig config = createMock(FilterConfig.class);
223 expect(config.getInitParameter("encoding")).andReturn("UTF-8");
224 expect(config.getInitParameter("forceEncoding")).andReturn("false");
225 expect(config.getInitParameter("URIEncoding")).andReturn("UTF-8");
226 expect(config.getInitParameter("URIBytesEncoding")).andReturn(
227 "ISO-8859-1");
228
229 HttpServletRequest request = createMockHttpServletRequest();
230 expect(request.getCharacterEncoding()).andReturn(null);
231 request.setCharacterEncoding("UTF-8");
232 expect(request.getServletPath()).andReturn(
233 new String("あいうえおABC123".getBytes("UTF-8"), "ISO-8859-1"));
234 expect(request.getPathInfo()).andReturn(
235 new String("かきくけこXYZ987".getBytes("UTF-8"), "ISO-8859-1"));
236
237 HttpServletResponse response = createMock(HttpServletResponse.class);
238
239 FilterChain chain = createMock(FilterChain.class);
240 chain.doFilter(isA(ServletRequest.class), isA(ServletResponse.class));
241 expectLastCall().andAnswer(new IAnswer<Object>() {
242
243 public Object answer() throws Throwable {
244 HttpServletRequest request = (HttpServletRequest) getCurrentArguments()[0];
245 assertEquals("あいうえおABC123", request.getServletPath());
246 assertEquals("かきくけこXYZ987", request.getPathInfo());
247 return null;
248 }
249
250 });
251
252 replay(config, request, response, chain);
253
254 EncodingFilter filter = new EncodingFilter();
255 filter.init(config);
256 filter.doFilter(request, response, chain);
257 filter.destroy();
258
259 verify(config, request, response, chain);
260 }
261
262 private HttpServletRequest createMockHttpServletRequest() {
263 final Map<String, Object> requestAttributes = new HashMap<String, Object>();
264
265 HttpServletRequest request = createMock(HttpServletRequest.class);
266
267 expect(request.getAttribute((String) anyObject())).andStubAnswer(
268 new IAnswer<Object>() {
269
270 public Object answer() throws Throwable {
271 return requestAttributes.get(getCurrentArguments()[0]);
272 }
273
274 });
275
276 request.setAttribute((String) anyObject(), anyObject());
277 expectLastCall().andStubAnswer(new IAnswer<Object>() {
278
279 public Object answer() throws Throwable {
280 requestAttributes.put((String) getCurrentArguments()[0],
281 getCurrentArguments()[1]);
282 return null;
283 }
284
285 });
286
287 request.removeAttribute((String) anyObject());
288 expectLastCall().andAnswer(new IAnswer<Object>() {
289
290 public Object answer() throws Throwable {
291 requestAttributes.remove((String) getCurrentArguments()[0]);
292 return null;
293 }
294
295 });
296
297 return request;
298 }
299
300 }