Completed
Push — master ( 9f6d8c...743834 )
by Julian
14s
created

CoverageMerger::getReporter()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 4
Code Lines 2

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 2
CRAP Score 1

Importance

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