/** * Cleans up after testing. * * Deletes created files and temporary files directory, deletes the tables * created by setUp(), and resets the database prefix. */ protected function tearDown() { // Destroy the testing kernel. if (isset($this->kernel)) { $this->kernel->shutdown(); } parent::tearDown(); // Ensure that the maximum meta refresh count is reset. $this->maximumMetaRefreshCount = NULL; // Ensure that internal logged in variable and cURL options are reset. $this->loggedInUser = FALSE; $this->additionalCurlOptions = array(); // Close the CURL handler and reset the cookies array used for upgrade // testing so test classes containing multiple tests are not polluted. $this->curlClose(); $this->curlCookies = array(); $this->cookies = array(); }
/** * Prepares a precompiled ContainerBuilder for all tests of this class. * * Avoids repetitive calls to ContainerBuilder::compile(), which is very slow. * * Based on the (always identical) list of $modules to enable, an initial * container is compiled, all instantiated services are reset/removed, and * this precompiled container is stored in a static class property. (Static, * because PHPUnit instantiates a new class instance for each test *method*.) * * This method is not invoked if there is only a single test method. It is * also not invoked for tests running in process isolation (since each test * method runs in a separate process). * * The ContainerBuilder is not dumped into the filesystem (which would yield * an actually compiled Container class), because * * 1. PHP code cannot be unloaded, so e.g. 900 tests would load 900 different, * full Container classes into memory, quickly exceeding any sensible * memory consumption (GigaBytes). * 2. Dumping a Container class requires to actually write to the system's * temporary directory. This is not really easy with vfs, because vfs * doesn't support yet "include 'vfs://container.php'.". Maybe we could fix * that upstream. * 3. PhpDumper is very slow on its own. * * @param string[] $modules * The list of modules to enable. * * @return \Drupal\Core\DependencyInjection\ContainerBuilder * A clone of the precompiled, empty service container. */ private function getCompiledContainerBuilder(array $modules) { if (!isset(self::$initialContainerBuilder)) { $kernel = new DrupalKernel('testing', $this->classLoader, FALSE); $kernel->setSitePath($this->siteDirectory); if ($modules && ($extensions = $this->getExtensionsForModules($modules))) { $kernel->updateModules($extensions, $extensions); } $kernel->boot(); self::$initialContainerBuilder = $kernel->getContainer(); // Remove all instantiated services, so the container is safe for cloning. // Technically, ContainerBuilder::set($id, NULL) removes each definition, // but the container is compiled/frozen already. foreach (self::$initialContainerBuilder->getServiceIds() as $id) { self::$initialContainerBuilder->set($id, NULL); } // Destruct and trigger garbage collection. \Drupal::unsetContainer(); $kernel->shutdown(); $kernel = NULL; // @see register() $this->container = NULL; } $container = clone self::$initialContainerBuilder; return $container; }
/** * {@inheritdoc} */ protected function tearDown() { parent::tearDown(); // Destroy the testing kernel. if (isset($this->kernel)) { $this->cleanupEnvironment(); $this->kernel->shutdown(); } // Ensure that internal logged in variable is reset. $this->loggedInUser = FALSE; if ($this->mink) { $this->mink->stopSessions(); } }
/** * {@inheritdoc} */ protected function tearDown() { parent::tearDown(); // Destroy the testing kernel. if (isset($this->kernel)) { $this->cleanupEnvironment(); $this->kernel->shutdown(); } // Ensure that internal logged in variable is reset. $this->loggedInUser = FALSE; if ($this->mink) { $this->mink->stopSessions(); } // Restore original shutdown callbacks. if (function_exists('drupal_register_shutdown_function')) { $callbacks =& drupal_register_shutdown_function(); $callbacks = $this->originalShutdownCallbacks; } }