Security update for permissions_by_term
[yaffs-website] / vendor / behat / behat / src / Behat / Behat / Output / Node / EventListener / AST / OutlineListener.php
1 <?php
2
3 /*
4  * This file is part of the Behat.
5  * (c) Konstantin Kudryashov <ever.zet@gmail.com>
6  *
7  * For the full copyright and license information, please view the LICENSE
8  * file that was distributed with this source code.
9  */
10
11 namespace Behat\Behat\Output\Node\EventListener\AST;
12
13 use Behat\Behat\EventDispatcher\Event\AfterOutlineTested;
14 use Behat\Behat\EventDispatcher\Event\AfterScenarioSetup;
15 use Behat\Behat\EventDispatcher\Event\AfterScenarioTested;
16 use Behat\Behat\EventDispatcher\Event\AfterStepSetup;
17 use Behat\Behat\EventDispatcher\Event\AfterStepTested;
18 use Behat\Behat\EventDispatcher\Event\BeforeOutlineTested;
19 use Behat\Behat\EventDispatcher\Event\ExampleTested;
20 use Behat\Behat\Output\Node\Printer\ExamplePrinter;
21 use Behat\Behat\Output\Node\Printer\OutlinePrinter;
22 use Behat\Behat\Output\Node\Printer\SetupPrinter;
23 use Behat\Behat\Output\Node\Printer\StepPrinter;
24 use Behat\Gherkin\Node\ExampleNode;
25 use Behat\Testwork\Output\Formatter;
26 use Behat\Testwork\Output\Node\EventListener\EventListener;
27 use Symfony\Component\EventDispatcher\Event;
28
29 /**
30  * Listens to expanded outline events and calls appropriate printers.
31  *
32  * @author Konstantin Kudryashov <ever.zet@gmail.com>
33  */
34 final class OutlineListener implements EventListener
35 {
36     /**
37      * @var OutlinePrinter
38      */
39     private $outlinePrinter;
40     /**
41      * @var ExamplePrinter
42      */
43     private $examplePrinter;
44     /**
45      * @var StepPrinter
46      */
47     private $stepPrinter;
48     /**
49      * @var SetupPrinter
50      */
51     private $stepSetupPrinter;
52     /**
53      * @var SetupPrinter
54      */
55     private $exampleSetupPrinter;
56     /**
57      * @var ExampleNode
58      */
59     private $example;
60
61     /**
62      * Initializes listener.
63      *
64      * @param OutlinePrinter $outlinePrinter
65      * @param ExamplePrinter $examplePrinter
66      * @param StepPrinter    $stepPrinter
67      * @param SetupPrinter   $exampleSetupPrinter
68      * @param SetupPrinter   $stepSetupPrinter
69      */
70     public function __construct(
71         OutlinePrinter $outlinePrinter,
72         ExamplePrinter $examplePrinter,
73         StepPrinter $stepPrinter,
74         SetupPrinter $exampleSetupPrinter,
75         SetupPrinter $stepSetupPrinter
76     ) {
77         $this->outlinePrinter = $outlinePrinter;
78         $this->examplePrinter = $examplePrinter;
79         $this->stepPrinter = $stepPrinter;
80         $this->exampleSetupPrinter = $exampleSetupPrinter;
81         $this->stepSetupPrinter = $stepSetupPrinter;
82     }
83
84     /**
85      * {@inheritdoc}
86      */
87     public function listenEvent(Formatter $formatter, Event $event, $eventName)
88     {
89         $this->printAndCaptureOutlineHeaderOnBeforeEvent($formatter, $event);
90         $this->printAndForgetOutlineFooterOnAfterEvent($formatter, $event);
91         $this->printExampleHeaderOnBeforeExampleEvent($formatter, $event);
92         $this->printExampleFooterOnAfterExampleEvent($formatter, $event, $eventName);
93         $this->printStepSetupOnBeforeStepEvent($formatter, $event);
94         $this->printStepOnAfterStepEvent($formatter, $event);
95     }
96
97     /**
98      * Prints outline header and captures outline into ivar on BEFORE event.
99      *
100      * @param Formatter $formatter
101      * @param Event     $event
102      */
103     private function printAndCaptureOutlineHeaderOnBeforeEvent(Formatter $formatter, Event $event)
104     {
105         if (!$event instanceof BeforeOutlineTested) {
106             return;
107         }
108
109         $this->outlinePrinter->printHeader($formatter, $event->getFeature(), $event->getOutline());
110     }
111
112     /**
113      * Prints outline footer and removes outline from ivar on AFTER event.
114      *
115      * @param Formatter $formatter
116      * @param Event     $event
117      */
118     private function printAndForgetOutlineFooterOnAfterEvent(Formatter $formatter, Event $event)
119     {
120         if (!$event instanceof AfterOutlineTested) {
121             return;
122         }
123
124         $this->outlinePrinter->printFooter($formatter, $event->getTestResult());
125     }
126
127     /**
128      * Prints example header on example BEFORE event.
129      *
130      * @param Formatter $formatter
131      * @param Event     $event
132      */
133     private function printExampleHeaderOnBeforeExampleEvent(Formatter $formatter, Event $event)
134     {
135         if (!$event instanceof AfterScenarioSetup) {
136             return;
137         }
138
139         $this->example = $event->getScenario();
140
141         $this->exampleSetupPrinter->printSetup($formatter, $event->getSetup());
142         $this->examplePrinter->printHeader($formatter, $event->getFeature(), $this->example);
143     }
144
145     /**
146      * Prints example footer on example AFTER event.
147      *
148      * @param Formatter $formatter
149      * @param Event     $event
150      * @param string    $eventName
151      */
152     private function printExampleFooterOnAfterExampleEvent(Formatter $formatter, Event $event, $eventName)
153     {
154         if (!$event instanceof AfterScenarioTested || ExampleTested::AFTER !== $eventName) {
155             return;
156         }
157
158         $this->examplePrinter->printFooter($formatter, $event->getTestResult());
159         $this->exampleSetupPrinter->printTeardown($formatter, $event->getTeardown());
160
161         $this->example = null;
162     }
163
164     /**
165      * Prints step setup on step BEFORE event.
166      *
167      * @param Formatter $formatter
168      * @param Event     $event
169      */
170     private function printStepSetupOnBeforeStepEvent(Formatter $formatter, Event $event)
171     {
172         if (!$event instanceof AfterStepSetup) {
173             return;
174         }
175
176         $this->stepSetupPrinter->printSetup($formatter, $event->getSetup());
177     }
178
179     /**
180      * Prints example step on step AFTER event.
181      *
182      * @param Formatter $formatter
183      * @param Event     $event
184      */
185     private function printStepOnAfterStepEvent(Formatter $formatter, Event $event)
186     {
187         if (!$event instanceof AfterStepTested) {
188             return;
189         }
190
191         $this->stepPrinter->printStep($formatter, $this->example, $event->getStep(), $event->getTestResult());
192         $this->stepSetupPrinter->printTeardown($formatter, $event->getTeardown());
193     }
194 }