|
33 | 33 | use PHPUnit\Metadata\UsesFunction;
|
34 | 34 | use RecursiveIteratorIterator;
|
35 | 35 | use SebastianBergmann\CodeUnit\CodeUnitCollection;
|
| 36 | +use SebastianBergmann\CodeUnit\Exception as CodeUnitException; |
36 | 37 | use SebastianBergmann\CodeUnit\InvalidCodeUnitException;
|
37 | 38 | use SebastianBergmann\CodeUnit\Mapper;
|
38 | 39 |
|
@@ -79,34 +80,14 @@ public function linesToBeCovered(string $className, string $methodName): array|f
|
79 | 80 | $mapper = new Mapper;
|
80 | 81 |
|
81 | 82 | foreach (Registry::parser()->forClassAndMethod($className, $methodName) as $metadata) {
|
82 |
| - if ($metadata->isCoversClass() || $metadata->isCoversFunction()) { |
83 |
| - assert($metadata instanceof CoversClass || $metadata instanceof CoversFunction); |
| 83 | + if (!$metadata->isCoversClass() && !$metadata->isCoversFunction() && !$metadata->isCovers()) { |
| 84 | + continue; |
| 85 | + } |
84 | 86 |
|
85 |
| - try { |
86 |
| - $codeUnits = $codeUnits->mergeWith( |
87 |
| - $mapper->stringToCodeUnits($metadata->asStringForCodeUnitMapper()), |
88 |
| - ); |
89 |
| - } catch (InvalidCodeUnitException $e) { |
90 |
| - if ($metadata->isCoversClass()) { |
91 |
| - if (interface_exists($metadata->className())) { |
92 |
| - $type = 'Interface'; |
93 |
| - } else { |
94 |
| - $type = 'Class'; |
95 |
| - } |
96 |
| - } else { |
97 |
| - $type = 'Function'; |
98 |
| - } |
| 87 | + assert($metadata instanceof CoversClass || $metadata instanceof CoversFunction || $metadata instanceof Covers); |
99 | 88 |
|
100 |
| - throw new InvalidCoversTargetException( |
101 |
| - sprintf( |
102 |
| - '%s "%s" is not a valid target for code coverage', |
103 |
| - $type, |
104 |
| - $metadata->asStringForCodeUnitMapper(), |
105 |
| - ), |
106 |
| - $e->getCode(), |
107 |
| - $e, |
108 |
| - ); |
109 |
| - } |
| 89 | + if ($metadata->isCoversClass() || $metadata->isCoversFunction()) { |
| 90 | + $codeUnits = $codeUnits->mergeWith($this->mapToCodeUnits($metadata)); |
110 | 91 | } elseif ($metadata->isCovers()) {
|
111 | 92 | assert($metadata instanceof Covers);
|
112 | 93 |
|
@@ -177,34 +158,14 @@ public function linesToBeUsed(string $className, string $methodName): array
|
177 | 158 | $mapper = new Mapper;
|
178 | 159 |
|
179 | 160 | foreach (Registry::parser()->forClassAndMethod($className, $methodName) as $metadata) {
|
180 |
| - if ($metadata->isUsesClass() || $metadata->isUsesFunction()) { |
181 |
| - assert($metadata instanceof UsesClass || $metadata instanceof UsesFunction); |
| 161 | + if (!$metadata->isUsesClass() && !$metadata->isUsesFunction() && !$metadata->isUses()) { |
| 162 | + continue; |
| 163 | + } |
182 | 164 |
|
183 |
| - try { |
184 |
| - $codeUnits = $codeUnits->mergeWith( |
185 |
| - $mapper->stringToCodeUnits($metadata->asStringForCodeUnitMapper()), |
186 |
| - ); |
187 |
| - } catch (InvalidCodeUnitException $e) { |
188 |
| - if ($metadata->isUsesClass()) { |
189 |
| - if (interface_exists($metadata->className())) { |
190 |
| - $type = 'Interface'; |
191 |
| - } else { |
192 |
| - $type = 'Class'; |
193 |
| - } |
194 |
| - } else { |
195 |
| - $type = 'Function'; |
196 |
| - } |
| 165 | + assert($metadata instanceof UsesClass || $metadata instanceof UsesFunction || $metadata instanceof Uses); |
197 | 166 |
|
198 |
| - throw new InvalidCoversTargetException( |
199 |
| - sprintf( |
200 |
| - '%s "%s" is not a valid target for code coverage', |
201 |
| - $type, |
202 |
| - $metadata->asStringForCodeUnitMapper(), |
203 |
| - ), |
204 |
| - $e->getCode(), |
205 |
| - $e, |
206 |
| - ); |
207 |
| - } |
| 167 | + if ($metadata->isUsesClass() || $metadata->isUsesFunction()) { |
| 168 | + $codeUnits = $codeUnits->mergeWith($this->mapToCodeUnits($metadata)); |
208 | 169 | } elseif ($metadata->isUses()) {
|
209 | 170 | assert($metadata instanceof Uses);
|
210 | 171 |
|
@@ -319,4 +280,37 @@ private function codeUnitsIgnoredBy(string $className): CodeUnitCollection
|
319 | 280 |
|
320 | 281 | return $codeUnits;
|
321 | 282 | }
|
| 283 | + |
| 284 | + /** |
| 285 | + * @throws InvalidCoversTargetException |
| 286 | + */ |
| 287 | + private function mapToCodeUnits(CoversClass|CoversFunction|UsesClass|UsesFunction $metadata): CodeUnitCollection |
| 288 | + { |
| 289 | + $mapper = new Mapper; |
| 290 | + |
| 291 | + try { |
| 292 | + return $mapper->stringToCodeUnits($metadata->asStringForCodeUnitMapper()); |
| 293 | + } catch (CodeUnitException $e) { |
| 294 | + if ($metadata->isCoversClass() || $metadata->isUsesClass()) { |
| 295 | + if (interface_exists($metadata->className())) { |
| 296 | + $type = 'Interface'; |
| 297 | + } else { |
| 298 | + $type = 'Class'; |
| 299 | + } |
| 300 | + } else { |
| 301 | + $type = 'Function'; |
| 302 | + } |
| 303 | + |
| 304 | + throw new InvalidCoversTargetException( |
| 305 | + sprintf( |
| 306 | + '%s "%s" is not a valid target for code coverage', |
| 307 | + $type, |
| 308 | + $metadata->asStringForCodeUnitMapper(), |
| 309 | + ), |
| 310 | + $e->getCode(), |
| 311 | + $e, |
| 312 | + ); |
| 313 | + } |
| 314 | + |
| 315 | + } |
322 | 316 | }
|
0 commit comments