1   /*
2    * Copyright 2004-2010 the Seasar Foundation and the Others.
3    *
4    * Licensed under the Apache License, Version 2.0 (the "License");
5    * you may not use this file except in compliance with the License.
6    * You may obtain a copy of the License at
7    *
8    *     http://www.apache.org/licenses/LICENSE-2.0
9    *
10   * Unless required by applicable law or agreed to in writing, software
11   * distributed under the License is distributed on an "AS IS" BASIS,
12   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,
13   * either express or implied. See the License for the specific language
14   * governing permissions and limitations under the License.
15   */
16  
17  package org.seasar.cubby.spi.impl;
18  
19  import static org.easymock.EasyMock.createMock;
20  import static org.easymock.EasyMock.expect;
21  import static org.easymock.EasyMock.*;
22  import static org.junit.Assert.*;
23  
24  import java.util.Arrays;
25  import java.util.Collection;
26  import java.util.HashMap;
27  import java.util.List;
28  import java.util.Map;
29  
30  import javax.servlet.http.HttpServletRequest;
31  
32  import org.junit.Test;
33  import org.seasar.cubby.controller.RequestParser;
34  import org.seasar.cubby.controller.impl.DefaultRequestParser;
35  import org.seasar.cubby.spi.RequestParserProvider;
36  import org.seasar.cubby.spi.impl.AbstractRequestParserProvider;
37  
38  public class AbstractRequestParserProviderTest {
39  
40  	private RequestParserProvider provider = new AbstractRequestParserProvider() {
41  
42  		private List<RequestParser> parsers = Arrays
43  				.asList(new RequestParser[] { new MyRequestParserImpl(),
44  						new DefaultRequestParser() });
45  
46  		@Override
47  		protected Collection<RequestParser> getRequestParsers() {
48  			return parsers;
49  		}
50  
51  	};
52  
53  	@Test
54  	public void testSelect1() {
55  		Map<String, Object[]> parameterMap = new HashMap<String, Object[]>();
56  		HttpServletRequest request = createMock(HttpServletRequest.class);
57  		expect(request.getContentType()).andStubReturn(null);
58  		expect(request.getParameterMap()).andStubReturn(parameterMap);
59  		replay(request);
60  		assertEquals(parameterMap, provider.getParameterMap(request));
61  		verify(request);
62  	}
63  
64  	@Test
65  	public void testSelect2() {
66  		Map<String, Object[]> parameterMap = new HashMap<String, Object[]>();
67  		HttpServletRequest request = createMock(HttpServletRequest.class);
68  		expect(request.getContentType()).andStubReturn(
69  				"application/x-www-form-urlencoded");
70  		expect(request.getParameterMap()).andStubReturn(parameterMap);
71  		replay(request);
72  		assertEquals(parameterMap, provider.getParameterMap(request));
73  		verify(request);
74  	}
75  
76  	@Test
77  	public void testSelect4() {
78  		Map<String, Object[]> parameterMap = new HashMap<String, Object[]>();
79  		HttpServletRequest request = createMock(HttpServletRequest.class);
80  		expect(request.getContentType()).andStubReturn("application/atom+xml");
81  		expect(request.getParameterMap()).andStubReturn(parameterMap);
82  		replay(request);
83  		assertEquals(parameterMap, provider.getParameterMap(request));
84  		verify(request);
85  	}
86  
87  	@Test
88  	public void testSelect5() {
89  		HttpServletRequest request = createMock(HttpServletRequest.class);
90  		expect(request.getContentType()).andStubReturn("foo/bar");
91  		replay(request);
92  		assertEquals(MY_REQUEST_PARSER_PARAMETER_MAP, provider
93  				.getParameterMap(request));
94  		verify(request);
95  	}
96  
97  	private static Map<String, Object[]> MY_REQUEST_PARSER_PARAMETER_MAP;
98  	static {
99  		Map<String, Object[]> map = new HashMap<String, Object[]>();
100 		map.put("abc", new Object[] { "def" });
101 		MY_REQUEST_PARSER_PARAMETER_MAP = map;
102 	}
103 
104 	private static class MyRequestParserImpl implements RequestParser {
105 
106 		public Map<String, Object[]> getParameterMap(HttpServletRequest request) {
107 			return MY_REQUEST_PARSER_PARAMETER_MAP;
108 		}
109 
110 		public boolean isParsable(HttpServletRequest request) {
111 			String contentType = request.getContentType();
112 			return contentType != null && contentType.startsWith("foo/");
113 		}
114 
115 	}
116 }