Security update for permissions_by_term
[yaffs-website] / vendor / behat / behat / src / Behat / Behat / Output / Node / EventListener / AST / StepListener.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\AfterStepSetup;
14 use Behat\Behat\EventDispatcher\Event\AfterStepTested;
15 use Behat\Behat\EventDispatcher\Event\ExampleTested;
16 use Behat\Behat\EventDispatcher\Event\ScenarioLikeTested;
17 use Behat\Behat\EventDispatcher\Event\ScenarioTested;
18 use Behat\Behat\Output\Node\Printer\SetupPrinter;
19 use Behat\Behat\Output\Node\Printer\StepPrinter;
20 use Behat\Gherkin\Node\ScenarioLikeInterface;
21 use Behat\Testwork\Output\Formatter;
22 use Behat\Testwork\Output\Node\EventListener\EventListener;
23 use Symfony\Component\EventDispatcher\Event;
24
25 /**
26  * Listens to step events and call appropriate printers.
27  *
28  * @author Konstantin Kudryashov <ever.zet@gmail.com>
29  */
30 final class StepListener implements EventListener
31 {
32     /**
33      * @var StepPrinter
34      */
35     private $stepPrinter;
36     /**
37      * @var ScenarioLikeInterface
38      */
39     private $scenario;
40     /**
41      * @var null|SetupPrinter
42      */
43     private $setupPrinter;
44
45     /**
46      * Initializes listener.
47      *
48      * @param StepPrinter       $stepPrinter
49      * @param null|SetupPrinter $setupPrinter
50      */
51     public function __construct(StepPrinter $stepPrinter, SetupPrinter $setupPrinter = null)
52     {
53         $this->stepPrinter = $stepPrinter;
54         $this->setupPrinter = $setupPrinter;
55     }
56
57     /**
58      * {@inheritdoc}
59      */
60     public function listenEvent(Formatter $formatter, Event $event, $eventName)
61     {
62         $this->captureScenarioOnScenarioEvent($event);
63         $this->forgetScenarioOnAfterEvent($eventName);
64         $this->printStepSetupOnBeforeEvent($formatter, $event);
65         $this->printStepOnAfterEvent($formatter, $event);
66     }
67
68     /**
69      * Captures scenario into the ivar on scenario/background/example BEFORE event.
70      *
71      * @param Event $event
72      */
73     private function captureScenarioOnScenarioEvent(Event $event)
74     {
75         if (!$event instanceof ScenarioLikeTested) {
76             return;
77         }
78
79         $this->scenario = $event->getScenario();
80     }
81
82     /**
83      * Removes scenario from the ivar on scenario/background/example AFTER event.
84      *
85      * @param string $eventName
86      */
87     private function forgetScenarioOnAfterEvent($eventName)
88     {
89         if (!in_array($eventName, array(ScenarioTested::AFTER, ExampleTested::AFTER))) {
90             return;
91         }
92
93         $this->scenario = null;
94     }
95
96     private function printStepSetupOnBeforeEvent(Formatter $formatter, Event $event)
97     {
98         if (!$event instanceof AfterStepSetup) {
99             return;
100         }
101
102         if ($this->setupPrinter) {
103             $this->setupPrinter->printSetup($formatter, $event->getSetup());
104         }
105     }
106
107     /**
108      * Prints step on AFTER event.
109      *
110      * @param Formatter $formatter
111      * @param Event     $event
112      */
113     private function printStepOnAfterEvent(Formatter $formatter, Event $event)
114     {
115         if (!$event instanceof AfterStepTested) {
116             return;
117         }
118
119         $this->stepPrinter->printStep($formatter, $this->scenario, $event->getStep(), $event->getTestResult());
120
121         if ($this->setupPrinter) {
122             $this->setupPrinter->printTeardown($formatter, $event->getTeardown());
123         }
124     }
125 }