/* * 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 com.android.email.provider.ProviderTestUtils; import com.android.emailcommon.provider.Account; import com.android.emailcommon.utility.Utility; import android.content.Context; import android.test.InstrumentationTestCase; import android.test.suitebuilder.annotation.LargeTest; import java.util.ArrayList; import java.util.concurrent.atomic.AtomicBoolean; /** * Large tests for {@link Utility}. */ @LargeTest public class UtilityLargeTest extends InstrumentationTestCase { private static final int WAIT_UNTIL_TIMEOUT_SECONDS = 10; // Isolted Context for providers. private Context mProviderContext; @Override protected void setUp() throws Exception { super.setUp(); mProviderContext = DBTestHelper.ProviderContextSetupHelper.getProviderContext( getInstrumentation().getTargetContext()); } public void testForEachAccount() throws Throwable { // Create some accounts... Account acct1 = ProviderTestUtils.setupAccount("acct1", true, mProviderContext); Account acct2 = ProviderTestUtils.setupAccount("acct2", true, mProviderContext); final ArrayList<Long> ids = new ArrayList<Long>(); // Account id array. final AtomicBoolean done = new AtomicBoolean(false); // Kick ForEachAccount and collect IDs... // AsyncTask needs to be created on the UI thread. runTestOnUiThread(new Runnable() { @Override public void run() { new Utility.ForEachAccount(mProviderContext) { @Override protected void performAction(long accountId) { synchronized (ids) { ids.add(accountId); } } @Override protected void onFinished() { done.set(true); } }.execute(); } }); // Wait until it's done... TestUtils.waitUntil(new TestUtils.Condition() { @Override public boolean isMet() { return done.get(); } }, WAIT_UNTIL_TIMEOUT_SECONDS); // Check the collected IDs. synchronized (ids) { assertEquals(2, ids.size()); // ids may not be sorted, so... assertTrue(ids.contains(acct1.mId)); assertTrue(ids.contains(acct2.mId)); } } }