summaryrefslogtreecommitdiffstats
path: root/tests/src/com/android/camera/functional/CameraTest.java
diff options
context:
space:
mode:
Diffstat (limited to 'tests/src/com/android/camera/functional/CameraTest.java')
-rw-r--r--tests/src/com/android/camera/functional/CameraTest.java37
1 files changed, 37 insertions, 0 deletions
diff --git a/tests/src/com/android/camera/functional/CameraTest.java b/tests/src/com/android/camera/functional/CameraTest.java
index 9eca03e..bf0bb64 100644
--- a/tests/src/com/android/camera/functional/CameraTest.java
+++ b/tests/src/com/android/camera/functional/CameraTest.java
@@ -1,5 +1,6 @@
package com.android.camera.functional;
+import android.app.Activity;
import android.content.Intent;
import android.net.Uri;
import android.os.Environment;
@@ -7,11 +8,16 @@ import android.os.Process;
import android.provider.MediaStore;
import android.test.InstrumentationTestCase;
import android.test.suitebuilder.annotation.LargeTest;
+import android.util.Log;
import java.io.File;
+import java.lang.ref.WeakReference;
+import java.util.ArrayList;
public class CameraTest extends InstrumentationTestCase {
+ private static final String TAG = "CameraTest";
private static final String CAMERA_PACKAGE = "com.google.android.camera";
+ private static final String CAMERA_ACTIVITY = "com.android.camera.Camera";
private static final String CAMCORDER_ACTIVITY = "com.android.camera.VideoCamera";
@LargeTest
@@ -28,4 +34,35 @@ public class CameraTest extends InstrumentationTestCase {
assertEquals(-1, f.getCanonicalPath().indexOf("test_fd_leak.3gp"));
}
}
+
+ @LargeTest
+ public void testActivityLeak() throws Exception {
+ checkActivityLeak(CAMERA_ACTIVITY);
+ checkActivityLeak(CAMCORDER_ACTIVITY);
+ }
+
+ private void checkActivityLeak(String activityName) throws Exception {
+ final int TEST_COUNT = 5;
+ Intent intent = new Intent();
+ intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
+ intent.setClassName(CAMERA_PACKAGE, activityName);
+ ArrayList<WeakReference<Activity>> refs =
+ new ArrayList<WeakReference<Activity>>();
+ for (int i = 0; i < TEST_COUNT; i++) {
+ Activity activity = getInstrumentation().startActivitySync(intent);
+ refs.add(new WeakReference<Activity>(activity));
+ activity.finish();
+ getInstrumentation().waitForIdleSync();
+ activity = null;
+ }
+ Runtime.getRuntime().gc();
+ Runtime.getRuntime().runFinalization();
+ Runtime.getRuntime().gc();
+ int refCount = 0;
+ for (WeakReference<Activity> c: refs) {
+ if (c.get() != null) refCount++;
+ }
+ // If applications are leaking activity, every reference is reachable.
+ assertTrue(refCount != TEST_COUNT);
+ }
}