| /* |
| * 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]); |
| } |
| } |