| package org.robolectric.shadows; |
| |
| import android.content.IntentFilter; |
| import android.net.Uri; |
| import org.junit.Test; |
| import org.junit.runner.RunWith; |
| import org.robolectric.TestRunners; |
| |
| import static org.assertj.core.api.Assertions.assertThat; |
| |
| @RunWith(TestRunners.MultiApiWithDefaults.class) |
| public class ShadowIntentFilterTest { |
| @Test |
| public void copyConstructorTest() throws Exception { |
| String action = "test"; |
| IntentFilter intentFilter = new IntentFilter(action); |
| IntentFilter copy = new IntentFilter(intentFilter); |
| assertThat(copy.hasAction("test")).isTrue(); |
| } |
| |
| @Test |
| public void setsPriority() throws Exception { |
| IntentFilter filter = new IntentFilter(); |
| filter.setPriority(123); |
| assertThat(filter.getPriority()).isEqualTo(123); |
| } |
| |
| @Test |
| public void addDataScheme_shouldAddTheDataScheme() throws Exception { |
| IntentFilter intentFilter = new IntentFilter(); |
| intentFilter.addDataScheme("http"); |
| intentFilter.addDataScheme("ftp"); |
| |
| assertThat(intentFilter.getDataScheme(0)).isEqualTo("http"); |
| assertThat(intentFilter.getDataScheme(1)).isEqualTo("ftp"); |
| } |
| |
| @Test |
| public void addDataAuthority_shouldAddTheDataAuthority() throws Exception { |
| IntentFilter intentFilter = new IntentFilter(); |
| intentFilter.addDataAuthority("test.com", "8080"); |
| intentFilter.addDataAuthority("example.com", "42"); |
| |
| assertThat(intentFilter.getDataAuthority(0).getHost()).isEqualTo("test.com"); |
| assertThat(intentFilter.getDataAuthority(0).getPort()).isEqualTo(8080); |
| assertThat(intentFilter.getDataAuthority(1).getHost()).isEqualTo("example.com"); |
| assertThat(intentFilter.getDataAuthority(1).getPort()).isEqualTo(42); |
| } |
| |
| @Test |
| public void addDataType_shouldAddTheDataType() throws Exception { |
| IntentFilter intentFilter = new IntentFilter(); |
| intentFilter.addDataType("image/test"); |
| |
| assertThat(intentFilter.getDataType(0)).isEqualTo("image/test"); |
| } |
| |
| @Test |
| public void hasAction() { |
| IntentFilter intentFilter = new IntentFilter(); |
| assertThat(intentFilter.hasAction("test")).isFalse(); |
| intentFilter.addAction("test"); |
| |
| assertThat(intentFilter.hasAction("test")).isTrue(); |
| } |
| |
| @Test |
| public void hasDataScheme() { |
| IntentFilter intentFilter = new IntentFilter(); |
| assertThat(intentFilter.hasDataScheme("test")).isFalse(); |
| intentFilter.addDataScheme("test"); |
| |
| assertThat(intentFilter.hasDataScheme("test")).isTrue(); |
| } |
| |
| @Test |
| public void hasDataType() throws IntentFilter.MalformedMimeTypeException{ |
| IntentFilter intentFilter = new IntentFilter(); |
| assertThat(intentFilter.hasDataType("image/test")).isFalse(); |
| intentFilter.addDataType("image/test"); |
| |
| assertThat(intentFilter.hasDataType("image/test")).isTrue(); |
| } |
| |
| @Test |
| public void matchDataAuthority_matchHostAndPort() { |
| IntentFilter intentFilter = new IntentFilter(); |
| intentFilter.addDataAuthority("testHost1", "1"); |
| intentFilter.addDataAuthority("testHost2", "2"); |
| |
| Uri uriTest1 = Uri.parse("http://testHost1:1"); |
| Uri uriTest2 = Uri.parse("http://testHost2:2"); |
| assertThat(intentFilter.matchDataAuthority(uriTest1)).isEqualTo(IntentFilter.MATCH_CATEGORY_PORT); |
| assertThat(intentFilter.matchDataAuthority(uriTest2)).isEqualTo(IntentFilter.MATCH_CATEGORY_PORT); |
| } |
| |
| @Test |
| public void matchDataAuthority_matchHostWithNoPort() { |
| IntentFilter intentFilter = new IntentFilter(); |
| intentFilter.addDataAuthority("testHost1", "-1"); |
| intentFilter.addDataAuthority("testHost2", "-1"); |
| |
| Uri uriTest1 = Uri.parse("http://testHost1:100"); |
| Uri uriTest2 = Uri.parse("http://testHost2:200"); |
| assertThat(intentFilter.matchDataAuthority(uriTest1)).isEqualTo(IntentFilter.MATCH_CATEGORY_HOST); |
| assertThat(intentFilter.matchDataAuthority(uriTest2)).isEqualTo(IntentFilter.MATCH_CATEGORY_HOST); |
| } |
| |
| @Test |
| public void matchDataAuthority_NoMatch() { |
| IntentFilter intentFilter = new IntentFilter(); |
| intentFilter.addDataAuthority("testHost1", "1"); |
| intentFilter.addDataAuthority("testHost2", "2"); |
| |
| // Port doesn't match |
| Uri uriTest1 = Uri.parse("http://testHost1:2"); |
| // Host doesn't match |
| Uri uriTest2 = Uri.parse("http://testHost3:2"); |
| assertThat(intentFilter.matchDataAuthority(uriTest1)).isEqualTo( |
| IntentFilter.NO_MATCH_DATA); |
| assertThat(intentFilter.matchDataAuthority(uriTest2)).isEqualTo( |
| IntentFilter.NO_MATCH_DATA); |
| } |
| |
| @Test |
| public void matchData_MatchAll() throws IntentFilter.MalformedMimeTypeException{ |
| IntentFilter intentFilter = new IntentFilter(); |
| intentFilter.addDataType("image/test"); |
| intentFilter.addDataScheme("http"); |
| intentFilter.addDataAuthority("testHost1", "1"); |
| |
| Uri uriTest1 = Uri.parse("http://testHost1:1"); |
| assertThat(intentFilter.matchData("image/test", "http", uriTest1)) |
| .isGreaterThanOrEqualTo(0); |
| } |
| |
| @Test |
| public void matchData_MatchType() throws IntentFilter.MalformedMimeTypeException { |
| IntentFilter intentFilter = new IntentFilter(); |
| intentFilter.addDataType("image/test"); |
| intentFilter.addDataScheme("http"); |
| |
| Uri uriTest1 = Uri.parse("http://testHost1:1"); |
| assertThat(intentFilter.matchData("image/test", "http", uriTest1)) |
| .isGreaterThanOrEqualTo(0); |
| } |
| |
| @Test |
| public void matchData_MatchScheme() throws IntentFilter.MalformedMimeTypeException { |
| IntentFilter intentFilter = new IntentFilter(); |
| intentFilter.addDataScheme("http"); |
| |
| Uri uriTest1 = Uri.parse("http://testHost1:1"); |
| assertThat(intentFilter.matchData(null, "http", uriTest1)) |
| .isGreaterThanOrEqualTo(0); |
| } |
| |
| @Test |
| public void matchData_MatchEmpty() throws IntentFilter.MalformedMimeTypeException { |
| IntentFilter intentFilter = new IntentFilter(); |
| |
| assertThat(intentFilter.matchData(null, "noscheme", null)) |
| .isGreaterThanOrEqualTo(0); |
| } |
| |
| @Test |
| public void matchData_NoMatchType() throws IntentFilter.MalformedMimeTypeException { |
| IntentFilter intentFilter = new IntentFilter(); |
| intentFilter.addDataType("image/testFail"); |
| |
| Uri uriTest1 = Uri.parse("http://testHost1:1"); |
| assertThat(intentFilter.matchData("image/test", "http", uriTest1)) |
| .isLessThan(0); |
| } |
| |
| @Test |
| public void matchData_NoMatchScheme() throws IntentFilter.MalformedMimeTypeException { |
| IntentFilter intentFilter = new IntentFilter(); |
| intentFilter.addDataScheme("http"); |
| intentFilter.addDataType("image/test"); |
| |
| Uri uriTest1 = Uri.parse("https://testHost1:1"); |
| assertThat(intentFilter.matchData("image/test", "https", uriTest1)) |
| .isLessThan(0); |
| } |
| |
| @Test |
| public void matchData_NoMatchDataAuthority() throws IntentFilter.MalformedMimeTypeException { |
| IntentFilter intentFilter = new IntentFilter(); |
| intentFilter.addDataType("image/test"); |
| intentFilter.addDataScheme("http"); |
| intentFilter.addDataAuthority("testHost1", "1"); |
| |
| Uri uriTest1 = Uri.parse("http://testHost1:2"); |
| assertThat(intentFilter.matchData("image/test", "http", uriTest1)) |
| .isLessThan(0); |
| } |
| |
| @Test |
| public void matchData_MatchSchemeNoMatchType() throws IntentFilter.MalformedMimeTypeException { |
| IntentFilter intentFilter = new IntentFilter(); |
| intentFilter.addDataScheme("http"); |
| intentFilter.addDataType("image/testFail"); |
| |
| Uri uriTest1 = Uri.parse("http://testHost1:1"); |
| assertThat(intentFilter.matchData("image/test", "http", uriTest1)) |
| .isLessThan(0); |
| } |
| |
| @Test |
| public void matchData_MatchesPartialType() throws IntentFilter.MalformedMimeTypeException { |
| IntentFilter intentFilter = new IntentFilter(); |
| intentFilter.addDataScheme("content"); |
| intentFilter.addDataType("image/*"); |
| |
| Uri uri = Uri.parse("content://authority/images"); |
| assertThat(intentFilter.matchData("image/test", "content", uri)).isGreaterThanOrEqualTo(0); |
| assertThat(intentFilter.matchData("video/test", "content", uri)).isLessThan(0); |
| } |
| |
| @Test |
| public void matchData_MatchesAnyTypeAndSubtype() throws IntentFilter.MalformedMimeTypeException { |
| IntentFilter intentFilter = new IntentFilter(); |
| intentFilter.addDataScheme("content"); |
| intentFilter.addDataType("*/*"); |
| |
| Uri uri = Uri.parse("content://authority/images"); |
| assertThat(intentFilter.matchData("image/test", "content", uri)).isGreaterThanOrEqualTo(0); |
| assertThat(intentFilter.matchData("image/*", "content", uri)).isGreaterThanOrEqualTo(0); |
| assertThat(intentFilter.matchData("video/test", "content", uri)).isGreaterThanOrEqualTo(0); |
| assertThat(intentFilter.matchData("video/*", "content", uri)).isGreaterThanOrEqualTo(0); |
| } |
| |
| @Test |
| public void testCountDataTypes() throws Exception { |
| IntentFilter intentFilter = new IntentFilter(); |
| intentFilter.addDataType("image/*"); |
| intentFilter.addDataType("audio/*"); |
| assertThat(intentFilter.countDataTypes()).isEqualTo(2); |
| } |
| } |