Security update for permissions_by_term
[yaffs-website] / vendor / drupal / drupal-extension / src / Drupal / DrupalExtension / Listener / DriverListener.php
diff --git a/vendor/drupal/drupal-extension/src/Drupal/DrupalExtension/Listener/DriverListener.php b/vendor/drupal/drupal-extension/src/Drupal/DrupalExtension/Listener/DriverListener.php
new file mode 100644 (file)
index 0000000..89e0abe
--- /dev/null
@@ -0,0 +1,79 @@
+<?php
+
+namespace Drupal\DrupalExtension\Listener;
+
+use Behat\Behat\EventDispatcher\Event\ExampleTested;
+use Behat\Behat\EventDispatcher\Event\ScenarioLikeTested;
+use Behat\Behat\EventDispatcher\Event\ScenarioTested;
+
+use Drupal\DrupalDriverManager;
+
+use Symfony\Component\EventDispatcher\EventSubscriberInterface;
+
+/**
+ * Drupal driver listener.
+ *
+ * Determines which Drupal driver to use for a given scenario or outline.
+ */
+class DriverListener implements EventSubscriberInterface {
+
+  /**
+   * Drupal driver manager.
+   *
+   * @var \Drupal\DrupalDriverManager
+   */
+  private $drupal;
+
+  /**
+   * Test parameters.
+   *
+   * @var array
+   */
+  private $parameters;
+
+  public function __construct(DrupalDriverManager $drupal, array $parameters) {
+    $this->drupal = $drupal;
+    $this->parameters = $parameters;
+  }
+
+  /**
+   * {@inheritDoc}
+   */
+  public static function getSubscribedEvents() {
+    return array(
+      ScenarioTested::BEFORE => array('prepareDefaultDrupalDriver', 11),
+      ExampleTested::BEFORE => array('prepareDefaultDrupalDriver', 11),
+    );
+  }
+
+  /**
+   * Configures default Drupal driver to use before each scenario or outline.
+   *
+   * `@api` tagged scenarios will get the `api_driver` as the default driver.
+   *
+   * Other scenarios get the `default_driver` as the default driver.
+   *
+   * @param ScenarioEvent|OutlineEvent $event
+   */
+  public function prepareDefaultDrupalDriver($event) {
+    $feature = $event->getFeature();
+    $scenario = $event instanceof ScenarioLikeTested ? $event->getScenario() : $event->getOutline();
+
+    // Get the default driver.
+    $driver = $this->parameters['default_driver'];
+
+    foreach (array_merge($feature->getTags(), $scenario->getTags()) as $tag) {
+      if (!empty($this->parameters[$tag . '_driver'])) {
+        $driver = $this->parameters[$tag . '_driver'];
+      }
+    }
+
+    // Set the default driver.
+    $this->drupal->setDefaultDriverName($driver);
+
+    // Set the environment.
+    $environment = $event->getEnvironment();
+    $this->drupal->setEnvironment($environment);
+  }
+
+}