blob: 982517b1b9562554f2564599ba959873f5e0c857 [file] [log] [blame]
/*
* Copyright (C) 2011 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.android.contacts.model;
import android.accounts.Account;
import android.accounts.AccountManager;
import android.content.SharedPreferences;
import android.test.AndroidTestCase;
import android.test.suitebuilder.annotation.SmallTest;
import com.android.contacts.model.account.AccountType;
import com.android.contacts.model.account.AccountTypeWithDataSet;
import com.android.contacts.model.account.AccountWithDataSet;
import com.android.contacts.model.account.GoogleAccountType;
import com.google.common.collect.Lists;
import com.google.common.collect.Maps;
import org.mockito.Mock;
import org.mockito.Mockito;
import org.mockito.MockitoAnnotations;
import java.util.Collection;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import static org.mockito.Mockito.when;
/**
* Test case for {@link com.android.contacts.model.AccountTypeManager}.
*
* adb shell am instrument -w -e class com.android.contacts.model.AccountTypeManagerTest \
com.android.contacts.tests/android.test.InstrumentationTestRunner
*/
@SmallTest
public class AccountTypeManagerTest extends AndroidTestCase {
private static final Account[] ACCOUNTS = new Account[2];
static {
ACCOUNTS[0] = new Account("name1", GoogleAccountType.ACCOUNT_TYPE);
ACCOUNTS[1] = new Account("name2", GoogleAccountType.ACCOUNT_TYPE);
}
@Mock private AccountManager mAccountManager;
@Mock private SharedPreferences mPrefs;
@Override
public void setUp() throws Exception {
super.setUp();
System.setProperty("dexmaker.dexcache", getContext().getCacheDir().getPath());
MockitoAnnotations.initMocks(this);
}
private static AccountWithDataSet createAccountWithDataSet(String name, AccountType type) {
return new AccountWithDataSet(name, type.accountType, type.dataSet);
}
/**
* Array of {@link AccountType} -> {@link Map}
*/
private static Map<AccountTypeWithDataSet, AccountType> buildAccountTypes(AccountType... types) {
final HashMap<AccountTypeWithDataSet, AccountType> result = Maps.newHashMap();
for (AccountType type : types) {
result.put(type.getAccountTypeAndDataSet(), type);
}
return result;
}
/**
* Array of {@link AccountWithDataSet} -> {@link Collection}
*/
private static Collection<AccountWithDataSet> buildAccounts(AccountWithDataSet... accounts) {
final List<AccountWithDataSet> result = Lists.newArrayList();
for (AccountWithDataSet account : accounts) {
result.add(account);
}
return result;
}
public void testGetDefaultAccount_NoAccounts() {
assertNull(getDefaultGoogleAccountName());
}
public void testGetDefaultAccount_NoAccounts_DefaultPreferenceSet() {
when(mPrefs.getString(Mockito.anyString(), Mockito.anyString())).thenReturn(
getDefaultAccountPreference("name1", GoogleAccountType.ACCOUNT_TYPE));
assertNull(getDefaultGoogleAccountName());
}
public void testGetDefaultAccount_NoDefaultAccountPreferenceSet() {
when(mAccountManager.getAccountsByType(Mockito.anyString())).thenReturn(ACCOUNTS);
assertEquals("name1", getDefaultGoogleAccountName());
}
public void testGetDefaultAccount_DefaultAccountPreferenceSet() {
when(mAccountManager.getAccountsByType(Mockito.anyString())).thenReturn(ACCOUNTS);
when(mPrefs.getString(Mockito.anyString(), Mockito.anyString())).thenReturn(
getDefaultAccountPreference("name2", GoogleAccountType.ACCOUNT_TYPE));
assertEquals("name2", getDefaultGoogleAccountName());
}
public void testGetDefaultAccount_DefaultAccountPreferenceSet_NonGoogleAccountType() {
when(mAccountManager.getAccountsByType(Mockito.anyString())).thenReturn(ACCOUNTS);
when(mPrefs.getString(Mockito.anyString(), Mockito.anyString())).thenReturn(
getDefaultAccountPreference("name3", "type3"));
assertEquals("name1", getDefaultGoogleAccountName());
}
public void testGetDefaultAccount_DefaultAccountPreferenceSet_UnknownName() {
when(mAccountManager.getAccountsByType(Mockito.anyString())).thenReturn(ACCOUNTS);
when(mPrefs.getString(Mockito.anyString(), Mockito.anyString())).thenReturn(
getDefaultAccountPreference("name4",GoogleAccountType.ACCOUNT_TYPE));
assertEquals("name1", getDefaultGoogleAccountName());
}
private final String getDefaultGoogleAccountName() {
// We don't need the real preference key value since it's mocked
final Account account = AccountTypeManager.getDefaultGoogleAccount(
mAccountManager, mPrefs, "contact_editor_default_account_key");
return account == null ? null : account.name;
}
private static final String getDefaultAccountPreference(String name, String type) {
return new AccountWithDataSet(name, type, /* dataSet */ null).stringify();
}
}