152e8d24f8492116f0b49b147576ce13a5f913aa2Debashish Chatterjee/*
252e8d24f8492116f0b49b147576ce13a5f913aa2Debashish Chatterjee * Copyright (C) 2011 The Android Open Source Project
352e8d24f8492116f0b49b147576ce13a5f913aa2Debashish Chatterjee *
452e8d24f8492116f0b49b147576ce13a5f913aa2Debashish Chatterjee * Licensed under the Apache License, Version 2.0 (the "License");
552e8d24f8492116f0b49b147576ce13a5f913aa2Debashish Chatterjee * you may not use this file except in compliance with the License.
652e8d24f8492116f0b49b147576ce13a5f913aa2Debashish Chatterjee * You may obtain a copy of the License at
752e8d24f8492116f0b49b147576ce13a5f913aa2Debashish Chatterjee *
852e8d24f8492116f0b49b147576ce13a5f913aa2Debashish Chatterjee *      http://www.apache.org/licenses/LICENSE-2.0
952e8d24f8492116f0b49b147576ce13a5f913aa2Debashish Chatterjee *
1052e8d24f8492116f0b49b147576ce13a5f913aa2Debashish Chatterjee * Unless required by applicable law or agreed to in writing, software
1152e8d24f8492116f0b49b147576ce13a5f913aa2Debashish Chatterjee * distributed under the License is distributed on an "AS IS" BASIS,
1252e8d24f8492116f0b49b147576ce13a5f913aa2Debashish Chatterjee * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1352e8d24f8492116f0b49b147576ce13a5f913aa2Debashish Chatterjee * See the License for the specific language governing permissions and
1452e8d24f8492116f0b49b147576ce13a5f913aa2Debashish Chatterjee * limitations under the License
1552e8d24f8492116f0b49b147576ce13a5f913aa2Debashish Chatterjee */
1652e8d24f8492116f0b49b147576ce13a5f913aa2Debashish Chatterjee
1752e8d24f8492116f0b49b147576ce13a5f913aa2Debashish Chatterjeepackage com.android.providers.contacts.util;
1852e8d24f8492116f0b49b147576ce13a5f913aa2Debashish Chatterjee
1952e8d24f8492116f0b49b147576ce13a5f913aa2Debashish Chatterjeeimport android.net.Uri;
2052e8d24f8492116f0b49b147576ce13a5f913aa2Debashish Chatterjeeimport android.test.AndroidTestCase;
2152e8d24f8492116f0b49b147576ce13a5f913aa2Debashish Chatterjeeimport android.test.suitebuilder.annotation.SmallTest;
2252e8d24f8492116f0b49b147576ce13a5f913aa2Debashish Chatterjee
2352e8d24f8492116f0b49b147576ce13a5f913aa2Debashish Chatterjeeimport com.android.providers.contacts.util.TypedUriMatcherImpl;
2452e8d24f8492116f0b49b147576ce13a5f913aa2Debashish Chatterjeeimport com.android.providers.contacts.util.UriType;
2552e8d24f8492116f0b49b147576ce13a5f913aa2Debashish Chatterjee
2652e8d24f8492116f0b49b147576ce13a5f913aa2Debashish Chatterjee/**
2752e8d24f8492116f0b49b147576ce13a5f913aa2Debashish Chatterjee * Unit tests for {@link TypedUriMatcherImpl}.
2852e8d24f8492116f0b49b147576ce13a5f913aa2Debashish Chatterjee * Run the test like this:
2952e8d24f8492116f0b49b147576ce13a5f913aa2Debashish Chatterjee * <code>
3052e8d24f8492116f0b49b147576ce13a5f913aa2Debashish Chatterjee * runtest -c com.android.providers.contacts.util.TypedUriMatcherImplTest contactsprov
3152e8d24f8492116f0b49b147576ce13a5f913aa2Debashish Chatterjee * </code>
3252e8d24f8492116f0b49b147576ce13a5f913aa2Debashish Chatterjee */
3352e8d24f8492116f0b49b147576ce13a5f913aa2Debashish Chatterjee@SmallTest
3452e8d24f8492116f0b49b147576ce13a5f913aa2Debashish Chatterjeepublic class TypedUriMatcherImplTest extends AndroidTestCase {
3552e8d24f8492116f0b49b147576ce13a5f913aa2Debashish Chatterjee    /** URI type used for testing. */
3652e8d24f8492116f0b49b147576ce13a5f913aa2Debashish Chatterjee    private static enum TestUriType implements UriType {
3752e8d24f8492116f0b49b147576ce13a5f913aa2Debashish Chatterjee        NO_MATCH(null),
3852e8d24f8492116f0b49b147576ce13a5f913aa2Debashish Chatterjee        SIMPLE_URI("build"),
3952e8d24f8492116f0b49b147576ce13a5f913aa2Debashish Chatterjee        URI_WITH_ID("build/#"),
4052e8d24f8492116f0b49b147576ce13a5f913aa2Debashish Chatterjee        URI_WITH_TWO_IDS("project/*/build/#");
4152e8d24f8492116f0b49b147576ce13a5f913aa2Debashish Chatterjee
4252e8d24f8492116f0b49b147576ce13a5f913aa2Debashish Chatterjee        private String path;
4352e8d24f8492116f0b49b147576ce13a5f913aa2Debashish Chatterjee
4452e8d24f8492116f0b49b147576ce13a5f913aa2Debashish Chatterjee        private TestUriType(String path) {
4552e8d24f8492116f0b49b147576ce13a5f913aa2Debashish Chatterjee            this.path = path;
4652e8d24f8492116f0b49b147576ce13a5f913aa2Debashish Chatterjee        }
4752e8d24f8492116f0b49b147576ce13a5f913aa2Debashish Chatterjee
4852e8d24f8492116f0b49b147576ce13a5f913aa2Debashish Chatterjee        @Override
4952e8d24f8492116f0b49b147576ce13a5f913aa2Debashish Chatterjee        public String path() {
5052e8d24f8492116f0b49b147576ce13a5f913aa2Debashish Chatterjee            return path;
5152e8d24f8492116f0b49b147576ce13a5f913aa2Debashish Chatterjee        }
5252e8d24f8492116f0b49b147576ce13a5f913aa2Debashish Chatterjee    }
5352e8d24f8492116f0b49b147576ce13a5f913aa2Debashish Chatterjee
5452e8d24f8492116f0b49b147576ce13a5f913aa2Debashish Chatterjee    private final static String AUTHORITY = "authority";
5552e8d24f8492116f0b49b147576ce13a5f913aa2Debashish Chatterjee    private final static String BASE_URI = "scheme://" + AUTHORITY + "/";
5652e8d24f8492116f0b49b147576ce13a5f913aa2Debashish Chatterjee
5752e8d24f8492116f0b49b147576ce13a5f913aa2Debashish Chatterjee    /** The object under test. */
5852e8d24f8492116f0b49b147576ce13a5f913aa2Debashish Chatterjee    TypedUriMatcherImpl<TestUriType> mTypedUriMatcherImpl;
5952e8d24f8492116f0b49b147576ce13a5f913aa2Debashish Chatterjee
6052e8d24f8492116f0b49b147576ce13a5f913aa2Debashish Chatterjee    @Override
6152e8d24f8492116f0b49b147576ce13a5f913aa2Debashish Chatterjee    protected void setUp() throws Exception {
6252e8d24f8492116f0b49b147576ce13a5f913aa2Debashish Chatterjee        super.setUp();
6352e8d24f8492116f0b49b147576ce13a5f913aa2Debashish Chatterjee        mTypedUriMatcherImpl =
6452e8d24f8492116f0b49b147576ce13a5f913aa2Debashish Chatterjee                new TypedUriMatcherImpl<TestUriType>(AUTHORITY, TestUriType.values());
6552e8d24f8492116f0b49b147576ce13a5f913aa2Debashish Chatterjee    }
6652e8d24f8492116f0b49b147576ce13a5f913aa2Debashish Chatterjee
6752e8d24f8492116f0b49b147576ce13a5f913aa2Debashish Chatterjee    public void testMatch_NoMatch() {
6852e8d24f8492116f0b49b147576ce13a5f913aa2Debashish Chatterjee        // Incorrect authority.
6952e8d24f8492116f0b49b147576ce13a5f913aa2Debashish Chatterjee        assertUriTypeMatch(TestUriType.NO_MATCH, "scheme://authority1/build");
7052e8d24f8492116f0b49b147576ce13a5f913aa2Debashish Chatterjee        // Incorrect path.
7152e8d24f8492116f0b49b147576ce13a5f913aa2Debashish Chatterjee        assertUriTypeMatch(TestUriType.NO_MATCH, BASE_URI + "test");
7252e8d24f8492116f0b49b147576ce13a5f913aa2Debashish Chatterjee    }
7352e8d24f8492116f0b49b147576ce13a5f913aa2Debashish Chatterjee
7452e8d24f8492116f0b49b147576ce13a5f913aa2Debashish Chatterjee    public void testMatch_SimpleUri() {
7552e8d24f8492116f0b49b147576ce13a5f913aa2Debashish Chatterjee        assertUriTypeMatch(TestUriType.SIMPLE_URI, BASE_URI + "build");
7652e8d24f8492116f0b49b147576ce13a5f913aa2Debashish Chatterjee    }
7752e8d24f8492116f0b49b147576ce13a5f913aa2Debashish Chatterjee
7852e8d24f8492116f0b49b147576ce13a5f913aa2Debashish Chatterjee    public void testMatch_UriWithId() {
7952e8d24f8492116f0b49b147576ce13a5f913aa2Debashish Chatterjee        assertUriTypeMatch(TestUriType.URI_WITH_ID, BASE_URI + "build/2");
8052e8d24f8492116f0b49b147576ce13a5f913aa2Debashish Chatterjee        // Argument must be a number.
8152e8d24f8492116f0b49b147576ce13a5f913aa2Debashish Chatterjee        assertUriTypeMatch(TestUriType.NO_MATCH, BASE_URI + "build/a");
8252e8d24f8492116f0b49b147576ce13a5f913aa2Debashish Chatterjee        // Additional arguments not allowed.
8352e8d24f8492116f0b49b147576ce13a5f913aa2Debashish Chatterjee        assertUriTypeMatch(TestUriType.NO_MATCH, BASE_URI + "build/2/more");
8452e8d24f8492116f0b49b147576ce13a5f913aa2Debashish Chatterjee    }
8552e8d24f8492116f0b49b147576ce13a5f913aa2Debashish Chatterjee
8652e8d24f8492116f0b49b147576ce13a5f913aa2Debashish Chatterjee    public void testMatch_UriWithTwoIds() {
8752e8d24f8492116f0b49b147576ce13a5f913aa2Debashish Chatterjee        assertUriTypeMatch(TestUriType.URI_WITH_TWO_IDS, BASE_URI + "project/vm/build/3");
8852e8d24f8492116f0b49b147576ce13a5f913aa2Debashish Chatterjee        // Missing argument.
8952e8d24f8492116f0b49b147576ce13a5f913aa2Debashish Chatterjee        assertUriTypeMatch(TestUriType.NO_MATCH, BASE_URI + "project/vm/build/");
9052e8d24f8492116f0b49b147576ce13a5f913aa2Debashish Chatterjee        // Argument cannot contain / itself
9152e8d24f8492116f0b49b147576ce13a5f913aa2Debashish Chatterjee        assertUriTypeMatch(TestUriType.NO_MATCH, BASE_URI + "project/vm/x/build/3");
9252e8d24f8492116f0b49b147576ce13a5f913aa2Debashish Chatterjee    }
9352e8d24f8492116f0b49b147576ce13a5f913aa2Debashish Chatterjee
9452e8d24f8492116f0b49b147576ce13a5f913aa2Debashish Chatterjee    private void assertUriTypeMatch(UriType expectedType, String uri) {
9552e8d24f8492116f0b49b147576ce13a5f913aa2Debashish Chatterjee        assertEquals(expectedType, mTypedUriMatcherImpl.match(Uri.parse(uri)));
9652e8d24f8492116f0b49b147576ce13a5f913aa2Debashish Chatterjee    }
9752e8d24f8492116f0b49b147576ce13a5f913aa2Debashish Chatterjee}
98