Completed
Pull Request — master (#62)
by Alessandro
05:54
created

JSONLogParser::noTestsExecuted()   A

Complexity

Conditions 2
Paths 2

Size

Total Lines 4
Code Lines 2

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 3
CRAP Score 2

Importance

Changes 0
Metric Value
c 0
b 0
f 0
dl 0
loc 4
ccs 3
cts 3
cp 1
rs 10
cc 2
eloc 2
nc 2
nop 2
crap 2
1
<?php
2
3
namespace Paraunit\Parser;
4
5
use Paraunit\Lifecycle\ProcessEvent;
6
use Paraunit\Process\AbstractParaunitProcess;
7
use Paraunit\TestResult\Interfaces\TestResultBearerInterface;
8
use Paraunit\TestResult\Interfaces\TestResultHandlerInterface;
9
use Paraunit\TestResult\Interfaces\TestResultInterface;
10
11
/**
12
 * Class JSONLogParser
13
 * @package Paraunit\Parser
14
 */
15
class JSONLogParser
16
{
17
    /** @var  JSONLogFetcher */
18
    private $logLocator;
19
20
    /** @var  JSONParserChainElementInterface[] */
21
    private $parsers;
22
23
    /** @var TestResultHandlerInterface */
24
    private $noTestExecutedResultContainer;
25
26
    /**
27
     * JSONLogParser constructor.
28
     * @param JSONLogFetcher $logLocator
29
     * @param TestResultHandlerInterface $noTestExecutedResultContainer
30
     */
31 29
    public function __construct(JSONLogFetcher $logLocator, TestResultHandlerInterface $noTestExecutedResultContainer)
32
    {
33 29
        $this->logLocator = $logLocator;
34 29
        $this->noTestExecutedResultContainer = $noTestExecutedResultContainer;
35 29
        $this->parsers = array();
36 29
    }
37
38
    /**
39
     * @param JSONParserChainElementInterface $container
40
     */
41 29
    public function addParser(JSONParserChainElementInterface $container)
42
    {
43 29
        $this->parsers[] = $container;
44 29
    }
45
46
    /**
47
     * @return TestResultBearerInterface[]
48
     */
49 11
    public function getParsers()
50
    {
51 11
        return $this->parsers;
52
    }
53
54
    /**
55
     * @param ProcessEvent $processEvent
56
     */
57 13
    public function onProcessTerminated(ProcessEvent $processEvent)
58
    {
59 13
        $process = $processEvent->getProcess();
60 13
        $logs = $this->logLocator->fetch($process);
61
62 13
        if ($this->noTestsExecuted($process, $logs)) {
63
            $this->noTestExecutedResultContainer->addProcessToFilenames($process);
64
65
            return;
66
        }
67
68 27
        foreach ($logs as $singleLog) {
69
            $this->processLog($process, $singleLog);
70 27
        }
71 27
    }
72
73 27
    /**
74 2
     * @param AbstractParaunitProcess $process
75
     * @param \stdClass $logItem
76 2
     */
77
    private function processLog(AbstractParaunitProcess $process, \stdClass $logItem)
78
    {
79 25
        /** @var JSONParserChainElementInterface $resultContainer */
80 25
        foreach ($this->parsers as $resultContainer) {
81 25
            if ($resultContainer->handleLogItem($process, $logItem) instanceof TestResultInterface) {
82 25
                return;
83
            }
84
        }
85
    }
86
87
    /**
88 25
     * @param AbstractParaunitProcess $process
89
     * @param array $logs
90
     * @return bool
91 25
     */
92 25
    private function noTestsExecuted(AbstractParaunitProcess $process, array $logs)
93 25
    {
94
        return $process->getExitCode() === 0 && count($logs) === 1;
95 24
    }
96
}
97