From 976f96ee0a427fda4f9f4ab5514233b591bf833c Mon Sep 17 00:00:00 2001 From: Sam Minnee Date: Tue, 19 Oct 2010 03:55:44 +0000 Subject: [PATCH] ENHANCEMENT Added "module=" argument to FullTestSuite (to support comma-separated module lists) (from r111489) git-svn-id: svn://svn.silverstripe.com/silverstripe/open/modules/sapphire/trunk@112906 467b73ca-7a2a-4603-9d3b-597d59a354a9 --- tests/FullTestSuite.php | 86 +++++++++++++++++++++++++++++++---------- 1 file changed, 65 insertions(+), 21 deletions(-) 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; + } }