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 Wangimport android.os.PerformanceCollector.PerformanceResultsWriter;
22ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang
239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport com.google.android.collect.Lists;
2480943d8daa6ab31ab5c486d57aea406aa0730d58Svetoslav Ganov
259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport junit.framework.Test;
269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport junit.framework.TestCase;
279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport junit.framework.TestListener;
289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport junit.framework.TestResult;
299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport junit.framework.TestSuite;
309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport junit.runner.BaseTestRunner;
319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
3287571b75e6560d33b8de7ca04801612a20a04d98Brian Muramatsuimport java.lang.reflect.Constructor;
339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport java.lang.reflect.InvocationTargetException;
349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport java.util.List;
359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectpublic class AndroidTestRunner extends BaseTestRunner {
379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    private TestResult mTestResult;
399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    private String mTestClassName;
409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    private List<TestCase> mTestCases;
419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    private Context mContext;
429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    private boolean mSkipExecution = false;
439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    private List<TestListener> mTestListeners = Lists.newArrayList();
459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    private Instrumentation mInstrumentation;
46ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang    private PerformanceResultsWriter mPerfWriter;
479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    @SuppressWarnings("unchecked")
499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public void setTestClassName(String testClassName, String testMethodName) {
509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        Class testClass = loadTestClass(testClassName);
519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        if (shouldRunSingleTestMethod(testMethodName, testClass)) {
539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            TestCase testCase = buildSingleTestMethod(testClass, testMethodName);
549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            mTestCases = Lists.newArrayList(testCase);
559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            mTestClassName = testClass.getSimpleName();
569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        } else {
579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            setTest(getTest(testClass), testClass);
589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public void setTest(Test test) {
629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        setTest(test, test.getClass());
639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    private void setTest(Test test, Class<? extends Test> testClass) {
669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        mTestCases = (List<TestCase>) TestCaseUtil.getTests(test, true);
679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        if (TestSuite.class.isAssignableFrom(testClass)) {
689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            mTestClassName = TestCaseUtil.getTestName(test);
699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        } else {
709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            mTestClassName = testClass.getSimpleName();
719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public void clearTestListeners() {
759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        mTestListeners.clear();
769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public void addTestListener(TestListener testListener) {
799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        if (testListener != null) {
809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            mTestListeners.add(testListener);
819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    @SuppressWarnings("unchecked")
859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    private Class<? extends Test> loadTestClass(String testClassName) {
869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        try {
879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            return (Class<? extends Test>) mContext.getClassLoader().loadClass(testClassName);
889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        } catch (ClassNotFoundException e) {
899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            runFailed("Could not find test class. Class: " + testClassName);
909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        return null;
929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    private TestCase buildSingleTestMethod(Class testClass, String testMethodName) {
959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        try {
9687571b75e6560d33b8de7ca04801612a20a04d98Brian Muramatsu            Constructor c = testClass.getConstructor();
9787571b75e6560d33b8de7ca04801612a20a04d98Brian Muramatsu            return newSingleTestMethod(testClass, testMethodName, c);
9887571b75e6560d33b8de7ca04801612a20a04d98Brian Muramatsu        } catch (NoSuchMethodException e) {
9987571b75e6560d33b8de7ca04801612a20a04d98Brian Muramatsu        }
10087571b75e6560d33b8de7ca04801612a20a04d98Brian Muramatsu
10187571b75e6560d33b8de7ca04801612a20a04d98Brian Muramatsu        try {
10287571b75e6560d33b8de7ca04801612a20a04d98Brian Muramatsu            Constructor c = testClass.getConstructor(String.class);
10387571b75e6560d33b8de7ca04801612a20a04d98Brian Muramatsu            return newSingleTestMethod(testClass, testMethodName, c, testMethodName);
10487571b75e6560d33b8de7ca04801612a20a04d98Brian Muramatsu        } catch (NoSuchMethodException e) {
10587571b75e6560d33b8de7ca04801612a20a04d98Brian Muramatsu        }
10687571b75e6560d33b8de7ca04801612a20a04d98Brian Muramatsu
10787571b75e6560d33b8de7ca04801612a20a04d98Brian Muramatsu        return null;
10887571b75e6560d33b8de7ca04801612a20a04d98Brian Muramatsu    }
10987571b75e6560d33b8de7ca04801612a20a04d98Brian Muramatsu
11087571b75e6560d33b8de7ca04801612a20a04d98Brian Muramatsu    private TestCase newSingleTestMethod(Class testClass, String testMethodName,
11187571b75e6560d33b8de7ca04801612a20a04d98Brian Muramatsu            Constructor constructor, Object... args) {
11287571b75e6560d33b8de7ca04801612a20a04d98Brian Muramatsu        try {
11387571b75e6560d33b8de7ca04801612a20a04d98Brian Muramatsu            TestCase testCase = (TestCase) constructor.newInstance(args);
1149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            testCase.setName(testMethodName);
1159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            return testCase;
1169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        } catch (IllegalAccessException e) {
1179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            runFailed("Could not access test class. Class: " + testClass.getName());
1189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        } catch (InstantiationException e) {
1199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            runFailed("Could not instantiate test class. Class: " + testClass.getName());
12087571b75e6560d33b8de7ca04801612a20a04d98Brian Muramatsu        } catch (IllegalArgumentException e) {
12187571b75e6560d33b8de7ca04801612a20a04d98Brian Muramatsu            runFailed("Illegal argument passed to constructor. Class: " + testClass.getName());
12287571b75e6560d33b8de7ca04801612a20a04d98Brian Muramatsu        } catch (InvocationTargetException e) {
12387571b75e6560d33b8de7ca04801612a20a04d98Brian Muramatsu            runFailed("Constructor thew an exception. Class: " + testClass.getName());
1249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
1259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        return null;
1269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
1279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    private boolean shouldRunSingleTestMethod(String testMethodName,
1299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            Class<? extends Test> testClass) {
1309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        return testMethodName != null && TestCase.class.isAssignableFrom(testClass);
1319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
1329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    private Test getTest(Class clazz) {
1349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        if (TestSuiteProvider.class.isAssignableFrom(clazz)) {
1359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            try {
1369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                TestSuiteProvider testSuiteProvider =
1379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                        (TestSuiteProvider) clazz.getConstructor().newInstance();
1389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                return testSuiteProvider.getTestSuite();
1399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            } catch (InstantiationException e) {
1409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                runFailed("Could not instantiate test suite provider. Class: " + clazz.getName());
1419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            } catch (IllegalAccessException e) {
1429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                runFailed("Illegal access of test suite provider. Class: " + clazz.getName());
1439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            } catch (InvocationTargetException e) {
1449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                runFailed("Invocation exception test suite provider. Class: " + clazz.getName());
1459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            } catch (NoSuchMethodException e) {
1469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                runFailed("No such method on test suite provider. Class: " + clazz.getName());
1479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            }
1489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
1499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        return getTest(clazz.getName());
1509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
1519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    protected TestResult createTestResult() {
1539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        if (mSkipExecution) {
1549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            return new NoExecTestResult();
1559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
1569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        return new TestResult();
1579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
1584f414bd7a76fc7ff063db70d1cdd09303c28cbe5Jack Wang
1599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    void setSkipExecution(boolean skip) {
1609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        mSkipExecution = skip;
1619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
1629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public List<TestCase> getTestCases() {
1649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        return mTestCases;
1659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
1669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public String getTestClassName() {
1689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        return mTestClassName;
1699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
1709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public TestResult getTestResult() {
1729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        return mTestResult;
1739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
1749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public void runTest() {
1769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        runTest(createTestResult());
1779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
1789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public void runTest(TestResult testResult) {
1809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        mTestResult = testResult;
1819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        for (TestListener testListener : mTestListeners) {
1839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            mTestResult.addListener(testListener);
1849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
1859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
186a8db0a4ff6689f9f00dea6af44e65aa32a8546e1Jack Wang        Context testContext = mInstrumentation == null ? mContext : mInstrumentation.getContext();
1879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        for (TestCase testCase : mTestCases) {
18844a29dd097350e3050e44a2f64aa4c75d26ec695Dmitri Plotnikov            setContextIfAndroidTestCase(testCase, mContext, testContext);
1899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            setInstrumentationIfInstrumentationTestCase(testCase, mInstrumentation);
1904f414bd7a76fc7ff063db70d1cdd09303c28cbe5Jack Wang            setPerformanceWriterIfPerformanceCollectorTestCase(testCase, mPerfWriter);
1919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            testCase.run(mTestResult);
1929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
1939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
1949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
19544a29dd097350e3050e44a2f64aa4c75d26ec695Dmitri Plotnikov    private void setContextIfAndroidTestCase(Test test, Context context, Context testContext) {
1969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        if (AndroidTestCase.class.isAssignableFrom(test.getClass())) {
1979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            ((AndroidTestCase) test).setContext(context);
19844a29dd097350e3050e44a2f64aa4c75d26ec695Dmitri Plotnikov            ((AndroidTestCase) test).setTestContext(testContext);
1999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
2009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
2019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
2029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public void setContext(Context context) {
2039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        mContext = context;
2049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
2059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
2069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    private void setInstrumentationIfInstrumentationTestCase(
2079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            Test test, Instrumentation instrumentation) {
2089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        if (InstrumentationTestCase.class.isAssignableFrom(test.getClass())) {
2097aba54b2edcb94f43c991c555b23fc1de364835eJack Wang            ((InstrumentationTestCase) test).injectInstrumentation(instrumentation);
2109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
2119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
2129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
2134f414bd7a76fc7ff063db70d1cdd09303c28cbe5Jack Wang    private void setPerformanceWriterIfPerformanceCollectorTestCase(
214ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang            Test test, PerformanceResultsWriter writer) {
2154f414bd7a76fc7ff063db70d1cdd09303c28cbe5Jack Wang        if (PerformanceCollectorTestCase.class.isAssignableFrom(test.getClass())) {
2164f414bd7a76fc7ff063db70d1cdd09303c28cbe5Jack Wang            ((PerformanceCollectorTestCase) test).setPerformanceResultsWriter(writer);
217ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang        }
218ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang    }
219ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang
2207aba54b2edcb94f43c991c555b23fc1de364835eJack Wang    public void setInstrumentation(Instrumentation instrumentation) {
2219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        mInstrumentation = instrumentation;
2229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
2239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
2247aba54b2edcb94f43c991c555b23fc1de364835eJack Wang    /**
2257aba54b2edcb94f43c991c555b23fc1de364835eJack Wang     * @deprecated Incorrect spelling,
2267aba54b2edcb94f43c991c555b23fc1de364835eJack Wang     * use {@link #setInstrumentation(android.app.Instrumentation)} instead.
2277aba54b2edcb94f43c991c555b23fc1de364835eJack Wang     */
2287aba54b2edcb94f43c991c555b23fc1de364835eJack Wang    @Deprecated
2297aba54b2edcb94f43c991c555b23fc1de364835eJack Wang    public void setInstrumentaiton(Instrumentation instrumentation) {
2307aba54b2edcb94f43c991c555b23fc1de364835eJack Wang        setInstrumentation(instrumentation);
2317aba54b2edcb94f43c991c555b23fc1de364835eJack Wang    }
2327aba54b2edcb94f43c991c555b23fc1de364835eJack Wang
233ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang    /**
234ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang     * {@hide} Pending approval for public API.
235ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang     */
236ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang    public void setPerformanceResultsWriter(PerformanceResultsWriter writer) {
237ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang        mPerfWriter = writer;
238ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang    }
239ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang
2409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    @Override
2419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    protected Class loadSuiteClass(String suiteClassName) throws ClassNotFoundException {
2429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        return mContext.getClassLoader().loadClass(suiteClassName);
2439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
2449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
2459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public void testStarted(String testName) {
2469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
2479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
2489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public void testEnded(String testName) {
2499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
2509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
2519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public void testFailed(int status, Test test, Throwable t) {
2529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
2539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
2549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    protected void runFailed(String message) {
2559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        throw new RuntimeException(message);
2569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
2579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
258