package org.jboss.resteasy.test.request;
import org.jboss.resteasy.plugins.delegates.MediaTypeHeaderDelegate;
import org.jboss.resteasy.util.MediaTypeHelper;
import org.jboss.resteasy.util.WeightedMediaType;
import org.junit.Assert;
import org.junit.Test;
import javax.ws.rs.core.MediaType;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
/**
* @tpSubChapter Requests
* @tpChapter Unit tests
* @tpTestCaseDetails Test for javax.ws.rs.core.MediaType class.
* @tpSince RESTEasy 3.0.16
*/
public class MediaTypeTest {
/**
* @tpTestDetails Test for MediaType parsing.
* @tpSince RESTEasy 3.0.16
*/
@Test
public void testParsing() {
String errorMsg = "MediaType parse error";
MediaType mediaType;
mediaType = MediaType.valueOf("application/xml");
Assert.assertEquals(errorMsg, "application", mediaType.getType());
Assert.assertEquals(errorMsg, "xml", mediaType.getSubtype());
mediaType = MediaType.valueOf("text/*;q=0.3");
Assert.assertEquals(errorMsg, "text", mediaType.getType());
Assert.assertEquals(errorMsg, "*", mediaType.getSubtype());
Assert.assertTrue(errorMsg, mediaType.isWildcardSubtype());
Assert.assertEquals(errorMsg, 1, mediaType.getParameters().size());
Assert.assertEquals(errorMsg, "0.3", mediaType.getParameters().get("q"));
mediaType = MediaType.valueOf("text/html;level=2;q=0.4");
Assert.assertEquals(errorMsg, "text", mediaType.getType());
Assert.assertEquals(errorMsg, "html", mediaType.getSubtype());
Assert.assertEquals(errorMsg, 2, mediaType.getParameters().size());
Assert.assertEquals(errorMsg, "0.4", mediaType.getParameters().get("q"));
Assert.assertEquals(errorMsg, "2", mediaType.getParameters().get("level"));
MediaTypeHeaderDelegate delegate = new MediaTypeHeaderDelegate();
String str = delegate.toString(mediaType);
mediaType = MediaType.valueOf(str);
Assert.assertEquals(errorMsg, "text", mediaType.getType());
Assert.assertEquals(errorMsg, "html", mediaType.getSubtype());
Assert.assertEquals(errorMsg, 2, mediaType.getParameters().size());
Assert.assertEquals(errorMsg, "0.4", mediaType.getParameters().get("q"));
Assert.assertEquals(errorMsg, "2", mediaType.getParameters().get("level"));
mediaType = MediaType.valueOf("text/html;level= \"2\";q=0.4");
Assert.assertEquals(errorMsg, "text", mediaType.getType());
Assert.assertEquals(errorMsg, "html", mediaType.getSubtype());
Assert.assertEquals(errorMsg, 2, mediaType.getParameters().size());
Assert.assertEquals(errorMsg, "0.4", mediaType.getParameters().get("q"));
Assert.assertEquals(errorMsg, "2", mediaType.getParameters().get("level"));
mediaType = MediaType.valueOf("text/html;level= \"2\";q= \"0.4\" ");
Assert.assertEquals(errorMsg, "text", mediaType.getType());
Assert.assertEquals(errorMsg, "html", mediaType.getSubtype());
Assert.assertEquals(errorMsg, 2, mediaType.getParameters().size());
Assert.assertEquals(errorMsg, "0.4", mediaType.getParameters().get("q"));
Assert.assertEquals(errorMsg, "2", mediaType.getParameters().get("level"));
mediaType = MediaType.valueOf("text/html;level= \"2\";q= \"0.4;\" ");
Assert.assertEquals(errorMsg, "text", mediaType.getType());
Assert.assertEquals(errorMsg, "html", mediaType.getSubtype());
Assert.assertEquals(errorMsg, 2, mediaType.getParameters().size());
Assert.assertEquals(errorMsg, "0.4;", mediaType.getParameters().get("q"));
Assert.assertEquals(errorMsg, "2", mediaType.getParameters().get("level"));
}
/**
* @tpTestDetails Test for MediaType sorting.
* @tpSince RESTEasy 3.0.16
*/
@Test
public void testSort() {
String errorMsg = "MediaType sort error";
{
MediaType[] array = {
MediaType.valueOf("text/*"),
MediaType.valueOf("text/html"),
MediaType.valueOf("text/html;level=1"),
MediaType.valueOf("*/*")
};
List<MediaType> list = new ArrayList<MediaType>();
list.add(array[0]);
list.add(array[1]);
list.add(array[2]);
list.add(array[3]);
MediaTypeHelper.sortByWeight(list);
Assert.assertTrue(errorMsg + list.get(0).toString(), array[2] == list.get(0));
Assert.assertTrue(errorMsg, array[1] == list.get(1));
Assert.assertTrue(errorMsg, array[0] == list.get(2));
Assert.assertTrue(errorMsg, array[3] == list.get(3));
}
{
MediaType[] array = {
MediaType.valueOf("text/*;q=0.3"),
MediaType.valueOf("text/html;q=0.7"),
MediaType.valueOf("text/html;level=1"),
MediaType.valueOf("text/html;level=2;q=0.4"),
MediaType.valueOf("*/*;q=0.5")
};
List<MediaType> list = new ArrayList<MediaType>();
list.add(array[0]);
list.add(array[1]);
list.add(array[2]);
list.add(array[3]);
list.add(array[4]);
MediaTypeHelper.sortByWeight(list);
Assert.assertTrue(errorMsg, array[2] == list.get(0));
Assert.assertTrue(errorMsg, array[1] == list.get(1));
Assert.assertTrue(errorMsg, array[4] == list.get(2));
Assert.assertTrue(errorMsg, array[3] == list.get(3));
Assert.assertTrue(errorMsg, array[0] == list.get(4));
}
}
/**
* @tpTestDetails Test for MediaType sorting with weight
* @tpSince RESTEasy 3.0.16
*/
@Test
public void testWeightedSort() {
String errorMsg = "MediaType sort error";
{
WeightedMediaType[] array = {
WeightedMediaType.valueOf("text/*"),
WeightedMediaType.valueOf("text/html"),
WeightedMediaType.valueOf("text/html;level=1"),
WeightedMediaType.valueOf("*/*")
};
List<WeightedMediaType> list = new ArrayList<WeightedMediaType>();
list.add(array[0]);
list.add(array[1]);
list.add(array[2]);
list.add(array[3]);
Collections.sort(list);
Assert.assertTrue(errorMsg + list.get(0).toString(), array[2] == list.get(0));
Assert.assertTrue(errorMsg, array[1] == list.get(1));
Assert.assertTrue(errorMsg, array[0] == list.get(2));
Assert.assertTrue(errorMsg, array[3] == list.get(3));
}
{
WeightedMediaType[] array = {
WeightedMediaType.valueOf("text/*;q=0.3"),
WeightedMediaType.valueOf("text/html;q=0.7"),
WeightedMediaType.valueOf("text/html;level=1"),
WeightedMediaType.valueOf("text/html;level=2;q=0.4"),
WeightedMediaType.valueOf("*/*;q=0.5")
};
List<WeightedMediaType> list = new ArrayList<WeightedMediaType>();
list.add(array[0]);
list.add(array[1]);
list.add(array[2]);
list.add(array[3]);
list.add(array[4]);
Collections.sort(list);
Assert.assertTrue(errorMsg, array[2] == list.get(0));
Assert.assertTrue(errorMsg, array[1] == list.get(1));
Assert.assertTrue(errorMsg, array[4] == list.get(2));
Assert.assertTrue(errorMsg, array[3] == list.get(3));
Assert.assertTrue(errorMsg, array[0] == list.get(4));
}
}
/**
* @tpTestDetails Test for MediaType composition
* @tpSince RESTEasy 3.0.16
*/
@Test
public void testComposite() {
String errorMsg = "MediaType composite error";
MediaType[] array = {
MediaType.valueOf("application/rss+*"),
MediaType.valueOf("text/*"),
MediaType.valueOf("application/*+json"),
MediaType.valueOf("text/html"),
MediaType.valueOf("application/*+xml"),
MediaType.valueOf("application/xml"),
MediaType.valueOf("application/atom+*"),
MediaType.valueOf("*/*")
};
List<MediaType> list = new ArrayList<MediaType>();
for (MediaType type : array) {
list.add(type);
}
MediaTypeHelper.sortByWeight(list);
Assert.assertTrue(errorMsg, array[3] == list.get(0) || array[5] == list.get(0));
Assert.assertTrue(errorMsg, array[3] == list.get(1) || array[5] == list.get(1));
Assert.assertTrue(errorMsg, array[0] == list.get(2) || array[6] == list.get(2));
Assert.assertTrue(errorMsg, array[0] == list.get(3) || array[6] == list.get(3));
Assert.assertTrue(errorMsg, array[2] == list.get(4) || array[4] == list.get(4));
Assert.assertTrue(errorMsg, array[2] == list.get(5) || array[4] == list.get(5));
Assert.assertTrue(errorMsg, array[1] == list.get(6));
Assert.assertTrue(errorMsg, array[7] == list.get(7));
}
}