1e88fcd3e82377aa3579ddf98389b6e20bae34c07Chiao Cheng/* 2e88fcd3e82377aa3579ddf98389b6e20bae34c07Chiao Cheng * Copyright (C) 2011 The Android Open Source Project 3e88fcd3e82377aa3579ddf98389b6e20bae34c07Chiao Cheng * 4e88fcd3e82377aa3579ddf98389b6e20bae34c07Chiao Cheng * Licensed under the Apache License, Version 2.0 (the "License"); 5e88fcd3e82377aa3579ddf98389b6e20bae34c07Chiao Cheng * you may not use this file except in compliance with the License. 6e88fcd3e82377aa3579ddf98389b6e20bae34c07Chiao Cheng * You may obtain a copy of the License at 7e88fcd3e82377aa3579ddf98389b6e20bae34c07Chiao Cheng * 8e88fcd3e82377aa3579ddf98389b6e20bae34c07Chiao Cheng * http://www.apache.org/licenses/LICENSE-2.0 9e88fcd3e82377aa3579ddf98389b6e20bae34c07Chiao Cheng * 10e88fcd3e82377aa3579ddf98389b6e20bae34c07Chiao Cheng * Unless required by applicable law or agreed to in writing, software 11e88fcd3e82377aa3579ddf98389b6e20bae34c07Chiao Cheng * distributed under the License is distributed on an "AS IS" BASIS, 12e88fcd3e82377aa3579ddf98389b6e20bae34c07Chiao Cheng * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13e88fcd3e82377aa3579ddf98389b6e20bae34c07Chiao Cheng * See the License for the specific language governing permissions and 14e88fcd3e82377aa3579ddf98389b6e20bae34c07Chiao Cheng * limitations under the License. 15e88fcd3e82377aa3579ddf98389b6e20bae34c07Chiao Cheng */ 16e88fcd3e82377aa3579ddf98389b6e20bae34c07Chiao Cheng 1769c182afb0e6d82a341a28b4317aa703af768906Gary Maipackage com.android.contacts.model.account; 18e88fcd3e82377aa3579ddf98389b6e20bae34c07Chiao Cheng 19e88fcd3e82377aa3579ddf98389b6e20bae34c07Chiao Chengimport android.content.Context; 207bae063fae6b355fce1f91d342314f4d4798b30aJay Shraunerimport android.test.InstrumentationTestCase; 21e88fcd3e82377aa3579ddf98389b6e20bae34c07Chiao Chengimport android.test.suitebuilder.annotation.SmallTest; 22e88fcd3e82377aa3579ddf98389b6e20bae34c07Chiao Cheng 2379a3199c530da8c6dfbf51c94c9cc4206760a2bfArthur Wangimport com.android.contacts.tests.R; 24e88fcd3e82377aa3579ddf98389b6e20bae34c07Chiao Cheng 25e88fcd3e82377aa3579ddf98389b6e20bae34c07Chiao Cheng/** 26e88fcd3e82377aa3579ddf98389b6e20bae34c07Chiao Cheng * Test case for {@link AccountType}. 27e88fcd3e82377aa3579ddf98389b6e20bae34c07Chiao Cheng * 28e88fcd3e82377aa3579ddf98389b6e20bae34c07Chiao Cheng * adb shell am instrument -w -e class com.android.contacts.model.AccountTypeTest \ 29e88fcd3e82377aa3579ddf98389b6e20bae34c07Chiao Cheng com.android.contacts.tests/android.test.InstrumentationTestRunner 30e88fcd3e82377aa3579ddf98389b6e20bae34c07Chiao Cheng */ 31e88fcd3e82377aa3579ddf98389b6e20bae34c07Chiao Cheng@SmallTest 327bae063fae6b355fce1f91d342314f4d4798b30aJay Shraunerpublic class AccountTypeTest extends InstrumentationTestCase { 33e88fcd3e82377aa3579ddf98389b6e20bae34c07Chiao Cheng public void testGetResourceText() { 34e88fcd3e82377aa3579ddf98389b6e20bae34c07Chiao Cheng // In this test we use the test package itself as an external package. 357bae063fae6b355fce1f91d342314f4d4798b30aJay Shrauner final String packageName = getInstrumentation().getContext().getPackageName(); 36e88fcd3e82377aa3579ddf98389b6e20bae34c07Chiao Cheng 370545258d4f308af21f6ee11fe380e41630422fffJay Shrauner final Context c = getInstrumentation().getTargetContext(); 38e88fcd3e82377aa3579ddf98389b6e20bae34c07Chiao Cheng final String DEFAULT = "ABC"; 39e88fcd3e82377aa3579ddf98389b6e20bae34c07Chiao Cheng 40e88fcd3e82377aa3579ddf98389b6e20bae34c07Chiao Cheng // Package name null, resId -1, use the default 41e88fcd3e82377aa3579ddf98389b6e20bae34c07Chiao Cheng assertEquals(DEFAULT, AccountType.getResourceText(c, null, -1, DEFAULT)); 42e88fcd3e82377aa3579ddf98389b6e20bae34c07Chiao Cheng 43e88fcd3e82377aa3579ddf98389b6e20bae34c07Chiao Cheng // Resource ID -1, use the default 44e88fcd3e82377aa3579ddf98389b6e20bae34c07Chiao Cheng assertEquals(DEFAULT, AccountType.getResourceText(c, packageName, -1, DEFAULT)); 45e88fcd3e82377aa3579ddf98389b6e20bae34c07Chiao Cheng 46e88fcd3e82377aa3579ddf98389b6e20bae34c07Chiao Cheng // Load from an external package. (here, we use this test package itself) 47e88fcd3e82377aa3579ddf98389b6e20bae34c07Chiao Cheng final int externalResID = R.string.test_string; 487bae063fae6b355fce1f91d342314f4d4798b30aJay Shrauner assertEquals(getInstrumentation().getContext().getString(externalResID), 49e88fcd3e82377aa3579ddf98389b6e20bae34c07Chiao Cheng AccountType.getResourceText(c, packageName, externalResID, DEFAULT)); 50e88fcd3e82377aa3579ddf98389b6e20bae34c07Chiao Cheng 51e88fcd3e82377aa3579ddf98389b6e20bae34c07Chiao Cheng // Load from the contacts package itself. 523f6a2444e0134b7380cdb2e13abf4bf1163336d0Arthur Wang final int internalResId = com.android.contacts.R.string.contactsList; 53e88fcd3e82377aa3579ddf98389b6e20bae34c07Chiao Cheng assertEquals(c.getString(internalResId), 54e88fcd3e82377aa3579ddf98389b6e20bae34c07Chiao Cheng AccountType.getResourceText(c, null, internalResId, DEFAULT)); 55e88fcd3e82377aa3579ddf98389b6e20bae34c07Chiao Cheng } 56e88fcd3e82377aa3579ddf98389b6e20bae34c07Chiao Cheng 57e88fcd3e82377aa3579ddf98389b6e20bae34c07Chiao Cheng /** 58e88fcd3e82377aa3579ddf98389b6e20bae34c07Chiao Cheng * Verify if {@link AccountType#getInviteContactActionLabel} correctly gets the resource ID 59e88fcd3e82377aa3579ddf98389b6e20bae34c07Chiao Cheng * from {@link AccountType#getInviteContactActionResId} 60e88fcd3e82377aa3579ddf98389b6e20bae34c07Chiao Cheng */ 61e88fcd3e82377aa3579ddf98389b6e20bae34c07Chiao Cheng public void testGetInviteContactActionLabel() { 627bae063fae6b355fce1f91d342314f4d4798b30aJay Shrauner final String packageName = getInstrumentation().getContext().getPackageName(); 630545258d4f308af21f6ee11fe380e41630422fffJay Shrauner final Context c = getInstrumentation().getTargetContext(); 64e88fcd3e82377aa3579ddf98389b6e20bae34c07Chiao Cheng 65e88fcd3e82377aa3579ddf98389b6e20bae34c07Chiao Cheng final int externalResID = R.string.test_string; 66e88fcd3e82377aa3579ddf98389b6e20bae34c07Chiao Cheng 67e88fcd3e82377aa3579ddf98389b6e20bae34c07Chiao Cheng AccountType accountType = new AccountType() { 68e88fcd3e82377aa3579ddf98389b6e20bae34c07Chiao Cheng { 69e88fcd3e82377aa3579ddf98389b6e20bae34c07Chiao Cheng resourcePackageName = packageName; 70e88fcd3e82377aa3579ddf98389b6e20bae34c07Chiao Cheng syncAdapterPackageName = packageName; 71e88fcd3e82377aa3579ddf98389b6e20bae34c07Chiao Cheng } 72e88fcd3e82377aa3579ddf98389b6e20bae34c07Chiao Cheng @Override protected int getInviteContactActionResId() { 73e88fcd3e82377aa3579ddf98389b6e20bae34c07Chiao Cheng return externalResID; 74e88fcd3e82377aa3579ddf98389b6e20bae34c07Chiao Cheng } 75e88fcd3e82377aa3579ddf98389b6e20bae34c07Chiao Cheng 76e88fcd3e82377aa3579ddf98389b6e20bae34c07Chiao Cheng @Override public boolean isGroupMembershipEditable() { 77e88fcd3e82377aa3579ddf98389b6e20bae34c07Chiao Cheng return false; 78e88fcd3e82377aa3579ddf98389b6e20bae34c07Chiao Cheng } 79e88fcd3e82377aa3579ddf98389b6e20bae34c07Chiao Cheng 80e88fcd3e82377aa3579ddf98389b6e20bae34c07Chiao Cheng @Override public boolean areContactsWritable() { 81e88fcd3e82377aa3579ddf98389b6e20bae34c07Chiao Cheng return false; 82e88fcd3e82377aa3579ddf98389b6e20bae34c07Chiao Cheng } 83e88fcd3e82377aa3579ddf98389b6e20bae34c07Chiao Cheng }; 84e88fcd3e82377aa3579ddf98389b6e20bae34c07Chiao Cheng 857bae063fae6b355fce1f91d342314f4d4798b30aJay Shrauner assertEquals(getInstrumentation().getContext().getString(externalResID), 86e88fcd3e82377aa3579ddf98389b6e20bae34c07Chiao Cheng accountType.getInviteContactActionLabel(c)); 87e88fcd3e82377aa3579ddf98389b6e20bae34c07Chiao Cheng } 88e88fcd3e82377aa3579ddf98389b6e20bae34c07Chiao Cheng 89e88fcd3e82377aa3579ddf98389b6e20bae34c07Chiao Cheng public void testDisplayLabelComparator() { 90e88fcd3e82377aa3579ddf98389b6e20bae34c07Chiao Cheng final AccountTypeForDisplayLabelTest EMPTY = new AccountTypeForDisplayLabelTest(""); 91e88fcd3e82377aa3579ddf98389b6e20bae34c07Chiao Cheng final AccountTypeForDisplayLabelTest NULL = new AccountTypeForDisplayLabelTest(null); 92e88fcd3e82377aa3579ddf98389b6e20bae34c07Chiao Cheng final AccountTypeForDisplayLabelTest AA = new AccountTypeForDisplayLabelTest("aa"); 93e88fcd3e82377aa3579ddf98389b6e20bae34c07Chiao Cheng final AccountTypeForDisplayLabelTest BBB = new AccountTypeForDisplayLabelTest("bbb"); 94e88fcd3e82377aa3579ddf98389b6e20bae34c07Chiao Cheng final AccountTypeForDisplayLabelTest C = new AccountTypeForDisplayLabelTest("c"); 95e88fcd3e82377aa3579ddf98389b6e20bae34c07Chiao Cheng 96e88fcd3e82377aa3579ddf98389b6e20bae34c07Chiao Cheng assertTrue(compareDisplayLabel(AA, BBB) < 0); 97e88fcd3e82377aa3579ddf98389b6e20bae34c07Chiao Cheng assertTrue(compareDisplayLabel(BBB, C) < 0); 98e88fcd3e82377aa3579ddf98389b6e20bae34c07Chiao Cheng assertTrue(compareDisplayLabel(AA, C) < 0); 99e88fcd3e82377aa3579ddf98389b6e20bae34c07Chiao Cheng assertTrue(compareDisplayLabel(AA, AA) == 0); 100e88fcd3e82377aa3579ddf98389b6e20bae34c07Chiao Cheng assertTrue(compareDisplayLabel(BBB, AA) > 0); 101e88fcd3e82377aa3579ddf98389b6e20bae34c07Chiao Cheng 102e88fcd3e82377aa3579ddf98389b6e20bae34c07Chiao Cheng assertTrue(compareDisplayLabel(EMPTY, AA) < 0); 103e88fcd3e82377aa3579ddf98389b6e20bae34c07Chiao Cheng assertTrue(compareDisplayLabel(EMPTY, NULL) == 0); 104e88fcd3e82377aa3579ddf98389b6e20bae34c07Chiao Cheng } 105e88fcd3e82377aa3579ddf98389b6e20bae34c07Chiao Cheng 106e88fcd3e82377aa3579ddf98389b6e20bae34c07Chiao Cheng private int compareDisplayLabel(AccountType lhs, AccountType rhs) { 1070545258d4f308af21f6ee11fe380e41630422fffJay Shrauner return new AccountType.DisplayLabelComparator( 1080545258d4f308af21f6ee11fe380e41630422fffJay Shrauner getInstrumentation().getTargetContext()).compare(lhs, rhs); 109e88fcd3e82377aa3579ddf98389b6e20bae34c07Chiao Cheng } 110e88fcd3e82377aa3579ddf98389b6e20bae34c07Chiao Cheng 111e88fcd3e82377aa3579ddf98389b6e20bae34c07Chiao Cheng private class AccountTypeForDisplayLabelTest extends AccountType { 112e88fcd3e82377aa3579ddf98389b6e20bae34c07Chiao Cheng private final String mDisplayLabel; 113e88fcd3e82377aa3579ddf98389b6e20bae34c07Chiao Cheng 114e88fcd3e82377aa3579ddf98389b6e20bae34c07Chiao Cheng public AccountTypeForDisplayLabelTest(String displayLabel) { 115e88fcd3e82377aa3579ddf98389b6e20bae34c07Chiao Cheng mDisplayLabel = displayLabel; 116e88fcd3e82377aa3579ddf98389b6e20bae34c07Chiao Cheng } 117e88fcd3e82377aa3579ddf98389b6e20bae34c07Chiao Cheng 118e88fcd3e82377aa3579ddf98389b6e20bae34c07Chiao Cheng @Override 119e88fcd3e82377aa3579ddf98389b6e20bae34c07Chiao Cheng public CharSequence getDisplayLabel(Context context) { 120e88fcd3e82377aa3579ddf98389b6e20bae34c07Chiao Cheng return mDisplayLabel; 121e88fcd3e82377aa3579ddf98389b6e20bae34c07Chiao Cheng } 122e88fcd3e82377aa3579ddf98389b6e20bae34c07Chiao Cheng 123e88fcd3e82377aa3579ddf98389b6e20bae34c07Chiao Cheng @Override 124e88fcd3e82377aa3579ddf98389b6e20bae34c07Chiao Cheng public boolean isGroupMembershipEditable() { 125e88fcd3e82377aa3579ddf98389b6e20bae34c07Chiao Cheng return false; 126e88fcd3e82377aa3579ddf98389b6e20bae34c07Chiao Cheng } 127e88fcd3e82377aa3579ddf98389b6e20bae34c07Chiao Cheng 128e88fcd3e82377aa3579ddf98389b6e20bae34c07Chiao Cheng @Override 129e88fcd3e82377aa3579ddf98389b6e20bae34c07Chiao Cheng public boolean areContactsWritable() { 130e88fcd3e82377aa3579ddf98389b6e20bae34c07Chiao Cheng return false; 131e88fcd3e82377aa3579ddf98389b6e20bae34c07Chiao Cheng } 132e88fcd3e82377aa3579ddf98389b6e20bae34c07Chiao Cheng } 133e88fcd3e82377aa3579ddf98389b6e20bae34c07Chiao Cheng} 134