3 * This file is part of the PHP_CodeCoverage package.
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 * Filter for blacklisting and whitelisting of code coverage information.
14 * @since Class available since Release 1.0.0
16 class PHP_CodeCoverage_Filter
19 * Source files that are blacklisted.
23 private $blacklistedFiles = array();
26 * Source files that are whitelisted.
30 private $whitelistedFiles = array();
33 * Adds a directory to the blacklist (recursively).
35 * @param string $directory
36 * @param string $suffix
37 * @param string $prefix
39 public function addDirectoryToBlacklist($directory, $suffix = '.php', $prefix = '')
41 $facade = new File_Iterator_Facade;
42 $files = $facade->getFilesAsArray($directory, $suffix, $prefix);
44 foreach ($files as $file) {
45 $this->addFileToBlacklist($file);
50 * Adds a file to the blacklist.
52 * @param string $filename
54 public function addFileToBlacklist($filename)
56 $this->blacklistedFiles[realpath($filename)] = true;
60 * Adds files to the blacklist.
64 public function addFilesToBlacklist(array $files)
66 foreach ($files as $file) {
67 $this->addFileToBlacklist($file);
72 * Removes a directory from the blacklist (recursively).
74 * @param string $directory
75 * @param string $suffix
76 * @param string $prefix
78 public function removeDirectoryFromBlacklist($directory, $suffix = '.php', $prefix = '')
80 $facade = new File_Iterator_Facade;
81 $files = $facade->getFilesAsArray($directory, $suffix, $prefix);
83 foreach ($files as $file) {
84 $this->removeFileFromBlacklist($file);
89 * Removes a file from the blacklist.
91 * @param string $filename
93 public function removeFileFromBlacklist($filename)
95 $filename = realpath($filename);
97 if (isset($this->blacklistedFiles[$filename])) {
98 unset($this->blacklistedFiles[$filename]);
103 * Adds a directory to the whitelist (recursively).
105 * @param string $directory
106 * @param string $suffix
107 * @param string $prefix
109 public function addDirectoryToWhitelist($directory, $suffix = '.php', $prefix = '')
111 $facade = new File_Iterator_Facade;
112 $files = $facade->getFilesAsArray($directory, $suffix, $prefix);
114 foreach ($files as $file) {
115 $this->addFileToWhitelist($file);
120 * Adds a file to the whitelist.
122 * @param string $filename
124 public function addFileToWhitelist($filename)
126 $this->whitelistedFiles[realpath($filename)] = true;
130 * Adds files to the whitelist.
132 * @param array $files
134 public function addFilesToWhitelist(array $files)
136 foreach ($files as $file) {
137 $this->addFileToWhitelist($file);
142 * Removes a directory from the whitelist (recursively).
144 * @param string $directory
145 * @param string $suffix
146 * @param string $prefix
148 public function removeDirectoryFromWhitelist($directory, $suffix = '.php', $prefix = '')
150 $facade = new File_Iterator_Facade;
151 $files = $facade->getFilesAsArray($directory, $suffix, $prefix);
153 foreach ($files as $file) {
154 $this->removeFileFromWhitelist($file);
159 * Removes a file from the whitelist.
161 * @param string $filename
163 public function removeFileFromWhitelist($filename)
165 $filename = realpath($filename);
167 if (isset($this->whitelistedFiles[$filename])) {
168 unset($this->whitelistedFiles[$filename]);
173 * Checks whether a filename is a real filename.
175 * @param string $filename
178 public function isFile($filename)
180 if ($filename == '-' ||
181 strpos($filename, 'vfs://') === 0 ||
182 strpos($filename, 'xdebug://debug-eval') !== false ||
183 strpos($filename, 'eval()\'d code') !== false ||
184 strpos($filename, 'runtime-created function') !== false ||
185 strpos($filename, 'runkit created function') !== false ||
186 strpos($filename, 'assert code') !== false ||
187 strpos($filename, 'regexp code') !== false) {
191 return file_exists($filename);
195 * Checks whether or not a file is filtered.
197 * When the whitelist is empty (default), blacklisting is used.
198 * When the whitelist is not empty, whitelisting is used.
200 * @param string $filename
202 * @throws PHP_CodeCoverage_Exception
204 public function isFiltered($filename)
206 if (!$this->isFile($filename)) {
210 $filename = realpath($filename);
212 if (!empty($this->whitelistedFiles)) {
213 return !isset($this->whitelistedFiles[$filename]);
216 return isset($this->blacklistedFiles[$filename]);
220 * Returns the list of blacklisted files.
224 public function getBlacklist()
226 return array_keys($this->blacklistedFiles);
230 * Returns the list of whitelisted files.
234 public function getWhitelist()
236 return array_keys($this->whitelistedFiles);
240 * Returns whether this filter has a whitelist.
243 * @since Method available since Release 1.1.0
245 public function hasWhitelist()
247 return !empty($this->whitelistedFiles);
251 * Returns the blacklisted files.
254 * @since Method available since Release 2.0.0
256 public function getBlacklistedFiles()
258 return $this->blacklistedFiles;
262 * Sets the blacklisted files.
264 * @param array $blacklistedFiles
265 * @since Method available since Release 2.0.0
267 public function setBlacklistedFiles($blacklistedFiles)
269 $this->blacklistedFiles = $blacklistedFiles;
273 * Returns the whitelisted files.
276 * @since Method available since Release 2.0.0
278 public function getWhitelistedFiles()
280 return $this->whitelistedFiles;
284 * Sets the whitelisted files.
286 * @param array $whitelistedFiles
287 * @since Method available since Release 2.0.0
289 public function setWhitelistedFiles($whitelistedFiles)
291 $this->whitelistedFiles = $whitelistedFiles;