You are here

final class TestModuleContext in Lightning Core 8.4

Same name and namespace in other branches
  1. 8.5 tests/contexts/TestModuleContext.behat.inc \Acquia\LightningExtension\Context\TestModuleContext
  2. 8 tests/contexts/TestModuleContext.behat.inc \Acquia\LightningExtension\Context\TestModuleContext
  3. 8.2 tests/contexts/TestModuleContext.behat.inc \Acquia\LightningExtension\Context\TestModuleContext
  4. 8.3 tests/contexts/TestModuleContext.behat.inc \Acquia\LightningExtension\Context\TestModuleContext

Allows test modules to be installed during a scenario and uninstalled after.

@internal This is an internal part of Lightning Core's testing system and may be changed or removed at any time without warning. It should not be extended, instantiated, or used in any way by external code! If you need to use this functionality, you should copy the relevant code into your own project.

Hierarchy

  • class \Acquia\LightningExtension\Context\TestModuleContext extends \Drupal\DrupalExtension\Context\DrupalSubContextBase

Expanded class hierarchy of TestModuleContext

File

tests/contexts/TestModuleContext.behat.inc, line 20

Namespace

Acquia\LightningExtension\Context
View source
final class TestModuleContext extends DrupalSubContextBase {

  /**
   * Determines the test modules to install during the scenario.
   *
   * @param \Behat\Behat\Hook\Scope\ScenarioScope $scope
   *   The current scenario scope.
   *
   * @return string[]
   *   The test modules to install.
   */
  private function getModules(ScenarioScope $scope) {
    $modules = [];
    $tags = array_merge($scope
      ->getFeature()
      ->getTags(), $scope
      ->getScenario()
      ->getTags());
    foreach ($tags as $tag) {
      if (strpos($tag, 'with-module:') === 0) {
        $modules[] = substr($tag, 12);
      }
    }
    return array_unique($modules);
  }

  /**
   * Installs test modules for this scenario.
   *
   * @param Behat\Behat\Hook\Scope\BeforeScenarioScope $scope
   *   The scenario scope.
   *
   * @BeforeScenario
   */
  public function install(BeforeScenarioScope $scope) {
    $modules = $this
      ->getModules($scope);
    if ($modules) {

      // Bootstrap Drupal if needed.
      $driver = $this
        ->getDriver();
      if (!$driver
        ->isBootstrapped()) {
        $driver
          ->bootstrap();
      }

      // Ensure that test directories are scanned for modules.
      $settings = Settings::getAll();
      $settings['extension_discovery_scan_tests'] = TRUE;
      new Settings($settings);
      \Drupal::service('module_installer')
        ->install($modules);
    }
  }

  /**
   * Uninstalls any test modules installed for the scenario.
   *
   * @param \Behat\Behat\Hook\Scope\AfterScenarioScope $scope
   *   The scenario scope.
   *
   * @AfterScenario
   */
  public function uninstall(AfterScenarioScope $scope) {
    $modules = $this
      ->getModules($scope);
    if ($modules) {
      \Drupal::service('module_installer')
        ->uninstall($modules);
    }
  }

}

Members

Namesort descending Modifiers Type Description Overrides
TestModuleContext::getModules private function Determines the test modules to install during the scenario.
TestModuleContext::install public function Installs test modules for this scenario.
TestModuleContext::uninstall public function Uninstalls any test modules installed for the scenario.