/* * Copyright (c) 2014 the original author or authors * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package io.werval.runtime.mime; import io.werval.api.mime.MediaRange; import io.werval.util.Couple; import java.util.List; import org.junit.Test; import static io.werval.api.mime.MimeTypes.APPLICATION_ATOM_XML; import static io.werval.api.mime.MimeTypes.APPLICATION_JSON; import static io.werval.api.mime.MimeTypes.IMAGE_JPEG; import static io.werval.api.mime.MimeTypes.TEXT_HTML; import static io.werval.api.mime.MimeTypes.TEXT_PLAIN; import static io.werval.api.mime.MimeTypes.TEXT_X_C; import static io.werval.api.mime.MimeTypes.VIDEO_MP4; import static org.hamcrest.core.Is.is; import static org.hamcrest.core.IsEqual.equalTo; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertThat; import static org.junit.Assert.assertTrue; /** * MediaRange Test. */ public class MediaRangeTest { @Test public void parseSingleEmpty() { MediaRange range = MediaRangeInstance.parseSingle( null ); assertThat( range.type(), equalTo( "*" ) ); assertThat( range.subtype(), equalTo( "*" ) ); assertThat( range.qValue(), is( 1D ) ); assertTrue( range.acceptExtensions().isEmpty() ); assertThat( range.toString(), equalTo( "*/*" ) ); assertTrue( range.accepts( APPLICATION_ATOM_XML ) ); assertTrue( range.accepts( TEXT_PLAIN ) ); } @Test public void parseSingleBasic() { MediaRange range = MediaRangeInstance.parseSingle( APPLICATION_ATOM_XML ); assertThat( range.type(), equalTo( "application" ) ); assertThat( range.subtype(), equalTo( "atom+xml" ) ); assertThat( range.qValue(), is( 1D ) ); assertTrue( range.acceptExtensions().isEmpty() ); assertThat( range.toString(), equalTo( APPLICATION_ATOM_XML ) ); assertTrue( range.accepts( APPLICATION_ATOM_XML ) ); assertFalse( range.accepts( APPLICATION_JSON ) ); } @Test public void parseSingleQValue() { MediaRange range = MediaRangeInstance.parseSingle( "application/json;q=0.2" ); assertThat( range.type(), equalTo( "application" ) ); assertThat( range.subtype(), equalTo( "json" ) ); assertThat( range.qValue(), is( 0.2D ) ); assertTrue( range.acceptExtensions().isEmpty() ); assertThat( range.toString(), equalTo( "application/json;q=0.2" ) ); assertTrue( range.accepts( APPLICATION_JSON ) ); assertFalse( range.accepts( APPLICATION_ATOM_XML ) ); } @Test public void parseSingleComplex() { MediaRange range = MediaRangeInstance.parseSingle( "application/json;q=0.2;foo=bar;baz=bazar" ); assertThat( range.type(), equalTo( "application" ) ); assertThat( range.subtype(), equalTo( "json" ) ); assertThat( range.qValue(), is( 0.2D ) ); assertThat( range.acceptExtensions().size(), is( 2 ) ); assertThat( range.acceptExtensions().get( 0 ), equalTo( Couple.of( "foo", "bar" ) ) ); assertThat( range.acceptExtensions().get( 1 ), equalTo( Couple.of( "baz", "bazar" ) ) ); assertThat( range.toString(), equalTo( "application/json;q=0.2;foo=bar;baz=bazar" ) ); assertTrue( range.accepts( APPLICATION_JSON ) ); assertFalse( range.accepts( APPLICATION_ATOM_XML ) ); } @Test public void parseListEmpty() { List<MediaRange> ranges = MediaRangeInstance.parseList( null ); assertThat( ranges.size(), is( 1 ) ); MediaRange range = ranges.get( 0 ); assertThat( range.type(), equalTo( "*" ) ); assertThat( range.subtype(), equalTo( "*" ) ); assertThat( range.qValue(), is( 1D ) ); assertTrue( range.acceptExtensions().isEmpty() ); assertTrue( range.accepts( APPLICATION_JSON ) ); assertTrue( range.accepts( TEXT_PLAIN ) ); } @Test public void parseListBasic() { List<MediaRange> ranges = MediaRangeInstance.parseList( APPLICATION_JSON + "," + TEXT_PLAIN ); assertThat( ranges.size(), is( 2 ) ); assertThat( ranges.get( 0 ).toString(), equalTo( APPLICATION_JSON ) ); assertThat( ranges.get( 1 ).toString(), equalTo( TEXT_PLAIN ) ); } @Test public void parseListQValue() { List<MediaRange> ranges = MediaRangeInstance.parseList( "text/plain; q=0.5, text/html,text/x-dvi; q=0.8, text/x-c" ); assertThat( ranges.size(), is( 4 ) ); assertThat( ranges.get( 0 ).toString(), equalTo( TEXT_HTML ) ); assertThat( ranges.get( 1 ).toString(), equalTo( TEXT_X_C ) ); assertThat( ranges.get( 2 ).toString(), equalTo( "text/x-dvi;q=0.8" ) ); assertThat( ranges.get( 3 ).toString(), equalTo( "text/plain;q=0.5" ) ); } @Test public void parseListComplex() { List<MediaRange> ranges = MediaRangeInstance.parseList( "text/*;q=0.3, text/html;q=0.7, text/html;level=1,text/html;level=2;q=0.4, */*;q=0.5" ); assertThat( ranges.size(), is( 5 ) ); assertThat( ranges.get( 0 ).toString(), equalTo( "text/html;level=1" ) ); assertThat( ranges.get( 1 ).toString(), equalTo( "text/html;q=0.7" ) ); assertThat( ranges.get( 2 ).toString(), equalTo( "*/*;q=0.5" ) ); assertThat( ranges.get( 3 ).toString(), equalTo( "text/html;q=0.4;level=2" ) ); assertThat( ranges.get( 4 ).toString(), equalTo( "text/*;q=0.3" ) ); assertTrue( MediaRangeInstance.accepts( ranges, TEXT_HTML ) ); assertTrue( MediaRangeInstance.accepts( ranges, TEXT_PLAIN ) ); assertTrue( MediaRangeInstance.accepts( ranges, IMAGE_JPEG ) ); assertTrue( MediaRangeInstance.accepts( ranges, VIDEO_MP4 ) ); } }