From 0e88af05305daa2276c91c7dea1461d7b6549f65 Mon Sep 17 00:00:00 2001 From: Wu-cheng Li Date: Wed, 1 Sep 2010 09:05:37 -0700 Subject: Add the test for activity leak. bug:2949181 Change-Id: I3a804f360611d8195ff5a9dc5046ad75789329b3 --- .../com/android/camera/functional/CameraTest.java | 37 ++++++++++++++++++++++ 1 file changed, 37 insertions(+) (limited to 'tests/src/com') 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> refs = + new ArrayList>(); + for (int i = 0; i < TEST_COUNT; i++) { + Activity activity = getInstrumentation().startActivitySync(intent); + refs.add(new WeakReference(activity)); + activity.finish(); + getInstrumentation().waitForIdleSync(); + activity = null; + } + Runtime.getRuntime().gc(); + Runtime.getRuntime().runFinalization(); + Runtime.getRuntime().gc(); + int refCount = 0; + for (WeakReference c: refs) { + if (c.get() != null) refCount++; + } + // If applications are leaking activity, every reference is reachable. + assertTrue(refCount != TEST_COUNT); + } } -- cgit v1.1