ParsingCoverageReader::parseClass()   A
last analyzed

Complexity

Conditions 1
Paths 1

Size

Total Lines 6
Code Lines 4

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
dl 0
loc 6
rs 9.4285
c 0
b 0
f 0
cc 1
eloc 4
nc 1
nop 2
1
<?php
2
3
namespace PHPRealCoverage;
4
5
use PHPRealCoverage\Parser\ClassParser;
6
use PHPRealCoverage\Parser\Exception\ParserException;
7
use PHPRealCoverage\Proxy\ClassMetadata;
8
use PHPRealCoverage\Proxy\Line;
9
10
class ParsingCoverageReader
11
{
12
    /**
13
     * @var ClassParser
14
     */
15
    private $parser;
16
17
    public function __construct(ClassParser $parser = null)
18
    {
19
        if ($parser == null) {
20
            $parser = new ClassParser();
21
        }
22
        $this->parser = $parser;
23
    }
24
25
    public function parseClass($filename, array $coverageData)
26
    {
27
        $coveredClass = $this->parser->parse($filename);
28
        $this->addCoverage($coveredClass, $coverageData);
29
        return $coveredClass;
30
    }
31
32
    public function addCoverage(ClassMetadata $coveredClass, $coverageData)
33
    {
34
        foreach ($coverageData as $lineNumber => $tests) {
35
            $line = $coveredClass->getLine($lineNumber);
36
            if (is_null($line)) {
37
                throw new ParserException("Failed to find line " . $lineNumber . " in " . $coveredClass->getFilename());
38
            }
39
            $this->populateLine($line, $tests);
40
        }
41
    }
42
43
    public function parseReport(\PHP_CodeCoverage $report)
44
    {
45
        $classes = array();
46
        foreach ($report->getData() as $filename => $coverage) {
47
            try {
48
                $classes[] = $this->parseClass($filename, $coverage);
49
            } catch (ParserException $e) {
50
                echo "Skipping class " . $filename . ", failed to parse\n";
51
            }
52
        }
53
        return $classes;
54
    }
55
56
    /**
57
     * @param Line $line
58
     * @param array $tests
59
     */
60
    public function populateLine(Line $line, array $tests = null)
61
    {
62
        $line->setExecutable(!is_null($tests));
63
64
        if (is_null($tests)) {
65
            return;
66
        }
67
        foreach ($tests as $test) {
68
            $line->addCoverage($test);
69
        }
70
    }
71
}
72