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