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