• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (C) 2006 The Android Open Source Project
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  *      http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16 
17 package android.app.activity;
18 
19 import android.app.Activity;
20 import android.content.Context;
21 import android.content.Intent;
22 import android.test.AndroidTestCase;
23 import android.test.PerformanceTestCase;
24 
25 public class ActivityTestsBase extends AndroidTestCase
26         implements PerformanceTestCase, LaunchpadActivity.CallingTest {
27     public static final String PERMISSION_GRANTED =
28             "com.android.frameworks.coretests.permission.TEST_GRANTED";
29     public static final String PERMISSION_DENIED =
30             "com.android.frameworks.coretests.permission.TEST_DENIED";
31 
32     protected Intent mIntent;
33 
34     private PerformanceTestCase.Intermediates mIntermediates;
35     private String mExpecting;
36 
37     // Synchronization of activity result.
38     private boolean mFinished;
39     private int mResultCode = 0;
40     private Intent mData;
41     private RuntimeException mResultStack = null;
42 
43     @Override
setUp()44     protected void setUp() throws Exception {
45         super.setUp();
46         mIntent = new Intent(mContext, LaunchpadActivity.class);
47         mIntermediates = null;
48     }
49 
50     @Override
tearDown()51     protected void tearDown() throws Exception {
52         mIntermediates = null;
53         super.tearDown();
54     }
55 
isPerformanceOnly()56     public boolean isPerformanceOnly() {
57         return false;
58     }
59 
setInternalIterations(int count)60     public void setInternalIterations(int count) {
61     }
62 
startTiming(boolean realTime)63     public void startTiming(boolean realTime) {
64         if (mIntermediates != null) {
65             mIntermediates.startTiming(realTime);
66         }
67     }
68 
addIntermediate(String name)69     public void addIntermediate(String name) {
70         if (mIntermediates != null) {
71             mIntermediates.addIntermediate(name);
72         }
73     }
74 
addIntermediate(String name, long timeInNS)75     public void addIntermediate(String name, long timeInNS) {
76         if (mIntermediates != null) {
77             mIntermediates.addIntermediate(name, timeInNS);
78         }
79     }
80 
finishTiming(boolean realTime)81     public void finishTiming(boolean realTime) {
82         if (mIntermediates != null) {
83             mIntermediates.finishTiming(realTime);
84         }
85     }
86 
activityFinished(int resultCode, Intent data, RuntimeException where)87     public void activityFinished(int resultCode, Intent data, RuntimeException where) {
88         finishWithResult(resultCode, data, where);
89     }
90 
editIntent()91     public Intent editIntent() {
92         return mIntent;
93     }
94 
getContext()95     public Context getContext() {
96         return mContext;
97     }
98 
startPerformance(Intermediates intermediates)99     public int startPerformance(Intermediates intermediates) {
100         mIntermediates = intermediates;
101         return 1;
102     }
103 
finishGood()104     public void finishGood() {
105         finishWithResult(Activity.RESULT_OK, null);
106     }
107 
finishBad(String error)108     public void finishBad(String error) {
109         finishWithResult(Activity.RESULT_CANCELED, (new Intent()).setAction(error));
110     }
111 
finishWithResult(int resultCode, Intent data)112     public void finishWithResult(int resultCode, Intent data) {
113         RuntimeException where = new RuntimeException("Original error was here");
114         where.fillInStackTrace();
115         finishWithResult(resultCode, data, where);
116     }
117 
finishWithResult(int resultCode, Intent data, RuntimeException where)118     public void finishWithResult(int resultCode, Intent data, RuntimeException where) {
119         synchronized (this) {
120             //System.out.println("*** Activity finished!!");
121             mResultCode = resultCode;
122             mData = data;
123             mResultStack = where;
124             mFinished = true;
125             notifyAll();
126         }
127     }
128 
runLaunchpad(String action)129     public int runLaunchpad(String action) {
130         LaunchpadActivity.setCallingTest(this);
131 
132         synchronized (this) {
133             mIntent.setAction(action);
134             mFinished = false;
135             //System.out.println("*** Starting: " + mIntent);
136             mIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
137             mContext.startActivity(mIntent);
138         }
139 
140         return waitForResultOrThrow(60 * 1000);
141     }
142 
waitForResultOrThrow(int timeoutMs)143     public int waitForResultOrThrow(int timeoutMs) {
144         return waitForResultOrThrow(timeoutMs, null);
145     }
146 
waitForResultOrThrow(int timeoutMs, String expected)147     public int waitForResultOrThrow(int timeoutMs, String expected) {
148         int res = waitForResult(timeoutMs, expected);
149 
150         if (res == Activity.RESULT_CANCELED) {
151             if (mResultStack != null) {
152                 throw new RuntimeException(
153                         mData != null ? mData.toString() : "Unable to launch",
154                         mResultStack);
155             } else {
156                 throw new RuntimeException(
157                         mData != null ? mData.toString() : "Unable to launch");
158             }
159         }
160         return res;
161     }
162 
waitForResult(int timeoutMs, String expected)163     public int waitForResult(int timeoutMs, String expected) {
164         mExpecting = expected;
165 
166         long endTime = System.currentTimeMillis() + timeoutMs;
167 
168         boolean timeout = false;
169         synchronized (this) {
170             while (!mFinished) {
171                 long delay = endTime - System.currentTimeMillis();
172                 if (delay < 0) {
173                     timeout = true;
174                     break;
175                 }
176 
177                 try {
178                     wait(delay);
179                 } catch (java.lang.InterruptedException e) {
180                     // do nothing
181                 }
182             }
183         }
184 
185         mFinished = false;
186 
187         if (timeout) {
188             mResultCode = Activity.RESULT_CANCELED;
189             onTimeout();
190         }
191         return mResultCode;
192     }
193 
getResultCode()194     public int getResultCode() {
195         return mResultCode;
196     }
197 
getResultData()198     public Intent getResultData() {
199         return mData;
200     }
201 
getResultStack()202     public RuntimeException getResultStack() {
203         return mResultStack;
204     }
205 
onTimeout()206     public void onTimeout() {
207         String msg = mExpecting == null
208                 ? "Timeout" : ("Timeout while expecting " + mExpecting);
209         finishWithResult(Activity.RESULT_CANCELED, (new Intent()).setAction(msg));
210     }
211 }
212 
213