/** * Provide tests from a given package to the test suite. Handles recursion. * * @param lang.reflect.Package $package * @param unittest.TestSuite $suite * @param var[] $arguments * @return void */ private function provideFrom($package, $suite, $arguments) { foreach ($package->getClasses() as $class) { if ($class->isSubclassOf(TestCase::class) && !Modifiers::isAbstract($class->getModifiers())) { $suite->addTestClass($class, $arguments); } } if ($this->recursive) { foreach ($package->getPackages() as $package) { $this->provideFrom($package, $suite, $arguments); } } }
/** * Returns a list of all classes inside a given package * * @param lang.reflect.Package * @param bool recursive whether to include subpackages * @return lang.XPClass[] */ protected static function testClassesIn(Package $package, $recursive) { $r = array(); foreach ($package->getClasses() as $class) { if (!$class->isSubclassOf('unittest.TestCase') || Modifiers::isAbstract($class->getModifiers())) { continue; } $r[] = $class; } if ($recursive) { foreach ($package->getPackages() as $package) { $r = array_merge($r, self::testClassesIn($package, $recursive)); } } return $r; }