Home | History | Annotate | Download | only in shadows
      1 package com.xtremelabs.robolectric.shadows;
      2 
      3 import android.content.UriMatcher;
      4 import android.net.Uri;
      5 import com.xtremelabs.robolectric.Robolectric;
      6 import com.xtremelabs.robolectric.WithTestDefaultsRunner;
      7 import com.xtremelabs.robolectric.shadows.ShadowUriMatcher.MatchNode;
      8 import org.junit.Before;
      9 import org.junit.Test;
     10 import org.junit.runner.RunWith;
     11 
     12 import static org.hamcrest.CoreMatchers.is;
     13 import static org.hamcrest.CoreMatchers.nullValue;
     14 import static org.junit.Assert.assertThat;
     15 import static org.junit.matchers.JUnitMatchers.hasItem;
     16 
     17 @RunWith(WithTestDefaultsRunner.class)
     18 public class UriMatcherTest {
     19 	static final String AUTH = "com.foo";
     20 	static final int NO_MATCH = -2;
     21 
     22 	UriMatcher matcher;
     23 	MatchNode root;
     24     Uri URI;
     25 
     26 	@Before public void getMatcher() {
     27         URI = Uri.parse("content://" + AUTH);
     28 		matcher = new UriMatcher(NO_MATCH);
     29 		root = Robolectric.shadowOf(matcher).rootNode;
     30 	}
     31 
     32 	@Test public void canInstantiate() {
     33 		assertThat(root.code, is(NO_MATCH));
     34 		assertThat(root.map.isEmpty(), is(true));
     35 		assertThat(root.number, is(nullValue()));
     36 		assertThat(root.text, is(nullValue()));
     37 	}
     38 
     39 	@Test public void canAddBasicMatch() {
     40 		MatchNode node = root;
     41 		String path = "bar/cat";
     42 
     43 		matcher.addURI(AUTH, path, 1);
     44 		assertThat(node.map.keySet(), hasItem(AUTH));
     45 
     46 		node = node.map.get(AUTH);
     47 		assertThat(node.map.keySet(), hasItem("bar"));
     48 
     49 		node = node.map.get("bar");
     50 		assertThat(node.map.keySet(), hasItem("cat"));
     51 
     52 		node = node.map.get("cat");
     53 		assertThat(node.code, is(1));
     54 	}
     55 
     56 	@Test public void canAddWildcardMatches() {
     57 		matcher.addURI(AUTH, "#", 1);
     58 		matcher.addURI(AUTH, "*", 2);
     59 		MatchNode node = root.map.get(AUTH);
     60 
     61 		assertThat(node.number.code, is(1));
     62 		assertThat(node.text.code, is(2));
     63 	}
     64 
     65 	@Test public void canMatch() {
     66 		matcher.addURI(AUTH, "bar", 1);
     67 		assertThat(matcher.match(Uri.withAppendedPath(URI, "bar")), is(1));
     68 
     69 		matcher.addURI(AUTH, "bar/#", 2);
     70 		assertThat(matcher.match(Uri.withAppendedPath(URI, "bar/1")), is(2));
     71 
     72 		matcher.addURI(AUTH, "*", 3);
     73 		assertThat(matcher.match(Uri.withAppendedPath(URI, "bar")), is(1));
     74 		assertThat(matcher.match(Uri.withAppendedPath(URI, "cat")), is(3));
     75 
     76 		matcher.addURI(AUTH, "transport/*/#/type", 4);
     77 		assertThat(matcher.match(Uri.withAppendedPath(URI, "transport/land/45/type")), is(4));
     78 	}
     79 
     80 	@Test public void returnsRootCodeForIfNoMatch() {
     81 		matcher.addURI(AUTH, "bar/#", 1);
     82 		assertThat(matcher.match(Uri.withAppendedPath(URI, "cat")), is(NO_MATCH));
     83 		assertThat(matcher.match(Uri.withAppendedPath(URI, "bar")), is(NO_MATCH));
     84 		assertThat(matcher.match(Uri.withAppendedPath(URI, "bar/cat")), is(NO_MATCH));
     85 	}
     86 
     87 }
     88