blob: 8f14b05b115d1d4bd8656f6a907ba789c1c50607 [file] [log] [blame]
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);
}
}