EnvironmentCleanerService.php

Namespace

Drupal\simpletest

File

core/modules/simpletest/src/EnvironmentCleanerService.php

View source
<?php

namespace Drupal\simpletest;

use Drupal\Core\Database\Connection;
use Drupal\Core\Messenger\MessengerInterface;
use Drupal\Core\StringTranslation\TranslationInterface;
use Drupal\Core\Config\ConfigFactory;
use Drupal\Core\Cache\CacheBackendInterface;
use Drupal\Core\File\FileSystem;
use Drupal\Core\Test\EnvironmentCleaner;

/**
 * Uses containerized services to perform post-test cleanup.
 */
class EnvironmentCleanerService extends EnvironmentCleaner {
    
    /**
     * Messenger service.
     *
     * @var \Drupal\Core\Messenger\MessengerInterface
     */
    protected $messenger;
    
    /**
     * The translation service.
     *
     * @var \Drupal\Core\StringTranslation\TranslationInterface
     */
    protected $translation;
    
    /**
     * The config factory.
     *
     * @var \Drupal\Core\Config\ConfigFactory
     */
    protected $configFactory;
    
    /**
     * Default cache.
     *
     * @var \Drupal\Core\Cache\CacheBackendInterface
     */
    protected $cacheDefault;
    
    /**
     * Construct an environment cleaner.
     *
     * @param string $root
     *   The path to the root of the Drupal installation.
     * @param \Drupal\Core\Database\Connection $test_database
     *   Connection to the database against which tests were run.
     * @param \Drupal\Core\Database\Connection $results_database
     *   Connection to the database where test results were stored. This could be
     *   the same as $test_database, or it could be different.
     * @param \Drupal\Core\StringTranslation\TranslationInterface|null $translation
     *   (optional) The translation service. If none is supplied, this class will
     *   attempt to discover one using \Drupal.
     */
    public function __construct($root, Connection $test_database, Connection $results_database, MessengerInterface $messenger, TranslationInterface $translation, ConfigFactory $config, CacheBackendInterface $cache_default, FileSystem $file_system) {
        $this->root = $root;
        $this->testDatabase = $test_database;
        $this->resultsDatabase = $results_database;
        $this->messenger = $messenger;
        $this->translation = $translation;
        $this->configFactory = $config;
        $this->cacheDefault = $cache_default;
        $this->fileSystem = $file_system;
    }
    
    /**
     * {@inheritdoc}
     */
    public function cleanEnvironment($clear_results = TRUE, $clear_temp_directories = TRUE, $clear_database = TRUE) {
        $results_removed = 0;
        $clear_results = $this->configFactory
            ->get('simpletest.settings')
            ->get('clear_results');
        if ($clear_database) {
            $this->cleanDatabase();
        }
        if ($clear_temp_directories) {
            $this->cleanTemporaryDirectories();
        }
        if ($clear_results) {
            $results_removed = $this->cleanResultsTable();
        }
        $this->cacheDefault
            ->delete('simpletest');
        $this->cacheDefault
            ->delete('simpletest_phpunit');
        if ($clear_results) {
            $this->messenger
                ->addMessage($this->translation
                ->formatPlural($results_removed, 'Removed 1 test result.', 'Removed @count test results.'));
        }
        else {
            $this->messenger
                ->addMessage($this->translation
                ->translate('Clear results is disabled and the test results table will not be cleared.'), 'warning');
        }
    }
    
    /**
     * {@inheritdoc}
     */
    public function cleanDatabase() {
        $tables_removed = $this->doCleanDatabase();
        if ($tables_removed > 0) {
            $this->messenger
                ->addMessage($this->translation
                ->formatPlural($tables_removed, 'Removed 1 leftover table.', 'Removed @count leftover tables.'));
        }
        else {
            $this->messenger
                ->addMessage($this->translation
                ->translate('No leftover tables to remove.'));
        }
    }
    
    /**
     * {@inheritdoc}
     */
    public function cleanTemporaryDirectories() {
        $directories_removed = $this->doCleanTemporaryDirectories();
        if ($directories_removed > 0) {
            $this->messenger
                ->addMessage($this->translation
                ->formatPlural($directories_removed, 'Removed 1 temporary directory.', 'Removed @count temporary directories.'));
        }
        else {
            $this->messenger
                ->addMessage($this->translation
                ->translate('No temporary directories to remove.'));
        }
    }

}

Classes

Title Deprecated Summary
EnvironmentCleanerService Uses containerized services to perform post-test cleanup.

Buggy or inaccurate documentation? Please file an issue. Need support? Need help programming? Connect with the Drupal community.