18887689fa7d6cde21063e723a99ee5801887e705Tony Mantlerpackage com.android.mail.ui; 28887689fa7d6cde21063e723a99ee5801887e705Tony Mantler 38887689fa7d6cde21063e723a99ee5801887e705Tony Mantlerimport android.app.Activity; 48887689fa7d6cde21063e723a99ee5801887e705Tony Mantlerimport android.app.LoaderManager; 58887689fa7d6cde21063e723a99ee5801887e705Tony Mantlerimport android.content.Intent; 68887689fa7d6cde21063e723a99ee5801887e705Tony Mantlerimport android.content.Loader; 78887689fa7d6cde21063e723a99ee5801887e705Tony Mantlerimport android.os.Bundle; 88887689fa7d6cde21063e723a99ee5801887e705Tony Mantlerimport android.test.ActivityUnitTestCase; 98887689fa7d6cde21063e723a99ee5801887e705Tony Mantlerimport android.test.suitebuilder.annotation.SmallTest; 108887689fa7d6cde21063e723a99ee5801887e705Tony Mantler 118887689fa7d6cde21063e723a99ee5801887e705Tony Mantlerimport com.google.common.annotations.VisibleForTesting; 128887689fa7d6cde21063e723a99ee5801887e705Tony Mantler 138887689fa7d6cde21063e723a99ee5801887e705Tony Mantlerimport java.util.concurrent.CountDownLatch; 148887689fa7d6cde21063e723a99ee5801887e705Tony Mantlerimport java.util.concurrent.TimeUnit; 158887689fa7d6cde21063e723a99ee5801887e705Tony Mantler 168887689fa7d6cde21063e723a99ee5801887e705Tony Mantlerpublic class MailAsyncTaskLoaderTest 178887689fa7d6cde21063e723a99ee5801887e705Tony Mantler extends ActivityUnitTestCase<MailAsyncTaskLoaderTest.LoaderTestActivity> { 188887689fa7d6cde21063e723a99ee5801887e705Tony Mantler 198887689fa7d6cde21063e723a99ee5801887e705Tony Mantler public static class LoaderTestActivity extends Activity { 208887689fa7d6cde21063e723a99ee5801887e705Tony Mantler final CountDownLatch loadFinishedLatch = new CountDownLatch(1); 218887689fa7d6cde21063e723a99ee5801887e705Tony Mantler final CountDownLatch resultDiscardedLatch = new CountDownLatch(1); 228887689fa7d6cde21063e723a99ee5801887e705Tony Mantler volatile Object result; 238887689fa7d6cde21063e723a99ee5801887e705Tony Mantler 248887689fa7d6cde21063e723a99ee5801887e705Tony Mantler public void runLoaderTest() { 258887689fa7d6cde21063e723a99ee5801887e705Tony Mantler result = new Object(); 268887689fa7d6cde21063e723a99ee5801887e705Tony Mantler 278887689fa7d6cde21063e723a99ee5801887e705Tony Mantler getLoaderManager().initLoader(0, null, new LoaderManager.LoaderCallbacks<Object>() { 288887689fa7d6cde21063e723a99ee5801887e705Tony Mantler @Override 298887689fa7d6cde21063e723a99ee5801887e705Tony Mantler public Loader<Object> onCreateLoader(int id, Bundle args) { 308887689fa7d6cde21063e723a99ee5801887e705Tony Mantler return new MailAsyncTaskLoader<Object>(LoaderTestActivity.this) { 318887689fa7d6cde21063e723a99ee5801887e705Tony Mantler @Override 328887689fa7d6cde21063e723a99ee5801887e705Tony Mantler protected void onDiscardResult(Object result) { 338887689fa7d6cde21063e723a99ee5801887e705Tony Mantler MailAsyncTaskLoaderTest.assertNotNull(result); 348887689fa7d6cde21063e723a99ee5801887e705Tony Mantler resultDiscardedLatch.countDown(); 358887689fa7d6cde21063e723a99ee5801887e705Tony Mantler } 368887689fa7d6cde21063e723a99ee5801887e705Tony Mantler 378887689fa7d6cde21063e723a99ee5801887e705Tony Mantler @Override 388887689fa7d6cde21063e723a99ee5801887e705Tony Mantler public Object loadInBackground() { 398887689fa7d6cde21063e723a99ee5801887e705Tony Mantler return result; 408887689fa7d6cde21063e723a99ee5801887e705Tony Mantler } 418887689fa7d6cde21063e723a99ee5801887e705Tony Mantler }; 428887689fa7d6cde21063e723a99ee5801887e705Tony Mantler } 438887689fa7d6cde21063e723a99ee5801887e705Tony Mantler 448887689fa7d6cde21063e723a99ee5801887e705Tony Mantler @Override 458887689fa7d6cde21063e723a99ee5801887e705Tony Mantler public void onLoadFinished(Loader<Object> loader, Object data) { 468887689fa7d6cde21063e723a99ee5801887e705Tony Mantler MailAsyncTaskLoaderTest.assertEquals(data, result); 478887689fa7d6cde21063e723a99ee5801887e705Tony Mantler loadFinishedLatch.countDown(); 488887689fa7d6cde21063e723a99ee5801887e705Tony Mantler } 498887689fa7d6cde21063e723a99ee5801887e705Tony Mantler 508887689fa7d6cde21063e723a99ee5801887e705Tony Mantler @Override 518887689fa7d6cde21063e723a99ee5801887e705Tony Mantler public void onLoaderReset(Loader<Object> loader) {} 528887689fa7d6cde21063e723a99ee5801887e705Tony Mantler }); 538887689fa7d6cde21063e723a99ee5801887e705Tony Mantler while (true) { 548887689fa7d6cde21063e723a99ee5801887e705Tony Mantler try { 558887689fa7d6cde21063e723a99ee5801887e705Tony Mantler MailAsyncTaskLoaderTest.assertTrue( 568887689fa7d6cde21063e723a99ee5801887e705Tony Mantler loadFinishedLatch.await(30, TimeUnit.SECONDS)); 578887689fa7d6cde21063e723a99ee5801887e705Tony Mantler } catch (final InterruptedException e) { 588887689fa7d6cde21063e723a99ee5801887e705Tony Mantler continue; 598887689fa7d6cde21063e723a99ee5801887e705Tony Mantler } 608887689fa7d6cde21063e723a99ee5801887e705Tony Mantler break; 618887689fa7d6cde21063e723a99ee5801887e705Tony Mantler } 628887689fa7d6cde21063e723a99ee5801887e705Tony Mantler getLoaderManager().destroyLoader(0); 638887689fa7d6cde21063e723a99ee5801887e705Tony Mantler while (true) { 648887689fa7d6cde21063e723a99ee5801887e705Tony Mantler try { 658887689fa7d6cde21063e723a99ee5801887e705Tony Mantler MailAsyncTaskLoaderTest.assertTrue( 668887689fa7d6cde21063e723a99ee5801887e705Tony Mantler resultDiscardedLatch.await(30, TimeUnit.SECONDS)); 678887689fa7d6cde21063e723a99ee5801887e705Tony Mantler } catch (final InterruptedException e) { 688887689fa7d6cde21063e723a99ee5801887e705Tony Mantler continue; 698887689fa7d6cde21063e723a99ee5801887e705Tony Mantler } 708887689fa7d6cde21063e723a99ee5801887e705Tony Mantler break; 718887689fa7d6cde21063e723a99ee5801887e705Tony Mantler } 728887689fa7d6cde21063e723a99ee5801887e705Tony Mantler } 738887689fa7d6cde21063e723a99ee5801887e705Tony Mantler } 748887689fa7d6cde21063e723a99ee5801887e705Tony Mantler 758887689fa7d6cde21063e723a99ee5801887e705Tony Mantler public MailAsyncTaskLoaderTest() { 768887689fa7d6cde21063e723a99ee5801887e705Tony Mantler super(LoaderTestActivity.class); 778887689fa7d6cde21063e723a99ee5801887e705Tony Mantler } 788887689fa7d6cde21063e723a99ee5801887e705Tony Mantler 798887689fa7d6cde21063e723a99ee5801887e705Tony Mantler @SmallTest 808887689fa7d6cde21063e723a99ee5801887e705Tony Mantler public void testLoader() { 818887689fa7d6cde21063e723a99ee5801887e705Tony Mantler startActivity(new Intent(Intent.ACTION_MAIN), null, null); 828887689fa7d6cde21063e723a99ee5801887e705Tony Mantler getInstrumentation().callActivityOnStart(getActivity()); 838887689fa7d6cde21063e723a99ee5801887e705Tony Mantler getActivity().runLoaderTest(); 848887689fa7d6cde21063e723a99ee5801887e705Tony Mantler } 858887689fa7d6cde21063e723a99ee5801887e705Tony Mantler} 86