Mercurial > hg > isophonics-drupal-site
diff core/lib/Drupal/Core/Test/TestRunnerKernel.php @ 0:4c8ae668cc8c
Initial import (non-working)
author | Chris Cannam |
---|---|
date | Wed, 29 Nov 2017 16:09:58 +0000 |
parents | |
children | af1871eacc83 |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/core/lib/Drupal/Core/Test/TestRunnerKernel.php Wed Nov 29 16:09:58 2017 +0000 @@ -0,0 +1,95 @@ +<?php + +namespace Drupal\Core\Test; + +use Drupal\Core\DrupalKernel; +use Drupal\Core\Extension\Extension; +use Drupal\Core\Site\Settings; +use Symfony\Component\HttpFoundation\Request; + +/** + * Kernel for run-tests.sh. + */ +class TestRunnerKernel extends DrupalKernel { + + /** + * {@inheritdoc} + */ + public static function createFromRequest(Request $request, $class_loader, $environment = 'test_runner', $allow_dumping = TRUE, $app_root = NULL) { + return parent::createFromRequest($request, $class_loader, $environment, $allow_dumping, $app_root); + } + + /** + * {@inheritdoc} + */ + public function __construct($environment, $class_loader, $allow_dumping = FALSE, $app_root = NULL) { + // Force $allow_dumping to FALSE, because the test runner kernel should + // always have to rebuild its container, and potentially avoid isolation + // issues against the tests. + parent::__construct($environment, $class_loader, FALSE, $app_root); + + // Prime the module list and corresponding Extension objects. + // @todo Remove System module. Needed because + // \Drupal\Core\Datetime\DateFormatter has a (needless) dependency on the + // 'date_format' entity, so calls to format_date()/format_interval() cause + // a plugin not found exception. + $this->moduleList = [ + 'system' => 0, + 'simpletest' => 0, + ]; + $this->moduleData = [ + 'system' => new Extension($this->root, 'module', 'core/modules/system/system.info.yml', 'system.module'), + 'simpletest' => new Extension($this->root, 'module', 'core/modules/simpletest/simpletest.info.yml', 'simpletest.module'), + ]; + } + + /** + * {@inheritdoc} + */ + public function boot() { + // Ensure that required Settings exist. + if (!Settings::getAll()) { + new Settings([ + 'hash_salt' => 'run-tests', + 'container_yamls' => [], + // If there is no settings.php, then there is no parent site. In turn, + // there is no public files directory; use a custom public files path. + 'file_public_path' => 'sites/default/files', + ]); + } + + // Remove Drupal's error/exception handlers; they are designed for HTML + // and there is no storage nor a (watchdog) logger here. + restore_error_handler(); + restore_exception_handler(); + + // In addition, ensure that PHP errors are not hidden away in logs. + ini_set('display_errors', TRUE); + + parent::boot(); + + $this->getContainer()->get('module_handler')->loadAll(); + + $this->getContainer()->get('test_discovery')->registerTestNamespaces(); + + // Register stream wrappers. + $this->getContainer()->get('stream_wrapper_manager')->register(); + + // Create the build/artifacts directory if necessary. + include_once $this->getAppRoot() . '/core/includes/file.inc'; + if (!is_dir('public://simpletest')) { + mkdir('public://simpletest', 0777, TRUE); + } + } + + /** + * {@inheritdoc} + */ + public function discoverServiceProviders() { + parent::discoverServiceProviders(); + // The test runner does not require an installed Drupal site to exist. + // Therefore, its environment is identical to that of the early installer. + $this->serviceProviderClasses['app']['Test'] = 'Drupal\Core\Installer\InstallerServiceProvider'; + } + +}