Completed
Push — master ( 70f161...72dc5f )
by Julian
10s
created

CoverageMerger::addCoverageFromFile()   A

Complexity

Conditions 4
Paths 3

Size

Total Lines 18
Code Lines 9

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 11
CRAP Score 4

Importance

Changes 0
Metric Value
dl 0
loc 18
ccs 11
cts 11
cp 1
rs 9.2
c 0
b 0
f 0
cc 4
eloc 9
nc 3
nop 1
crap 4
1
<?php
2
3
namespace ParaTest\Coverage;
4
5
use SebastianBergmann\CodeCoverage\CodeCoverage;
6
7
class CoverageMerger
8
{
9
    /**
10
     * @var \PHP_CodeCoverage|CodeCoverage
11
     */
12
    private $coverage = null;
13
14
    /**
15
     * @param \PHP_CodeCoverage|CodeCoverage $coverage
16
     */
17 9
    private function addCoverage($coverage)
18
    {
19 9
        if (null === $this->coverage) {
20 9
            $this->coverage = $coverage;
21 9
        } else {
22 7
            $this->coverage->merge($coverage);
23
        }
24 9
    }
25
26
    /**
27
     * Returns coverage object from file.
28
     *
29
     * @param \SplFileObject $coverageFile Coverage file.
30
     *
31
     * @return \PHP_CodeCoverage|CodeCoverage
32
     */
33 9
    private function getCoverageObject(\SplFileObject $coverageFile)
34
    {
35 9
        if ('<?php' === $coverageFile->fread(5)) {
36
            return include $coverageFile->getRealPath();
37
        }
38
39 9
        $coverageFile->fseek(0);
40
        // the PHPUnit 3.x and below
41 9
        return unserialize($coverageFile->fread($coverageFile->getSize()));
42
    }
43
44
    /**
45
     * Adds the coverage contained in $coverageFile and deletes the file afterwards
46
     * @param string $coverageFile Code coverage file
47
     * @throws \RuntimeException When coverage file is empty
48
     */
49 12
    public function addCoverageFromFile($coverageFile)
50
    {
51 12
        if ($coverageFile === null || !file_exists($coverageFile)) {
52 2
            return;
53
        }
54
55 10
        $file = new \SplFileObject($coverageFile);
56
57 10
        if (0 === $file->getSize()) {
58 1
            throw new \RuntimeException(
59 1
                "Coverage file {$file->getRealPath()} is empty. This means a PHPUnit process has crashed."
60 1
            );
61
        }
62
63 9
        $this->addCoverage($this->getCoverageObject($file));
64
65 9
        unlink($file->getRealPath());
66 9
    }
67
68
    /**
69
     * Get coverage report generator
70
     *
71
     * @return CoverageReporterInterface
72
     */
73 6
    public function getReporter()
74
    {
75 6
        if ($this->coverage instanceof \PHP_CodeCoverage) {
76 6
            return new CoverageReporterLegacy($this->coverage);
77
        }
78
79
        return new CoverageReporter($this->coverage);
80
    }
81
}
82