• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 // Copyright 2015 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4 
5 package org.chromium.base;
6 
7 import android.annotation.TargetApi;
8 import android.app.Activity;
9 import android.os.Build;
10 import android.os.SystemClock;
11 import android.test.InstrumentationTestCase;
12 import android.test.suitebuilder.annotation.SmallTest;
13 
14 /**
15  * Test of ApiCompatibilityUtils
16  */
17 public class ApiCompatibilityUtilsTest extends InstrumentationTestCase {
18     private static final long WAIT_TIMEOUT_IN_MS = 5000;
19     private static final long SLEEP_INTERVAL_IN_MS = 50;
20 
21     static class MockActivity extends Activity {
22         int mFinishAndRemoveTaskCallbackCount;
23         int mFinishCallbackCount;
24         boolean mIsFinishing;
25 
26         @TargetApi(Build.VERSION_CODES.LOLLIPOP)
27         @Override
finishAndRemoveTask()28         public void finishAndRemoveTask() {
29             mFinishAndRemoveTaskCallbackCount++;
30             if (Build.VERSION.SDK_INT > Build.VERSION_CODES.LOLLIPOP) mIsFinishing = true;
31         }
32 
33         @Override
finish()34         public void finish() {
35             mFinishCallbackCount++;
36             mIsFinishing = true;
37         }
38 
39         @Override
isFinishing()40         public boolean isFinishing() {
41             return mIsFinishing;
42         }
43     }
44 
45     @SmallTest
testFinishAndRemoveTask()46     public void testFinishAndRemoveTask() throws InterruptedException {
47         MockActivity activity = new MockActivity();
48         ApiCompatibilityUtils.finishAndRemoveTask(activity);
49 
50         if (Build.VERSION.SDK_INT > Build.VERSION_CODES.LOLLIPOP) {
51             assertEquals(1, activity.mFinishAndRemoveTaskCallbackCount);
52             assertEquals(0, activity.mFinishCallbackCount);
53         } else if (Build.VERSION.SDK_INT == Build.VERSION_CODES.LOLLIPOP) {
54             long startTime = SystemClock.uptimeMillis();
55             while (activity.mFinishCallbackCount == 0
56                     && SystemClock.uptimeMillis() - startTime < WAIT_TIMEOUT_IN_MS) {
57                 Thread.sleep(SLEEP_INTERVAL_IN_MS);
58             }
59 
60             // MockActivity#finishAndRemoveTask() never sets isFinishing() to true for LOLLIPOP to
61             // simulate an exceptional case. In that case, MockActivity#finish() should be called
62             // after 3 tries.
63             assertEquals(3, activity.mFinishAndRemoveTaskCallbackCount);
64             assertEquals(1, activity.mFinishCallbackCount);
65         } else {
66             assertEquals(0, activity.mFinishAndRemoveTaskCallbackCount);
67             assertEquals(1, activity.mFinishCallbackCount);
68         }
69         assertTrue(activity.mIsFinishing);
70     }
71 }
72