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