19066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project/*
29066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Copyright (C) 2007 The Android Open Source Project
39066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project *
49066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Licensed under the Apache License, Version 2.0 (the "License");
59066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * you may not use this file except in compliance with the License.
69066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * You may obtain a copy of the License at
79066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project *
89066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project *      http://www.apache.org/licenses/LICENSE-2.0
99066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project *
109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Unless required by applicable law or agreed to in writing, software
119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS,
129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * See the License for the specific language governing permissions and
149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * limitations under the License.
159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */
169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectpackage android.test;
189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.app.Instrumentation;
209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.content.Context;
21ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang
228c5a24d16926fb14f407ba51026f9a5b973b2e01Paul Duffinimport java.util.ArrayList;
239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport junit.framework.Test;
249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport junit.framework.TestCase;
259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport junit.framework.TestListener;
269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport junit.framework.TestResult;
279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport junit.framework.TestSuite;
289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport junit.runner.BaseTestRunner;
299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
3087571b75e6560d33b8de7ca04801612a20a04d98Brian Muramatsuimport java.lang.reflect.Constructor;
319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport java.lang.reflect.InvocationTargetException;
329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport java.util.List;
339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
34b51617f4668ef8cf0e6d8d0fc3284eae51dbd8caStephan Linzner/**
35b51617f4668ef8cf0e6d8d0fc3284eae51dbd8caStephan Linzner * @deprecated Use
36b51617f4668ef8cf0e6d8d0fc3284eae51dbd8caStephan Linzner * <a href="{@docRoot}reference/android/support/test/runner/AndroidJUnitRunner.html">
37b51617f4668ef8cf0e6d8d0fc3284eae51dbd8caStephan Linzner * AndroidJUnitRunner</a> instead. New tests should be written using the
38b51617f4668ef8cf0e6d8d0fc3284eae51dbd8caStephan Linzner * <a href="{@docRoot}tools/testing-support-library/index.html">Android Testing Support Library</a>.
39b51617f4668ef8cf0e6d8d0fc3284eae51dbd8caStephan Linzner */
40b51617f4668ef8cf0e6d8d0fc3284eae51dbd8caStephan Linzner@Deprecated
419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectpublic class AndroidTestRunner extends BaseTestRunner {
429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    private TestResult mTestResult;
449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    private String mTestClassName;
459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    private List<TestCase> mTestCases;
469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    private Context mContext;
479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    private boolean mSkipExecution = false;
489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
498c5a24d16926fb14f407ba51026f9a5b973b2e01Paul Duffin    private List<TestListener> mTestListeners = new ArrayList<>();
509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    private Instrumentation mInstrumentation;
519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    @SuppressWarnings("unchecked")
539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public void setTestClassName(String testClassName, String testMethodName) {
549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        Class testClass = loadTestClass(testClassName);
559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        if (shouldRunSingleTestMethod(testMethodName, testClass)) {
579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            TestCase testCase = buildSingleTestMethod(testClass, testMethodName);
588c5a24d16926fb14f407ba51026f9a5b973b2e01Paul Duffin            mTestCases = new ArrayList<>();
598c5a24d16926fb14f407ba51026f9a5b973b2e01Paul Duffin            mTestCases.add(testCase);
609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            mTestClassName = testClass.getSimpleName();
619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        } else {
629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            setTest(getTest(testClass), testClass);
639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public void setTest(Test test) {
679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        setTest(test, test.getClass());
689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    private void setTest(Test test, Class<? extends Test> testClass) {
719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        mTestCases = (List<TestCase>) TestCaseUtil.getTests(test, true);
729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        if (TestSuite.class.isAssignableFrom(testClass)) {
739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            mTestClassName = TestCaseUtil.getTestName(test);
749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        } else {
759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            mTestClassName = testClass.getSimpleName();
769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public void clearTestListeners() {
809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        mTestListeners.clear();
819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public void addTestListener(TestListener testListener) {
849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        if (testListener != null) {
859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            mTestListeners.add(testListener);
869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    @SuppressWarnings("unchecked")
909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    private Class<? extends Test> loadTestClass(String testClassName) {
919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        try {
929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            return (Class<? extends Test>) mContext.getClassLoader().loadClass(testClassName);
939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        } catch (ClassNotFoundException e) {
949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            runFailed("Could not find test class. Class: " + testClassName);
959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        return null;
979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    private TestCase buildSingleTestMethod(Class testClass, String testMethodName) {
1009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        try {
10187571b75e6560d33b8de7ca04801612a20a04d98Brian Muramatsu            Constructor c = testClass.getConstructor();
10287571b75e6560d33b8de7ca04801612a20a04d98Brian Muramatsu            return newSingleTestMethod(testClass, testMethodName, c);
10387571b75e6560d33b8de7ca04801612a20a04d98Brian Muramatsu        } catch (NoSuchMethodException e) {
10487571b75e6560d33b8de7ca04801612a20a04d98Brian Muramatsu        }
10587571b75e6560d33b8de7ca04801612a20a04d98Brian Muramatsu
10687571b75e6560d33b8de7ca04801612a20a04d98Brian Muramatsu        try {
10787571b75e6560d33b8de7ca04801612a20a04d98Brian Muramatsu            Constructor c = testClass.getConstructor(String.class);
10887571b75e6560d33b8de7ca04801612a20a04d98Brian Muramatsu            return newSingleTestMethod(testClass, testMethodName, c, testMethodName);
10987571b75e6560d33b8de7ca04801612a20a04d98Brian Muramatsu        } catch (NoSuchMethodException e) {
11087571b75e6560d33b8de7ca04801612a20a04d98Brian Muramatsu        }
11187571b75e6560d33b8de7ca04801612a20a04d98Brian Muramatsu
11287571b75e6560d33b8de7ca04801612a20a04d98Brian Muramatsu        return null;
11387571b75e6560d33b8de7ca04801612a20a04d98Brian Muramatsu    }
11487571b75e6560d33b8de7ca04801612a20a04d98Brian Muramatsu
11587571b75e6560d33b8de7ca04801612a20a04d98Brian Muramatsu    private TestCase newSingleTestMethod(Class testClass, String testMethodName,
11687571b75e6560d33b8de7ca04801612a20a04d98Brian Muramatsu            Constructor constructor, Object... args) {
11787571b75e6560d33b8de7ca04801612a20a04d98Brian Muramatsu        try {
11887571b75e6560d33b8de7ca04801612a20a04d98Brian Muramatsu            TestCase testCase = (TestCase) constructor.newInstance(args);
1199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            testCase.setName(testMethodName);
1209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            return testCase;
1219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        } catch (IllegalAccessException e) {
1229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            runFailed("Could not access test class. Class: " + testClass.getName());
1239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        } catch (InstantiationException e) {
1249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            runFailed("Could not instantiate test class. Class: " + testClass.getName());
12587571b75e6560d33b8de7ca04801612a20a04d98Brian Muramatsu        } catch (IllegalArgumentException e) {
12687571b75e6560d33b8de7ca04801612a20a04d98Brian Muramatsu            runFailed("Illegal argument passed to constructor. Class: " + testClass.getName());
12787571b75e6560d33b8de7ca04801612a20a04d98Brian Muramatsu        } catch (InvocationTargetException e) {
12887571b75e6560d33b8de7ca04801612a20a04d98Brian Muramatsu            runFailed("Constructor thew an exception. Class: " + testClass.getName());
1299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
1309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        return null;
1319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
1329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    private boolean shouldRunSingleTestMethod(String testMethodName,
1349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            Class<? extends Test> testClass) {
1359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        return testMethodName != null && TestCase.class.isAssignableFrom(testClass);
1369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
1379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    private Test getTest(Class clazz) {
1399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        if (TestSuiteProvider.class.isAssignableFrom(clazz)) {
1409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            try {
1419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                TestSuiteProvider testSuiteProvider =
1429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                        (TestSuiteProvider) clazz.getConstructor().newInstance();
1439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                return testSuiteProvider.getTestSuite();
1449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            } catch (InstantiationException e) {
1459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                runFailed("Could not instantiate test suite provider. Class: " + clazz.getName());
1469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            } catch (IllegalAccessException e) {
1479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                runFailed("Illegal access of test suite provider. Class: " + clazz.getName());
1489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            } catch (InvocationTargetException e) {
1499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                runFailed("Invocation exception test suite provider. Class: " + clazz.getName());
1509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            } catch (NoSuchMethodException e) {
1519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                runFailed("No such method on test suite provider. Class: " + clazz.getName());
1529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            }
1539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
1549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        return getTest(clazz.getName());
1559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
1569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    protected TestResult createTestResult() {
1589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        if (mSkipExecution) {
1599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            return new NoExecTestResult();
1609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
1619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        return new TestResult();
1629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
1634f414bd7a76fc7ff063db70d1cdd09303c28cbe5Jack Wang
1649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    void setSkipExecution(boolean skip) {
1659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        mSkipExecution = skip;
1669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
1679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public List<TestCase> getTestCases() {
1699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        return mTestCases;
1709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
1719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public String getTestClassName() {
1739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        return mTestClassName;
1749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
1759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public TestResult getTestResult() {
1779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        return mTestResult;
1789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
1799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public void runTest() {
1819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        runTest(createTestResult());
1829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
1839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public void runTest(TestResult testResult) {
1859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        mTestResult = testResult;
1869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        for (TestListener testListener : mTestListeners) {
1889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            mTestResult.addListener(testListener);
1899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
1909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
191a8db0a4ff6689f9f00dea6af44e65aa32a8546e1Jack Wang        Context testContext = mInstrumentation == null ? mContext : mInstrumentation.getContext();
1929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        for (TestCase testCase : mTestCases) {
19344a29dd097350e3050e44a2f64aa4c75d26ec695Dmitri Plotnikov            setContextIfAndroidTestCase(testCase, mContext, testContext);
1949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            setInstrumentationIfInstrumentationTestCase(testCase, mInstrumentation);
1959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            testCase.run(mTestResult);
1969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
1979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
1989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
19944a29dd097350e3050e44a2f64aa4c75d26ec695Dmitri Plotnikov    private void setContextIfAndroidTestCase(Test test, Context context, Context testContext) {
2009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        if (AndroidTestCase.class.isAssignableFrom(test.getClass())) {
2019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            ((AndroidTestCase) test).setContext(context);
20244a29dd097350e3050e44a2f64aa4c75d26ec695Dmitri Plotnikov            ((AndroidTestCase) test).setTestContext(testContext);
2039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
2049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
2059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
2069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public void setContext(Context context) {
2079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        mContext = context;
2089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
2099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
2109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    private void setInstrumentationIfInstrumentationTestCase(
2119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            Test test, Instrumentation instrumentation) {
2129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        if (InstrumentationTestCase.class.isAssignableFrom(test.getClass())) {
2137aba54b2edcb94f43c991c555b23fc1de364835eJack Wang            ((InstrumentationTestCase) test).injectInstrumentation(instrumentation);
2149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
2159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
2169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
2177aba54b2edcb94f43c991c555b23fc1de364835eJack Wang    public void setInstrumentation(Instrumentation instrumentation) {
2189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        mInstrumentation = instrumentation;
2199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
2209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
2217aba54b2edcb94f43c991c555b23fc1de364835eJack Wang    /**
2227aba54b2edcb94f43c991c555b23fc1de364835eJack Wang     * @deprecated Incorrect spelling,
2237aba54b2edcb94f43c991c555b23fc1de364835eJack Wang     * use {@link #setInstrumentation(android.app.Instrumentation)} instead.
2247aba54b2edcb94f43c991c555b23fc1de364835eJack Wang     */
2257aba54b2edcb94f43c991c555b23fc1de364835eJack Wang    @Deprecated
2267aba54b2edcb94f43c991c555b23fc1de364835eJack Wang    public void setInstrumentaiton(Instrumentation instrumentation) {
2277aba54b2edcb94f43c991c555b23fc1de364835eJack Wang        setInstrumentation(instrumentation);
2287aba54b2edcb94f43c991c555b23fc1de364835eJack Wang    }
2297aba54b2edcb94f43c991c555b23fc1de364835eJack Wang
2309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    @Override
2319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    protected Class loadSuiteClass(String suiteClassName) throws ClassNotFoundException {
2329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        return mContext.getClassLoader().loadClass(suiteClassName);
2339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
2349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
2359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public void testStarted(String testName) {
2369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
2379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
2389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public void testEnded(String testName) {
2399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
2409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
2419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public void testFailed(int status, Test test, Throwable t) {
2429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
2439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
2449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    protected void runFailed(String message) {
2459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        throw new RuntimeException(message);
2469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
2479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
248