1
1
/*
2
- * Copyright 2002-2013 the original author or authors.
2
+ * Copyright 2002-2019 the original author or authors.
3
3
*
4
4
* Licensed under the Apache License, Version 2.0 (the "License");
5
5
* you may not use this file except in compliance with the License.
28
28
import org .junit .runner .RunWith ;
29
29
import org .mockito .Mock ;
30
30
import org .mockito .junit .MockitoJUnitRunner ;
31
+
31
32
import org .springframework .http .MediaType ;
32
33
import org .springframework .mock .web .MockHttpServletRequest ;
33
- import org .springframework .security .web .util .matcher .MediaTypeRequestMatcher ;
34
34
import org .springframework .web .HttpMediaTypeNotAcceptableException ;
35
35
import org .springframework .web .accept .ContentNegotiationStrategy ;
36
36
import org .springframework .web .context .request .NativeWebRequest ;
37
37
38
38
/**
39
39
* @author Rob Winch
40
- *
40
+ * @author Dan Zheng
41
41
*/
42
42
@ RunWith (MockitoJUnitRunner .class )
43
43
public class MediaTypeRequestMatcherTests {
@@ -53,8 +53,9 @@ public void setup() {
53
53
}
54
54
55
55
@ Test (expected = IllegalArgumentException .class )
56
- public void constructorNullCNSVarargs () {
57
- new MediaTypeRequestMatcher (null , MediaType .ALL );
56
+ public void constructorWhenNullCNSThenIAE () {
57
+ ContentNegotiationStrategy c = null ;
58
+ new MediaTypeRequestMatcher (c , MediaType .ALL );
58
59
}
59
60
60
61
@ Test (expected = IllegalArgumentException .class )
@@ -79,6 +80,16 @@ public void constructorEmtpyMediaTypes() {
79
80
Collections .<MediaType > emptyList ());
80
81
}
81
82
83
+ @ Test (expected = IllegalArgumentException .class )
84
+ public void constructorWhenEmptyMediaTypeThenIAE () {
85
+ new MediaTypeRequestMatcher ();
86
+ }
87
+
88
+ @ Test (expected = IllegalArgumentException .class )
89
+ public void constructorWhenEmptyMediaTypeCollectionThenIAE () {
90
+ new MediaTypeRequestMatcher (Collections .<MediaType > emptyList ());
91
+ }
92
+
82
93
@ Test
83
94
public void negotiationStrategyThrowsHMTNAE ()
84
95
throws HttpMediaTypeNotAcceptableException {
@@ -91,6 +102,7 @@ public void negotiationStrategyThrowsHMTNAE()
91
102
92
103
@ Test
93
104
public void mediaAllMatches () throws Exception {
105
+
94
106
when (negotiationStrategy .resolveMediaTypes (any (NativeWebRequest .class )))
95
107
.thenReturn (Arrays .asList (MediaType .ALL ));
96
108
@@ -102,6 +114,77 @@ public void mediaAllMatches() throws Exception {
102
114
assertThat (matcher .matches (request )).isTrue ();
103
115
}
104
116
117
+ @ Test
118
+ public void matchWhenAcceptHeaderAsteriskThenAll () throws Exception {
119
+ request .addHeader ("Accept" , "*/*" );
120
+ matcher = new MediaTypeRequestMatcher (MediaType .ALL );
121
+ assertThat (matcher .matches (request )).isTrue ();
122
+ }
123
+
124
+ @ Test
125
+ public void matchWhenAcceptHeaderAsteriskThenAnyone () throws Exception {
126
+ request .addHeader ("Accept" , "*/*" );
127
+ matcher = new MediaTypeRequestMatcher (MediaType .TEXT_HTML );
128
+ assertThat (matcher .matches (request )).isTrue ();
129
+ }
130
+
131
+ @ Test
132
+ public void matchWhenAcceptHeaderAsteriskThenAllInCollection () throws Exception {
133
+ request .addHeader ("Accept" , "*/*" );
134
+ matcher = new MediaTypeRequestMatcher (Collections .singleton (MediaType .ALL ));
135
+ assertThat (matcher .matches (request )).isTrue ();
136
+ }
137
+
138
+ @ Test
139
+ public void matchWhenAcceptHeaderAsteriskThenAnyoneInCollection () throws Exception {
140
+ request .addHeader ("Accept" , "*/*" );
141
+ matcher = new MediaTypeRequestMatcher (Collections .singleton (MediaType .TEXT_HTML ));
142
+ assertThat (matcher .matches (request )).isTrue ();
143
+ }
144
+
145
+ @ Test
146
+ public void matchWhenNoAcceptHeaderThenAll () throws Exception {
147
+ request .removeHeader ("Accept" );
148
+ // if not set Accept, it is match all
149
+ matcher = new MediaTypeRequestMatcher (MediaType .ALL );
150
+ assertThat (matcher .matches (request )).isTrue ();
151
+ }
152
+
153
+ @ Test
154
+ public void matchWhenNoAcceptHeaderThenAnyone () throws Exception {
155
+ request .removeHeader ("Accept" );
156
+ matcher = new MediaTypeRequestMatcher (MediaType .TEXT_HTML );
157
+ assertThat (matcher .matches (request )).isTrue ();
158
+ }
159
+
160
+ @ Test
161
+ public void matchWhenSingleAcceptHeaderThenOne () throws Exception {
162
+ request .addHeader ("Accept" , "text/html" );
163
+ matcher = new MediaTypeRequestMatcher (MediaType .TEXT_HTML );
164
+ assertThat (matcher .matches (request )).isTrue ();
165
+ }
166
+
167
+ @ Test
168
+ public void matchWhenSingleAcceptHeaderThenOneWithCollection () throws Exception {
169
+ request .addHeader ("Accept" , "text/html" );
170
+ matcher = new MediaTypeRequestMatcher (Collections .singleton (MediaType .TEXT_HTML ));
171
+ assertThat (matcher .matches (request )).isTrue ();
172
+ }
173
+
174
+ @ Test
175
+ public void matchWhenMultipleAcceptHeaderThenMatchMultiple () throws Exception {
176
+ request .addHeader ("Accept" , "text/html, application/xhtml+xml, application/xml;q=0.9" );
177
+ matcher = new MediaTypeRequestMatcher (MediaType .TEXT_HTML , MediaType .APPLICATION_XHTML_XML , MediaType .APPLICATION_XML );
178
+ assertThat (matcher .matches (request )).isTrue ();
179
+ }
180
+
181
+ @ Test
182
+ public void matchWhenMultipleAcceptHeaderThenAnyoneInCollection () throws Exception {
183
+ request .addHeader ("Accept" , "text/html, application/xhtml+xml, application/xml;q=0.9" );
184
+ matcher = new MediaTypeRequestMatcher (Arrays .asList (MediaType .APPLICATION_XHTML_XML ));
185
+ assertThat (matcher .matches (request )).isTrue ();
186
+ }
187
+
105
188
@ Test
106
189
public void multipleMediaType () throws HttpMediaTypeNotAcceptableException {
107
190
when (negotiationStrategy .resolveMediaTypes (any (NativeWebRequest .class )))
@@ -133,6 +216,14 @@ public void resolveTextPlainMatchesTextAll()
133
216
assertThat (matcher .matches (request )).isTrue ();
134
217
}
135
218
219
+ @ Test
220
+ public void matchWhenAcceptHeaderIsTextThenMediaTypeAllIsMatched () {
221
+ request .addHeader ("Accept" , MediaType .TEXT_PLAIN_VALUE );
222
+
223
+ matcher = new MediaTypeRequestMatcher (new MediaType ("text" , "*" ));
224
+ assertThat (matcher .matches (request )).isTrue ();
225
+ }
226
+
136
227
@ Test
137
228
public void resolveTextAllMatchesTextPlain ()
138
229
throws HttpMediaTypeNotAcceptableException {
@@ -143,6 +234,15 @@ public void resolveTextAllMatchesTextPlain()
143
234
assertThat (matcher .matches (request )).isTrue ();
144
235
}
145
236
237
+ @ Test
238
+ public void matchWhenAcceptHeaderIsTextWildcardThenMediaTypeTextIsMatched () {
239
+ request .addHeader ("Accept" , "text/*" );
240
+
241
+ matcher = new MediaTypeRequestMatcher (MediaType .TEXT_PLAIN );
242
+ assertThat (matcher .matches (request )).isTrue ();
243
+ }
244
+
245
+
146
246
// useEquals
147
247
148
248
@ Test
@@ -156,6 +256,15 @@ public void useEqualsResolveTextAllMatchesTextPlain()
156
256
assertThat (matcher .matches (request )).isFalse ();
157
257
}
158
258
259
+ @ Test
260
+ public void useEqualsWhenTrueThenMediaTypeTextIsNotMatched () {
261
+ request .addHeader ("Accept" , "text/*" );
262
+
263
+ matcher = new MediaTypeRequestMatcher (MediaType .TEXT_PLAIN );
264
+ matcher .setUseEquals (true );
265
+ assertThat (matcher .matches (request )).isFalse ();
266
+ }
267
+
159
268
@ Test
160
269
public void useEqualsResolveTextPlainMatchesTextAll ()
161
270
throws HttpMediaTypeNotAcceptableException {
@@ -168,6 +277,15 @@ public void useEqualsResolveTextPlainMatchesTextAll()
168
277
assertThat (matcher .matches (request )).isFalse ();
169
278
}
170
279
280
+ @ Test
281
+ public void useEqualsWhenTrueThenMediaTypeTextAllIsNotMatched () {
282
+ request .addHeader ("Accept" , MediaType .TEXT_PLAIN_VALUE );
283
+
284
+ matcher = new MediaTypeRequestMatcher (new MediaType ("text" , "*" ));
285
+ matcher .setUseEquals (true );
286
+ assertThat (matcher .matches (request )).isFalse ();
287
+ }
288
+
171
289
@ Test
172
290
public void useEqualsSame () throws HttpMediaTypeNotAcceptableException {
173
291
when (negotiationStrategy .resolveMediaTypes (any (NativeWebRequest .class )))
@@ -178,6 +296,15 @@ public void useEqualsSame() throws HttpMediaTypeNotAcceptableException {
178
296
assertThat (matcher .matches (request )).isTrue ();
179
297
}
180
298
299
+ @ Test
300
+ public void useEqualsWhenTrueThenMediaTypeIsMatchedWithEqualString () {
301
+ request .addHeader ("Accept" , MediaType .TEXT_PLAIN_VALUE );
302
+
303
+ matcher = new MediaTypeRequestMatcher (MediaType .TEXT_PLAIN );
304
+ matcher .setUseEquals (true );
305
+ assertThat (matcher .matches (request )).isTrue ();
306
+ }
307
+
181
308
@ Test
182
309
public void useEqualsWithCustomMediaType () throws HttpMediaTypeNotAcceptableException {
183
310
when (negotiationStrategy .resolveMediaTypes (any (NativeWebRequest .class )))
@@ -189,6 +316,15 @@ public void useEqualsWithCustomMediaType() throws HttpMediaTypeNotAcceptableExce
189
316
assertThat (matcher .matches (request )).isTrue ();
190
317
}
191
318
319
+ @ Test
320
+ public void useEqualsWhenTrueThenCustomMediaTypeIsMatched () {
321
+ request .addHeader ("Accept" , "text/unique" );
322
+
323
+ matcher = new MediaTypeRequestMatcher (new MediaType ("text" , "unique" ));
324
+ matcher .setUseEquals (true );
325
+ assertThat (matcher .matches (request )).isTrue ();
326
+ }
327
+
192
328
// ignoreMediaTypeAll
193
329
194
330
@ Test
@@ -201,6 +337,15 @@ public void mediaAllIgnoreMediaTypeAll() throws HttpMediaTypeNotAcceptableExcept
201
337
assertThat (matcher .matches (request )).isFalse ();
202
338
}
203
339
340
+ @ Test
341
+ public void ignoredMediaTypesWhenAllThenAnyoneIsNotMatched () {
342
+ request .addHeader ("Accept" , MediaType .ALL_VALUE );
343
+ matcher = new MediaTypeRequestMatcher (MediaType .TEXT_HTML );
344
+ matcher .setIgnoredMediaTypes (Collections .singleton (MediaType .ALL ));
345
+
346
+ assertThat (matcher .matches (request )).isFalse ();
347
+ }
348
+
204
349
@ Test
205
350
public void mediaAllAndTextHtmlIgnoreMediaTypeAll ()
206
351
throws HttpMediaTypeNotAcceptableException {
@@ -212,6 +357,15 @@ public void mediaAllAndTextHtmlIgnoreMediaTypeAll()
212
357
assertThat (matcher .matches (request )).isTrue ();
213
358
}
214
359
360
+ @ Test
361
+ public void ignoredMediaTypesWhenAllAndTextThenTextCanBeMatched () {
362
+ request .addHeader ("Accept" , MediaType .ALL_VALUE + ", " + MediaType .TEXT_HTML_VALUE );
363
+ matcher = new MediaTypeRequestMatcher (MediaType .TEXT_HTML );
364
+ matcher .setIgnoredMediaTypes (Collections .singleton (MediaType .ALL ));
365
+
366
+ assertThat (matcher .matches (request )).isTrue ();
367
+ }
368
+
215
369
@ Test
216
370
public void mediaAllQ08AndTextPlainIgnoreMediaTypeAll ()
217
371
throws HttpMediaTypeNotAcceptableException {
@@ -224,4 +378,13 @@ public void mediaAllQ08AndTextPlainIgnoreMediaTypeAll()
224
378
225
379
assertThat (matcher .matches (request )).isFalse ();
226
380
}
381
+
382
+ @ Test
383
+ public void ignoredMediaTypesWhenAllThenQ08WithTextIsNotMatched () {
384
+ request .addHeader ("Accept" , MediaType .TEXT_PLAIN + ", */*;q=0.8" );
385
+ matcher = new MediaTypeRequestMatcher (MediaType .TEXT_HTML );
386
+ matcher .setIgnoredMediaTypes (Collections .singleton (MediaType .ALL ));
387
+
388
+ assertThat (matcher .matches (request )).isFalse ();
389
+ }
227
390
}
0 commit comments