1 | <?php |
||
21 | class BehatStepLoggerSubscriber implements EventSubscriberInterface |
||
22 | { |
||
23 | const HEADER_ACTION_IN = 'IN'; |
||
24 | const HEADER_ACTION_OUT = 'OUT'; |
||
25 | |||
26 | const HEADER_NODE_FEATURE = 'FEATURE'; |
||
27 | const HEADER_NODE_BACKGROUND = 'BACKGROUND'; |
||
28 | const HEADER_NODE_SCENARIO = 'SCENARIO'; |
||
29 | const HEADER_NODE_OUTLINE = 'OUTLINE'; |
||
30 | const HEADER_NODE_EXAMPLE = 'EXAMPLE'; |
||
31 | const HEADER_NODE_STEP = 'STEP'; |
||
32 | |||
33 | /** @var LoggerInterface */ |
||
34 | private $logger; |
||
35 | |||
36 | /** |
||
37 | * @param LoggerInterface $logger |
||
38 | */ |
||
39 | 14 | public function __construct(LoggerInterface $logger) |
|
43 | |||
44 | /** |
||
45 | * {@inheritdoc} |
||
46 | */ |
||
47 | 1 | public static function getSubscribedEvents() |
|
67 | |||
68 | /** |
||
69 | * @param GherkinNodeTested $event |
||
70 | */ |
||
71 | 13 | public function logEvent(GherkinNodeTested $event) |
|
76 | |||
77 | /** |
||
78 | * @param GherkinNodeTested $event |
||
79 | * |
||
80 | * @return array |
||
81 | */ |
||
82 | 13 | protected function processNodeEvent(GherkinNodeTested $event) |
|
95 | |||
96 | /** |
||
97 | * @param GherkinNodeTested $event |
||
98 | * |
||
99 | * @return string |
||
100 | */ |
||
101 | 12 | protected function resolveActionType(GherkinNodeTested $event) |
|
107 | |||
108 | /** |
||
109 | * @param GherkinNodeTested $event |
||
110 | * |
||
111 | * @return array |
||
112 | */ |
||
113 | 13 | protected function resolveContextAndNodeHeader(GherkinNodeTested $event) |
|
114 | { |
||
115 | 13 | $context = []; |
|
116 | 13 | switch (true) { |
|
117 | 13 | case $event instanceof StepTested: |
|
118 | 2 | $nodeHeader = self::HEADER_NODE_STEP; |
|
119 | 2 | $context['text'] = $event->getStep()->getText(); |
|
120 | 2 | break; |
|
121 | 11 | case $event instanceof BackgroundTested: |
|
122 | 2 | $nodeHeader = self::HEADER_NODE_BACKGROUND; |
|
123 | 2 | $context['title'] = $event->getBackground()->getTitle(); |
|
124 | 2 | break; |
|
125 | 9 | case $event instanceof ScenarioTested: |
|
126 | 4 | $scenario = $event->getScenario(); |
|
127 | 4 | $nodeHeader = self::HEADER_NODE_SCENARIO; |
|
128 | 4 | if ($scenario instanceof ExampleNode) { |
|
129 | 2 | $nodeHeader = self::HEADER_NODE_EXAMPLE; |
|
130 | 2 | $context['tokens'] = $scenario->getTokens(); |
|
131 | 2 | } |
|
132 | 4 | $context['title'] = $scenario->getTitle(); |
|
133 | 4 | break; |
|
134 | 5 | case $event instanceof OutlineTested: |
|
135 | 2 | $nodeHeader = self::HEADER_NODE_OUTLINE; |
|
136 | 2 | $context['title'] = $event->getOutline()->getTitle(); |
|
137 | 2 | break; |
|
138 | 3 | case $event instanceof FeatureTested: |
|
139 | 2 | $nodeHeader = self::HEADER_NODE_FEATURE; |
|
140 | 2 | $context['title'] = $event->getFeature()->getTitle(); |
|
141 | 2 | $context['file'] = $event->getFeature()->getFile(); |
|
142 | 2 | break; |
|
143 | 1 | default: |
|
144 | 1 | throw new \InvalidArgumentException(sprintf('"%s" not handled !', get_class($event))); |
|
145 | 1 | } |
|
146 | |||
147 | 12 | if (!$event instanceof FeatureTested) { |
|
148 | 10 | $context['line'] = $this->resolveNodeLine($event); |
|
149 | 10 | } |
|
150 | |||
151 | return [ |
||
152 | 12 | $context, |
|
153 | $nodeHeader |
||
154 | 12 | ]; |
|
155 | } |
||
156 | |||
157 | /** |
||
158 | * @param GherkinNodeTested $event |
||
159 | * |
||
160 | * @return int |
||
161 | */ |
||
162 | 10 | protected function resolveNodeLine(GherkinNodeTested $event) |
|
185 | } |
||
186 |