summaryrefslogtreecommitdiffstats
path: root/tests
diff options
context:
space:
mode:
authorJeff Sharkey <jsharkey@android.com>2012-07-24 17:42:25 -0700
committerJeff Sharkey <jsharkey@android.com>2012-07-24 17:45:41 -0700
commit36612d27b67ff2e79ffff8eb12d95d2058abde02 (patch)
treeddfc011a999b8f16c6a39b69832e9efa956e9d98 /tests
parent8bf3f8c68bf2c617a07a63756481f73ec4d1d466 (diff)
downloadandroid_packages_providers_DownloadProvider-36612d27b67ff2e79ffff8eb12d95d2058abde02.zip
android_packages_providers_DownloadProvider-36612d27b67ff2e79ffff8eb12d95d2058abde02.tar.gz
android_packages_providers_DownloadProvider-36612d27b67ff2e79ffff8eb12d95d2058abde02.tar.bz2
Move notification tests to LittleMock.
Directly mock NotificationManager instead of using SystemFacade. Change-Id: If932d26e23816e8674469c275a828701cce5fc2d
Diffstat (limited to 'tests')
-rw-r--r--tests/Android.mk2
-rw-r--r--tests/src/com/android/providers/downloads/AbstractDownloadProviderFunctionalTest.java28
-rw-r--r--tests/src/com/android/providers/downloads/FakeSystemFacade.java29
-rw-r--r--tests/src/com/android/providers/downloads/PublicApiFunctionalTest.java56
4 files changed, 58 insertions, 57 deletions
diff --git a/tests/Android.mk b/tests/Android.mk
index aaf32ba..ff3e1d4 100644
--- a/tests/Android.mk
+++ b/tests/Android.mk
@@ -8,7 +8,7 @@ LOCAL_MODULE_TAGS := tests
LOCAL_SRC_FILES := $(call all-java-files-under, src)
LOCAL_INSTRUMENTATION_FOR := DownloadProvider
LOCAL_JAVA_LIBRARIES := android.test.runner
-LOCAL_STATIC_JAVA_LIBRARIES := mockwebserver
+LOCAL_STATIC_JAVA_LIBRARIES := mockwebserver littlemock dexmaker
LOCAL_PACKAGE_NAME := DownloadProviderTests
LOCAL_CERTIFICATE := media
diff --git a/tests/src/com/android/providers/downloads/AbstractDownloadProviderFunctionalTest.java b/tests/src/com/android/providers/downloads/AbstractDownloadProviderFunctionalTest.java
index 1912e84..a65693f 100644
--- a/tests/src/com/android/providers/downloads/AbstractDownloadProviderFunctionalTest.java
+++ b/tests/src/com/android/providers/downloads/AbstractDownloadProviderFunctionalTest.java
@@ -16,6 +16,9 @@
package com.android.providers.downloads;
+import static com.google.testing.littlemock.LittleMock.mock;
+
+import android.app.NotificationManager;
import android.content.ComponentName;
import android.content.ContentResolver;
import android.content.Context;
@@ -42,9 +45,6 @@ import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.MalformedURLException;
import java.net.UnknownHostException;
-import java.util.Arrays;
-import java.util.HashSet;
-import java.util.Set;
public abstract class AbstractDownloadProviderFunctionalTest extends
ServiceTestCase<DownloadService> {
@@ -94,19 +94,14 @@ public abstract class AbstractDownloadProviderFunctionalTest extends
static class TestContext extends RenamingDelegatingContext {
private static final String FILENAME_PREFIX = "test.";
- private Context mRealContext;
- private Set<String> mAllowedSystemServices;
private ContentResolver mResolver;
+ private final NotificationManager mNotifManager;
boolean mHasServiceBeenStarted = false;
public TestContext(Context realContext) {
super(realContext, FILENAME_PREFIX);
- mRealContext = realContext;
- mAllowedSystemServices = new HashSet<String>(Arrays.asList(new String[] {
- Context.NOTIFICATION_SERVICE,
- Context.POWER_SERVICE,
- }));
+ mNotifManager = mock(NotificationManager.class);
}
public void setResolver(ContentResolver resolver) {
@@ -118,7 +113,6 @@ public abstract class AbstractDownloadProviderFunctionalTest extends
*/
@Override
public ContentResolver getContentResolver() {
- assert mResolver != null;
return mResolver;
}
@@ -127,9 +121,10 @@ public abstract class AbstractDownloadProviderFunctionalTest extends
*/
@Override
public Object getSystemService(String name) {
- if (mAllowedSystemServices.contains(name)) {
- return mRealContext.getSystemService(name);
+ if (Context.NOTIFICATION_SERVICE.equals(name)) {
+ return mNotifManager;
}
+
return super.getSystemService(name);
}
@@ -155,10 +150,13 @@ public abstract class AbstractDownloadProviderFunctionalTest extends
protected void setUp() throws Exception {
super.setUp();
- Context realContext = getContext();
+ // Since we're testing a system app, AppDataDirGuesser doesn't find our
+ // cache dir, so set it explicitly.
+ System.setProperty("dexmaker.dexcache", getContext().getCacheDir().toString());
+
+ final Context realContext = getContext();
mTestContext = new TestContext(realContext);
setupProviderAndResolver();
-
mTestContext.setResolver(mResolver);
setContext(mTestContext);
setupService();
diff --git a/tests/src/com/android/providers/downloads/FakeSystemFacade.java b/tests/src/com/android/providers/downloads/FakeSystemFacade.java
index c184de8..6898efd 100644
--- a/tests/src/com/android/providers/downloads/FakeSystemFacade.java
+++ b/tests/src/com/android/providers/downloads/FakeSystemFacade.java
@@ -1,17 +1,13 @@
package com.android.providers.downloads;
-import android.app.Notification;
import android.content.Intent;
import android.content.pm.PackageManager.NameNotFoundException;
import android.net.ConnectivityManager;
import android.net.NetworkInfo;
-import android.test.AssertionFailedError;
import java.util.ArrayList;
-import java.util.HashMap;
import java.util.LinkedList;
import java.util.List;
-import java.util.Map;
import java.util.Queue;
public class FakeSystemFacade implements SystemFacade {
@@ -22,8 +18,6 @@ public class FakeSystemFacade implements SystemFacade {
Long mMaxBytesOverMobile = null;
Long mRecommendedMaxBytesOverMobile = null;
List<Intent> mBroadcastsSent = new ArrayList<Intent>();
- Map<Long,Notification> mActiveNotifications = new HashMap<Long,Notification>();
- List<Notification> mCanceledNotifications = new ArrayList<Notification>();
Queue<Thread> mStartedThreads = new LinkedList<Thread>();
private boolean returnActualTime = false;
@@ -73,29 +67,6 @@ public class FakeSystemFacade implements SystemFacade {
return true;
}
- @Override
- public void postNotification(long id, Notification notification) {
- if (notification == null) {
- throw new AssertionFailedError("Posting null notification");
- }
- mActiveNotifications.put(id, notification);
- }
-
- @Override
- public void cancelNotification(long id) {
- Notification notification = mActiveNotifications.remove(id);
- if (notification != null) {
- mCanceledNotifications.add(notification);
- }
- }
-
- @Override
- public void cancelAllNotifications() {
- for (long id : mActiveNotifications.keySet()) {
- cancelNotification(id);
- }
- }
-
public boolean startThreadsWithoutWaiting = false;
public void setStartThreadsWithoutWaiting(boolean flag) {
this.startThreadsWithoutWaiting = flag;
diff --git a/tests/src/com/android/providers/downloads/PublicApiFunctionalTest.java b/tests/src/com/android/providers/downloads/PublicApiFunctionalTest.java
index 2f5282a..34a69df 100644
--- a/tests/src/com/android/providers/downloads/PublicApiFunctionalTest.java
+++ b/tests/src/com/android/providers/downloads/PublicApiFunctionalTest.java
@@ -16,7 +16,17 @@
package com.android.providers.downloads;
+import static com.google.testing.littlemock.LittleMock.anyInt;
+import static com.google.testing.littlemock.LittleMock.atLeastOnce;
+import static com.google.testing.littlemock.LittleMock.isA;
+import static com.google.testing.littlemock.LittleMock.never;
+import static com.google.testing.littlemock.LittleMock.times;
+import static com.google.testing.littlemock.LittleMock.verify;
+
import android.app.DownloadManager;
+import android.app.Notification;
+import android.app.NotificationManager;
+import android.content.Context;
import android.content.Intent;
import android.database.Cursor;
import android.net.ConnectivityManager;
@@ -24,7 +34,6 @@ import android.net.Uri;
import android.os.Environment;
import android.provider.Downloads;
import android.test.suitebuilder.annotation.LargeTest;
-import android.util.Log;
import com.google.mockwebserver.MockResponse;
import com.google.mockwebserver.RecordedRequest;
@@ -37,12 +46,14 @@ import java.io.InputStream;
import java.net.MalformedURLException;
import java.util.List;
+
@LargeTest
public class PublicApiFunctionalTest extends AbstractPublicApiTest {
private static final String REDIRECTED_PATH = "/other_path";
private static final String ETAG = "my_etag";
protected File mTestDirectory;
+ private NotificationManager mNotifManager;
public PublicApiFunctionalTest() {
super(new FakeSystemFacade());
@@ -52,6 +63,9 @@ public class PublicApiFunctionalTest extends AbstractPublicApiTest {
protected void setUp() throws Exception {
super.setUp();
+ mNotifManager = (NotificationManager) getContext()
+ .getSystemService(Context.NOTIFICATION_SERVICE);
+
mTestDirectory = new File(Environment.getExternalStorageDirectory() + File.separator
+ "download_manager_functional_test");
if (mTestDirectory.exists()) {
@@ -501,24 +515,42 @@ public class PublicApiFunctionalTest extends AbstractPublicApiTest {
assertTrue(mResolver.mNotifyWasCalled);
}
- public void testNotifications() throws Exception {
- enqueueResponse(buildEmptyResponse(HTTP_OK));
+ public void testNotificationNever() throws Exception {
enqueueResponse(buildEmptyResponse(HTTP_OK));
- Download download = enqueueRequest(getRequest().setShowRunningNotification(false));
+ final Download download = enqueueRequest(
+ getRequest().setNotificationVisibility(DownloadManager.Request.VISIBILITY_HIDDEN));
download.runUntilStatus(DownloadManager.STATUS_SUCCESSFUL);
- assertEquals(0, mSystemFacade.mActiveNotifications.size());
- assertEquals(0, mSystemFacade.mCanceledNotifications.size());
+ runService();
+
+ verify(mNotifManager, never()).notify(anyInt(), isA(Notification.class));
+ // TODO: verify that it never cancels
+ }
+
+ public void testNotificationVisible() throws Exception {
+ enqueueResponse(buildEmptyResponse(HTTP_OK));
- download = enqueueRequest(getRequest()); // notifications by default
+ // only shows in-progress notifications
+ final Download download = enqueueRequest(getRequest());
download.runUntilStatus(DownloadManager.STATUS_SUCCESSFUL);
- assertEquals(1, mSystemFacade.mActiveNotifications.size());
+ runService();
+
+ // TODO: verify different notif types with tags
+ verify(mNotifManager, atLeastOnce()).notify(anyInt(), isA(Notification.class));
+ verify(mNotifManager, times(1)).cancel(anyInt());
+ }
- // The notification doesn't actually get canceled until the UpdateThread runs again, which
- // gets triggered by the DownloadThread updating the status in the provider.
+ public void testNotificationVisibleComplete() throws Exception {
+ enqueueResponse(buildEmptyResponse(HTTP_OK));
+
+ final Download download = enqueueRequest(getRequest().setNotificationVisibility(
+ DownloadManager.Request.VISIBILITY_VISIBLE_NOTIFY_COMPLETED));
+ download.runUntilStatus(DownloadManager.STATUS_SUCCESSFUL);
runService();
- assertEquals(0, mSystemFacade.mActiveNotifications.size());
- assertEquals(1, mSystemFacade.mCanceledNotifications.size());
+
+ // TODO: verify different notif types with tags
+ verify(mNotifManager, atLeastOnce()).notify(anyInt(), isA(Notification.class));
+ verify(mNotifManager, times(1)).cancel(anyInt());
}
public void testRetryAfter() throws Exception {