Passed
Push — remove_compat_layer ( 1de0f9...27dc5c )
by Doug
12:36 queued 03:29
created

ReportService::generateReport()   B

Complexity

Conditions 8
Paths 8

Size

Total Lines 38
Code Lines 34

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 0
CRAP Score 72

Importance

Changes 3
Bugs 0 Features 1
Metric Value
cc 8
eloc 34
nc 8
nop 1
dl 0
loc 38
ccs 0
cts 35
cp 0
crap 72
rs 8.1315
c 3
b 0
f 1
1
<?php
2
3
declare(strict_types=1);
4
/**
5
 * Code Coverage Report Service.
6
 *
7
 * @copyright 2013 Anthon Pang
8
 *
9
 * @license BSD-2-Clause
10
 */
11
12
namespace DVDoug\Behat\CodeCoverage\Service;
13
14
use Composer\InstalledVersions;
15
use SebastianBergmann\CodeCoverage\CodeCoverage;
16
use SebastianBergmann\CodeCoverage\Report\Clover;
17
use SebastianBergmann\CodeCoverage\Report\Crap4j;
18
use SebastianBergmann\CodeCoverage\Report\Html\Facade as HtmlFacade;
19
use SebastianBergmann\CodeCoverage\Report\PHP;
20
use SebastianBergmann\CodeCoverage\Report\Text;
21
use SebastianBergmann\CodeCoverage\Report\Xml\Facade as XmlFacade;
22
23
/**
24
 * Code coverage report service.
25
 *
26
 * @author Anthon Pang <[email protected]>
27
 */
28
class ReportService
29
{
30
    /**
31
     * @var array
32
     */
33
    private $config;
34
35
    /**
36
     * Constructor.
37
     */
38
    public function __construct(array $reportConfig)
39
    {
40
        $this->config = $reportConfig;
41
    }
42
43
    /**
44
     * Generate report.
45
     */
46
    public function generateReport(CodeCoverage $coverage): void
47
    {
48
        foreach ($this->config as $format => $config) {
49
            switch ($format) {
50
                case 'clover':
51
                    $report = new Clover();
52
                    $report->process($coverage, $config['target'], $config['name']);
53
                    break;
54
                case 'crap4j':
55
                    $report = new Crap4j();
56
                    $report->process($coverage, $config['target'], $config['name']);
57
                    break;
58
                case 'html':
59
                    $report = new HtmlFacade(
60
                        $config['lowUpperBound'],
61
                        $config['highLowerBound'],
62
                        \sprintf(' and <a href="https://github.com/dvdoug/behat-code-coverage">behat-code-coverage %s</a>',
63
                            InstalledVersions::getPrettyVersion('dvdoug/behat-code-coverage')
64
                        ));
65
                    $report->process($coverage, $config['target']);
66
                    break;
67
                case 'php':
68
                    $report = new PHP();
69
                    $report->process($coverage, $config['target']);
70
                    break;
71
                case 'text':
72
                    $report = new Text(
73
                        $config['lowUpperBound'],
74
                        $config['highLowerBound'],
75
                        $config['showUncoveredFiles'],
76
                        $config['showOnlySummary']
77
                    );
78
                    echo $report->process($coverage, $config['showColors']);
79
                    break;
80
                case 'xml':
81
                    $report = new XmlFacade('');
82
                    $report->process($coverage, $config['target']);
83
                    break;
84
            }
85
        }
86
    }
87
}
88