1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 package org.seasar.cubby.controller.impl;
17
18 import static org.easymock.EasyMock.createMock;
19 import static org.easymock.EasyMock.expect;
20 import static org.easymock.EasyMock.replay;
21 import static org.junit.Assert.assertFalse;
22 import static org.junit.Assert.assertTrue;
23 import static org.junit.Assert.fail;
24
25 import java.util.HashMap;
26 import java.util.Map;
27
28 import javax.servlet.http.HttpServletRequest;
29
30 import org.apache.commons.fileupload.FileUpload;
31 import org.apache.commons.fileupload.RequestContext;
32 import org.apache.commons.fileupload.FileUploadBase.InvalidContentTypeException;
33 import org.apache.commons.fileupload.servlet.ServletFileUpload;
34 import org.apache.commons.fileupload.servlet.ServletRequestContext;
35 import org.easymock.IAnswer;
36 import org.junit.After;
37 import org.junit.Before;
38 import org.junit.Test;
39 import org.seasar.cubby.controller.RequestParseException;
40 import org.seasar.cubby.controller.RequestParser;
41 import org.seasar.cubby.mock.MockContainerProvider;
42 import org.seasar.cubby.plugin.PluginRegistry;
43 import org.seasar.cubby.plugins.BinderPlugin;
44 import org.seasar.cubby.spi.ContainerProvider;
45 import org.seasar.cubby.spi.container.Container;
46
47 public class MultipartRequestParserImplTest {
48
49 private final PluginRegistry pluginRegistry = PluginRegistry.getInstance();
50
51 private RequestParser requestParser = new MultipartRequestParser();
52
53 private HttpServletRequest request;
54
55 private String contentType;
56
57 @Before
58 public void setupRequest() throws Exception {
59 request = createMock(HttpServletRequest.class);
60 expect(request.getCharacterEncoding()).andStubReturn("UTF-8");
61 expect(request.getParameterMap()).andStubReturn(
62 new HashMap<String, String[]>());
63 expect(request.getContentType()).andStubAnswer(new IAnswer<String>() {
64
65 public String answer() throws Throwable {
66 return contentType;
67 }
68
69 });
70 replay(request);
71
72 final FileUpload fileUpload = new ServletFileUpload();
73 final RequestContext requestContext = new ServletRequestContext(request);
74 BinderPlugin binderPlugin = new BinderPlugin();
75 binderPlugin.bind(ContainerProvider.class).toInstance(
76 new MockContainerProvider(new Container() {
77
78 public <T> T lookup(final Class<T> type) {
79 if (FileUpload.class.equals(type)) {
80 return type.cast(fileUpload);
81 }
82
83 if (RequestContext.class.equals(type)) {
84 return type.cast(requestContext);
85 }
86
87 return null;
88 }
89
90 }));
91 pluginRegistry.register(binderPlugin);
92 }
93
94 @After
95 public void tearDownProvider() {
96 pluginRegistry.clear();
97 }
98
99 @Test
100 public void invalidCotntentType() {
101 contentType = "application/x-www-form-urlencoded";
102 try {
103 @SuppressWarnings("unused")
104 Map<String, Object[]> parameterMap = requestParser
105 .getParameterMap(request);
106 fail();
107 } catch (RequestParseException e) {
108 assertTrue(e.getCause() instanceof InvalidContentTypeException);
109 }
110 }
111
112 @Test
113 public void isParsable() {
114 contentType = "application/x-www-form-urlencoded";
115 assertFalse(requestParser.isParsable(request));
116
117 contentType = "multipart/form-data";
118 assertTrue(requestParser.isParsable(request));
119
120 contentType = "application/atom+xml";
121 assertFalse(requestParser.isParsable(request));
122 }
123
124 }