Index: base/android/javatests/src/org/chromium/base/ApiCompatibilityUtilsTest.java |
diff --git a/base/android/javatests/src/org/chromium/base/ApiCompatibilityUtilsTest.java b/base/android/javatests/src/org/chromium/base/ApiCompatibilityUtilsTest.java |
new file mode 100644 |
index 0000000000000000000000000000000000000000..45b3e21150c34b15fd925904c70d96437f418f65 |
--- /dev/null |
+++ b/base/android/javatests/src/org/chromium/base/ApiCompatibilityUtilsTest.java |
@@ -0,0 +1,71 @@ |
+// Copyright 2015 The Chromium Authors. All rights reserved. |
+// Use of this source code is governed by a BSD-style license that can be |
+// found in the LICENSE file. |
+ |
+package org.chromium.base; |
+ |
+import android.annotation.TargetApi; |
+import android.app.Activity; |
+import android.os.Build; |
+import android.os.SystemClock; |
+import android.test.InstrumentationTestCase; |
+import android.test.suitebuilder.annotation.SmallTest; |
+ |
+/** |
+ * Test of ApiCompatibilityUtils |
+ */ |
+public class ApiCompatibilityUtilsTest extends InstrumentationTestCase { |
+ private static final long WAIT_TIMEOUT_IN_MS = 5000; |
+ private static final long SLEEP_INTERVAL_IN_MS = 50; |
+ |
+ static class MockActivity extends Activity { |
+ int mFinishAndRemoveTaskCallbackCount; |
+ int mFinishCallbackCount; |
+ boolean mIsFinishing; |
+ |
+ @TargetApi(Build.VERSION_CODES.LOLLIPOP) |
+ @Override |
+ public void finishAndRemoveTask() { |
+ mFinishAndRemoveTaskCallbackCount++; |
+ if (Build.VERSION.SDK_INT > Build.VERSION_CODES.LOLLIPOP) mIsFinishing = true; |
+ } |
+ |
+ @Override |
+ public void finish() { |
+ mFinishCallbackCount++; |
+ mIsFinishing = true; |
+ } |
+ |
+ @Override |
+ public boolean isFinishing() { |
+ return mIsFinishing; |
+ } |
+ } |
+ |
+ @SmallTest |
+ public void testFinishAndRemoveTask() throws InterruptedException { |
+ MockActivity activity = new MockActivity(); |
+ ApiCompatibilityUtils.finishAndRemoveTask(activity); |
+ |
+ if (Build.VERSION.SDK_INT > Build.VERSION_CODES.LOLLIPOP) { |
+ assertEquals(1, activity.mFinishAndRemoveTaskCallbackCount); |
+ assertEquals(0, activity.mFinishCallbackCount); |
+ } else if (Build.VERSION.SDK_INT == Build.VERSION_CODES.LOLLIPOP) { |
+ long startTime = SystemClock.uptimeMillis(); |
+ while (activity.mFinishCallbackCount == 0 |
+ && SystemClock.uptimeMillis() - startTime < WAIT_TIMEOUT_IN_MS) { |
+ Thread.sleep(SLEEP_INTERVAL_IN_MS); |
+ } |
+ |
+ // MockActivity#finishAndRemoveTask() never sets isFinishing() to true for LOLLIPOP to |
+ // simulate an exceptional case. In that case, MockActivity#finish() should be called |
+ // after 3 tries. |
+ assertEquals(3, activity.mFinishAndRemoveTaskCallbackCount); |
+ assertEquals(1, activity.mFinishCallbackCount); |
+ } else { |
+ assertEquals(0, activity.mFinishAndRemoveTaskCallbackCount); |
+ assertEquals(1, activity.mFinishCallbackCount); |
+ } |
+ assertTrue(activity.mIsFinishing); |
+ } |
+} |