Scenario::__construct()   A
last analyzed

Complexity

Conditions 1
Paths 1

Size

Total Lines 4

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 3
CRAP Score 1

Importance

Changes 0
Metric Value
dl 0
loc 4
ccs 3
cts 3
cp 1
rs 10
c 0
b 0
f 0
cc 1
nc 1
nop 1
crap 1
1
<?php
2
/*
3
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
4
 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
5
 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
6
 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
7
 * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
8
 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
9
 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
10
 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
11
 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
12
 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
13
 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
14
 *
15
 * This software consists of voluntary contributions made by many individuals
16
 * and is licensed under the MIT license.
17
 */
18
19
namespace KawaiiGherkin\Formatter;
20
21
use Behat\Gherkin\Node\OutlineNode;
22
use Behat\Gherkin\Node\ScenarioInterface;
23
24
/**
25
 * @author  Jefersson Nathan  <[email protected]>
26
 * @license MIT
27
 */
28
final class Scenario extends AbstractFormatter
29
{
30
    private $align;
31
32
    /**
33
     * @param string $align
34
     */
35 5
    public function __construct($align = Step::ALIGN_TO_RIGHT)
36
    {
37 5
        $this->align = $align;
38 5
    }
39
40
    /**
41
     * @param \Behat\Gherkin\Node\ScenarioInterface[] $scenarios
42
     *
43
     * @return string
44
     */
45 5
    public function format(array $scenarios)
46
    {
47 5
        return rtrim(implode(
48 5
            array_map(
49 5
                function (ScenarioInterface $scenario) {
50 5
                    return $this->getTags($scenario)
51 5
                    . $this->getScenarioDescription($scenario)
52 5
                    . $this->getSteps($scenario)
53 5
                    . $this->getExamples($scenario);
54 5
                },
55 5
                $scenarios
56
            )
57 5
        )) . "\n";
58
    }
59
60
    /**
61
     * @param ScenarioInterface $scenario
62
     *
63
     * @return string
64
     */
65 5
    private function getTags(ScenarioInterface $scenario)
66
    {
67 5
        if (! $scenario->hasTags()) {
68 4
            return $this->indent();
69
        }
70
71 1
        return $this->indent() . (new Tags())->format($scenario->getTags()) . "\n";
72
    }
73
74
    /**
75
     * @param ScenarioInterface $scenario
76
     *
77
     * @return string
78
     */
79 5
    private function getScenarioDescription(ScenarioInterface $scenario)
80
    {
81 5
        $titleLines    = $this->getTitleLines($scenario);
82 5
        $scenarioTitle = trim($scenario->getKeyword() . ': ' . array_shift($titleLines));
83
84 5
        if ($scenario->hasTags()) {
85 1
            $scenarioTitle = $this->indent() . $scenarioTitle;
86
        }
87
88 5
        return implode(
89 5
            "\n" . $this->indent(12),
90 5
            array_merge(
91 5
                [$scenarioTitle],
92 5
                $titleLines
93
            )
94 5
        ) . "\n";
95
    }
96
97
    /**
98
     * @param ScenarioInterface $scenario
99
     *
100
     * @return string|void
101
     */
102 5
    private function getSteps(ScenarioInterface $scenario)
103
    {
104 5
        if (! $scenario->hasSteps()) {
105 1
            return;
106
        }
107
108 4
        $step = new Step($this->align);
109
110 4
        return $step->format($scenario->getSteps()) . "\n";
111
    }
112
113
    /**
114
     * @param $scenario
115
     *
116
     * @return string|void
117
     */
118 5
    private function getExamples($scenario)
119
    {
120 5
        if (! $scenario instanceof OutlineNode) {
121 4
            return;
122
        }
123
124 1
        return (new Example())->format($scenario);
125
    }
126
127
    /**
128
     * @param ScenarioInterface $scenario
129
     * @return array
130
     */
131 5
    private function getTitleLines(ScenarioInterface $scenario)
132
    {
133 5
        return array_map(
134 5
            'trim',
135 5
            explode("\n", $scenario->getTitle())
136
        );
137
    }
138
}
139