Security update for permissions_by_term
[yaffs-website] / vendor / drupal / drupal-extension / src / Drupal / DrupalExtension / Listener / DriverListener.php
1 <?php
2
3 namespace Drupal\DrupalExtension\Listener;
4
5 use Behat\Behat\EventDispatcher\Event\ExampleTested;
6 use Behat\Behat\EventDispatcher\Event\ScenarioLikeTested;
7 use Behat\Behat\EventDispatcher\Event\ScenarioTested;
8
9 use Drupal\DrupalDriverManager;
10
11 use Symfony\Component\EventDispatcher\EventSubscriberInterface;
12
13 /**
14  * Drupal driver listener.
15  *
16  * Determines which Drupal driver to use for a given scenario or outline.
17  */
18 class DriverListener implements EventSubscriberInterface {
19
20   /**
21    * Drupal driver manager.
22    *
23    * @var \Drupal\DrupalDriverManager
24    */
25   private $drupal;
26
27   /**
28    * Test parameters.
29    *
30    * @var array
31    */
32   private $parameters;
33
34   public function __construct(DrupalDriverManager $drupal, array $parameters) {
35     $this->drupal = $drupal;
36     $this->parameters = $parameters;
37   }
38
39   /**
40    * {@inheritDoc}
41    */
42   public static function getSubscribedEvents() {
43     return array(
44       ScenarioTested::BEFORE => array('prepareDefaultDrupalDriver', 11),
45       ExampleTested::BEFORE => array('prepareDefaultDrupalDriver', 11),
46     );
47   }
48
49   /**
50    * Configures default Drupal driver to use before each scenario or outline.
51    *
52    * `@api` tagged scenarios will get the `api_driver` as the default driver.
53    *
54    * Other scenarios get the `default_driver` as the default driver.
55    *
56    * @param ScenarioEvent|OutlineEvent $event
57    */
58   public function prepareDefaultDrupalDriver($event) {
59     $feature = $event->getFeature();
60     $scenario = $event instanceof ScenarioLikeTested ? $event->getScenario() : $event->getOutline();
61
62     // Get the default driver.
63     $driver = $this->parameters['default_driver'];
64
65     foreach (array_merge($feature->getTags(), $scenario->getTags()) as $tag) {
66       if (!empty($this->parameters[$tag . '_driver'])) {
67         $driver = $this->parameters[$tag . '_driver'];
68       }
69     }
70
71     // Set the default driver.
72     $this->drupal->setDefaultDriverName($driver);
73
74     // Set the environment.
75     $environment = $event->getEnvironment();
76     $this->drupal->setEnvironment($environment);
77   }
78
79 }