package com.uphyca.testing; import org.junit.After; import org.junit.Before; import android.app.Activity; import android.app.Instrumentation; import android.content.Intent; import com.uphyca.testing.app.RobolectricInstrumentation; public abstract class ActivityInstrumentationTestCase2<T extends Activity> extends ActivityTestCase { private final Class<T> mActivityClass; private Instrumentation mInstrumentation; private Intent mActivityIntent; private boolean mInitialTouchMode; public ActivityInstrumentationTestCase2(Class<T> mActivityClass) { this.mActivityClass = mActivityClass; injectInstrumentation(new RobolectricInstrumentation()); } @Before @Override public void setUp() throws Exception { super.setUp(); mInitialTouchMode = false; mActivityIntent = null; } @After @Override public void tearDown() throws Exception { // Finish the Activity off (unless was never launched anyway) Activity a = super.getActivity(); if (a != null) { a.finish(); setActivity(null); } // Scrub out members - protects against memory leaks in the case where // someone // creates a non-static inner class (thus referencing the test case) and // gives it to // someone else to hold onto scrubClass(ActivityInstrumentationTestCase2.class); super.tearDown(); } /** * @param instrumentation * @see android.test.InstrumentationTestCase#injectInstrumentation(android.app.Instrumentation) */ public void injectInstrumentation(Instrumentation instrumentation) { mInstrumentation = instrumentation; } /** * @param instrumentation * @deprecated * @see android.test.InstrumentationTestCase#injectInsrumentation(android.app.Instrumentation) */ public void injectInsrumentation(Instrumentation instrumentation) { injectInstrumentation(instrumentation); } /** * @return * @see android.test.InstrumentationTestCase#getInstrumentation() */ public Instrumentation getInstrumentation() { return mInstrumentation; } /** * @param i * @see android.test.ActivityInstrumentationTestCase2#setActivityIntent(android.content.Intent) */ public void setActivityIntent(Intent i) { mActivityIntent = i; } @SuppressWarnings("unchecked") @Override protected T getActivity() { Activity a = super.getActivity(); if (a == null) { // set initial touch mode getInstrumentation().setInTouchMode(mInitialTouchMode); final String targetPackage = getInstrumentation().getTargetContext() .getPackageName(); // inject custom intent, if provided if (mActivityIntent == null) { a = launchActivity(targetPackage, mActivityClass, null); } else { a = launchActivityWithIntent(targetPackage, mActivityClass, mActivityIntent); } setActivity(a); } return (T) a; } /** * @param initialTouchMode * @see android.test.ActivityInstrumentationTestCase2#setActivityInitialTouchMode(boolean) */ public void setActivityInitialTouchMode(boolean initialTouchMode) { mInitialTouchMode = initialTouchMode; } /** * @param r * @throws Throwable * @see android.test.InstrumentationTestCase#runTestOnUiThread(java.lang.Runnable) */ public void runTestOnUiThread(Runnable r) throws Throwable { r.run(); } /** * @param keysSequence * @see android.test.InstrumentationTestCase#sendKeys(java.lang.String) */ public void sendKeys(String keysSequence) { } /** * @param keys * @see android.test.InstrumentationTestCase#sendKeys(int[]) */ public void sendKeys(int... keys) { } /** * @param keys * @see android.test.InstrumentationTestCase#sendRepeatedKeys(int[]) */ public void sendRepeatedKeys(int... keys) { } }