package test.codec.http2.model;
import static org.hamcrest.Matchers.contains;
import static org.junit.Assert.assertThat;
import org.hamcrest.Matchers;
import org.junit.Assert;
import org.junit.Test;
import com.firefly.codec.http2.model.QuotedQualityCSV;
public class QuotedQualityCSVTest {
@Test
public void test7231_5_3_2_example1() {
QuotedQualityCSV values = new QuotedQualityCSV();
values.addValue(" audio/*; q=0.2, audio/basic");
Assert.assertThat(values, Matchers.contains("audio/basic", "audio/*"));
}
@Test
public void test7231_5_3_2_example2() {
QuotedQualityCSV values = new QuotedQualityCSV();
values.addValue("text/plain; q=0.5, text/html,");
values.addValue("text/x-dvi; q=0.8, text/x-c");
Assert.assertThat(values, Matchers.contains("text/html", "text/x-c", "text/x-dvi", "text/plain"));
}
@Test
public void test7231_5_3_2_example3() {
QuotedQualityCSV values = new QuotedQualityCSV();
values.addValue("text/*, text/plain, text/plain;format=flowed, */*");
Assert.assertThat(values, Matchers.contains("text/plain;format=flowed", "text/plain", "text/*", "*/*"));
}
@Test
public void test7231_5_3_2_example4() {
QuotedQualityCSV values = new QuotedQualityCSV();
values.addValue("text/*;q=0.3, text/html;q=0.7, text/html;level=1,");
values.addValue("text/html;level=2;q=0.4, */*;q=0.5");
Assert.assertThat(values,
Matchers.contains("text/html;level=1", "text/html", "*/*", "text/html;level=2", "text/*"));
}
@Test
public void test7231_5_3_4_example1() {
QuotedQualityCSV values = new QuotedQualityCSV();
values.addValue("compress, gzip");
values.addValue("");
values.addValue("*");
values.addValue("compress;q=0.5, gzip;q=1.0");
values.addValue("gzip;q=1.0, identity; q=0.5, *;q=0");
Assert.assertThat(values, Matchers.contains("compress", "gzip", "gzip", "gzip", "*", "compress", "identity"));
}
@Test
public void testOWS() {
QuotedQualityCSV values = new QuotedQualityCSV();
values.addValue(" value 0.5 ; p = v ; q =0.5 , value 1.0 ");
Assert.assertThat(values, Matchers.contains("value 1.0", "value 0.5;p=v"));
}
@Test
public void testEmpty() {
QuotedQualityCSV values = new QuotedQualityCSV();
values.addValue(",aaaa, , bbbb ,,cccc,");
Assert.assertThat(values, Matchers.contains("aaaa", "bbbb", "cccc"));
}
@Test
public void testQuoted() {
QuotedQualityCSV values = new QuotedQualityCSV();
values.addValue(" value 0.5 ; p = \"v ; q = \\\"0.5\\\" , value 1.0 \" ");
Assert.assertThat(values, Matchers.contains("value 0.5;p=\"v ; q = \\\"0.5\\\" , value 1.0 \""));
}
@Test
public void testOpenQuote() {
QuotedQualityCSV values = new QuotedQualityCSV();
values.addValue("value;p=\"v");
Assert.assertThat(values, Matchers.contains("value;p=\"v"));
}
@Test
public void testQuotedQuality() {
QuotedQualityCSV values = new QuotedQualityCSV();
values.addValue(" value 0.5 ; p = v ; q = \"0.5\" , value 1.0 ");
Assert.assertThat(values, Matchers.contains("value 1.0", "value 0.5;p=v"));
}
@Test
public void testBadQuality() {
QuotedQualityCSV values = new QuotedQualityCSV();
values.addValue("value0.5;p=v;q=0.5,value1.0,valueBad;q=X");
Assert.assertThat(values, Matchers.contains("value1.0", "value0.5;p=v"));
}
/* ------------------------------------------------------------ */
private static final String[] preferBrotli = { "br", "gzip" };
private static final String[] preferGzip = { "gzip", "br" };
private static final String[] noFormats = {};
@Test
public void testFirefoxContentEncodingWithBrotliPreference() {
QuotedQualityCSV values = new QuotedQualityCSV(preferBrotli);
values.addValue("gzip, deflate, br");
assertThat(values, contains("br", "gzip", "deflate"));
}
@Test
public void testFirefoxContentEncodingWithGzipPreference() {
QuotedQualityCSV values = new QuotedQualityCSV(preferGzip);
values.addValue("gzip, deflate, br");
assertThat(values, contains("gzip", "br", "deflate"));
}
@Test
public void testFirefoxContentEncodingWithNoPreference() {
QuotedQualityCSV values = new QuotedQualityCSV(noFormats);
values.addValue("gzip, deflate, br");
assertThat(values, contains("gzip", "deflate", "br"));
}
@Test
public void testChromeContentEncodingWithBrotliPreference() {
QuotedQualityCSV values = new QuotedQualityCSV(preferBrotli);
values.addValue("gzip, deflate, sdch, br");
assertThat(values, contains("br", "gzip", "deflate", "sdch"));
}
@Test
public void testComplexEncodingWithGzipPreference() {
QuotedQualityCSV values = new QuotedQualityCSV(preferGzip);
values.addValue("gzip;q=0.9, identity;q=0.1, *;q=0.01, deflate;q=0.9, sdch;q=0.7, br;q=0.9");
assertThat(values, contains("gzip", "br", "deflate", "sdch", "identity", "*"));
}
@Test
public void testComplexEncodingWithBrotliPreference() {
QuotedQualityCSV values = new QuotedQualityCSV(preferBrotli);
values.addValue("gzip;q=0.9, identity;q=0.1, *;q=0, deflate;q=0.9, sdch;q=0.7, br;q=0.99");
assertThat(values, contains("br", "gzip", "deflate", "sdch", "identity"));
}
@Test
public void testStarEncodingWithGzipPreference() {
QuotedQualityCSV values = new QuotedQualityCSV(preferGzip);
values.addValue("br, *");
assertThat(values, contains("*", "br"));
}
@Test
public void testStarEncodingWithBrotliPreference() {
QuotedQualityCSV values = new QuotedQualityCSV(preferBrotli);
values.addValue("gzip, *");
assertThat(values, contains("*", "gzip"));
}
}