158a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabotpackage junit.runner; 258a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot 358a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabotimport java.io.BufferedReader; 458a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabotimport java.io.File; 558a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabotimport java.io.FileInputStream; 658a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabotimport java.io.FileOutputStream; 758a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabotimport java.io.IOException; 858a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabotimport java.io.InputStream; 958a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabotimport java.io.PrintWriter; 1058a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabotimport java.io.StringReader; 1158a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabotimport java.io.StringWriter; 1258a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabotimport java.lang.reflect.InvocationTargetException; 1358a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabotimport java.lang.reflect.Method; 1458a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabotimport java.lang.reflect.Modifier; 1558a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabotimport java.text.NumberFormat; 1658a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabotimport java.util.Properties; 1758a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot 1858a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabotimport junit.framework.AssertionFailedError; 1958a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabotimport junit.framework.Test; 2058a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabotimport junit.framework.TestListener; 2158a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabotimport junit.framework.TestSuite; 2258a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot 2358a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot/** 2458a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot * Base class for all test runners. 2558a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot * This class was born live on stage in Sardinia during XP2000. 2658a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot */ 2758a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabotpublic abstract class BaseTestRunner implements TestListener { 2858a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot public static final String SUITE_METHODNAME= "suite"; 2958a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot 3058a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot private static Properties fPreferences; 3158a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot static int fgMaxMessageLength= 500; 3258a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot static boolean fgFilterStack= true; 3358a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot boolean fLoading= true; 3458a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot 3558a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot /* 3658a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot * Implementation of TestListener 3758a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot */ 3858a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot public synchronized void startTest(Test test) { 3958a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot testStarted(test.toString()); 4058a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot } 4158a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot 4258a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot protected static void setPreferences(Properties preferences) { 4358a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot fPreferences= preferences; 4458a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot } 4558a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot 4658a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot protected static Properties getPreferences() { 4758a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot if (fPreferences == null) { 4858a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot fPreferences= new Properties(); 4958a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot fPreferences.put("loading", "true"); 5058a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot fPreferences.put("filterstack", "true"); 5158a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot readPreferences(); 5258a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot } 5358a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot return fPreferences; 5458a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot } 5558a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot 5658a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot public static void savePreferences() throws IOException { 5758a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot FileOutputStream fos= new FileOutputStream(getPreferencesFile()); 5858a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot try { 59b3823db9f1192d8c81345740b3e65bd6738ba55bBrett Chabot getPreferences().store(fos, ""); 6058a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot } finally { 6158a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot fos.close(); 6258a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot } 6358a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot } 6458a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot 6549c1b9df188a5be52ffd80a2bd1b9723755d8168Brett Chabot // android-changed remove 'static' qualifier for API compatibility 6649c1b9df188a5be52ffd80a2bd1b9723755d8168Brett Chabot public void setPreference(String key, String value) { 6758a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot getPreferences().put(key, value); 6858a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot } 6958a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot 7058a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot public synchronized void endTest(Test test) { 7158a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot testEnded(test.toString()); 7258a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot } 7358a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot 7458a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot public synchronized void addError(final Test test, final Throwable t) { 7558a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot testFailed(TestRunListener.STATUS_ERROR, test, t); 7658a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot } 7758a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot 7858a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot public synchronized void addFailure(final Test test, final AssertionFailedError t) { 7958a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot testFailed(TestRunListener.STATUS_FAILURE, test, t); 8058a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot } 8158a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot 8258a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot // TestRunListener implementation 8358a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot 8458a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot public abstract void testStarted(String testName); 8558a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot 8658a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot public abstract void testEnded(String testName); 8758a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot 8858a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot public abstract void testFailed(int status, Test test, Throwable t); 8958a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot 9058a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot /** 9158a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot * Returns the Test corresponding to the given suite. This is 9258a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot * a template method, subclasses override runFailed(), clearStatus(). 9358a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot */ 9458a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot public Test getTest(String suiteClassName) { 9558a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot if (suiteClassName.length() <= 0) { 9658a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot clearStatus(); 9758a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot return null; 9858a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot } 99b3823db9f1192d8c81345740b3e65bd6738ba55bBrett Chabot Class<?> testClass= null; 10058a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot try { 10158a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot testClass= loadSuiteClass(suiteClassName); 10258a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot } catch (ClassNotFoundException e) { 10358a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot String clazz= e.getMessage(); 10458a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot if (clazz == null) 10558a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot clazz= suiteClassName; 10658a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot runFailed("Class not found \""+clazz+"\""); 10758a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot return null; 10858a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot } catch(Exception e) { 10958a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot runFailed("Error: "+e.toString()); 11058a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot return null; 11158a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot } 11258a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot Method suiteMethod= null; 11358a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot try { 11458a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot suiteMethod= testClass.getMethod(SUITE_METHODNAME, new Class[0]); 11558a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot } catch(Exception e) { 11658a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot // try to extract a test suite automatically 11758a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot clearStatus(); 11858a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot return new TestSuite(testClass); 11958a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot } 12058a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot if (! Modifier.isStatic(suiteMethod.getModifiers())) { 12158a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot runFailed("Suite() method must be static"); 12258a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot return null; 12358a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot } 12458a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot Test test= null; 12558a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot try { 12658a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot test= (Test)suiteMethod.invoke(null, (Object[])new Class[0]); // static method 12758a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot if (test == null) 12858a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot return test; 12958a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot } 13058a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot catch (InvocationTargetException e) { 13158a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot runFailed("Failed to invoke suite():" + e.getTargetException().toString()); 13258a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot return null; 13358a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot } 13458a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot catch (IllegalAccessException e) { 13558a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot runFailed("Failed to invoke suite():" + e.toString()); 13658a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot return null; 13758a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot } 13858a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot 13958a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot clearStatus(); 14058a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot return test; 14158a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot } 14258a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot 14358a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot /** 14458a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot * Returns the formatted string of the elapsed time. 14558a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot */ 14658a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot public String elapsedTimeAsString(long runTime) { 14758a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot return NumberFormat.getInstance().format((double)runTime/1000); 14858a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot } 14958a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot 15058a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot /** 15158a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot * Processes the command line arguments and 15258a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot * returns the name of the suite class to run or null 15358a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot */ 15458a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot protected String processArguments(String[] args) { 15558a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot String suiteName= null; 15658a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot for (int i= 0; i < args.length; i++) { 15758a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot if (args[i].equals("-noloading")) { 15858a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot setLoading(false); 15958a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot } else if (args[i].equals("-nofilterstack")) { 16058a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot fgFilterStack= false; 16158a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot } else if (args[i].equals("-c")) { 16258a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot if (args.length > i+1) 16358a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot suiteName= extractClassName(args[i+1]); 16458a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot else 16558a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot System.out.println("Missing Test class name"); 16658a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot i++; 16758a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot } else { 16858a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot suiteName= args[i]; 16958a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot } 17058a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot } 17158a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot return suiteName; 17258a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot } 17358a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot 17458a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot /** 17558a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot * Sets the loading behaviour of the test runner 17658a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot */ 17758a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot public void setLoading(boolean enable) { 17858a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot fLoading= enable; 17958a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot } 18058a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot /** 18158a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot * Extract the class name from a String in VA/Java style 18258a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot */ 18358a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot public String extractClassName(String className) { 18458a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot if(className.startsWith("Default package for")) 18558a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot return className.substring(className.lastIndexOf(".")+1); 18658a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot return className; 18758a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot } 18858a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot 18958a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot /** 19058a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot * Truncates a String to the maximum length. 19158a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot */ 19258a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot public static String truncate(String s) { 19358a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot if (fgMaxMessageLength != -1 && s.length() > fgMaxMessageLength) 19458a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot s= s.substring(0, fgMaxMessageLength)+"..."; 19558a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot return s; 19658a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot } 19758a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot 19858a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot /** 19958a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot * Override to define how to handle a failed loading of 20058a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot * a test suite. 20158a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot */ 20258a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot protected abstract void runFailed(String message); 20358a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot 20449c1b9df188a5be52ffd80a2bd1b9723755d8168Brett Chabot // BEGIN android-changed - add back getLoader() for API compatibility 20549c1b9df188a5be52ffd80a2bd1b9723755d8168Brett Chabot /** 20649c1b9df188a5be52ffd80a2bd1b9723755d8168Brett Chabot * Returns the loader to be used. 20749c1b9df188a5be52ffd80a2bd1b9723755d8168Brett Chabot * 20849c1b9df188a5be52ffd80a2bd1b9723755d8168Brett Chabot * @deprecated not present in JUnit4.10 20949c1b9df188a5be52ffd80a2bd1b9723755d8168Brett Chabot */ 21049c1b9df188a5be52ffd80a2bd1b9723755d8168Brett Chabot public TestSuiteLoader getLoader() { 21149c1b9df188a5be52ffd80a2bd1b9723755d8168Brett Chabot return new StandardTestSuiteLoader(); 21249c1b9df188a5be52ffd80a2bd1b9723755d8168Brett Chabot } 21349c1b9df188a5be52ffd80a2bd1b9723755d8168Brett Chabot // END android-changed 21449c1b9df188a5be52ffd80a2bd1b9723755d8168Brett Chabot 21558a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot /** 21658a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot * Returns the loaded Class for a suite name. 21758a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot */ 218b3823db9f1192d8c81345740b3e65bd6738ba55bBrett Chabot protected Class<?> loadSuiteClass(String suiteClassName) throws ClassNotFoundException { 219b3823db9f1192d8c81345740b3e65bd6738ba55bBrett Chabot return Class.forName(suiteClassName); 22058a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot } 22158a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot 22258a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot /** 22358a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot * Clears the status message. 22458a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot */ 22558a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot protected void clearStatus() { // Belongs in the GUI TestRunner class 22658a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot } 22758a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot 22858a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot protected boolean useReloadingTestSuiteLoader() { 229b3823db9f1192d8c81345740b3e65bd6738ba55bBrett Chabot return getPreference("loading").equals("true") && fLoading; 23058a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot } 23158a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot 23258a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot private static File getPreferencesFile() { 23358a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot String home= System.getProperty("user.home"); 23458a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot return new File(home, "junit.properties"); 23558a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot } 23658a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot 23758a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot private static void readPreferences() { 23858a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot InputStream is= null; 23958a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot try { 24058a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot is= new FileInputStream(getPreferencesFile()); 24158a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot setPreferences(new Properties(getPreferences())); 24258a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot getPreferences().load(is); 24358a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot } catch (IOException e) { 24458a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot try { 24558a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot if (is != null) 24658a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot is.close(); 24758a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot } catch (IOException e1) { 24858a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot } 24958a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot } 25058a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot } 25158a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot 25258a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot public static String getPreference(String key) { 25358a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot return getPreferences().getProperty(key); 25458a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot } 25558a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot 25658a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot public static int getPreference(String key, int dflt) { 25758a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot String value= getPreference(key); 25858a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot int intValue= dflt; 25958a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot if (value == null) 26058a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot return intValue; 26158a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot try { 26258a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot intValue= Integer.parseInt(value); 26358a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot } catch (NumberFormatException ne) { 26458a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot } 26558a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot return intValue; 26658a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot } 26758a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot 26858a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot /** 26958a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot * Returns a filtered stack trace 27058a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot */ 27158a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot public static String getFilteredTrace(Throwable t) { 27258a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot StringWriter stringWriter= new StringWriter(); 27358a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot PrintWriter writer= new PrintWriter(stringWriter); 27458a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot t.printStackTrace(writer); 27558a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot StringBuffer buffer= stringWriter.getBuffer(); 27658a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot String trace= buffer.toString(); 27758a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot return BaseTestRunner.getFilteredTrace(trace); 27858a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot } 27958a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot 28049c1b9df188a5be52ffd80a2bd1b9723755d8168Brett Chabot // BEGIN android-changed - add back this method for API compatibility 28149c1b9df188a5be52ffd80a2bd1b9723755d8168Brett Chabot /** @deprecated not present in JUnit4.10 */ 28249c1b9df188a5be52ffd80a2bd1b9723755d8168Brett Chabot public static boolean inVAJava() { 28349c1b9df188a5be52ffd80a2bd1b9723755d8168Brett Chabot return false; 28449c1b9df188a5be52ffd80a2bd1b9723755d8168Brett Chabot } 28549c1b9df188a5be52ffd80a2bd1b9723755d8168Brett Chabot // END android-changed 28649c1b9df188a5be52ffd80a2bd1b9723755d8168Brett Chabot 28758a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot /** 28858a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot * Filters stack frames from internal JUnit classes 28958a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot */ 29058a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot public static String getFilteredTrace(String stack) { 29158a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot if (showStackRaw()) 29258a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot return stack; 29358a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot 29458a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot StringWriter sw= new StringWriter(); 29558a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot PrintWriter pw= new PrintWriter(sw); 29658a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot StringReader sr= new StringReader(stack); 29749c1b9df188a5be52ffd80a2bd1b9723755d8168Brett Chabot // BEGIN android-changed 29849c1b9df188a5be52ffd80a2bd1b9723755d8168Brett Chabot // Use a sensible default buffer size 29949c1b9df188a5be52ffd80a2bd1b9723755d8168Brett Chabot BufferedReader br= new BufferedReader(sr, 1000); 30049c1b9df188a5be52ffd80a2bd1b9723755d8168Brett Chabot // END android-changed 30158a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot 30258a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot String line; 30358a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot try { 30458a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot while ((line= br.readLine()) != null) { 30558a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot if (!filterLine(line)) 30658a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot pw.println(line); 30758a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot } 30858a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot } catch (Exception IOException) { 30958a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot return stack; // return the stack unfiltered 31058a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot } 31158a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot return sw.toString(); 31258a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot } 31358a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot 31458a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot protected static boolean showStackRaw() { 31558a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot return !getPreference("filterstack").equals("true") || fgFilterStack == false; 31658a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot } 31758a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot 31858a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot static boolean filterLine(String line) { 31958a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot String[] patterns= new String[] { 32058a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot "junit.framework.TestCase", 32158a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot "junit.framework.TestResult", 32258a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot "junit.framework.TestSuite", 32358a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot "junit.framework.Assert.", // don't filter AssertionFailure 32458a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot "junit.swingui.TestRunner", 32558a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot "junit.awtui.TestRunner", 32658a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot "junit.textui.TestRunner", 32758a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot "java.lang.reflect.Method.invoke(" 32858a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot }; 32958a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot for (int i= 0; i < patterns.length; i++) { 33058a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot if (line.indexOf(patterns[i]) > 0) 33158a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot return true; 33258a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot } 33358a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot return false; 33458a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot } 33558a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot 33658a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot static { 33758a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot fgMaxMessageLength= getPreference("maxmessage", fgMaxMessageLength); 33858a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot } 33958a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot 34058a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot} 341