You are here

protected function FunctionalTestSetupTrait::prepareEnvironment in Drupal 8

Same name and namespace in other branches
  1. 9 core/lib/Drupal/Core/Test/FunctionalTestSetupTrait.php \Drupal\Core\Test\FunctionalTestSetupTrait::prepareEnvironment()

Prepares the current environment for running the test.

Also sets up new resources for the testing environment, such as the public filesystem and configuration directories.

This method is private as it must only be called once by BrowserTestBase::setUp() (multiple invocations for the same test would have unpredictable consequences) and it must not be callable or overridable by test classes.

27 calls to FunctionalTestSetupTrait::prepareEnvironment()
BrowserTestBase::setUp in core/tests/Drupal/Tests/BrowserTestBase.php
ConfigInstallProfileUnmetDependenciesTest::prepareEnvironment in core/modules/config/tests/src/Functional/ConfigInstallProfileUnmetDependenciesTest.php
Prepares the current environment for running the test.
DistributionProfileExistingSettingsTest::prepareEnvironment in core/tests/Drupal/FunctionalTests/Installer/DistributionProfileExistingSettingsTest.php
Prepares the current environment for running the test.
DistributionProfileTest::prepareEnvironment in core/tests/Drupal/FunctionalTests/Installer/DistributionProfileTest.php
Prepares the current environment for running the test.
DistributionProfileTranslationQueryTest::prepareEnvironment in core/tests/Drupal/FunctionalTests/Installer/DistributionProfileTranslationQueryTest.php
Prepares the current environment for running the test.

... See full list

23 methods override FunctionalTestSetupTrait::prepareEnvironment()
ConfigInstallProfileUnmetDependenciesTest::prepareEnvironment in core/modules/config/tests/src/Functional/ConfigInstallProfileUnmetDependenciesTest.php
Prepares the current environment for running the test.
DistributionProfileExistingSettingsTest::prepareEnvironment in core/tests/Drupal/FunctionalTests/Installer/DistributionProfileExistingSettingsTest.php
Prepares the current environment for running the test.
DistributionProfileTest::prepareEnvironment in core/tests/Drupal/FunctionalTests/Installer/DistributionProfileTest.php
Prepares the current environment for running the test.
DistributionProfileTranslationQueryTest::prepareEnvironment in core/tests/Drupal/FunctionalTests/Installer/DistributionProfileTranslationQueryTest.php
Prepares the current environment for running the test.
DistributionProfileTranslationTest::prepareEnvironment in core/tests/Drupal/FunctionalTests/Installer/DistributionProfileTranslationTest.php
Prepares the current environment for running the test.

... See full list

File

core/lib/Drupal/Core/Test/FunctionalTestSetupTrait.php, line 625

Class

FunctionalTestSetupTrait
Defines a trait for shared functional test setup functionality.

Namespace

Drupal\Core\Test

Code

protected function prepareEnvironment() {

  // Bootstrap Drupal so we can use Drupal's built in functions.
  $this->classLoader = (require __DIR__ . '/../../../../../autoload.php');
  $request = Request::createFromGlobals();
  $kernel = TestRunnerKernel::createFromRequest($request, $this->classLoader);

  // TestRunnerKernel expects the working directory to be DRUPAL_ROOT.
  chdir(DRUPAL_ROOT);
  $kernel
    ->boot();
  $kernel
    ->preHandle($request);
  $this
    ->prepareDatabasePrefix();
  $this->originalSite = $kernel
    ->findSitePath($request);

  // Create test directory ahead of installation so fatal errors and debug
  // information can be logged during installation process.
  \Drupal::service('file_system')
    ->prepareDirectory($this->siteDirectory, FileSystemInterface::CREATE_DIRECTORY | FileSystemInterface::MODIFY_PERMISSIONS);

  // Prepare filesystem directory paths.
  $this->publicFilesDirectory = $this->siteDirectory . '/files';
  $this->privateFilesDirectory = $this->siteDirectory . '/private';
  $this->tempFilesDirectory = $this->siteDirectory . '/temp';
  $this->translationFilesDirectory = $this->siteDirectory . '/translations';

  // Ensure the configImporter is refreshed for each test.
  $this->configImporter = NULL;

  // Unregister all custom stream wrappers of the parent site.
  $wrappers = \Drupal::service('stream_wrapper_manager')
    ->getWrappers(StreamWrapperInterface::ALL);
  foreach ($wrappers as $scheme => $info) {
    stream_wrapper_unregister($scheme);
  }

  // Reset statics.
  drupal_static_reset();
  $this->container = NULL;

  // Unset globals.
  unset($GLOBALS['config_directories']);
  unset($GLOBALS['config']);
  unset($GLOBALS['conf']);

  // Log fatal errors.
  ini_set('log_errors', 1);
  ini_set('error_log', DRUPAL_ROOT . '/' . $this->siteDirectory . '/error.log');

  // Change the database prefix.
  $this
    ->changeDatabasePrefix();

  // After preparing the environment and changing the database prefix, we are
  // in a valid test environment.
  drupal_valid_test_ua($this->databasePrefix);

  // Reset settings.
  new Settings([
    // For performance, simply use the database prefix as hash salt.
    'hash_salt' => $this->databasePrefix,
  ]);
  Environment::setTimeLimit($this->timeLimit);

  // Save and clean the shutdown callbacks array because it is static cached
  // and will be changed by the test run. Otherwise it will contain callbacks
  // from both environments and the testing environment will try to call the
  // handlers defined by the original one.
  $callbacks =& drupal_register_shutdown_function();
  $this->originalShutdownCallbacks = $callbacks;
  $callbacks = [];
}