package org.jboss.resteasy.test.request;
import org.jboss.resteasy.core.request.AcceptHeaders;
import org.jboss.resteasy.core.request.QualityValue;
import org.jboss.resteasy.spi.BadRequestException;
import org.junit.Test;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Map;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNull;
import static org.junit.Assert.fail;
/**
* @tpSubChapter Requests
* @tpChapter Unit tests
* @tpTestCaseDetails Test for AcceptHeaders and QualityValue classes, string type.
* @tpSince RESTEasy 3.0.16
*/
public class StringQualityValueTest {
private static void assertList(String header, String[] fields, QualityValue[] qualities) {
Map<String, QualityValue> map = AcceptHeaders.getStringQualityValues(header);
List<String> expectedKeys = Arrays.asList(fields);
List<QualityValue> expectedValues = Arrays.asList(qualities);
assertEquals("Wrong keys in map", expectedKeys, new ArrayList<String>(map.keySet()));
assertEquals("Wrong values in map", expectedValues, new ArrayList<QualityValue>(map.values()));
}
/**
* @tpTestDetails Test for simple values.
* @tpSince RESTEasy 3.0.16
*/
@Test
public void simple() {
String[] fields = {"compress", "gzip"};
QualityValue[] qualities = {
QualityValue.DEFAULT,
QualityValue.DEFAULT
};
assertList("compress, gzip", fields, qualities);
assertList(" compress,gzip ", fields, qualities);
assertList("compress ,gzip", fields, qualities);
}
/**
* @tpTestDetails Test for special parameters.
* @tpSince RESTEasy 3.0.16
*/
@Test
public void parameter() {
String header = "iso-8859-5, unicode-1-1;q=0.8";
String[] fields = {"iso-8859-5", "unicode-1-1"};
QualityValue[] qualities = {
QualityValue.DEFAULT,
QualityValue.valueOf("0.8")
};
assertList(header, fields, qualities);
}
/**
* @tpTestDetails Test for * in header.
* @tpSince RESTEasy 3.0.16
*/
@Test
public void wildcard() {
String header = "*";
String[] fields = {null};
QualityValue[] qualities = {QualityValue.DEFAULT};
assertList(header, fields, qualities);
}
/**
* @tpTestDetails Test for wildcard with parameter.
* @tpSince RESTEasy 3.0.16
*/
@Test
public void wildcardWithParameter() {
String header = "gzip;q=1.0, identity; q=0.5, *;q=0";
String[] fields = {"gzip", "identity", null};
QualityValue[] qualities = {
QualityValue.valueOf("1.0"),
QualityValue.valueOf("0.5"),
QualityValue.valueOf("0")
};
assertList(header, fields, qualities);
}
/**
* @tpTestDetails Bad requests test.
* @tpSince RESTEasy 3.0.16
*/
@Test
public void badRequests() {
String[] badHeaders = {
" ,b,c", // empty fields
"a, ,c",
"a,b, ",
",",
"a;", // empty parameters
"a;,b",
"a;x=0", // illegal parameters
"a;q=0.1;q=0.1",
"a;illegal"
};
for (String header : badHeaders) {
try {
AcceptHeaders.getStringQualityValues(header);
fail(header);
} catch (BadRequestException e) {
}
}
}
/**
* @tpTestDetails Check empty values.
* @tpSince RESTEasy 3.0.16
*/
@Test
public void empty() {
assertNull(AcceptHeaders.getStringQualityValues(null));
assertNull(AcceptHeaders.getStringQualityValues(""));
assertNull(AcceptHeaders.getStringQualityValues(" "));
}
}