diff --git a/tests/FullTestSuite.php b/tests/FullTestSuite.php index d5586e125..77e2dc6f9 100644 --- a/tests/FullTestSuite.php +++ b/tests/FullTestSuite.php @@ -1,35 +1,79 @@ $v) { - $reflection = new ReflectionClass($class); - if (!$reflection->isInstantiable()) { - unset($tests[$class]); - } - } - - return $tests; - } - + + /** + * Called by the PHPUnit runner to gather runnable tests. + * + * @return PHPUnit_Framework_TestSuite + */ public static function suite() { $suite = new PHPUnit_Framework_TestSuite(); - $classList = self::get_tests(); + if(isset($_GET['module'])) { + $classList = self::get_module_tests($_GET['module']); + } else { + $classList = self::get_all_tests(); + } + foreach($classList as $className) { $suite->addTest(new SapphireTestSuite($className)); } return $suite; } + + /** + * @return Array + */ + public static function get_all_tests() { + ManifestBuilder::load_test_manifest(); + $tests = ClassInfo::subclassesFor('SapphireTest'); + array_shift($tests); + + return $tests; + } + + /** + * Run tests for one or more "modules". + * A module is generally a toplevel folder, e.g. "mysite" or "sapphire". + * + * @param String $nameStr + * @return Array + */ + protected static function get_module_tests($namesStr) { + $tests = array(); + $names = explode(',', $namesStr); + foreach($names as $name) { + $classesForModule = ClassInfo::classes_for_folder($name); + if($classesForModule) foreach($classesForModule as $class) { + if(class_exists($class) && is_subclass_of($class, 'SapphireTest')) { + $tests[] = $class; + } + } + } + + return $tests; + } }