SPR-6788 - The class MediaType has a natural ordering that is inconsistent with equals, which is generally recommended or should otherwise at least be indicated in the javadoc

This commit is contained in:
Arjen Poutsma
2010-02-03 11:38:31 +00:00
parent a44ec9f4f7
commit 0c6b99e489
2 changed files with 49 additions and 3 deletions

View File

@@ -19,8 +19,8 @@ package org.springframework.http;
import java.nio.charset.Charset;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Comparator;
import java.util.List;
import java.util.Random;
import static org.junit.Assert.*;
@@ -111,6 +111,40 @@ public class MediaTypeTests {
assertEquals("Invalid amount of media types", 0, mediaTypes.size());
}
@Test
public void compareTo() {
MediaType audioBasic = new MediaType("audio", "basic");
MediaType audio = new MediaType("audio");
MediaType audioWave = new MediaType("audio", "wave");
MediaType audioBasicLevel = new MediaType("audio", "basic", Collections.singletonMap("level", "1"));
// equal
assertEquals("Invalid comparison result", 0, audioBasic.compareTo(audioBasic));
assertEquals("Invalid comparison result", 0, audio.compareTo(audio));
assertEquals("Invalid comparison result", 0, audioBasicLevel.compareTo(audioBasicLevel));
assertTrue("Invalid comparison result", audioBasicLevel.compareTo(audio) > 0);
List<MediaType> expected = new ArrayList<MediaType>();
expected.add(audio);
expected.add(audioBasic);
expected.add(audioBasicLevel);
expected.add(audioWave);
List<MediaType> result = new ArrayList<MediaType>(expected);
Random rnd = new Random();
// shuffle & sort 10 times
for (int i = 0; i < 10; i++) {
Collections.shuffle(result, rnd);
Collections.sort(result);
for (int j = 0; j < result.size(); j++) {
assertSame("Invalid media type at " + j, expected.get(j), result.get(j));
}
}
}
@Test
public void specificityComparator() throws Exception {
MediaType audioBasic = new MediaType("audio", "basic");