UriMatcherTest.java revision ef23bf198d14bea183c0dabd5b4fcd0a5d07d738
135aa84b1f9f5e42dd00cb66df993ed1628c8963bYang Li/*
2d6a463a9f23b3901bf729f2f27a6bb8f78b95248Romain Guy * Copyright (C) 2007 The Android Open Source Project
335aa84b1f9f5e42dd00cb66df993ed1628c8963bYang Li *
435aa84b1f9f5e42dd00cb66df993ed1628c8963bYang Li * Licensed under the Apache License, Version 2.0 (the "License");
535aa84b1f9f5e42dd00cb66df993ed1628c8963bYang Li * you may not use this file except in compliance with the License.
635aa84b1f9f5e42dd00cb66df993ed1628c8963bYang Li * You may obtain a copy of the License at
735aa84b1f9f5e42dd00cb66df993ed1628c8963bYang Li *
835aa84b1f9f5e42dd00cb66df993ed1628c8963bYang Li *      http://www.apache.org/licenses/LICENSE-2.0
935aa84b1f9f5e42dd00cb66df993ed1628c8963bYang Li *
1035aa84b1f9f5e42dd00cb66df993ed1628c8963bYang Li * Unless required by applicable law or agreed to in writing, software
1135aa84b1f9f5e42dd00cb66df993ed1628c8963bYang Li * distributed under the License is distributed on an "AS IS" BASIS,
1235aa84b1f9f5e42dd00cb66df993ed1628c8963bYang Li * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1335aa84b1f9f5e42dd00cb66df993ed1628c8963bYang Li * See the License for the specific language governing permissions and
1435aa84b1f9f5e42dd00cb66df993ed1628c8963bYang Li * limitations under the License.
1535aa84b1f9f5e42dd00cb66df993ed1628c8963bYang Li */
1635aa84b1f9f5e42dd00cb66df993ed1628c8963bYang Li
17db567c390bd56c05614eaa83c02dbb99f97ad9ccRomain Guypackage android.net;
1835aa84b1f9f5e42dd00cb66df993ed1628c8963bYang Li
1980756e38882720860db52f1fcc21fa1505a02abfTor Norbyeimport android.content.UriMatcher;
2035aa84b1f9f5e42dd00cb66df993ed1628c8963bYang Liimport android.net.Uri;
21d6a463a9f23b3901bf729f2f27a6bb8f78b95248Romain Guyimport android.test.suitebuilder.annotation.SmallTest;
2235aa84b1f9f5e42dd00cb66df993ed1628c8963bYang Li
2335aa84b1f9f5e42dd00cb66df993ed1628c8963bYang Liimport junit.framework.TestCase;
2435aa84b1f9f5e42dd00cb66df993ed1628c8963bYang Li
2535aa84b1f9f5e42dd00cb66df993ed1628c8963bYang Lipublic class UriMatcherTest extends TestCase {
2682f3495b146b267f3786997752cef25310176349Romain Guy
2735aa84b1f9f5e42dd00cb66df993ed1628c8963bYang Li    static final int ROOT = 0;
2835aa84b1f9f5e42dd00cb66df993ed1628c8963bYang Li    static final int PEOPLE = 1;
29d6a463a9f23b3901bf729f2f27a6bb8f78b95248Romain Guy    static final int PEOPLE_ID = 2;
30d6a463a9f23b3901bf729f2f27a6bb8f78b95248Romain Guy    static final int PEOPLE_PHONES = 3;
3182f3495b146b267f3786997752cef25310176349Romain Guy    static final int PEOPLE_PHONES_ID = 4;
3282f3495b146b267f3786997752cef25310176349Romain Guy    static final int PEOPLE_ADDRESSES = 5;
3351099c5aa63c8349bb7de6d1720480f2c84f404eRomain Guy    static final int PEOPLE_ADDRESSES_ID = 6;
34d6a463a9f23b3901bf729f2f27a6bb8f78b95248Romain Guy    static final int PEOPLE_CONTACTMETH = 7;
3535aa84b1f9f5e42dd00cb66df993ed1628c8963bYang Li    static final int PEOPLE_CONTACTMETH_ID = 8;
3635aa84b1f9f5e42dd00cb66df993ed1628c8963bYang Li    static final int CALLS = 9;
3735aa84b1f9f5e42dd00cb66df993ed1628c8963bYang Li    static final int CALLS_ID = 10;
3835aa84b1f9f5e42dd00cb66df993ed1628c8963bYang Li    static final int CALLERID = 11;
3982f3495b146b267f3786997752cef25310176349Romain Guy    static final int CALLERID_TEXT = 12;
4082f3495b146b267f3786997752cef25310176349Romain Guy    static final int FILTERRECENT = 13;
41d6a463a9f23b3901bf729f2f27a6bb8f78b95248Romain Guy    static final int ANOTHER_PATH_SEGMENT = 13;
4282f3495b146b267f3786997752cef25310176349Romain Guy
4382f3495b146b267f3786997752cef25310176349Romain Guy    @SmallTest
4482f3495b146b267f3786997752cef25310176349Romain Guy    public void testContentUris() {
45ec25df9fbc685be384f8dd764fa224a4d923e9d8Romain Guy        UriMatcher matcher = new UriMatcher(ROOT);
46d6a463a9f23b3901bf729f2f27a6bb8f78b95248Romain Guy        matcher.addURI("people", null, PEOPLE);
4782f3495b146b267f3786997752cef25310176349Romain Guy        matcher.addURI("people", "#", PEOPLE_ID);
4882f3495b146b267f3786997752cef25310176349Romain Guy        matcher.addURI("people", "#/phones", PEOPLE_PHONES);
4982f3495b146b267f3786997752cef25310176349Romain Guy        matcher.addURI("people", "#/phones/blah", PEOPLE_PHONES_ID);
508d78756c160bda736cccef9ca1a6e2d6a159ac42Romain Guy        matcher.addURI("people", "#/phones/#", PEOPLE_PHONES_ID);
51d6a463a9f23b3901bf729f2f27a6bb8f78b95248Romain Guy        matcher.addURI("people", "#/addresses", PEOPLE_ADDRESSES);
528d78756c160bda736cccef9ca1a6e2d6a159ac42Romain Guy        matcher.addURI("people", "#/addresses/#", PEOPLE_ADDRESSES_ID);
53d6a463a9f23b3901bf729f2f27a6bb8f78b95248Romain Guy        matcher.addURI("people", "#/contact-methods", PEOPLE_CONTACTMETH);
5435aa84b1f9f5e42dd00cb66df993ed1628c8963bYang Li        matcher.addURI("people", "#/contact-methods/#", PEOPLE_CONTACTMETH_ID);
5551099c5aa63c8349bb7de6d1720480f2c84f404eRomain Guy        matcher.addURI("calls", null, CALLS);
5682f3495b146b267f3786997752cef25310176349Romain Guy        matcher.addURI("calls", "#", CALLS_ID);
5782f3495b146b267f3786997752cef25310176349Romain Guy        matcher.addURI("caller-id", null, CALLERID);
5882f3495b146b267f3786997752cef25310176349Romain Guy        matcher.addURI("caller-id", "*", CALLERID_TEXT);
5982f3495b146b267f3786997752cef25310176349Romain Guy        matcher.addURI("filter-recent", null, FILTERRECENT);
60e7c36dda7ada30e02f3aa9d75f282a53402aeae7Romain Guy        matcher.addURI("auth", "another/path/segment", ANOTHER_PATH_SEGMENT);
61e7c36dda7ada30e02f3aa9d75f282a53402aeae7Romain Guy        checkAll(matcher);
62e7c36dda7ada30e02f3aa9d75f282a53402aeae7Romain Guy    }
6382f3495b146b267f3786997752cef25310176349Romain Guy
6435aa84b1f9f5e42dd00cb66df993ed1628c8963bYang Li    @SmallTest
6535aa84b1f9f5e42dd00cb66df993ed1628c8963bYang Li    public void testContentUrisWithLeadingSlash() {
6635aa84b1f9f5e42dd00cb66df993ed1628c8963bYang Li        UriMatcher matcher = new UriMatcher(ROOT);
6782f3495b146b267f3786997752cef25310176349Romain Guy        matcher.addURI("people", null, PEOPLE);
6835aa84b1f9f5e42dd00cb66df993ed1628c8963bYang Li        matcher.addURI("people", "/#", PEOPLE_ID);
6982f3495b146b267f3786997752cef25310176349Romain Guy        matcher.addURI("people", "/#/phones", PEOPLE_PHONES);
7082f3495b146b267f3786997752cef25310176349Romain Guy        matcher.addURI("people", "/#/phones/blah", PEOPLE_PHONES_ID);
71d6a463a9f23b3901bf729f2f27a6bb8f78b95248Romain Guy        matcher.addURI("people", "/#/phones/#", PEOPLE_PHONES_ID);
7282f3495b146b267f3786997752cef25310176349Romain Guy        matcher.addURI("people", "/#/addresses", PEOPLE_ADDRESSES);
73ec25df9fbc685be384f8dd764fa224a4d923e9d8Romain Guy        matcher.addURI("people", "/#/addresses/#", PEOPLE_ADDRESSES_ID);
74db567c390bd56c05614eaa83c02dbb99f97ad9ccRomain Guy        matcher.addURI("people", "/#/contact-methods", PEOPLE_CONTACTMETH);
7582f3495b146b267f3786997752cef25310176349Romain Guy        matcher.addURI("people", "/#/contact-methods/#", PEOPLE_CONTACTMETH_ID);
76d6a463a9f23b3901bf729f2f27a6bb8f78b95248Romain Guy        matcher.addURI("calls", null, CALLS);
7782f3495b146b267f3786997752cef25310176349Romain Guy        matcher.addURI("calls", "/#", CALLS_ID);
7882f3495b146b267f3786997752cef25310176349Romain Guy        matcher.addURI("caller-id", null, CALLERID);
79d6a463a9f23b3901bf729f2f27a6bb8f78b95248Romain Guy        matcher.addURI("caller-id", "/*", CALLERID_TEXT);
8035aa84b1f9f5e42dd00cb66df993ed1628c8963bYang Li        matcher.addURI("filter-recent", null, FILTERRECENT);
8182f3495b146b267f3786997752cef25310176349Romain Guy        matcher.addURI("auth", "/another/path/segment", ANOTHER_PATH_SEGMENT);
82d1c67d42abdf41d10c9a7589da1e0088af1e123aRomain Guy        checkAll(matcher);
8382f3495b146b267f3786997752cef25310176349Romain Guy    }
8482f3495b146b267f3786997752cef25310176349Romain Guy
8582f3495b146b267f3786997752cef25310176349Romain Guy    private void checkAll(UriMatcher matcher) {
86e7c36dda7ada30e02f3aa9d75f282a53402aeae7Romain Guy        check("content://asdf", UriMatcher.NO_MATCH, matcher);
87e7c36dda7ada30e02f3aa9d75f282a53402aeae7Romain Guy        check("content://people", PEOPLE, matcher);
88d6a463a9f23b3901bf729f2f27a6bb8f78b95248Romain Guy        check("content://people/1", PEOPLE_ID, matcher);
89d6a463a9f23b3901bf729f2f27a6bb8f78b95248Romain Guy        check("content://people/asdf", UriMatcher.NO_MATCH, matcher);
90e705f2c52e683bdad2e845b50df6b6cbed660614Romain Guy        check("content://people/2/phones", PEOPLE_PHONES, matcher);
9135aa84b1f9f5e42dd00cb66df993ed1628c8963bYang Li        check("content://people/2/phones/3", PEOPLE_PHONES_ID, matcher);
9235aa84b1f9f5e42dd00cb66df993ed1628c8963bYang Li        check("content://people/2/phones/asdf", UriMatcher.NO_MATCH, matcher);
9335aa84b1f9f5e42dd00cb66df993ed1628c8963bYang Li        check("content://people/2/addresses", PEOPLE_ADDRESSES, matcher);
948d78756c160bda736cccef9ca1a6e2d6a159ac42Romain Guy        check("content://people/2/addresses/3", PEOPLE_ADDRESSES_ID, matcher);
9535aa84b1f9f5e42dd00cb66df993ed1628c8963bYang Li        check("content://people/2/addresses/asdf", UriMatcher.NO_MATCH, matcher);
9635aa84b1f9f5e42dd00cb66df993ed1628c8963bYang Li        check("content://people/2/contact-methods", PEOPLE_CONTACTMETH, matcher);
9735aa84b1f9f5e42dd00cb66df993ed1628c8963bYang Li        check("content://people/2/contact-methods/3", PEOPLE_CONTACTMETH_ID, matcher);
9882f3495b146b267f3786997752cef25310176349Romain Guy        check("content://people/2/contact-methods/asdf", UriMatcher.NO_MATCH, matcher);
9982f3495b146b267f3786997752cef25310176349Romain Guy        check("content://calls", CALLS, matcher);
100834f0391b50d33a832bd583fd7763a9a12208e8dRomain Guy        check("content://calls/1", CALLS_ID, matcher);
10182f3495b146b267f3786997752cef25310176349Romain Guy        check("content://calls/asdf", UriMatcher.NO_MATCH, matcher);
10282f3495b146b267f3786997752cef25310176349Romain Guy        check("content://caller-id", CALLERID, matcher);
10373d2589d6df34307c22f1adcdfa1debf4c780eccRomain Guy        check("content://caller-id/asdf", CALLERID_TEXT, matcher);
10482f3495b146b267f3786997752cef25310176349Romain Guy        check("content://caller-id/1", CALLERID_TEXT, matcher);
10535aa84b1f9f5e42dd00cb66df993ed1628c8963bYang Li        check("content://filter-recent", FILTERRECENT, matcher);
10682f3495b146b267f3786997752cef25310176349Romain Guy        check("content://auth/another/path/segment", ANOTHER_PATH_SEGMENT, matcher);
10782f3495b146b267f3786997752cef25310176349Romain Guy    }
10835aa84b1f9f5e42dd00cb66df993ed1628c8963bYang Li
109c534727972c3835ed997e84a349f259915ef2cddRomain Guy    private void check(String uri, int expected, UriMatcher matcher) {
110d6a463a9f23b3901bf729f2f27a6bb8f78b95248Romain Guy        int result = matcher.match(Uri.parse(uri));
111d6a463a9f23b3901bf729f2f27a6bb8f78b95248Romain Guy        if (result != expected) {
11282f3495b146b267f3786997752cef25310176349Romain Guy            String msg = "failed on " + uri;
11382f3495b146b267f3786997752cef25310176349Romain Guy            msg += " expected " + expected + " got " + result;
11482f3495b146b267f3786997752cef25310176349Romain Guy            throw new RuntimeException(msg);
1159af0b4f7be14f2b3ed0ecc843c57ea47ec288e55Romain Guy        }
1169af0b4f7be14f2b3ed0ecc843c57ea47ec288e55Romain Guy    }
1179af0b4f7be14f2b3ed0ecc843c57ea47ec288e55Romain Guy}
11882f3495b146b267f3786997752cef25310176349Romain Guy
11982f3495b146b267f3786997752cef25310176349Romain Guy