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