SPR-8536 Add exact matches when comparing 'produces' conditions (e.g. given Accept: text/*, method with text/* is preferred over text/plain). Also pick a media type alphabetically when two 'produces' condition media types match equally (e.g. given Accept: text/* method with text/plain is chosen over text/xhtml)
This commit is contained in:
@@ -175,33 +175,54 @@ public class ProducesRequestConditionTests {
|
||||
assertTrue("Invalid comparison result: " + result, result < 0);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void compareToEmptyCondition() {
|
||||
MockHttpServletRequest request = new MockHttpServletRequest();
|
||||
request.addHeader("Accept", "*/*");
|
||||
// SPR-8536
|
||||
|
||||
@Test
|
||||
public void compareToMediaTypeAll() {
|
||||
MockHttpServletRequest request = new MockHttpServletRequest();
|
||||
|
||||
ProducesRequestCondition condition1 = new ProducesRequestCondition();
|
||||
ProducesRequestCondition condition2 = new ProducesRequestCondition("application/json");
|
||||
|
||||
int result = condition1.compareTo(condition2, request);
|
||||
assertTrue("Invalid comparison result: " + result, result < 0);
|
||||
assertTrue("Should have picked '*/*' condition as an exact match",
|
||||
condition1.compareTo(condition2, request) < 0);
|
||||
assertTrue("Should have picked '*/*' condition as an exact match",
|
||||
condition2.compareTo(condition1, request) > 0);
|
||||
|
||||
result = condition2.compareTo(condition1, request);
|
||||
assertTrue("Invalid comparison result: " + result, result > 0);
|
||||
condition1 = new ProducesRequestCondition("*/*");
|
||||
condition2 = new ProducesRequestCondition("application/json");
|
||||
|
||||
assertTrue(condition1.compareTo(condition2, request) < 0);
|
||||
assertTrue(condition2.compareTo(condition1, request) > 0);
|
||||
|
||||
request.addHeader("Accept", "*/*");
|
||||
|
||||
condition1 = new ProducesRequestCondition();
|
||||
condition2 = new ProducesRequestCondition("application/json");
|
||||
|
||||
assertTrue(condition1.compareTo(condition2, request) < 0);
|
||||
assertTrue(condition2.compareTo(condition1, request) > 0);
|
||||
|
||||
condition1 = new ProducesRequestCondition("*/*");
|
||||
condition2 = new ProducesRequestCondition("application/json");
|
||||
|
||||
assertTrue(condition1.compareTo(condition2, request) < 0);
|
||||
assertTrue(condition2.compareTo(condition1, request) > 0);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void compareToWithoutAcceptHeader() {
|
||||
public void compareToEqualMatch() {
|
||||
MockHttpServletRequest request = new MockHttpServletRequest();
|
||||
request.addHeader("Accept", "text/*");
|
||||
|
||||
ProducesRequestCondition condition1 = new ProducesRequestCondition();
|
||||
ProducesRequestCondition condition2 = new ProducesRequestCondition("application/json");
|
||||
ProducesRequestCondition condition1 = new ProducesRequestCondition("text/plain");
|
||||
ProducesRequestCondition condition2 = new ProducesRequestCondition("text/xhtml");
|
||||
|
||||
int result = condition1.compareTo(condition2, request);
|
||||
assertTrue("Invalid comparison result: " + result, result < 0);
|
||||
assertTrue("Should have used MediaType.equals(Object) to break the match", result < 0);
|
||||
|
||||
result = condition2.compareTo(condition1, request);
|
||||
assertTrue("Invalid comparison result: " + result, result > 0);
|
||||
assertTrue("Should have used MediaType.equals(Object) to break the match", result > 0);
|
||||
}
|
||||
|
||||
@Test
|
||||
|
||||
@@ -51,8 +51,8 @@ public class RequestMappingInfoTests {
|
||||
|
||||
assertEquals(0, info.getPatternsCondition().getPatterns().size());
|
||||
assertEquals(0, info.getMethodsCondition().getMethods().size());
|
||||
assertEquals(0, info.getConsumesCondition().getMediaTypes().size());
|
||||
assertEquals(0, info.getProducesCondition().getMediaTypes().size());
|
||||
assertEquals(true, info.getConsumesCondition().isEmpty());
|
||||
assertEquals(true, info.getProducesCondition().isEmpty());
|
||||
assertNotNull(info.getParamsCondition());
|
||||
assertNotNull(info.getHeadersCondition());
|
||||
assertNull(info.getCustomCondition());
|
||||
|
||||
Reference in New Issue
Block a user