Completed
Pull Request — master (#94)
by Alessandro
08:53
created

CoverageMerger::onProcessParsingCompleted()   A

Complexity

Conditions 2
Paths 2

Size

Total Lines 9
Code Lines 5

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 5
CRAP Score 2

Importance

Changes 0
Metric Value
dl 0
loc 9
ccs 5
cts 5
cp 1
rs 9.6666
c 0
b 0
f 0
cc 2
eloc 5
nc 2
nop 1
crap 2
1
<?php
2
declare(strict_types=1);
3
4
namespace Paraunit\Coverage;
5
6
use Paraunit\Lifecycle\ProcessEvent;
7
use Paraunit\Process\AbstractParaunitProcess;
8
use Paraunit\Proxy\Coverage\CodeCoverage;
9
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
10
11
/**
12
 * Class CoverageMerger
13
 * @package Paraunit\Coverage
14
 */
15
class CoverageMerger implements EventSubscriberInterface
16
{
17
    /** @var  CoverageFetcher */
18
    private $coverageFetcher;
19
20
    /** @var  CodeCoverage */
21
    private $coverageData;
22
23
    /**
24
     * CoverageMerger constructor.
25 11
     * @param CoverageFetcher $coverageFetcher
26
     */
27 11
    public function __construct(CoverageFetcher $coverageFetcher)
28 11
    {
29
        $this->coverageFetcher = $coverageFetcher;
30
    }
31
32
    public static function getSubscribedEvents(): array
33 3
    {
34
        return [
35 3
            ProcessEvent::PROCESS_PARSING_COMPLETED => 'onProcessParsingCompleted',
36 3
        ];
37
    }
38
39
    /**
40
     * @param ProcessEvent $processEvent
41 3
     */
42
    public function onProcessParsingCompleted(ProcessEvent $processEvent)
43 3
    {
44
        $process = $processEvent->getProcess();
45 3
        if ($process->isToBeRetried()) {
46 1
            return;
47
        }
48 3
49
        $this->merge($process);
50 3
    }
51
52
    private function merge(AbstractParaunitProcess $process)
53
    {
54
        $newCoverageData = $this->coverageFetcher->fetch($process);
55 3
56
        if ($this->coverageData instanceof CodeCoverage) {
57 3
            $this->coverageData->merge($newCoverageData);
58
        } else {
59
            $this->coverageData = $newCoverageData;
60
        }
61
    }
62
63
    public function getCoverageData(): CodeCoverage
64
    {
65
        return $this->coverageData;
66
    }
67
}
68