You are here

protected function KernelTestBase::disableModules in Zircon Profile 8

Same name in this branch
  1. 8 core/tests/Drupal/KernelTests/KernelTestBase.php \Drupal\KernelTests\KernelTestBase::disableModules()
  2. 8 core/modules/simpletest/src/KernelTestBase.php \Drupal\simpletest\KernelTestBase::disableModules()
Same name and namespace in other branches
  1. 8.0 core/tests/Drupal/KernelTests/KernelTestBase.php \Drupal\KernelTests\KernelTestBase::disableModules()

Disables modules for this test.

Parameters

string[] $modules: A list of modules to disable. Dependencies are not resolved; i.e., multiple modules have to be specified with dependent modules first. Code of previously enabled modules is still loaded. The modules are only removed from the active module list.

Throws

\LogicException If any module in $modules is already disabled.

\RuntimeException If a module is not disabled after disabling it.

File

core/tests/Drupal/KernelTests/KernelTestBase.php, line 867
Contains \Drupal\KernelTests\KernelTestBase.

Class

KernelTestBase
Base class for functional integration tests.

Namespace

Drupal\KernelTests

Code

protected function disableModules(array $modules) {

  // Unset the list of modules in the extension handler.
  $module_handler = $this->container
    ->get('module_handler');
  $module_filenames = $module_handler
    ->getModuleList();
  $extension_config = $this
    ->config('core.extension');
  foreach ($modules as $module) {
    if (!$module_handler
      ->moduleExists($module)) {
      throw new \LogicException("{$module} module cannot be disabled because it is not enabled.");
    }
    unset($module_filenames[$module]);
    $extension_config
      ->clear('module.' . $module);
  }
  $extension_config
    ->save();
  $module_handler
    ->setModuleList($module_filenames);
  $module_handler
    ->resetImplementations();

  // Update the kernel to remove their services.
  $this->container
    ->get('kernel')
    ->updateModules($module_filenames, $module_filenames);

  // Ensure isLoaded() is TRUE in order to make _theme() work.
  // Note that the kernel has rebuilt the container; this $module_handler is
  // no longer the $module_handler instance from above.
  $module_handler = $this->container
    ->get('module_handler');
  $module_handler
    ->reload();
  foreach ($modules as $module) {
    if ($module_handler
      ->moduleExists($module)) {
      throw new \RuntimeException("{$module} module is not disabled after disabling it.");
    }
  }
}