Completed
Push — master ( b2cd26...6b1baa )
by ANTHONIUS
13s queued 11s
created

CoverageListener::afterExample()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 14
Code Lines 10

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 10
CRAP Score 1

Importance

Changes 0
Metric Value
cc 1
eloc 10
nc 1
nop 1
dl 0
loc 14
ccs 10
cts 10
cp 1
crap 1
rs 9.9332
c 0
b 0
f 0
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