1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
|
<?php /* * This file is part of PHPUnit. * * (c) Sebastian Bergmann <sebastian@phpunit.de> * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */
/** * Utility class for blacklisting PHPUnit's own source code files. */ class PHPUnit_Util_Blacklist { /** * @var array */ public static $blacklistedClassNames = [ 'File_Iterator' => 1, 'PHP_Invoker' => 1, 'PHP_Timer' => 1, 'PHP_Token' => 1, 'PHPUnit_Framework_TestCase' => 2, 'PHPUnit_Extensions_Database_TestCase' => 2, 'PHPUnit_Framework_MockObject_Generator' => 2, 'Text_Template' => 1, 'Symfony\Component\Yaml\Yaml' => 1, 'SebastianBergmann\CodeCoverage\CodeCoverage' => 1, 'SebastianBergmann\Diff\Diff' => 1, 'SebastianBergmann\Environment\Runtime' => 1, 'SebastianBergmann\Comparator\Comparator' => 1, 'SebastianBergmann\Exporter\Exporter' => 1, 'SebastianBergmann\GlobalState\Snapshot' => 1, 'SebastianBergmann\RecursionContext\Context' => 1, 'SebastianBergmann\Version' => 1, 'Composer\Autoload\ClassLoader' => 1, 'Doctrine\Instantiator\Instantiator' => 1, 'phpDocumentor\Reflection\DocBlock' => 1, 'Prophecy\Prophet' => 1, 'DeepCopy\DeepCopy' => 1 ];
/** * @var array */ private static $directories;
/** * @return array */ public function getBlacklistedDirectories() { $this->initialize();
return self::$directories; }
/** * @param string $file * * @return bool */ public function isBlacklisted($file) { if (defined('PHPUNIT_TESTSUITE')) { return false; }
$this->initialize();
foreach (self::$directories as $directory) { if (strpos($file, $directory) === 0) { return true; } }
return false; }
private function initialize() { if (self::$directories === null) { self::$directories = [];
foreach (self::$blacklistedClassNames as $className => $parent) { if (!class_exists($className)) { continue; }
$reflector = new ReflectionClass($className); $directory = $reflector->getFileName();
for ($i = 0; $i < $parent; $i++) { $directory = dirname($directory); }
self::$directories[] = $directory; }
// Hide process isolation workaround on Windows. // @see PHPUnit_Util_PHP::factory() // @see PHPUnit_Util_PHP_Windows::process() if (DIRECTORY_SEPARATOR === '\\') { // tempnam() prefix is limited to first 3 chars. // @see http://php.net/manual/en/function.tempnam.php self::$directories[] = sys_get_temp_dir() . '\\PHP'; } } } }
|