/** * Copyright (c) 2005-2013 by Appcelerator, Inc. All Rights Reserved. * Licensed under the terms of the Eclipse Public License (EPL). * Please see the license.txt included with this distribution for details. * Any modifications to this file must keep this entire header intact. */ package com.python.pydev.runalltests2; //reference: http://www.eclipsezone.com/eclipse/forums/t65337.html import java.lang.reflect.Modifier; import java.util.Enumeration; import junit.framework.Test; import junit.framework.TestCase; import junit.framework.TestSuite; import junit3.runner.ClassPathTestCollector; import junit3.runner.TestCollector; public class AllTests { private static class ClassFileDetector extends ClassPathTestCollector { @Override protected boolean isTestClass(String classFileName) { return classFileName.endsWith(SUFFIX + ".class") && isValidTest(classNameFromFile(classFileName)); } } public static final String SUFFIX = "Test"; private static void addTestsToSuite(TestCollector collector, TestSuite suite) { Enumeration<String> e = collector.collectTests(); while (e.hasMoreElements()) { String name = (String) e.nextElement(); try { suite.addTestSuite((Class<? extends TestCase>) Class.forName(name)); } catch (ClassNotFoundException e1) { System.err.println("Cannot load test: " + e1); } } } private static boolean isValidTest(String name) { try { return name.endsWith(SUFFIX) && ((Class.forName(name).getModifiers() & Modifier.ABSTRACT) == 0); } catch (ClassNotFoundException e) { System.err.println(e.toString()); return false; } } public static Test suite() { TestSuite suite = new TestSuite(AllTests.class.getName()); addTestsToSuite(new ClassFileDetector(), suite); if (suite.countTestCases() == 0) { throw new Error("There are no test cases to run"); } else { return suite; } } }