Skip to content

Commit db1092f

Browse files
committed
Polish RequestMappingInfoTests
1 parent 848562d commit db1092f

File tree

2 files changed

+76
-153
lines changed

2 files changed

+76
-153
lines changed

spring-webmvc/src/main/java/org/springframework/web/servlet/mvc/method/RequestMappingInfo.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@
3434
import org.springframework.web.util.UrlPathHelper;
3535

3636
/**
37-
* Encapsulates the following request mapping conditions:
37+
* A {@link RequestCondition} that consists of the following other conditions:
3838
* <ol>
3939
* <li>{@link PatternsRequestCondition}
4040
* <li>{@link RequestMethodsRequestCondition}

spring-webmvc/src/test/java/org/springframework/web/servlet/mvc/method/RequestMappingInfoTests.java

Lines changed: 75 additions & 152 deletions
Original file line numberDiff line numberDiff line change
@@ -19,21 +19,22 @@
1919
import java.util.Collections;
2020
import java.util.Comparator;
2121
import java.util.List;
22+
import javax.servlet.http.HttpServletRequest;
2223

2324
import org.junit.Test;
2425

2526
import org.springframework.http.HttpHeaders;
2627
import org.springframework.mock.web.test.MockHttpServletRequest;
2728
import org.springframework.web.bind.annotation.RequestMethod;
28-
import org.springframework.web.servlet.mvc.condition.ConsumesRequestCondition;
29-
import org.springframework.web.servlet.mvc.condition.HeadersRequestCondition;
30-
import org.springframework.web.servlet.mvc.condition.ParamsRequestCondition;
31-
import org.springframework.web.servlet.mvc.condition.PatternsRequestCondition;
32-
import org.springframework.web.servlet.mvc.condition.ProducesRequestCondition;
33-
import org.springframework.web.servlet.mvc.condition.RequestMethodsRequestCondition;
3429

35-
import static java.util.Arrays.*;
36-
import static org.junit.Assert.*;
30+
import static java.util.Arrays.asList;
31+
import static org.junit.Assert.assertEquals;
32+
import static org.junit.Assert.assertFalse;
33+
import static org.junit.Assert.assertNotEquals;
34+
import static org.junit.Assert.assertNotNull;
35+
import static org.junit.Assert.assertNull;
36+
import static org.springframework.web.bind.annotation.RequestMethod.GET;
37+
import static org.springframework.web.servlet.mvc.method.RequestMappingInfo.paths;
3738

3839
/**
3940
* Test fixture for {@link RequestMappingInfo} tests.
@@ -43,9 +44,10 @@
4344
*/
4445
public class RequestMappingInfoTests {
4546

47+
4648
@Test
4749
public void createEmpty() {
48-
RequestMappingInfo info = new RequestMappingInfo(null, null, null, null, null, null, null);
50+
RequestMappingInfo info = paths().build();
4951

5052
assertEquals(0, info.getPatternsCondition().getPatterns().size());
5153
assertEquals(0, info.getMethodsCondition().getMethods().size());
@@ -58,19 +60,15 @@ public void createEmpty() {
5860

5961
@Test
6062
public void matchPatternsCondition() {
61-
MockHttpServletRequest request = new MockHttpServletRequest("GET", "/foo");
63+
HttpServletRequest request = new MockHttpServletRequest("GET", "/foo");
6264

63-
RequestMappingInfo info = new RequestMappingInfo(
64-
new PatternsRequestCondition("/foo*", "/bar"), null, null, null, null, null, null);
65-
RequestMappingInfo expected = new RequestMappingInfo(
66-
new PatternsRequestCondition("/foo*"), null, null, null, null, null, null);
65+
RequestMappingInfo info = paths("/foo*", "/bar").build();
66+
RequestMappingInfo expected = paths("/foo*").build();
6767

6868
assertEquals(expected, info.getMatchingCondition(request));
6969

70-
info = new RequestMappingInfo(
71-
new PatternsRequestCondition("/**", "/foo*", "/foo"), null, null, null, null, null, null);
72-
expected = new RequestMappingInfo(
73-
new PatternsRequestCondition("/foo", "/foo*", "/**"), null, null, null, null, null, null);
70+
info = paths("/**", "/foo*", "/foo").build();
71+
expected = paths("/foo", "/foo*", "/**").build();
7472

7573
assertEquals(expected, info.getMatchingCondition(request));
7674
}
@@ -80,17 +78,12 @@ public void matchParamsCondition() {
8078
MockHttpServletRequest request = new MockHttpServletRequest("GET", "/foo");
8179
request.setParameter("foo", "bar");
8280

83-
RequestMappingInfo info =
84-
new RequestMappingInfo(
85-
new PatternsRequestCondition("/foo"), null,
86-
new ParamsRequestCondition("foo=bar"), null, null, null, null);
81+
RequestMappingInfo info = paths("/foo").params("foo=bar").build();
8782
RequestMappingInfo match = info.getMatchingCondition(request);
8883

8984
assertNotNull(match);
9085

91-
info = new RequestMappingInfo(
92-
new PatternsRequestCondition("/foo"), null,
93-
new ParamsRequestCondition("foo!=bar"), null, null, null, null);
86+
info = paths("/foo").params("foo!=bar").build();
9487
match = info.getMatchingCondition(request);
9588

9689
assertNull(match);
@@ -101,17 +94,12 @@ public void matchHeadersCondition() {
10194
MockHttpServletRequest request = new MockHttpServletRequest("GET", "/foo");
10295
request.addHeader("foo", "bar");
10396

104-
RequestMappingInfo info =
105-
new RequestMappingInfo(
106-
new PatternsRequestCondition("/foo"), null, null,
107-
new HeadersRequestCondition("foo=bar"), null, null, null);
97+
RequestMappingInfo info = paths("/foo").headers("foo=bar").build();
10898
RequestMappingInfo match = info.getMatchingCondition(request);
10999

110100
assertNotNull(match);
111101

112-
info = new RequestMappingInfo(
113-
new PatternsRequestCondition("/foo"), null, null,
114-
new HeadersRequestCondition("foo!=bar"), null, null, null);
102+
info = paths("/foo").headers("foo!=bar").build();
115103
match = info.getMatchingCondition(request);
116104

117105
assertNull(match);
@@ -122,17 +110,12 @@ public void matchConsumesCondition() {
122110
MockHttpServletRequest request = new MockHttpServletRequest("GET", "/foo");
123111
request.setContentType("text/plain");
124112

125-
RequestMappingInfo info =
126-
new RequestMappingInfo(
127-
new PatternsRequestCondition("/foo"), null, null, null,
128-
new ConsumesRequestCondition("text/plain"), null, null);
113+
RequestMappingInfo info = paths("/foo").consumes("text/plain").build();
129114
RequestMappingInfo match = info.getMatchingCondition(request);
130115

131116
assertNotNull(match);
132117

133-
info = new RequestMappingInfo(
134-
new PatternsRequestCondition("/foo"), null, null, null,
135-
new ConsumesRequestCondition("application/xml"), null, null);
118+
info = paths("/foo").consumes("application/xml").build();
136119
match = info.getMatchingCondition(request);
137120

138121
assertNull(match);
@@ -143,17 +126,12 @@ public void matchProducesCondition() {
143126
MockHttpServletRequest request = new MockHttpServletRequest("GET", "/foo");
144127
request.addHeader("Accept", "text/plain");
145128

146-
RequestMappingInfo info =
147-
new RequestMappingInfo(
148-
new PatternsRequestCondition("/foo"), null, null, null, null,
149-
new ProducesRequestCondition("text/plain"), null);
129+
RequestMappingInfo info = paths("/foo").produces("text/plain").build();
150130
RequestMappingInfo match = info.getMatchingCondition(request);
151131

152132
assertNotNull(match);
153133

154-
info = new RequestMappingInfo(
155-
new PatternsRequestCondition("/foo"), null, null, null, null,
156-
new ProducesRequestCondition("application/xml"), null);
134+
info = paths("/foo").produces("application/xml").build();
157135
match = info.getMatchingCondition(request);
158136

159137
assertNull(match);
@@ -164,153 +142,102 @@ public void matchCustomCondition() {
164142
MockHttpServletRequest request = new MockHttpServletRequest("GET", "/foo");
165143
request.setParameter("foo", "bar");
166144

167-
RequestMappingInfo info =
168-
new RequestMappingInfo(
169-
new PatternsRequestCondition("/foo"), null, null, null, null, null,
170-
new ParamsRequestCondition("foo=bar"));
145+
RequestMappingInfo info = paths("/foo").params("foo=bar").build();
171146
RequestMappingInfo match = info.getMatchingCondition(request);
172147

173148
assertNotNull(match);
174149

175-
info = new RequestMappingInfo(
176-
new PatternsRequestCondition("/foo"), null,
177-
new ParamsRequestCondition("foo!=bar"), null, null, null,
178-
new ParamsRequestCondition("foo!=bar"));
150+
info = paths("/foo").params("foo!=bar").params("foo!=bar").build();
179151
match = info.getMatchingCondition(request);
180152

181153
assertNull(match);
182154
}
183155

184156
@Test
185-
public void compareTwoHttpMethodsOneParam() {
186-
RequestMappingInfo none = new RequestMappingInfo(null, null, null, null, null, null, null);
187-
RequestMappingInfo oneMethod =
188-
new RequestMappingInfo(null,
189-
new RequestMethodsRequestCondition(RequestMethod.GET), null, null, null, null, null);
190-
RequestMappingInfo oneMethodOneParam =
191-
new RequestMappingInfo(null,
192-
new RequestMethodsRequestCondition(RequestMethod.GET),
193-
new ParamsRequestCondition("foo"), null, null, null, null);
194-
195-
Comparator<RequestMappingInfo> comparator = new Comparator<RequestMappingInfo>() {
196-
@Override
197-
public int compare(RequestMappingInfo info, RequestMappingInfo otherInfo) {
198-
return info.compareTo(otherInfo, new MockHttpServletRequest());
199-
}
200-
};
201-
202-
List<RequestMappingInfo> list = asList(none, oneMethod, oneMethodOneParam);
157+
public void compareToWithImpicitVsExplicitHttpMethodDeclaration() {
158+
RequestMappingInfo noMethods = paths().build();
159+
RequestMappingInfo oneMethod = paths().methods(GET).build();
160+
RequestMappingInfo oneMethodOneParam = paths().methods(GET).params("foo").build();
161+
162+
Comparator<RequestMappingInfo> comparator =
163+
(info, otherInfo) -> info.compareTo(otherInfo, new MockHttpServletRequest());
164+
165+
List<RequestMappingInfo> list = asList(noMethods, oneMethod, oneMethodOneParam);
203166
Collections.shuffle(list);
204167
Collections.sort(list, comparator);
205168

206169
assertEquals(oneMethodOneParam, list.get(0));
207170
assertEquals(oneMethod, list.get(1));
208-
assertEquals(none, list.get(2));
171+
assertEquals(noMethods, list.get(2));
209172
}
210173

211174
@Test
212175
public void equals() {
213-
RequestMappingInfo info1 = new RequestMappingInfo(
214-
new PatternsRequestCondition("/foo"),
215-
new RequestMethodsRequestCondition(RequestMethod.GET),
216-
new ParamsRequestCondition("foo=bar"),
217-
new HeadersRequestCondition("foo=bar"),
218-
new ConsumesRequestCondition("text/plain"),
219-
new ProducesRequestCondition("text/plain"),
220-
new ParamsRequestCondition("customFoo=customBar"));
221-
222-
RequestMappingInfo info2 = new RequestMappingInfo(
223-
new PatternsRequestCondition("/foo"),
224-
new RequestMethodsRequestCondition(RequestMethod.GET),
225-
new ParamsRequestCondition("foo=bar"),
226-
new HeadersRequestCondition("foo=bar"),
227-
new ConsumesRequestCondition("text/plain"),
228-
new ProducesRequestCondition("text/plain"),
229-
new ParamsRequestCondition("customFoo=customBar"));
176+
RequestMappingInfo info1 = paths("/foo").methods(GET)
177+
.params("foo=bar", "customFoo=customBar").headers("foo=bar")
178+
.consumes("text/plain").produces("text/plain")
179+
.build();
180+
181+
RequestMappingInfo info2 = paths("/foo").methods(GET)
182+
.params("foo=bar", "customFoo=customBar").headers("foo=bar")
183+
.consumes("text/plain").produces("text/plain")
184+
.build();
230185

231186
assertEquals(info1, info2);
232187
assertEquals(info1.hashCode(), info2.hashCode());
233188

234-
info2 = new RequestMappingInfo(
235-
new PatternsRequestCondition("/foo", "/NOOOOOO"),
236-
new RequestMethodsRequestCondition(RequestMethod.GET),
237-
new ParamsRequestCondition("foo=bar"),
238-
new HeadersRequestCondition("foo=bar"),
239-
new ConsumesRequestCondition("text/plain"),
240-
new ProducesRequestCondition("text/plain"),
241-
new ParamsRequestCondition("customFoo=customBar"));
189+
info2 = paths("/foo", "/NOOOOOO").methods(GET)
190+
.params("foo=bar", "customFoo=customBar").headers("foo=bar")
191+
.consumes("text/plain").produces("text/plain")
192+
.build();
242193

243194
assertFalse(info1.equals(info2));
244195
assertNotEquals(info1.hashCode(), info2.hashCode());
245196

246-
info2 = new RequestMappingInfo(
247-
new PatternsRequestCondition("/foo"),
248-
new RequestMethodsRequestCondition(RequestMethod.GET, RequestMethod.POST),
249-
new ParamsRequestCondition("foo=bar"),
250-
new HeadersRequestCondition("foo=bar"),
251-
new ConsumesRequestCondition("text/plain"),
252-
new ProducesRequestCondition("text/plain"),
253-
new ParamsRequestCondition("customFoo=customBar"));
197+
info2 = paths("/foo").methods(GET, RequestMethod.POST)
198+
.params("foo=bar", "customFoo=customBar").headers("foo=bar")
199+
.consumes("text/plain").produces("text/plain")
200+
.build();
254201

255202
assertFalse(info1.equals(info2));
256203
assertNotEquals(info1.hashCode(), info2.hashCode());
257204

258-
info2 = new RequestMappingInfo(
259-
new PatternsRequestCondition("/foo"),
260-
new RequestMethodsRequestCondition(RequestMethod.GET),
261-
new ParamsRequestCondition("/NOOOOOO"),
262-
new HeadersRequestCondition("foo=bar"),
263-
new ConsumesRequestCondition("text/plain"),
264-
new ProducesRequestCondition("text/plain"),
265-
new ParamsRequestCondition("customFoo=customBar"));
205+
info2 = paths("/foo").methods(GET)
206+
.params("/NOOOOOO", "customFoo=customBar").headers("foo=bar")
207+
.consumes("text/plain").produces("text/plain")
208+
.build();
266209

267210
assertFalse(info1.equals(info2));
268211
assertNotEquals(info1.hashCode(), info2.hashCode());
269212

270-
info2 = new RequestMappingInfo(
271-
new PatternsRequestCondition("/foo"),
272-
new RequestMethodsRequestCondition(RequestMethod.GET),
273-
new ParamsRequestCondition("foo=bar"),
274-
new HeadersRequestCondition("/NOOOOOO"),
275-
new ConsumesRequestCondition("text/plain"),
276-
new ProducesRequestCondition("text/plain"),
277-
new ParamsRequestCondition("customFoo=customBar"));
213+
info2 = paths("/foo").methods(GET)
214+
.params("foo=bar", "customFoo=customBar").headers("/NOOOOOO")
215+
.consumes("text/plain").produces("text/plain")
216+
.build();
278217

279218
assertFalse(info1.equals(info2));
280219
assertNotEquals(info1.hashCode(), info2.hashCode());
281220

282-
info2 = new RequestMappingInfo(
283-
new PatternsRequestCondition("/foo"),
284-
new RequestMethodsRequestCondition(RequestMethod.GET),
285-
new ParamsRequestCondition("foo=bar"),
286-
new HeadersRequestCondition("foo=bar"),
287-
new ConsumesRequestCondition("text/NOOOOOO"),
288-
new ProducesRequestCondition("text/plain"),
289-
new ParamsRequestCondition("customFoo=customBar"));
221+
info2 = paths("/foo").methods(GET)
222+
.params("foo=bar", "customFoo=customBar").headers("foo=bar")
223+
.consumes("text/NOOOOOO").produces("text/plain")
224+
.build();
290225

291226
assertFalse(info1.equals(info2));
292227
assertNotEquals(info1.hashCode(), info2.hashCode());
293228

294-
info2 = new RequestMappingInfo(
295-
new PatternsRequestCondition("/foo"),
296-
new RequestMethodsRequestCondition(RequestMethod.GET),
297-
new ParamsRequestCondition("foo=bar"),
298-
new HeadersRequestCondition("foo=bar"),
299-
new ConsumesRequestCondition("text/plain"),
300-
new ProducesRequestCondition("text/NOOOOOO"),
301-
new ParamsRequestCondition("customFoo=customBar"));
229+
info2 = paths("/foo").methods(GET)
230+
.params("foo=bar", "customFoo=customBar").headers("foo=bar")
231+
.consumes("text/plain").produces("text/NOOOOOO")
232+
.build();
302233

303234
assertFalse(info1.equals(info2));
304235
assertNotEquals(info1.hashCode(), info2.hashCode());
305236

306-
info2 = new RequestMappingInfo(
307-
new PatternsRequestCondition("/foo"),
308-
new RequestMethodsRequestCondition(RequestMethod.GET),
309-
new ParamsRequestCondition("foo=bar"),
310-
new HeadersRequestCondition("foo=bar"),
311-
new ConsumesRequestCondition("text/plain"),
312-
new ProducesRequestCondition("text/plain"),
313-
new ParamsRequestCondition("customFoo=NOOOOOO"));
237+
info2 = paths("/foo").methods(GET)
238+
.params("foo=bar", "customFoo=NOOOOOO").headers("foo=bar")
239+
.consumes("text/plain").produces("text/plain")
240+
.build();
314241

315242
assertFalse(info1.equals(info2));
316243
assertNotEquals(info1.hashCode(), info2.hashCode());
@@ -322,15 +249,11 @@ public void preFlightRequest() {
322249
request.addHeader(HttpHeaders.ORIGIN, "http://domain.com");
323250
request.addHeader(HttpHeaders.ACCESS_CONTROL_REQUEST_METHOD, "POST");
324251

325-
RequestMappingInfo info = new RequestMappingInfo(
326-
new PatternsRequestCondition("/foo"), new RequestMethodsRequestCondition(RequestMethod.POST), null,
327-
null, null, null, null);
252+
RequestMappingInfo info = paths("/foo").methods(RequestMethod.POST).build();
328253
RequestMappingInfo match = info.getMatchingCondition(request);
329254
assertNotNull(match);
330255

331-
info = new RequestMappingInfo(
332-
new PatternsRequestCondition("/foo"), new RequestMethodsRequestCondition(RequestMethod.OPTIONS), null,
333-
null, null, null, null);
256+
info = paths("/foo").methods(RequestMethod.OPTIONS).build();
334257
match = info.getMatchingCondition(request);
335258
assertNull("Pre-flight should match the ACCESS_CONTROL_REQUEST_METHOD", match);
336259
}

0 commit comments

Comments
 (0)