Fixing a broken test
Change-Id: Icced148d376a1e6cd8e810be72b208fa25021b4a
diff --git a/src/com/android/contacts/list/ContactEntryListFragment.java b/src/com/android/contacts/list/ContactEntryListFragment.java
index 60b5bb1..ae63791 100644
--- a/src/com/android/contacts/list/ContactEntryListFragment.java
+++ b/src/com/android/contacts/list/ContactEntryListFragment.java
@@ -136,6 +136,8 @@
private Context mContext;
+ private LoaderManager mLoaderManager;
+
protected abstract View inflateView(LayoutInflater inflater, ViewGroup container);
protected abstract T createListAdapter();
@@ -150,6 +152,7 @@
public void onAttach(Activity activity) {
super.onAttach(activity);
setContext(activity);
+ setLoaderManager(super.getLoaderManager());
}
/**
@@ -164,6 +167,18 @@
return mContext;
}
+ /**
+ * Overrides a loader manager for use in unit tests.
+ */
+ public void setLoaderManager(LoaderManager loaderManager) {
+ mLoaderManager = loaderManager;
+ }
+
+ @Override
+ public LoaderManager getLoaderManager() {
+ return mLoaderManager;
+ }
+
public T getAdapter() {
return mAdapter;
}
diff --git a/src/com/android/contacts/widget/InstrumentedLoaderManagingFragment.java b/src/com/android/contacts/widget/InstrumentedLoaderManagingFragment.java
deleted file mode 100644
index af72389..0000000
--- a/src/com/android/contacts/widget/InstrumentedLoaderManagingFragment.java
+++ /dev/null
@@ -1,50 +0,0 @@
-/*
- * 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.contacts.widget;
-
-import android.app.Fragment;
-import android.app.LoaderManagingFragment;
-import android.content.Loader;
-import android.os.Bundle;
-
-/**
- * A modification of the {@link LoaderManagingFragment} class that supports testing of
- * loader-based fragments using synchronous data loading.
- */
-public abstract class InstrumentedLoaderManagingFragment<D> extends Fragment {
-
- public interface Delegate<D> {
- void onStartLoading(Loader<D> loader);
- }
-
- private Delegate<D> mDelegate;
-
- public void setDelegate(Delegate<D> listener) {
- this.mDelegate = listener;
- }
-
-// public Loader<D> startLoading(int id, Bundle args) {
-// getLoaderManager().initLoader(id, args, callback);
-// if (mDelegate != null) {
-// Loader<D> loader = onCreateLoader(id, args);
-// loader.registerListener(id, this);
-// mDelegate.onStartLoading(loader);
-// return loader;
-// } else {
-// return super.startLoading(id, args);
-// }
-// }
-}
diff --git a/tests/src/com/android/contacts/DefaultContactBrowseListFragmentTest.java b/tests/src/com/android/contacts/DefaultContactBrowseListFragmentTest.java
index 40607bf..8ad3cb9 100644
--- a/tests/src/com/android/contacts/DefaultContactBrowseListFragmentTest.java
+++ b/tests/src/com/android/contacts/DefaultContactBrowseListFragmentTest.java
@@ -19,15 +19,15 @@
import com.android.contacts.list.DefaultContactBrowseListFragment;
import com.android.contacts.tests.mocks.ContactsMockContext;
import com.android.contacts.tests.mocks.MockContentProvider;
-import com.android.contacts.widget.LoaderManagingFragmentTestDelegate;
+import com.android.contacts.widget.TestLoaderManager;
import android.database.Cursor;
import android.provider.ContactsContract;
-import android.provider.Settings;
import android.provider.ContactsContract.ContactCounts;
import android.provider.ContactsContract.Contacts;
import android.provider.ContactsContract.ProviderStatus;
import android.provider.ContactsContract.StatusUpdates;
+import android.provider.Settings;
import android.test.InstrumentationTestCase;
import android.test.suitebuilder.annotation.Smoke;
import android.view.LayoutInflater;
@@ -101,11 +101,11 @@
DefaultContactBrowseListFragment fragment = new DefaultContactBrowseListFragment();
- LoaderManagingFragmentTestDelegate<Cursor> delegate =
- new LoaderManagingFragmentTestDelegate<Cursor>();
+ TestLoaderManager loaderManager = new TestLoaderManager();
- // Divert loader registration to the delegate to ensure that loading is done synchronously
-// fragment.setDelegate(delegate);
+ // Divert loader registration the TestLoaderManager to ensure that loading is
+ // done synchronously
+ fragment.setLoaderManager(loaderManager);
// Fragment life cycle
fragment.onCreate(null);
@@ -121,7 +121,7 @@
fragment.onStart();
// All loaders have been registered. Now perform the loading synchronously.
- delegate.executeLoaders();
+ loaderManager.executeLoaders();
// Now we can assert that the data got loaded into the list.
ListView listView = (ListView)view.findViewById(android.R.id.list);
diff --git a/tests/src/com/android/contacts/widget/LoaderManagingFragmentTestDelegate.java b/tests/src/com/android/contacts/widget/LoaderManagingFragmentTestDelegate.java
deleted file mode 100644
index 353bfc7..0000000
--- a/tests/src/com/android/contacts/widget/LoaderManagingFragmentTestDelegate.java
+++ /dev/null
@@ -1,56 +0,0 @@
-// Copyright 2010 Google Inc. All Rights Reserved.
-
-package com.android.contacts.widget;
-
-import android.content.AsyncTaskLoader;
-import android.content.Loader;
-
-import java.util.LinkedHashMap;
-
-import junit.framework.Assert;
-
-/**
- * A delegate of {@link InstrumentedLoaderManagingFragment} that performs
- * synchronous loading on demand for unit testing.
- */
-public class LoaderManagingFragmentTestDelegate<D> {
-
- // Using a linked hash map to get all loading done in a predictable order.
- private LinkedHashMap<Integer, Loader<D>> mStartedLoaders =
- new LinkedHashMap<Integer, Loader<D>>();
-
- public void onStartLoading(Loader<D> loader) {
- int id = loader.getId();
- mStartedLoaders.put(id, loader);
- }
-
- /**
- * Synchronously runs all started loaders.
- */
- public void executeLoaders() {
- for (Loader<D> loader : mStartedLoaders.values()) {
- executeLoader(loader);
- }
- }
-
- /**
- * Synchronously runs the specified loader.
- */
- public void executeLoader(int id) {
- Loader<D> loader = mStartedLoaders.get(id);
- if (loader == null) {
- Assert.fail("Loader not started: " + id);
- }
- executeLoader(loader);
- }
-
- private void executeLoader(Loader<D> loader) {
- if (loader instanceof AsyncTaskLoader) {
- AsyncTaskLoader<D> atLoader = (AsyncTaskLoader<D>)loader;
- D data = atLoader.loadInBackground();
- atLoader.deliverResult(data);
- } else {
- loader.forceLoad();
- }
- }
-}
\ No newline at end of file
diff --git a/tests/src/com/android/contacts/widget/TestLoaderManager.java b/tests/src/com/android/contacts/widget/TestLoaderManager.java
new file mode 100644
index 0000000..7d292ae
--- /dev/null
+++ b/tests/src/com/android/contacts/widget/TestLoaderManager.java
@@ -0,0 +1,85 @@
+// Copyright 2010 Google Inc. All Rights Reserved.
+
+package com.android.contacts.widget;
+
+import android.app.LoaderManager;
+import android.content.AsyncTaskLoader;
+import android.content.Loader;
+import android.content.Loader.OnLoadCompleteListener;
+import android.os.Bundle;
+
+import java.util.LinkedHashMap;
+
+import junit.framework.Assert;
+
+/**
+ * A {@link LoaderManager} that performs synchronous loading on demand for unit
+ * testing.
+ */
+public class TestLoaderManager implements LoaderManager {
+
+ // Using a linked hash map to get all loading done in a predictable order.
+ private LinkedHashMap<Integer, Loader<?>> mStartedLoaders = new LinkedHashMap<
+ Integer, Loader<?>>();
+
+ @Override
+ @SuppressWarnings("unchecked")
+ public <D> Loader<D> getLoader(int id) {
+ return (Loader<D>)mStartedLoaders.get(id);
+ }
+
+ @Override
+ public <D> Loader<D> initLoader(int id, Bundle args, final LoaderCallbacks<D> callbacks) {
+ Loader<D> loader = callbacks.onCreateLoader(id, args);
+ loader.registerListener(id, new OnLoadCompleteListener<D>() {
+ @Override
+ public void onLoadComplete(Loader<D> loader, D data) {
+ callbacks.onLoadFinished(loader, data);
+ }
+ });
+
+ mStartedLoaders.put(id, loader);
+ return loader;
+ }
+
+ @Override
+ public <D> Loader<D> restartLoader(int id, Bundle args, LoaderCallbacks<D> callbacks) {
+ return initLoader(id, args, callbacks);
+ }
+
+ @Override
+ public void stopLoader(int id) {
+ mStartedLoaders.get(id).stopLoading();
+ }
+
+ /**
+ * Synchronously runs all started loaders.
+ */
+ public void executeLoaders() {
+ for (Loader<?> loader : mStartedLoaders.values()) {
+ executeLoader(loader);
+ }
+ }
+
+ /**
+ * Synchronously runs the specified loader.
+ */
+ public void executeLoader(int id) {
+ Loader<?> loader = mStartedLoaders.get(id);
+ if (loader == null) {
+ Assert.fail("Loader not started: " + id);
+ }
+ executeLoader(loader);
+ }
+
+ @SuppressWarnings("unchecked")
+ private <D> void executeLoader(final Loader<D> loader) {
+ if (loader instanceof AsyncTaskLoader) {
+ AsyncTaskLoader<D> atLoader = (AsyncTaskLoader<D>)loader;
+ D data = atLoader.loadInBackground();
+ loader.deliverResult(data);
+ } else {
+ loader.forceLoad();
+ }
+ }
+}