|
83 | 83 | use function substr; |
84 | 84 | use function token_get_all; |
85 | 85 | use function trim; |
| 86 | +use PHPUnit\Runner\BaseTestRunner; |
86 | 87 | use SebastianBergmann\CodeCoverage\Node\File as FileNode; |
87 | 88 | use SebastianBergmann\CodeCoverage\Percentage; |
88 | 89 | use SebastianBergmann\Template\Template; |
@@ -381,64 +382,23 @@ private function renderSourceByLine(FileNode $node): string |
381 | 382 | } elseif ($numTests === 0) { |
382 | 383 | $trClass = ' class="danger"'; |
383 | 384 | } else { |
384 | | - $lineCss = 'covered-by-large-tests'; |
385 | | - $popoverContent = '<ul>'; |
386 | | - |
387 | 385 | if ($numTests > 1) { |
388 | 386 | $popoverTitle = $numTests . ' tests cover line ' . $i; |
389 | 387 | } else { |
390 | 388 | $popoverTitle = '1 test covers line ' . $i; |
391 | 389 | } |
392 | 390 |
|
| 391 | + $lineCss = 'covered-by-large-tests'; |
| 392 | + $popoverContent = '<ul>'; |
| 393 | + |
393 | 394 | foreach ($coverageData[$i] as $test) { |
394 | 395 | if ($lineCss === 'covered-by-large-tests' && $testData[$test]['size'] === 'medium') { |
395 | 396 | $lineCss = 'covered-by-medium-tests'; |
396 | 397 | } elseif ($testData[$test]['size'] === 'small') { |
397 | 398 | $lineCss = 'covered-by-small-tests'; |
398 | 399 | } |
399 | 400 |
|
400 | | - switch ($testData[$test]['status']) { |
401 | | - case 0: |
402 | | - switch ($testData[$test]['size']) { |
403 | | - case 'small': |
404 | | - $testCSS = ' class="covered-by-small-tests"'; |
405 | | - |
406 | | - break; |
407 | | - |
408 | | - case 'medium': |
409 | | - $testCSS = ' class="covered-by-medium-tests"'; |
410 | | - |
411 | | - break; |
412 | | - |
413 | | - default: |
414 | | - $testCSS = ' class="covered-by-large-tests"'; |
415 | | - |
416 | | - break; |
417 | | - } |
418 | | - |
419 | | - break; |
420 | | - |
421 | | - case 1: |
422 | | - case 2: |
423 | | - $testCSS = ' class="warning"'; |
424 | | - |
425 | | - break; |
426 | | - |
427 | | - case 3: |
428 | | - case 4: |
429 | | - $testCSS = ' class="danger"'; |
430 | | - |
431 | | - break; |
432 | | - |
433 | | - default: |
434 | | - $testCSS = ''; |
435 | | - } |
436 | | - |
437 | | - $popoverContent .= sprintf( |
438 | | - '<li%s>%s</li>', |
439 | | - $testCSS, |
440 | | - htmlspecialchars($test, $this->htmlSpecialCharsFlags) |
441 | | - ); |
| 401 | + $popoverContent .= $this->createPopoverContentForTest($test, $testData[$test]); |
442 | 402 | } |
443 | 403 |
|
444 | 404 | $popoverContent .= '</ul>'; |
@@ -637,4 +597,52 @@ private function abbreviateClassName(string $className): string |
637 | 597 |
|
638 | 598 | return $className; |
639 | 599 | } |
| 600 | + |
| 601 | + private function createPopoverContentForTest(string $test, array $testData): string |
| 602 | + { |
| 603 | + switch ($testData['status']) { |
| 604 | + case BaseTestRunner::STATUS_PASSED: |
| 605 | + switch ($testData['size']) { |
| 606 | + case 'small': |
| 607 | + $testCSS = ' class="covered-by-small-tests"'; |
| 608 | + |
| 609 | + break; |
| 610 | + |
| 611 | + case 'medium': |
| 612 | + $testCSS = ' class="covered-by-medium-tests"'; |
| 613 | + |
| 614 | + break; |
| 615 | + |
| 616 | + default: |
| 617 | + $testCSS = ' class="covered-by-large-tests"'; |
| 618 | + |
| 619 | + break; |
| 620 | + } |
| 621 | + |
| 622 | + break; |
| 623 | + |
| 624 | + case BaseTestRunner::STATUS_SKIPPED: |
| 625 | + case BaseTestRunner::STATUS_INCOMPLETE: |
| 626 | + case BaseTestRunner::STATUS_RISKY: |
| 627 | + case BaseTestRunner::STATUS_WARNING: |
| 628 | + $testCSS = ' class="warning"'; |
| 629 | + |
| 630 | + break; |
| 631 | + |
| 632 | + case BaseTestRunner::STATUS_FAILURE: |
| 633 | + case BaseTestRunner::STATUS_ERROR: |
| 634 | + $testCSS = ' class="danger"'; |
| 635 | + |
| 636 | + break; |
| 637 | + |
| 638 | + default: |
| 639 | + $testCSS = ''; |
| 640 | + } |
| 641 | + |
| 642 | + return sprintf( |
| 643 | + '<li%s>%s</li>', |
| 644 | + $testCSS, |
| 645 | + htmlspecialchars($test, $this->htmlSpecialCharsFlags) |
| 646 | + ); |
| 647 | + } |
640 | 648 | } |
0 commit comments