3 * This file is part of PHPUnit.
5 * (c) Sebastian Bergmann <sebastian@phpunit.de>
7 * For the full copyright and license information, please view the LICENSE
8 * file that was distributed with this source code.
12 * The standard test suite loader.
14 * @since Class available since Release 2.0.0
16 class PHPUnit_Runner_StandardTestSuiteLoader implements PHPUnit_Runner_TestSuiteLoader
19 * @param string $suiteClassName
20 * @param string $suiteClassFile
22 * @return ReflectionClass
24 * @throws PHPUnit_Framework_Exception
26 public function load($suiteClassName, $suiteClassFile = '')
28 $suiteClassName = str_replace('.php', '', $suiteClassName);
30 if (empty($suiteClassFile)) {
31 $suiteClassFile = PHPUnit_Util_Filesystem::classNameToFilename(
36 if (!class_exists($suiteClassName, false)) {
37 $loadedClasses = get_declared_classes();
39 $filename = PHPUnit_Util_Fileloader::checkAndLoad($suiteClassFile);
41 $loadedClasses = array_values(
42 array_diff(get_declared_classes(), $loadedClasses)
46 if (!class_exists($suiteClassName, false) && !empty($loadedClasses)) {
47 $offset = 0 - strlen($suiteClassName);
49 foreach ($loadedClasses as $loadedClass) {
50 $class = new ReflectionClass($loadedClass);
51 if (substr($loadedClass, $offset) === $suiteClassName &&
52 $class->getFileName() == $filename) {
53 $suiteClassName = $loadedClass;
59 if (!class_exists($suiteClassName, false) && !empty($loadedClasses)) {
60 $testCaseClass = 'PHPUnit_Framework_TestCase';
62 foreach ($loadedClasses as $loadedClass) {
63 $class = new ReflectionClass($loadedClass);
64 $classFile = $class->getFileName();
66 if ($class->isSubclassOf($testCaseClass) &&
67 !$class->isAbstract()) {
68 $suiteClassName = $loadedClass;
69 $testCaseClass = $loadedClass;
71 if ($classFile == realpath($suiteClassFile)) {
76 if ($class->hasMethod('suite')) {
77 $method = $class->getMethod('suite');
79 if (!$method->isAbstract() &&
80 $method->isPublic() &&
81 $method->isStatic()) {
82 $suiteClassName = $loadedClass;
84 if ($classFile == realpath($suiteClassFile)) {
92 if (class_exists($suiteClassName, false)) {
93 $class = new ReflectionClass($suiteClassName);
95 if ($class->getFileName() == realpath($suiteClassFile)) {
100 throw new PHPUnit_Framework_Exception(
102 "Class '%s' could not be found in '%s'.",
110 * @param ReflectionClass $aClass
112 * @return ReflectionClass
114 public function reload(ReflectionClass $aClass)