1273399bf829133a8385332ad43add3c34c889102Chiao Cheng/*
2273399bf829133a8385332ad43add3c34c889102Chiao Cheng * Copyright (C) 2011 The Android Open Source Project
3273399bf829133a8385332ad43add3c34c889102Chiao Cheng *
4273399bf829133a8385332ad43add3c34c889102Chiao Cheng * Licensed under the Apache License, Version 2.0 (the "License");
5273399bf829133a8385332ad43add3c34c889102Chiao Cheng * you may not use this file except in compliance with the License.
6273399bf829133a8385332ad43add3c34c889102Chiao Cheng * You may obtain a copy of the License at
7273399bf829133a8385332ad43add3c34c889102Chiao Cheng *
8273399bf829133a8385332ad43add3c34c889102Chiao Cheng *      http://www.apache.org/licenses/LICENSE-2.0
9273399bf829133a8385332ad43add3c34c889102Chiao Cheng *
10273399bf829133a8385332ad43add3c34c889102Chiao Cheng * Unless required by applicable law or agreed to in writing, software
11273399bf829133a8385332ad43add3c34c889102Chiao Cheng * distributed under the License is distributed on an "AS IS" BASIS,
12273399bf829133a8385332ad43add3c34c889102Chiao Cheng * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13273399bf829133a8385332ad43add3c34c889102Chiao Cheng * See the License for the specific language governing permissions and
14273399bf829133a8385332ad43add3c34c889102Chiao Cheng * limitations under the License.
15273399bf829133a8385332ad43add3c34c889102Chiao Cheng */
16273399bf829133a8385332ad43add3c34c889102Chiao Cheng
17273399bf829133a8385332ad43add3c34c889102Chiao Chengpackage com.android.contacts.common.model.account;
18273399bf829133a8385332ad43add3c34c889102Chiao Cheng
19273399bf829133a8385332ad43add3c34c889102Chiao Chengimport android.content.Context;
20273399bf829133a8385332ad43add3c34c889102Chiao Chengimport android.test.AndroidTestCase;
21273399bf829133a8385332ad43add3c34c889102Chiao Chengimport android.test.suitebuilder.annotation.SmallTest;
22273399bf829133a8385332ad43add3c34c889102Chiao Cheng
23273399bf829133a8385332ad43add3c34c889102Chiao Chengimport com.android.contacts.common.unittest.R;
24273399bf829133a8385332ad43add3c34c889102Chiao Cheng
25273399bf829133a8385332ad43add3c34c889102Chiao Cheng/**
26273399bf829133a8385332ad43add3c34c889102Chiao Cheng * Test case for {@link AccountType}.
27273399bf829133a8385332ad43add3c34c889102Chiao Cheng *
28273399bf829133a8385332ad43add3c34c889102Chiao Cheng * adb shell am instrument -w -e class com.android.contacts.model.AccountTypeTest \
29273399bf829133a8385332ad43add3c34c889102Chiao Cheng       com.android.contacts.tests/android.test.InstrumentationTestRunner
30273399bf829133a8385332ad43add3c34c889102Chiao Cheng */
31273399bf829133a8385332ad43add3c34c889102Chiao Cheng@SmallTest
32273399bf829133a8385332ad43add3c34c889102Chiao Chengpublic class AccountTypeTest extends AndroidTestCase {
33273399bf829133a8385332ad43add3c34c889102Chiao Cheng    public void testGetResourceText() {
34273399bf829133a8385332ad43add3c34c889102Chiao Cheng        // In this test we use the test package itself as an external package.
35273399bf829133a8385332ad43add3c34c889102Chiao Cheng        final String packageName = getTestContext().getPackageName();
36273399bf829133a8385332ad43add3c34c889102Chiao Cheng
37273399bf829133a8385332ad43add3c34c889102Chiao Cheng        final Context c = getContext();
38273399bf829133a8385332ad43add3c34c889102Chiao Cheng        final String DEFAULT = "ABC";
39273399bf829133a8385332ad43add3c34c889102Chiao Cheng
40273399bf829133a8385332ad43add3c34c889102Chiao Cheng        // Package name null, resId -1, use the default
41273399bf829133a8385332ad43add3c34c889102Chiao Cheng        assertEquals(DEFAULT, AccountType.getResourceText(c, null, -1, DEFAULT));
42273399bf829133a8385332ad43add3c34c889102Chiao Cheng
43273399bf829133a8385332ad43add3c34c889102Chiao Cheng        // Resource ID -1, use the default
44273399bf829133a8385332ad43add3c34c889102Chiao Cheng        assertEquals(DEFAULT, AccountType.getResourceText(c, packageName, -1, DEFAULT));
45273399bf829133a8385332ad43add3c34c889102Chiao Cheng
46273399bf829133a8385332ad43add3c34c889102Chiao Cheng        // Load from an external package.  (here, we use this test package itself)
47273399bf829133a8385332ad43add3c34c889102Chiao Cheng        final int externalResID = R.string.test_string;
48273399bf829133a8385332ad43add3c34c889102Chiao Cheng        assertEquals(getTestContext().getString(externalResID),
49273399bf829133a8385332ad43add3c34c889102Chiao Cheng                AccountType.getResourceText(c, packageName, externalResID, DEFAULT));
50273399bf829133a8385332ad43add3c34c889102Chiao Cheng
51273399bf829133a8385332ad43add3c34c889102Chiao Cheng        // Load from the contacts package itself.
52273399bf829133a8385332ad43add3c34c889102Chiao Cheng        final int internalResId = com.android.contacts.common.R.string.contactsList;
53273399bf829133a8385332ad43add3c34c889102Chiao Cheng        assertEquals(c.getString(internalResId),
54273399bf829133a8385332ad43add3c34c889102Chiao Cheng                AccountType.getResourceText(c, null, internalResId, DEFAULT));
55273399bf829133a8385332ad43add3c34c889102Chiao Cheng    }
56273399bf829133a8385332ad43add3c34c889102Chiao Cheng
57273399bf829133a8385332ad43add3c34c889102Chiao Cheng    /**
58273399bf829133a8385332ad43add3c34c889102Chiao Cheng     * Verify if {@link AccountType#getInviteContactActionLabel} correctly gets the resource ID
59273399bf829133a8385332ad43add3c34c889102Chiao Cheng     * from {@link AccountType#getInviteContactActionResId}
60273399bf829133a8385332ad43add3c34c889102Chiao Cheng     */
61273399bf829133a8385332ad43add3c34c889102Chiao Cheng    public void testGetInviteContactActionLabel() {
62273399bf829133a8385332ad43add3c34c889102Chiao Cheng        final String packageName = getTestContext().getPackageName();
63273399bf829133a8385332ad43add3c34c889102Chiao Cheng        final Context c = getContext();
64273399bf829133a8385332ad43add3c34c889102Chiao Cheng
65273399bf829133a8385332ad43add3c34c889102Chiao Cheng        final int externalResID = R.string.test_string;
66273399bf829133a8385332ad43add3c34c889102Chiao Cheng
67273399bf829133a8385332ad43add3c34c889102Chiao Cheng        AccountType accountType = new AccountType() {
68273399bf829133a8385332ad43add3c34c889102Chiao Cheng            {
69273399bf829133a8385332ad43add3c34c889102Chiao Cheng                resourcePackageName = packageName;
70273399bf829133a8385332ad43add3c34c889102Chiao Cheng                syncAdapterPackageName = packageName;
71273399bf829133a8385332ad43add3c34c889102Chiao Cheng            }
72273399bf829133a8385332ad43add3c34c889102Chiao Cheng            @Override protected int getInviteContactActionResId() {
73273399bf829133a8385332ad43add3c34c889102Chiao Cheng                return externalResID;
74273399bf829133a8385332ad43add3c34c889102Chiao Cheng            }
75273399bf829133a8385332ad43add3c34c889102Chiao Cheng
76273399bf829133a8385332ad43add3c34c889102Chiao Cheng            @Override public boolean isGroupMembershipEditable() {
77273399bf829133a8385332ad43add3c34c889102Chiao Cheng                return false;
78273399bf829133a8385332ad43add3c34c889102Chiao Cheng            }
79273399bf829133a8385332ad43add3c34c889102Chiao Cheng
80273399bf829133a8385332ad43add3c34c889102Chiao Cheng            @Override public boolean areContactsWritable() {
81273399bf829133a8385332ad43add3c34c889102Chiao Cheng                return false;
82273399bf829133a8385332ad43add3c34c889102Chiao Cheng            }
83273399bf829133a8385332ad43add3c34c889102Chiao Cheng        };
84273399bf829133a8385332ad43add3c34c889102Chiao Cheng
85273399bf829133a8385332ad43add3c34c889102Chiao Cheng        assertEquals(getTestContext().getString(externalResID),
86273399bf829133a8385332ad43add3c34c889102Chiao Cheng                accountType.getInviteContactActionLabel(c));
87273399bf829133a8385332ad43add3c34c889102Chiao Cheng    }
88273399bf829133a8385332ad43add3c34c889102Chiao Cheng
89273399bf829133a8385332ad43add3c34c889102Chiao Cheng    public void testDisplayLabelComparator() {
90273399bf829133a8385332ad43add3c34c889102Chiao Cheng        final AccountTypeForDisplayLabelTest EMPTY = new AccountTypeForDisplayLabelTest("");
91273399bf829133a8385332ad43add3c34c889102Chiao Cheng        final AccountTypeForDisplayLabelTest NULL = new AccountTypeForDisplayLabelTest(null);
92273399bf829133a8385332ad43add3c34c889102Chiao Cheng        final AccountTypeForDisplayLabelTest AA = new AccountTypeForDisplayLabelTest("aa");
93273399bf829133a8385332ad43add3c34c889102Chiao Cheng        final AccountTypeForDisplayLabelTest BBB = new AccountTypeForDisplayLabelTest("bbb");
94273399bf829133a8385332ad43add3c34c889102Chiao Cheng        final AccountTypeForDisplayLabelTest C = new AccountTypeForDisplayLabelTest("c");
95273399bf829133a8385332ad43add3c34c889102Chiao Cheng
96273399bf829133a8385332ad43add3c34c889102Chiao Cheng        assertTrue(compareDisplayLabel(AA, BBB) < 0);
97273399bf829133a8385332ad43add3c34c889102Chiao Cheng        assertTrue(compareDisplayLabel(BBB, C) < 0);
98273399bf829133a8385332ad43add3c34c889102Chiao Cheng        assertTrue(compareDisplayLabel(AA, C) < 0);
99273399bf829133a8385332ad43add3c34c889102Chiao Cheng        assertTrue(compareDisplayLabel(AA, AA) == 0);
100273399bf829133a8385332ad43add3c34c889102Chiao Cheng        assertTrue(compareDisplayLabel(BBB, AA) > 0);
101273399bf829133a8385332ad43add3c34c889102Chiao Cheng
102273399bf829133a8385332ad43add3c34c889102Chiao Cheng        assertTrue(compareDisplayLabel(EMPTY, AA) < 0);
103273399bf829133a8385332ad43add3c34c889102Chiao Cheng        assertTrue(compareDisplayLabel(EMPTY, NULL) == 0);
104273399bf829133a8385332ad43add3c34c889102Chiao Cheng    }
105273399bf829133a8385332ad43add3c34c889102Chiao Cheng
106273399bf829133a8385332ad43add3c34c889102Chiao Cheng    private int compareDisplayLabel(AccountType lhs, AccountType rhs) {
107273399bf829133a8385332ad43add3c34c889102Chiao Cheng        return new AccountType.DisplayLabelComparator(getContext()).compare(lhs, rhs);
108273399bf829133a8385332ad43add3c34c889102Chiao Cheng    }
109273399bf829133a8385332ad43add3c34c889102Chiao Cheng
110273399bf829133a8385332ad43add3c34c889102Chiao Cheng    private class AccountTypeForDisplayLabelTest extends AccountType {
111273399bf829133a8385332ad43add3c34c889102Chiao Cheng        private final String mDisplayLabel;
112273399bf829133a8385332ad43add3c34c889102Chiao Cheng
113273399bf829133a8385332ad43add3c34c889102Chiao Cheng        public AccountTypeForDisplayLabelTest(String displayLabel) {
114273399bf829133a8385332ad43add3c34c889102Chiao Cheng            mDisplayLabel = displayLabel;
115273399bf829133a8385332ad43add3c34c889102Chiao Cheng        }
116273399bf829133a8385332ad43add3c34c889102Chiao Cheng
117273399bf829133a8385332ad43add3c34c889102Chiao Cheng        @Override
118273399bf829133a8385332ad43add3c34c889102Chiao Cheng        public CharSequence getDisplayLabel(Context context) {
119273399bf829133a8385332ad43add3c34c889102Chiao Cheng            return mDisplayLabel;
120273399bf829133a8385332ad43add3c34c889102Chiao Cheng        }
121273399bf829133a8385332ad43add3c34c889102Chiao Cheng
122273399bf829133a8385332ad43add3c34c889102Chiao Cheng        @Override
123273399bf829133a8385332ad43add3c34c889102Chiao Cheng        public boolean isGroupMembershipEditable() {
124273399bf829133a8385332ad43add3c34c889102Chiao Cheng            return false;
125273399bf829133a8385332ad43add3c34c889102Chiao Cheng        }
126273399bf829133a8385332ad43add3c34c889102Chiao Cheng
127273399bf829133a8385332ad43add3c34c889102Chiao Cheng        @Override
128273399bf829133a8385332ad43add3c34c889102Chiao Cheng        public boolean areContactsWritable() {
129273399bf829133a8385332ad43add3c34c889102Chiao Cheng            return false;
130273399bf829133a8385332ad43add3c34c889102Chiao Cheng        }
131273399bf829133a8385332ad43add3c34c889102Chiao Cheng    }
132273399bf829133a8385332ad43add3c34c889102Chiao Cheng}
133