Passed
Pull Request — master (#1)
by ANTHONIUS
03:02
created

CoverageListener   A

Complexity

Total Complexity 5

Size/Duplication

Total Lines 58
Duplicated Lines 0 %

Test Coverage

Coverage 43.48%

Importance

Changes 0
Metric Value
eloc 24
dl 0
loc 58
ccs 10
cts 23
cp 0.4348
rs 10
c 0
b 0
f 0
wmc 5

5 Methods

Rating   Name   Duplication   Size   Complexity  
A __construct() 0 3 1
A getSubscribedEvents() 0 6 1
A afterSuite() 0 3 1
A afterExample() 0 14 1
A beforeExample() 0 10 1
1
<?php
2
3
4
namespace Doyo\PhpSpec\CodeCoverage\Listener;
5
6
use Doyo\Bridge\CodeCoverage\CodeCoverage;
7
use Doyo\Bridge\CodeCoverage\Event\CoverageEvent;
8
use Doyo\Bridge\CodeCoverage\TestCase;
9
use PhpSpec\Event\ExampleEvent;
10
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
11
12
class CoverageListener implements EventSubscriberInterface
13
{
14
15
    /**
16
     * @var CodeCoverage
17
     */
18
    private $coverage;
19
20
    /**
21
     * CoverageListener constructor.
22
     *
23
     * @param CodeCoverage $coverage
24
     */
25
    public function __construct(CodeCoverage $coverage)
26
    {
27
        $this->coverage = $coverage;
28
    }
29
30
    public static function getSubscribedEvents()
31
    {
32
        return [
33
            'beforeExample' => ['beforeExample', -10],
34
            'afterExample' => ['afterExample', -10],
35
            'afterSuite' => ['afterSuite', -10]
36
        ];
37
    }
38
39
    public function beforeExample(ExampleEvent $suiteEvent)
40
    {
41
        $example = $suiteEvent->getExample();
42
        $name = strtr('%spec%:%example%', [
43
            '%spec%'    => $example->getSpecification()->getTitle(),
44
            '%example%' => $example->getTitle()
45
        ]);
46
        $testCase = new TestCase($name);
47
48
        $this->coverage->start($testCase);
49
    }
50
51 80
    public function afterExample(ExampleEvent $exampleEvent)
52
    {
53 80
        $result = $exampleEvent->getResult();
54
        $map = [
55 80
            ExampleEvent::PASSED => TestCase::RESULT_PASSED,
56 80
            ExampleEvent::SKIPPED => TestCase::RESULT_SKIPPED,
57 80
            ExampleEvent::FAILED => TestCase::RESULT_FAILED,
58 80
            ExampleEvent::BROKEN => TestCase::RESULT_ERROR,
59 80
            ExampleEvent::PENDING => TestCase::RESULT_SKIPPED,
60
        ];
61
62 80
        $result = $map[$result];
63 80
        $this->coverage->setResult($result);
64 80
        $this->coverage->stop();
65
    }
66
67
    public function afterSuite()
68
    {
69
        $this->coverage->complete();
70
    }
71
72
}
73