diff options
author | Wu-cheng Li <wuchengli@google.com> | 2010-09-08 11:48:27 -0700 |
---|---|---|
committer | Android (Google) Code Review <android-gerrit@google.com> | 2010-09-08 11:48:27 -0700 |
commit | 10b93066fee33db02a3f7d37d821e6c40c71ecc4 (patch) | |
tree | 9680bd7d95b3ea06b9fdb4a2d00d600e8f15c195 | |
parent | 4714a1cf1d211aad2d8cf1802f85f649e744beb0 (diff) | |
parent | 0e88af05305daa2276c91c7dea1461d7b6549f65 (diff) | |
download | LegacyCamera-10b93066fee33db02a3f7d37d821e6c40c71ecc4.zip LegacyCamera-10b93066fee33db02a3f7d37d821e6c40c71ecc4.tar.gz LegacyCamera-10b93066fee33db02a3f7d37d821e6c40c71ecc4.tar.bz2 |
Merge "Add the test for activity leak." into gingerbread
-rw-r--r-- | tests/src/com/android/camera/functional/CameraTest.java | 37 |
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); + } } |