1f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* 2f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Copyright (C) 2008 The Android Open Source Project 3f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 4f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Licensed under the Apache License, Version 2.0 (the "License"); 5f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * you may not use this file except in compliance with the License. 6f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * You may obtain a copy of the License at 7f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 8f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * http://www.apache.org/licenses/LICENSE-2.0 9f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 10f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Unless required by applicable law or agreed to in writing, software 11f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS, 12f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * See the License for the specific language governing permissions and 14f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * limitations under the License. 15f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 16f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 17f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectpackage com.google.coretests; 18f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 19f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport junit.framework.Test; 20f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport junit.framework.TestResult; 21f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport junit.framework.TestSuite; 22f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport junit.runner.BaseTestRunner; 23f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport junit.runner.StandardTestSuiteLoader; 24f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport junit.runner.TestSuiteLoader; 25f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 26f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport java.io.PrintStream; 27f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 28f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/** 29f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * A command line based tool to run tests. 30f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * <pre> 31f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * java junit.textui.TestRunner [-wait] TestCaseClass 32f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * </pre> 33f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * TestRunner expects the name of a TestCase class as argument. 34f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * If this class defines a static <code>suite</code> method it 35f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * will be invoked and the returned test is run. Otherwise all 36f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * the methods starting with "test" having no arguments are run. 37f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * <p> 38f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * When the wait command line argument is given TestRunner 39f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * waits until the users types RETURN. 40f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * <p> 41f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * TestRunner prints a trace as the tests are executed followed by a 42f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * summary at the end. 43f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 44f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectpublic class StatTestRunner extends BaseTestRunner { 45f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project private ResultPrinter fPrinter; 46f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project private PerfStatCollector fPerfStatCollector; 47f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 48f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public static final int SUCCESS_EXIT= 0; 49f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public static final int FAILURE_EXIT= 1; 50f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public static final int EXCEPTION_EXIT= 2; 51f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 52f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public static final String DEFAULT_DATABASE = "sqlite:/coretests.db"; 53f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public static final String DEFAULT_DRIVER = "SQLite.JDBCDriver"; 54f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 55f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public static String connectionURL; 56f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public static String jdbcDriver; 57f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 58f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 59f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Constructs a TestRunner. 60f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 61f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public StatTestRunner() { 62f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project this(System.out); 63f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 64f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 65f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 66f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Constructs a TestRunner using the given stream for all the output 67f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 68f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public StatTestRunner(PrintStream writer) { 69f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project this(new ResultPrinter(writer)); 70f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 71f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 72f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 73f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Constructs a TestRunner using the given ResultPrinter all the output 74f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 75f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public StatTestRunner(ResultPrinter printer) { 76f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fPrinter= printer; 77f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fPerfStatCollector = new PerfStatCollector(printer.getWriter()); 78f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 79f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 80f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 81f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Runs a suite extracted from a TestCase subclass. 82f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 83f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project static public void run(Class testClass) { 84f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project run(new TestSuite(testClass)); 85f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 86f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 87f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 88f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Runs a single test and collects its results. 89f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * This method can be used to start a test run 90f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * from your program. 91f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * <pre> 92f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * public static void main (String[] args) { 93f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * test.textui.TestRunner.run(suite()); 94f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * } 95f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * </pre> 96f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 97f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project static public TestResult run(Test test) { 98f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project StatTestRunner runner= new StatTestRunner(); 99f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project try { 100f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return runner.doRun(test, false); 101f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 102f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project catch (Exception e) { 103f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return null; 104f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 105f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 106f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 107f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 108f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Runs a single test and waits until the user 109f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * types RETURN. 110f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 111f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project static public void runAndWait(Test suite) { 112f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project StatTestRunner aTestRunner= new StatTestRunner(); 113f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project try { 114f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project aTestRunner.doRun(suite, true); 115f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 116f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project catch (Exception e) {} 117f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 118f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 119f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 120f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Always use the StandardTestSuiteLoader. Overridden from 121f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * BaseTestRunner. 122f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 123f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public TestSuiteLoader getLoader() { 124f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return new StandardTestSuiteLoader(); 125f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 126f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 127f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public void testFailed(int status, Test test, Throwable t) { 128f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 129f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 130f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public void testStarted(String testName) { 131f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 132f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 133f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public void testEnded(String testName) { 134f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 135f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 136f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public TestResult doRun(Test suite, boolean wait) throws Exception { 137f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project StatsStore.open(jdbcDriver, connectionURL); 138f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project TestResult result = new TestResult(); 139f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project result.addListener(fPrinter); 140f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project result.addListener(fPerfStatCollector); 141f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project long startTime= System.currentTimeMillis(); 142f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project StatsStore.now = startTime; 143f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project suite.run(result); 144f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project long endTime= System.currentTimeMillis(); 145f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project long runTime= endTime-startTime; 146f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fPrinter.print(result, runTime); 147f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fPerfStatCollector.digest(); 148f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project StatsStore.close(); 149f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 150f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project pause(wait); 151f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return result; 152f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 153f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 154f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project protected void pause(boolean wait) { 155f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project if (!wait) return; 156f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fPrinter.printWaitPrompt(); 157f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project try { 158f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project System.in.read(); 159f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 160f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project catch(Exception e) { 161f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 162f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 163f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 164f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public static void main(String args[]) { 165f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project StatTestRunner aTestRunner= new StatTestRunner(); 166f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project try { 167f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project TestResult r= aTestRunner.start(args); 168f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project if (!r.wasSuccessful()) 169f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project System.exit(FAILURE_EXIT); 170f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project System.exit(SUCCESS_EXIT); 171f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } catch(Exception e) { 172f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project System.err.println(e.getMessage()); 173f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project System.exit(EXCEPTION_EXIT); 174f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 175f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 176f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 177f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 178f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Starts a test run. Analyzes the command line arguments 179f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * and runs the given test suite. 180f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 181f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project protected TestResult start(String args[]) throws Exception { 182f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project String testCase= ""; 183f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project boolean wait= false; 184f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 185f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jdbcDriver = System.getProperty("android.coretests.driver", DEFAULT_DRIVER); 186f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project connectionURL = System.getProperty("android.coretests.database", "jdbc:" + DEFAULT_DATABASE); 187f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 188f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project for (int i= 0; i < args.length; i++) { 189f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project if (args[i].equals("--all")) 190f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fPerfStatCollector.listAll = true; 191f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project else if (args[i].equals("--bad")) 192f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fPerfStatCollector.listBad = true; 193f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project else if (args[i].equals("--nobig")) 194f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fPerfStatCollector.bigMarking = false; 195f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project else if (args[i].equals("--s")) { 196f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fPerfStatCollector.thresholdDuration = 197f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project Integer.valueOf(args[++i]); 198f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } else if (args[i].equals("-wait")) 199f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project wait= true; 200f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project else if (args[i].equals("-c")) 201f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testCase= extractClassName(args[++i]); 202f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project else if (args[i].equals("-v")) 203f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project System.err.println("JUnit "+Version.id()+" (plus Android performance stats)"); 204f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project else 205f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testCase= args[i]; 206f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 207f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 208f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project if (testCase.equals("")) 209f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project throw new Exception("Usage: TestRunner [-wait] testCaseName, where name is the name of the TestCase class"); 210f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 211f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project try { 212f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project Test suite= getTest(testCase); 213f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return doRun(suite, wait); 214f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 215f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project catch (Exception e) { 216f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project throw new Exception("Exception: " + e); 217f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 218f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 219f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 220f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project protected void runFailed(String message) { 221f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project System.err.println(message); 222f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project System.exit(FAILURE_EXIT); 223f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 224f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 225f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public void setPrinter(ResultPrinter printer) { 226f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fPrinter= printer; 227f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 228f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 229f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 230f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project} 231