19066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project/* 29066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Copyright (C) 2008 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 1931e7ce762ccbbb747fabb4581e42a0a2fe56e780Brett Chabotimport android.app.Instrumentation; 209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.content.Context; 219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.os.Bundle; 229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.test.mock.MockContext; 239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.test.suitebuilder.ListTestCaseNames; 249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.test.suitebuilder.ListTestCaseNames.TestDescriptor; 259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.test.suitebuilder.annotation.SmallTest; 269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport junit.framework.Test; 289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport junit.framework.TestCase; 299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport junit.framework.TestSuite; 309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport java.util.List; 329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project/** 349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Tests for {@link InstrumentationTestRunner} 359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project@SmallTest 379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectpublic class InstrumentationTestRunnerTest extends TestCase { 389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private StubInstrumentationTestRunner mInstrumentationTestRunner; 399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private StubAndroidTestRunner mStubAndroidTestRunner; 409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private String mTargetContextPackageName; 419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project protected void setUp() throws Exception { 439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project super.setUp(); 449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mStubAndroidTestRunner = new StubAndroidTestRunner(); 459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mTargetContextPackageName = "android.test.suitebuilder.examples"; 469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mInstrumentationTestRunner = new StubInstrumentationTestRunner( 479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project new StubContext("com.google.foo.tests"), 489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project new StubContext(mTargetContextPackageName), mStubAndroidTestRunner); 499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void testOverrideTestToRunWithClassArgument() throws Exception { 529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project String expectedTestClassName = PlaceHolderTest.class.getName(); 539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mInstrumentationTestRunner.onCreate(createBundle( 549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project InstrumentationTestRunner.ARGUMENT_TEST_CLASS, expectedTestClassName)); 559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project assertTestRunnerCalledWithExpectedParameters(expectedTestClassName, "testPlaceHolder"); 579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void testOverrideTestToRunWithClassAndMethodArgument() throws Exception { 609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project String expectedTestClassName = PlaceHolderTest.class.getName(); 619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project String expectedTestMethodName = "testPlaceHolder"; 629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project String classAndMethod = expectedTestClassName + "#" + expectedTestMethodName; 639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mInstrumentationTestRunner.onCreate(createBundle( 649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project InstrumentationTestRunner.ARGUMENT_TEST_CLASS, classAndMethod)); 659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project assertTestRunnerCalledWithExpectedParameters(expectedTestClassName, 679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project expectedTestMethodName); 689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void testUseSelfAsTestSuiteProviderWhenNoMetaDataOrClassArgument() throws Exception { 719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project TestSuite testSuite = new TestSuite(); 729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project testSuite.addTestSuite(PlaceHolderTest.class); 739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mInstrumentationTestRunner.setAllTestsSuite(testSuite); 749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mInstrumentationTestRunner.onCreate(null); 759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project assertTestRunnerCalledWithExpectedParameters( 769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project PlaceHolderTest.class.getName(), "testPlaceHolder"); 779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void testMultipleTestClass() throws Exception { 809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project String classArg = PlaceHolderTest.class.getName() + "," + 819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project PlaceHolderTest2.class.getName(); 829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mInstrumentationTestRunner.onCreate(createBundle( 839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project InstrumentationTestRunner.ARGUMENT_TEST_CLASS, classArg)); 849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Test test = mStubAndroidTestRunner.getTest(); 869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project assertContentsInOrder(ListTestCaseNames.getTestNames((TestSuite) test), 889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project new TestDescriptor(PlaceHolderTest.class.getName(), "testPlaceHolder"), 899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project new TestDescriptor(PlaceHolderTest2.class.getName(), "testPlaceHolder2")); 909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 9331e7ce762ccbbb747fabb4581e42a0a2fe56e780Brett Chabot /** 9431e7ce762ccbbb747fabb4581e42a0a2fe56e780Brett Chabot * Test that runtime exceptions during runTest are handled gracefully 9531e7ce762ccbbb747fabb4581e42a0a2fe56e780Brett Chabot */ 9631e7ce762ccbbb747fabb4581e42a0a2fe56e780Brett Chabot public void testUnhandledException() throws Exception { 9731e7ce762ccbbb747fabb4581e42a0a2fe56e780Brett Chabot StubAndroidTestRunner stubAndroidTestRunner = new StubAndroidTestRunner() { 9831e7ce762ccbbb747fabb4581e42a0a2fe56e780Brett Chabot @Override 9931e7ce762ccbbb747fabb4581e42a0a2fe56e780Brett Chabot public void runTest() { 10031e7ce762ccbbb747fabb4581e42a0a2fe56e780Brett Chabot throw new RuntimeException(); 10131e7ce762ccbbb747fabb4581e42a0a2fe56e780Brett Chabot } 10231e7ce762ccbbb747fabb4581e42a0a2fe56e780Brett Chabot }; 10331e7ce762ccbbb747fabb4581e42a0a2fe56e780Brett Chabot StubInstrumentationTestRunner instrumentationTestRunner = new StubInstrumentationTestRunner( 10431e7ce762ccbbb747fabb4581e42a0a2fe56e780Brett Chabot new StubContext("com.google.foo.tests"), 10531e7ce762ccbbb747fabb4581e42a0a2fe56e780Brett Chabot new StubContext(mTargetContextPackageName), stubAndroidTestRunner); 10631e7ce762ccbbb747fabb4581e42a0a2fe56e780Brett Chabot instrumentationTestRunner.onCreate(new Bundle()); 10731e7ce762ccbbb747fabb4581e42a0a2fe56e780Brett Chabot instrumentationTestRunner.onStart(); 10831e7ce762ccbbb747fabb4581e42a0a2fe56e780Brett Chabot assertTrue("Instrumentation did not finish", instrumentationTestRunner.isFinished()); 10931e7ce762ccbbb747fabb4581e42a0a2fe56e780Brett Chabot // ensure a meaningful error message placed in results 11031e7ce762ccbbb747fabb4581e42a0a2fe56e780Brett Chabot String resultsData = instrumentationTestRunner.mResults.getString( 11131e7ce762ccbbb747fabb4581e42a0a2fe56e780Brett Chabot Instrumentation.REPORT_KEY_STREAMRESULT); 11231e7ce762ccbbb747fabb4581e42a0a2fe56e780Brett Chabot assertTrue("Instrumentation results is missing RuntimeException", 11331e7ce762ccbbb747fabb4581e42a0a2fe56e780Brett Chabot resultsData.contains("RuntimeException")); 11431e7ce762ccbbb747fabb4581e42a0a2fe56e780Brett Chabot } 11531e7ce762ccbbb747fabb4581e42a0a2fe56e780Brett Chabot 11631e7ce762ccbbb747fabb4581e42a0a2fe56e780Brett Chabot /** 11731e7ce762ccbbb747fabb4581e42a0a2fe56e780Brett Chabot * Test that specifying a method which does not exist is handled gracefully 11831e7ce762ccbbb747fabb4581e42a0a2fe56e780Brett Chabot */ 11931e7ce762ccbbb747fabb4581e42a0a2fe56e780Brett Chabot public void testBadMethodArgument() throws Exception { 12031e7ce762ccbbb747fabb4581e42a0a2fe56e780Brett Chabot String testClassName = PlaceHolderTest.class.getName(); 12131e7ce762ccbbb747fabb4581e42a0a2fe56e780Brett Chabot String invalidMethodName = "testNoExist"; 12231e7ce762ccbbb747fabb4581e42a0a2fe56e780Brett Chabot String classAndMethod = testClassName + "#" + invalidMethodName; 12331e7ce762ccbbb747fabb4581e42a0a2fe56e780Brett Chabot mInstrumentationTestRunner.onCreate(createBundle( 12431e7ce762ccbbb747fabb4581e42a0a2fe56e780Brett Chabot InstrumentationTestRunner.ARGUMENT_TEST_CLASS, classAndMethod)); 12531e7ce762ccbbb747fabb4581e42a0a2fe56e780Brett Chabot assertTestRunnerCalledWithExpectedParameters(testClassName, 12631e7ce762ccbbb747fabb4581e42a0a2fe56e780Brett Chabot invalidMethodName); 12731e7ce762ccbbb747fabb4581e42a0a2fe56e780Brett Chabot } 12831e7ce762ccbbb747fabb4581e42a0a2fe56e780Brett Chabot 1299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void testDelayParameter() throws Exception { 1309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int delayMsec = 1000; 1319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Bundle args = new Bundle(); 1329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project args.putInt(InstrumentationTestRunner.ARGUMENT_DELAY_MSEC, delayMsec); 1339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project args.putString(InstrumentationTestRunner.ARGUMENT_TEST_CLASS, 1349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project PlaceHolderTest.class.getName() + "," + 1359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project PlaceHolderTest2.class.getName()); 1369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mInstrumentationTestRunner.onCreate(args); 1379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Thread t = new Thread() { public void run() { mInstrumentationTestRunner.onStart(); } }; 1389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // Should delay three times: before, between, and after the two tests. 1409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project long beforeTest = System.currentTimeMillis(); 1419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project t.start(); 1429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project t.join(); 1439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project assertTrue(System.currentTimeMillis() > beforeTest + delayMsec * 3); 1449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project assertTrue(mInstrumentationTestRunner.isStarted()); 1459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project assertTrue(mInstrumentationTestRunner.isFinished()); 1469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project assertTrue(mStubAndroidTestRunner.isRun()); 1479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 14988e03a97366d08fc69d852cf2219f9d0b1916af4Brett Chabot /** 15088e03a97366d08fc69d852cf2219f9d0b1916af4Brett Chabot * Test that the -e {@link InstrumentationTestRunner.ARGUMENT_ANNOTATION} parameter properly 15188e03a97366d08fc69d852cf2219f9d0b1916af4Brett Chabot * selects tests. 15288e03a97366d08fc69d852cf2219f9d0b1916af4Brett Chabot */ 15388e03a97366d08fc69d852cf2219f9d0b1916af4Brett Chabot public void testAnnotationParameter() throws Exception { 15488e03a97366d08fc69d852cf2219f9d0b1916af4Brett Chabot String expectedTestClassName = AnnotationTest.class.getName(); 15588e03a97366d08fc69d852cf2219f9d0b1916af4Brett Chabot Bundle args = new Bundle(); 15688e03a97366d08fc69d852cf2219f9d0b1916af4Brett Chabot args.putString(InstrumentationTestRunner.ARGUMENT_TEST_CLASS, expectedTestClassName); 15788e03a97366d08fc69d852cf2219f9d0b1916af4Brett Chabot args.putString(InstrumentationTestRunner.ARGUMENT_ANNOTATION, FlakyTest.class.getName()); 15888e03a97366d08fc69d852cf2219f9d0b1916af4Brett Chabot mInstrumentationTestRunner.onCreate(args); 15988e03a97366d08fc69d852cf2219f9d0b1916af4Brett Chabot assertTestRunnerCalledWithExpectedParameters(expectedTestClassName, "testAnnotated"); 16088e03a97366d08fc69d852cf2219f9d0b1916af4Brett Chabot } 16188e03a97366d08fc69d852cf2219f9d0b1916af4Brett Chabot 16288e03a97366d08fc69d852cf2219f9d0b1916af4Brett Chabot /** 16388e03a97366d08fc69d852cf2219f9d0b1916af4Brett Chabot * Test that the -e {@link InstrumentationTestRunner.ARGUMENT_NOT_ANNOTATION} parameter 16488e03a97366d08fc69d852cf2219f9d0b1916af4Brett Chabot * properly excludes tests. 16588e03a97366d08fc69d852cf2219f9d0b1916af4Brett Chabot */ 16688e03a97366d08fc69d852cf2219f9d0b1916af4Brett Chabot public void testNotAnnotationParameter() throws Exception { 16788e03a97366d08fc69d852cf2219f9d0b1916af4Brett Chabot String expectedTestClassName = AnnotationTest.class.getName(); 16888e03a97366d08fc69d852cf2219f9d0b1916af4Brett Chabot Bundle args = new Bundle(); 16988e03a97366d08fc69d852cf2219f9d0b1916af4Brett Chabot args.putString(InstrumentationTestRunner.ARGUMENT_TEST_CLASS, expectedTestClassName); 17088e03a97366d08fc69d852cf2219f9d0b1916af4Brett Chabot args.putString(InstrumentationTestRunner.ARGUMENT_NOT_ANNOTATION, 17188e03a97366d08fc69d852cf2219f9d0b1916af4Brett Chabot FlakyTest.class.getName()); 17288e03a97366d08fc69d852cf2219f9d0b1916af4Brett Chabot mInstrumentationTestRunner.onCreate(args); 17388e03a97366d08fc69d852cf2219f9d0b1916af4Brett Chabot assertTestRunnerCalledWithExpectedParameters(expectedTestClassName, "testNotAnnotated"); 17488e03a97366d08fc69d852cf2219f9d0b1916af4Brett Chabot } 17588e03a97366d08fc69d852cf2219f9d0b1916af4Brett Chabot 1769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private void assertContentsInOrder(List<TestDescriptor> actual, TestDescriptor... source) { 1779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project TestDescriptor[] clonedSource = source.clone(); 1789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project assertEquals("Unexpected number of items.", clonedSource.length, actual.size()); 1799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project for (int i = 0; i < actual.size(); i++) { 1809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project TestDescriptor actualItem = actual.get(i); 1819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project TestDescriptor sourceItem = clonedSource[i]; 1829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project assertEquals("Unexpected item. Index: " + i, sourceItem, actualItem); 1839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private void assertTestRunnerCalledWithExpectedParameters( 1879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project String expectedTestClassName, String expectedTestMethodName) { 1889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Test test = mStubAndroidTestRunner.getTest(); 1899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project assertContentsInOrder(ListTestCaseNames.getTestNames((TestSuite) test), 1909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project new TestDescriptor(expectedTestClassName, expectedTestMethodName)); 1919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project assertTrue(mInstrumentationTestRunner.isStarted()); 1929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project assertFalse(mInstrumentationTestRunner.isFinished()); 1939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private Bundle createBundle(String key, String value) { 1969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Bundle bundle = new Bundle(); 1979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project bundle.putString(key, value); 1989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return bundle; 1999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private static class StubInstrumentationTestRunner extends InstrumentationTestRunner { 2029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private Context mContext; 2039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private Context mTargetContext; 2049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private boolean mStarted; 2059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private boolean mFinished; 2069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private AndroidTestRunner mAndroidTestRunner; 2079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private TestSuite mTestSuite; 2089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private TestSuite mDefaultTestSuite; 2099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private String mPackageNameForDefaultTests; 21031e7ce762ccbbb747fabb4581e42a0a2fe56e780Brett Chabot private Bundle mResults; 2119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public StubInstrumentationTestRunner(Context context, Context targetContext, 2139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project AndroidTestRunner androidTestRunner) { 2149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project this.mContext = context; 2159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project this.mTargetContext = targetContext; 2169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project this.mAndroidTestRunner = androidTestRunner; 2179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public Context getContext() { 2209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return mContext; 2219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public TestSuite getAllTests() { 2249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return mTestSuite; 2259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public Context getTargetContext() { 2289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return mTargetContext; 2299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project protected AndroidTestRunner getAndroidTestRunner() { 2329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return mAndroidTestRunner; 2339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void start() { 2369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mStarted = true; 2379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void finish(int resultCode, Bundle results) { 2409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mFinished = true; 24131e7ce762ccbbb747fabb4581e42a0a2fe56e780Brett Chabot mResults = results; 2429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public boolean isStarted() { 2459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return mStarted; 2469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public boolean isFinished() { 2499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return mFinished; 2509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void setAllTestsSuite(TestSuite testSuite) { 2539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mTestSuite = testSuite; 2549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void setDefaultTestsSuite(TestSuite testSuite) { 2579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mDefaultTestSuite = testSuite; 2589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public String getPackageNameForDefaultTests() { 2619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return mPackageNameForDefaultTests; 2629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 26331e7ce762ccbbb747fabb4581e42a0a2fe56e780Brett Chabot 26431e7ce762ccbbb747fabb4581e42a0a2fe56e780Brett Chabot @Override 26531e7ce762ccbbb747fabb4581e42a0a2fe56e780Brett Chabot void prepareLooper() { 26631e7ce762ccbbb747fabb4581e42a0a2fe56e780Brett Chabot // ignore 26731e7ce762ccbbb747fabb4581e42a0a2fe56e780Brett Chabot } 2689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private static class StubContext extends MockContext { 2719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private String mPackageName; 2729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public StubContext(String packageName) { 2749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project this.mPackageName = packageName; 2759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project @Override 2789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public String getPackageCodePath() { 2799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return mPackageName; 2809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project @Override 2839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public String getPackageName() { 2849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return mPackageName; 2859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project @Override 2889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public ClassLoader getClassLoader() { 2899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return getClass().getClassLoader(); 2909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private static class StubAndroidTestRunner extends AndroidTestRunner { 2949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private Test mTest; 2959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private boolean mRun; 2969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public boolean isRun() { 2989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return mRun; 2999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void setTest(Test test) { 3029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project super.setTest(test); 3039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mTest = test; 3049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public Test getTest() { 3079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return mTest; 3089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void runTest() { 3119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project super.runTest(); 3129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mRun = true; 3139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 3179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Empty test used for validation 3189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 3199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static class PlaceHolderTest extends TestCase { 3209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public PlaceHolderTest() { 3229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project super("testPlaceHolder"); 3239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void testPlaceHolder() throws Exception { 3269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 3319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Empty test used for validation 3329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 3339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static class PlaceHolderTest2 extends TestCase { 3349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public PlaceHolderTest2() { 3369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project super("testPlaceHolder2"); 3379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void testPlaceHolder2() throws Exception { 3409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 34388e03a97366d08fc69d852cf2219f9d0b1916af4Brett Chabot 34488e03a97366d08fc69d852cf2219f9d0b1916af4Brett Chabot /** 34588e03a97366d08fc69d852cf2219f9d0b1916af4Brett Chabot * Annotated test used for validation. 34688e03a97366d08fc69d852cf2219f9d0b1916af4Brett Chabot */ 34788e03a97366d08fc69d852cf2219f9d0b1916af4Brett Chabot public static class AnnotationTest extends TestCase { 34888e03a97366d08fc69d852cf2219f9d0b1916af4Brett Chabot 34988e03a97366d08fc69d852cf2219f9d0b1916af4Brett Chabot public void testNotAnnotated() throws Exception { 35088e03a97366d08fc69d852cf2219f9d0b1916af4Brett Chabot } 35188e03a97366d08fc69d852cf2219f9d0b1916af4Brett Chabot 35288e03a97366d08fc69d852cf2219f9d0b1916af4Brett Chabot @FlakyTest 35388e03a97366d08fc69d852cf2219f9d0b1916af4Brett Chabot public void testAnnotated() throws Exception { 35488e03a97366d08fc69d852cf2219f9d0b1916af4Brett Chabot } 35588e03a97366d08fc69d852cf2219f9d0b1916af4Brett Chabot } 3569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project} 357