blob: 92a7872ae8f1f70f22a869b7c019f6e97f20181d [file] [log] [blame]
/*
* Copyright (C) 2010 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.email;
import android.accounts.AccountManager;
import android.accounts.AccountManagerFuture;
import android.accounts.AuthenticatorException;
import android.accounts.OperationCanceledException;
import android.database.Cursor;
import android.test.ProviderTestCase2;
import com.android.email.provider.EmailProvider;
import com.android.email.provider.ProviderTestUtils;
import com.android.emailcommon.provider.Account;
import com.android.emailcommon.provider.EmailContent;
import java.io.IOException;
import java.util.ArrayList;
import java.util.HashSet;
/**
* Base class for unit tests that use {@link android.accounts.Account}.
*/
public abstract class AccountTestCase extends ProviderTestCase2<EmailProvider> {
protected static final String TEST_ACCOUNT_PREFIX = "__test";
protected static final String TEST_ACCOUNT_SUFFIX = "@android.com";
protected static final String TEST_ACCOUNT_TYPE = "com.android.test_exchange";
public AccountTestCase() {
super(EmailProvider.class, EmailContent.AUTHORITY);
}
protected android.accounts.Account[] getExchangeAccounts() {
return AccountManager.get(getContext()).getAccountsByType(TEST_ACCOUNT_TYPE);
}
protected android.accounts.Account makeAccountManagerAccount(String username) {
return new android.accounts.Account(username, TEST_ACCOUNT_TYPE);
}
protected void createAccountManagerAccount(String username) {
final android.accounts.Account account = makeAccountManagerAccount(username);
AccountManager.get(getContext()).addAccountExplicitly(account, "password", null);
}
protected Account setupProviderAndAccountManagerAccount(String username) {
// Note that setupAccount creates the email address username@android.com, so that's what
// we need to use for the account manager
createAccountManagerAccount(username + TEST_ACCOUNT_SUFFIX);
return ProviderTestUtils.setupAccount(username, true, getMockContext());
}
protected ArrayList<Account> makeExchangeServiceAccountList() {
ArrayList<Account> accountList = new ArrayList<Account>();
Cursor c = getMockContext().getContentResolver().query(Account.CONTENT_URI,
Account.CONTENT_PROJECTION, null, null, null);
try {
while (c.moveToNext()) {
Account account = new Account();
account.restore(c);
accountList.add(account);
}
} finally {
c.close();
}
return accountList;
}
protected void deleteAccountManagerAccount(android.accounts.Account account) {
AccountManagerFuture<Boolean> future =
AccountManager.get(getContext()).removeAccount(account, null, null);
try {
future.getResult();
} catch (OperationCanceledException e) {
} catch (AuthenticatorException e) {
} catch (IOException e) {
}
}
protected void deleteTemporaryAccountManagerAccounts() {
for (android.accounts.Account accountManagerAccount: getExchangeAccounts()) {
if (accountManagerAccount.name.startsWith(TEST_ACCOUNT_PREFIX) &&
accountManagerAccount.name.endsWith(TEST_ACCOUNT_SUFFIX)) {
deleteAccountManagerAccount(accountManagerAccount);
}
}
}
protected String getTestAccountName(String name) {
return TEST_ACCOUNT_PREFIX + name;
}
protected String getTestAccountEmailAddress(String name) {
return TEST_ACCOUNT_PREFIX + name + TEST_ACCOUNT_SUFFIX;
}
/**
* Helper to retrieve account manager accounts *and* remove any preexisting accounts
* from the list, to "hide" them from the reconciler.
*/
protected android.accounts.Account[] getAccountManagerAccounts(
android.accounts.Account[] baseline) {
android.accounts.Account[] rawList = getExchangeAccounts();
if (baseline.length == 0) {
return rawList;
}
HashSet<android.accounts.Account> set = new HashSet<android.accounts.Account>();
for (android.accounts.Account addAccount : rawList) {
set.add(addAccount);
}
for (android.accounts.Account removeAccount : baseline) {
set.remove(removeAccount);
}
return set.toArray(new android.accounts.Account[0]);
}
}