@Test public void headers() throws URISyntaxException { MediaType accept = MediaType.TEXT_PLAIN; Charset charset = Charset.forName("UTF-8"); long ifModifiedSince = 12345L; String ifNoneMatch = "\"foo\""; long contentLength = 67890; MediaType contentType = MediaType.TEXT_PLAIN; RequestEntity<Void> responseEntity = RequestEntity.post(new URI("http://example.com")) .accept(accept) .acceptCharset(charset) .ifModifiedSince(ifModifiedSince) .ifNoneMatch(ifNoneMatch) .contentLength(contentLength) .contentType(contentType) .build(); assertNotNull(responseEntity); assertEquals(HttpMethod.POST, responseEntity.getMethod()); assertEquals(new URI("http://example.com"), responseEntity.getUrl()); HttpHeaders responseHeaders = responseEntity.getHeaders(); assertEquals("text/plain", responseHeaders.getFirst("Accept")); assertEquals("utf-8", responseHeaders.getFirst("Accept-Charset")); assertEquals("Thu, 01 Jan 1970 00:00:12 GMT", responseHeaders.getFirst("If-Modified-Since")); assertEquals(ifNoneMatch, responseHeaders.getFirst("If-None-Match")); assertEquals(String.valueOf(contentLength), responseHeaders.getFirst("Content-Length")); assertEquals(contentType.toString(), responseHeaders.getFirst("Content-Type")); assertNull(responseEntity.getBody()); }
@Test public void parseURLConnectionMediaType() throws Exception { String s = "*; q=.2"; MediaType mediaType = MediaType.parseMediaType(s); assertEquals("Invalid type", "*", mediaType.getType()); assertEquals("Invalid subtype", "*", mediaType.getSubtype()); assertEquals("Invalid quality factor", 0.2D, mediaType.getQualityValue(), 0D); }
@Test public void parseCharset() throws Exception { String s = "text/html; charset=iso-8859-1"; MediaType mediaType = MediaType.parseMediaType(s); assertEquals("Invalid type", "text", mediaType.getType()); assertEquals("Invalid subtype", "html", mediaType.getSubtype()); assertEquals("Invalid charset", Charset.forName("ISO-8859-1"), mediaType.getCharSet()); }
@Test public void parseQuotedCharset() { String s = "application/xml;charset=\"utf-8\""; MediaType mediaType = MediaType.parseMediaType(s); assertEquals("Invalid type", "application", mediaType.getType()); assertEquals("Invalid subtype", "xml", mediaType.getSubtype()); assertEquals("Invalid charset", Charset.forName("UTF-8"), mediaType.getCharSet()); }
@Test public void parseMediaTypes() throws Exception { String s = "text/plain; q=0.5, text/html, text/x-dvi; q=0.8, text/x-c"; List<MediaType> mediaTypes = MediaType.parseMediaTypes(s); assertNotNull("No media types returned", mediaTypes); assertEquals("Invalid amount of media types", 4, mediaTypes.size()); mediaTypes = MediaType.parseMediaTypes(null); assertNotNull("No media types returned", mediaTypes); assertEquals("Invalid amount of media types", 0, mediaTypes.size()); }
@Test public void compareToConsistentWithEquals() { MediaType m1 = MediaType.parseMediaType("text/html; q=0.7; charset=iso-8859-1"); MediaType m2 = MediaType.parseMediaType("text/html; charset=iso-8859-1; q=0.7"); assertEquals("Media types not equal", m1, m2); assertEquals("compareTo() not consistent with equals", 0, m1.compareTo(m2)); assertEquals("compareTo() not consistent with equals", 0, m2.compareTo(m1)); m1 = MediaType.parseMediaType("text/html; q=0.7; charset=iso-8859-1"); m2 = MediaType.parseMediaType("text/html; Q=0.7; charset=iso-8859-1"); assertEquals("Media types not equal", m1, m2); assertEquals("compareTo() not consistent with equals", 0, m1.compareTo(m2)); assertEquals("compareTo() not consistent with equals", 0, m2.compareTo(m1)); }
@Test public void sortByQualityRelated() { 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(all); expected.add(audio07); expected.add(audio03); 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.sortByQualityValue(result); for (int j = 0; j < result.size(); j++) { assertSame("Invalid media type at " + j, expected.get(j), result.get(j)); } } }
@Test public void testWithConversionService() { ConversionService conversionService = new DefaultConversionService(); assertTrue(conversionService.canConvert(String.class, MediaType.class)); MediaType mediaType = MediaType.parseMediaType("application/xml"); assertEquals(mediaType, conversionService.convert("application/xml", MediaType.class)); }
@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")); MediaType audioBasic07 = new MediaType("audio", "basic", 0.7); // 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(audioBasic07); 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 + ", run " + i, expected.get(j), result.get(j)); } } }
@Test public void compareToCaseSensitivity() { MediaType m1 = new MediaType("audio", "basic"); MediaType m2 = new MediaType("Audio", "Basic"); assertEquals("Invalid comparison result", 0, m1.compareTo(m2)); assertEquals("Invalid comparison result", 0, m2.compareTo(m1)); m1 = new MediaType("audio", "basic", Collections.singletonMap("foo", "bar")); m2 = new MediaType("audio", "basic", Collections.singletonMap("Foo", "bar")); assertEquals("Invalid comparison result", 0, m1.compareTo(m2)); assertEquals("Invalid comparison result", 0, m2.compareTo(m1)); m1 = new MediaType("audio", "basic", Collections.singletonMap("foo", "bar")); m2 = new MediaType("audio", "basic", Collections.singletonMap("foo", "Bar")); assertTrue("Invalid comparison result", m1.compareTo(m2) != 0); assertTrue("Invalid comparison result", m2.compareTo(m1) != 0); }
@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)); } }
@Test public void includes() throws Exception { MediaType textPlain = MediaType.TEXT_PLAIN; assertTrue("Equal types is not inclusive", textPlain.includes(textPlain)); MediaType allText = new MediaType("text"); assertTrue("All subtypes is not inclusive", allText.includes(textPlain)); assertFalse("All subtypes is inclusive", textPlain.includes(allText)); assertTrue("All types is not inclusive", MediaType.ALL.includes(textPlain)); assertFalse("All types is inclusive", textPlain.includes(MediaType.ALL)); assertTrue("All types is not inclusive", MediaType.ALL.includes(textPlain)); assertFalse("All types is inclusive", textPlain.includes(MediaType.ALL)); MediaType applicationSoapXml = new MediaType("application", "soap+xml"); MediaType applicationWildcardXml = new MediaType("application", "*+xml"); assertTrue(applicationSoapXml.includes(applicationSoapXml)); assertTrue(applicationWildcardXml.includes(applicationWildcardXml)); assertTrue(applicationWildcardXml.includes(applicationSoapXml)); assertFalse(applicationSoapXml.includes(applicationWildcardXml)); }
@Test(expected = IllegalArgumentException.class) public void parseMediaTypeIllegalSubtype() { MediaType.parseMediaType("audio/basic)"); }
@Test public void testToString() throws Exception { MediaType mediaType = new MediaType("text", "plain", 0.7); String result = mediaType.toString(); assertEquals("Invalid toString() returned", "text/plain;q=0.7", result); }
@Test(expected = IllegalArgumentException.class) public void parseMediaTypeIllegalParameterAttribute() { MediaType.parseMediaType("audio/*;attr<=value"); }
@Test(expected = IllegalArgumentException.class) public void parseMediaTypeIllegalQuotedParameterValue() { MediaType.parseMediaType("audio/*;attr=\""); }
@Test public void parseMediaTypeSingleQuotedParameterValue() { MediaType mediaType = MediaType.parseMediaType("audio/*;attr='v>alue'"); assertEquals("'v>alue'", mediaType.getParameter("attr")); }
@Test public void parseMediaTypeQuotedParameterValue() { MediaType mediaType = MediaType.parseMediaType("audio/*;attr=\"v>alue\""); assertEquals("\"v>alue\"", mediaType.getParameter("attr")); }
@Test(expected = IllegalArgumentException.class) public void parseMediaTypeIllegalCharset() { MediaType.parseMediaType("text/html; charset=foo-bar"); }
@Test(expected = IllegalArgumentException.class) public void parseMediaTypeIllegalQualityFactor() { MediaType.parseMediaType("audio/basic;q=1.1"); }
@Test public void isCompatible() throws Exception { MediaType textPlain = MediaType.TEXT_PLAIN; assertTrue("Equal types is not compatible", textPlain.isCompatibleWith(textPlain)); MediaType allText = new MediaType("text"); assertTrue("All subtypes is not compatible", allText.isCompatibleWith(textPlain)); assertTrue("All subtypes is not compatible", textPlain.isCompatibleWith(allText)); assertTrue("All types is not compatible", MediaType.ALL.isCompatibleWith(textPlain)); assertTrue("All types is not compatible", textPlain.isCompatibleWith(MediaType.ALL)); assertTrue("All types is not compatible", MediaType.ALL.isCompatibleWith(textPlain)); assertTrue("All types is compatible", textPlain.isCompatibleWith(MediaType.ALL)); MediaType applicationSoapXml = new MediaType("application", "soap+xml"); MediaType applicationWildcardXml = new MediaType("application", "*+xml"); assertTrue(applicationSoapXml.isCompatibleWith(applicationSoapXml)); assertTrue(applicationWildcardXml.isCompatibleWith(applicationWildcardXml)); assertTrue(applicationWildcardXml.isCompatibleWith(applicationSoapXml)); assertTrue(applicationSoapXml.isCompatibleWith(applicationWildcardXml)); }
@Test(expected = IllegalArgumentException.class) public void parseMediaTypeNoSubtypeSlash() { MediaType.parseMediaType("audio/"); }
@Test public void getDefaultQualityValue() { MediaType mediaType = new MediaType("text", "plain"); assertEquals("Invalid quality value", 1, mediaType.getQualityValue(), 0D); }
@Test(expected = IllegalArgumentException.class) public void parseMediaTypeTypeRange() { MediaType.parseMediaType("*/json"); }