Version 1
[yaffs-website] / vendor / phpunit / phpunit / src / Runner / StandardTestSuiteLoader.php
1 <?php
2 /*
3  * This file is part of PHPUnit.
4  *
5  * (c) Sebastian Bergmann <sebastian@phpunit.de>
6  *
7  * For the full copyright and license information, please view the LICENSE
8  * file that was distributed with this source code.
9  */
10
11 /**
12  * The standard test suite loader.
13  *
14  * @since Class available since Release 2.0.0
15  */
16 class PHPUnit_Runner_StandardTestSuiteLoader implements PHPUnit_Runner_TestSuiteLoader
17 {
18     /**
19      * @param string $suiteClassName
20      * @param string $suiteClassFile
21      *
22      * @return ReflectionClass
23      *
24      * @throws PHPUnit_Framework_Exception
25      */
26     public function load($suiteClassName, $suiteClassFile = '')
27     {
28         $suiteClassName = str_replace('.php', '', $suiteClassName);
29
30         if (empty($suiteClassFile)) {
31             $suiteClassFile = PHPUnit_Util_Filesystem::classNameToFilename(
32                 $suiteClassName
33             );
34         }
35
36         if (!class_exists($suiteClassName, false)) {
37             $loadedClasses = get_declared_classes();
38
39             $filename = PHPUnit_Util_Fileloader::checkAndLoad($suiteClassFile);
40
41             $loadedClasses = array_values(
42                 array_diff(get_declared_classes(), $loadedClasses)
43             );
44         }
45
46         if (!class_exists($suiteClassName, false) && !empty($loadedClasses)) {
47             $offset = 0 - strlen($suiteClassName);
48
49             foreach ($loadedClasses as $loadedClass) {
50                 $class = new ReflectionClass($loadedClass);
51                 if (substr($loadedClass, $offset) === $suiteClassName &&
52                     $class->getFileName() == $filename) {
53                     $suiteClassName = $loadedClass;
54                     break;
55                 }
56             }
57         }
58
59         if (!class_exists($suiteClassName, false) && !empty($loadedClasses)) {
60             $testCaseClass = 'PHPUnit_Framework_TestCase';
61
62             foreach ($loadedClasses as $loadedClass) {
63                 $class     = new ReflectionClass($loadedClass);
64                 $classFile = $class->getFileName();
65
66                 if ($class->isSubclassOf($testCaseClass) &&
67                     !$class->isAbstract()) {
68                     $suiteClassName = $loadedClass;
69                     $testCaseClass  = $loadedClass;
70
71                     if ($classFile == realpath($suiteClassFile)) {
72                         break;
73                     }
74                 }
75
76                 if ($class->hasMethod('suite')) {
77                     $method = $class->getMethod('suite');
78
79                     if (!$method->isAbstract() &&
80                         $method->isPublic() &&
81                         $method->isStatic()) {
82                         $suiteClassName = $loadedClass;
83
84                         if ($classFile == realpath($suiteClassFile)) {
85                             break;
86                         }
87                     }
88                 }
89             }
90         }
91
92         if (class_exists($suiteClassName, false)) {
93             $class = new ReflectionClass($suiteClassName);
94
95             if ($class->getFileName() == realpath($suiteClassFile)) {
96                 return $class;
97             }
98         }
99
100         throw new PHPUnit_Framework_Exception(
101             sprintf(
102                 "Class '%s' could not be found in '%s'.",
103                 $suiteClassName,
104                 $suiteClassFile
105             )
106         );
107     }
108
109     /**
110      * @param ReflectionClass $aClass
111      *
112      * @return ReflectionClass
113      */
114     public function reload(ReflectionClass $aClass)
115     {
116         return $aClass;
117     }
118 }