1 /*
2  * Copyright (C) 2008 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.test;
18 
19 import android.app.Activity;
20 
21 /**
22  * This class provides functional testing of a single activity.  The activity under test will
23  * be created using the system infrastructure (by calling InstrumentationTestCase.launchActivity())
24  * and you will then be able to manipulate your Activity directly.  Most of the work is handled
25  * automatically here by {@link #setUp} and {@link #tearDown}.
26  *
27  * <p>If you prefer an isolated unit test, see {@link android.test.ActivityUnitTestCase}.
28  *
29  * @deprecated new tests should be written using
30  * {@link android.test.ActivityInstrumentationTestCase2}, which provides more options for
31  * configuring the Activity under test
32  */
33 @Deprecated
34 public abstract class ActivityInstrumentationTestCase<T extends Activity>
35         extends ActivityTestCase {
36     String mPackage;
37     Class<T> mActivityClass;
38     boolean mInitialTouchMode = false;
39 
40     /**
41      * Creates an {@link ActivityInstrumentationTestCase} in non-touch mode.
42      *
43      * @param pkg ignored - no longer in use.
44      * @param activityClass The activity to test. This must be a class in the instrumentation
45      * targetPackage specified in the AndroidManifest.xml
46      */
ActivityInstrumentationTestCase(String pkg, Class<T> activityClass)47     public ActivityInstrumentationTestCase(String pkg, Class<T> activityClass) {
48         this(pkg, activityClass, false);
49     }
50 
51     /**
52      * Creates an {@link ActivityInstrumentationTestCase}.
53      *
54      * @param pkg ignored - no longer in use.
55      * @param activityClass The activity to test. This must be a class in the instrumentation
56      * targetPackage specified in the AndroidManifest.xml
57      * @param initialTouchMode true = in touch mode
58      */
ActivityInstrumentationTestCase(String pkg, Class<T> activityClass, boolean initialTouchMode)59     public ActivityInstrumentationTestCase(String pkg, Class<T> activityClass,
60             boolean initialTouchMode) {
61         mActivityClass = activityClass;
62         mInitialTouchMode = initialTouchMode;
63     }
64 
65     @Override
getActivity()66     public T getActivity() {
67         return (T) super.getActivity();
68     }
69 
70     @Override
setUp()71     protected void setUp() throws Exception {
72         super.setUp();
73         // set initial touch mode
74         getInstrumentation().setInTouchMode(mInitialTouchMode);
75         final String targetPackageName = getInstrumentation().getTargetContext().getPackageName();
76         setActivity(launchActivity(targetPackageName, mActivityClass, null));
77     }
78 
79     @Override
tearDown()80     protected void tearDown() throws Exception {
81         getActivity().finish();
82         setActivity(null);
83 
84         // Scrub out members - protects against memory leaks in the case where someone
85         // creates a non-static inner class (thus referencing the test case) and gives it to
86         // someone else to hold onto
87         scrubClass(ActivityInstrumentationTestCase.class);
88 
89         super.tearDown();
90     }
91 
testActivityTestCaseSetUpProperly()92     public void testActivityTestCaseSetUpProperly() throws Exception {
93         assertNotNull("activity should be launched successfully", getActivity());
94     }
95 }
96