Skip to content

Commit 2053681

Browse files
Add PHP_CodeCoverage_Filter_Iterator.
1 parent a89377c commit 2053681

File tree

1 file changed

+152
-0
lines changed

1 file changed

+152
-0
lines changed

PHP/CodeCoverage/Filter/Iterator.php

Lines changed: 152 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,152 @@
1+
<?php
2+
/**
3+
* PHP_CodeCoverage
4+
*
5+
* Copyright (c) 2009, Sebastian Bergmann <[email protected]>.
6+
* All rights reserved.
7+
*
8+
* Redistribution and use in source and binary forms, with or without
9+
* modification, are permitted provided that the following conditions
10+
* are met:
11+
*
12+
* * Redistributions of source code must retain the above copyright
13+
* notice, this list of conditions and the following disclaimer.
14+
*
15+
* * Redistributions in binary form must reproduce the above copyright
16+
* notice, this list of conditions and the following disclaimer in
17+
* the documentation and/or other materials provided with the
18+
* distribution.
19+
*
20+
* * Neither the name of Sebastian Bergmann nor the names of his
21+
* contributors may be used to endorse or promote products derived
22+
* from this software without specific prior written permission.
23+
*
24+
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
25+
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
26+
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
27+
* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
28+
* COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
29+
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
30+
* BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
31+
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
32+
* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
33+
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
34+
* ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
35+
* POSSIBILITY OF SUCH DAMAGE.
36+
*
37+
* @category PHP
38+
* @package CodeCoverage
39+
* @author Sebastian Bergmann <[email protected]>
40+
* @copyright 2009 Sebastian Bergmann <[email protected]>
41+
* @license http://www.opensource.org/licenses/bsd-license.php BSD License
42+
* @link http://github.com/sebastianbergmann/php-code-coverage
43+
* @since File available since Release 1.0.0
44+
*/
45+
46+
require_once 'PHPUnit/Util/Filter.php';
47+
48+
PHPUnit_Util_Filter::addFileToFilter(__FILE__, 'PHPUNIT');
49+
50+
/**
51+
*
52+
*
53+
* @category PHP
54+
* @package CodeCoverage
55+
* @author Sebastian Bergmann <[email protected]>
56+
* @copyright 2009 Sebastian Bergmann <[email protected]>
57+
* @license http://www.opensource.org/licenses/bsd-license.php BSD License
58+
* @version Release: @package_version@
59+
* @link http://github.com/sebastianbergmann/php-code-coverage
60+
* @since Class available since Release 1.0.0
61+
*/
62+
class PHP_CodeCoverage_Filter_Iterator extends FilterIterator
63+
{
64+
/**
65+
* @var array
66+
*/
67+
protected $suffixes = array();
68+
69+
/**
70+
* @var string
71+
*/
72+
protected $prefixes = array();
73+
74+
/**
75+
* @param Iterator $iterator
76+
* @param array $suffixes
77+
* @param array $prefixes
78+
*/
79+
public function __construct(Iterator $iterator, $suffixes = array(), $prefixes = array())
80+
{
81+
if (is_string($suffixes)) {
82+
if (!empty($suffixes)) {
83+
$suffixes = array($suffixes);
84+
} else {
85+
$suffixes = array();
86+
}
87+
}
88+
89+
if (!is_array($suffixes)) {
90+
throw new InvalidArgumentException('Argument #2 of PHP_CodeCoverage_Filter_Iterator:__construct() is no array or string.');
91+
}
92+
93+
$this->suffixes = $suffixes;
94+
95+
if (is_string($prefixes)) {
96+
if (!empty($prefixes)) {
97+
$prefixes = array($prefixes);
98+
} else {
99+
$prefixes = array();
100+
}
101+
}
102+
103+
if (!is_array($prefixes)) {
104+
throw new InvalidArgumentException('Argument #3 of PHP_CodeCoverage_Filter_Iterator:__construct() is no array or string.');
105+
}
106+
107+
$this->prefixes = $prefixes;
108+
109+
parent::__construct($iterator);
110+
}
111+
112+
/**
113+
* @return boolean
114+
*/
115+
public function accept()
116+
{
117+
$string = (string)$this->getInnerIterator()->current();
118+
119+
if (!empty($this->prefixes)) {
120+
$matched = FALSE;
121+
122+
foreach ($this->prefixes as $prefix) {
123+
if (strpos($string, $prefix) === 0) {
124+
$matched = TRUE;
125+
break;
126+
}
127+
}
128+
129+
if (!$matched) {
130+
return FALSE;
131+
}
132+
}
133+
134+
if (!empty($this->suffixes)) {
135+
$matched = FALSE;
136+
137+
foreach ($this->suffixes as $suffix) {
138+
if (substr($string, -1 * strlen($suffix)) == $suffix) {
139+
$matched = TRUE;
140+
break;
141+
}
142+
}
143+
144+
if (!$matched) {
145+
return FALSE;
146+
}
147+
}
148+
149+
return TRUE;
150+
}
151+
}
152+
?>

0 commit comments

Comments
 (0)