Completed
Pull Request — master (#93)
by Alessandro
02:47
created

LogParser::noTestsExecuted()   A

Complexity

Conditions 2
Paths 2

Size

Total Lines 4
Code Lines 2

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 2
CRAP Score 2

Importance

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