Completed
Push — output_parsers_refactor ( 755930...b5c5df )
by Alessandro
07:17
created

AbstractParser::checkMessageStart()   A

Complexity

Conditions 3
Paths 3

Size

Total Lines 12
Code Lines 6

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 4
CRAP Score 3

Importance

Changes 1
Bugs 0 Features 0
Metric Value
c 1
b 0
f 0
dl 0
loc 12
ccs 4
cts 4
cp 1
rs 9.4285
cc 3
eloc 6
nc 3
nop 1
crap 3
1
<?php
2
3
namespace Paraunit\Parser;
4
5
use Paraunit\Printer\OutputContainerInterface;
6
use Paraunit\Process\ProcessResultInterface;
7
8
/**
9
 * Class AbstractParser
10
 * @package Paraunit\Parser
11
 */
12
class AbstractParser implements JSONParserChainElementInterface, OutputContainerBearerInterface
13
{
14
    /** @var  OutputContainerInterface */
15
    protected $outputContainer;
16
17
    /** @var  string */
18
    protected $singleResultMarker;
19
20 37
    /** @var  string */
21
    protected $title;
22 37
23 37
    /** @var  string */
24 37
    protected $status;
25
26 37
    /** @var  string */
27 37
    protected $messageStartsWith;
28
29
    /**
30
     * AbstractParser constructor.
31
     *
32 26
     * @param OutputContainerInterface $outputContainer
33
     * @param string $singleResultMarker The output of the single test result (.FERW etc)
34 26
     * @param string $status The status that the parser should catch
35
     * @param string | null $messageStartsWith The start of the message that the parser should look for
36
     */
37
    public function __construct(OutputContainerInterface $outputContainer, $singleResultMarker, $status, $messageStartsWith = null)
38
    {
39
        $this->outputContainer = $outputContainer;
40
        $this->singleResultMarker = $singleResultMarker;
41 24
        $this->status = $status;
42
        $this->messageStartsWith = $messageStartsWith;
43 24
    }
44
45 24
    /**
46 10
     * @return OutputContainerInterface
47
     */
48 10
    public function getOutputContainer()
49
    {
50 10
        return $this->outputContainer;
51 10
    }
52
53 10
    /**
54
     * {@inheritdoc}
55
     */
56 18
    public function parsingFoundResult(ProcessResultInterface $process, \stdClass $log)
57
    {
58
        if ($log->status != $this->status) {
59
            return false;
60
        }
61
62
        if ($this->checkMessageStart($log)) {
63 18
            $process->addTestResult($this->singleResultMarker);
64
            $this->outputContainer->addToOutputBuffer($process, $log->message);
65 18
66 4
            return true;
67
        }
68 4
69
        return false;
70
    }
71 15
72
    /**
73
     * @param \stdClass $log
74 37
     * @return bool
75
     */
76 37
    private function checkMessageStart(\stdClass $log)
77 37
    {
78
        if (is_null($this->messageStartsWith)) {
79 37
            return true;
80
        }
81
82
        if ( ! property_exists($log, 'message')) {
83
            return false;
84
        }
85
86 37
        return 0 === strpos($log->message, $this->messageStartsWith);
87
    }
88
}
89