@Test
  public void sortBySpecificityRelated() {
    MediaType audioBasic = new MediaType("audio", "basic");
    MediaType audio = new MediaType("audio");
    MediaType audio03 = new MediaType("audio", "*", 0.3);
    MediaType audio07 = new MediaType("audio", "*", 0.7);
    MediaType audioBasicLevel =
        new MediaType("audio", "basic", Collections.singletonMap("level", "1"));
    MediaType all = MediaType.ALL;

    List<MediaType> expected = new ArrayList<MediaType>();
    expected.add(audioBasicLevel);
    expected.add(audioBasic);
    expected.add(audio);
    expected.add(audio07);
    expected.add(audio03);
    expected.add(all);

    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);
      MediaType.sortBySpecificity(result);

      for (int j = 0; j < result.size(); j++) {
        assertSame("Invalid media type at " + j, expected.get(j), result.get(j));
      }
    }
  }
  @Test
  public void sortByQualityUnrelated() {
    MediaType audioBasic = new MediaType("audio", "basic");
    MediaType audioWave = new MediaType("audio", "wave");
    MediaType textHtml = new MediaType("text", "html");

    List<MediaType> expected = new ArrayList<MediaType>();
    expected.add(textHtml);
    expected.add(audioBasic);
    expected.add(audioWave);

    List<MediaType> result = new ArrayList<MediaType>(expected);
    MediaType.sortBySpecificity(result);

    for (int i = 0; i < result.size(); i++) {
      assertSame("Invalid media type at " + i, expected.get(i), result.get(i));
    }
  }