Skip to main content
Drupal API
User account menu
  • Log in

Breadcrumb

  1. Drupal Core 11.1.x
  2. GlobalState.php

class GlobalState

@no-named-arguments Parameter names are not covered by the backward compatibility promise for PHPUnit

@internal This class is not covered by the backward compatibility promise for PHPUnit

Hierarchy

  • class \PHPUnit\Util\GlobalState

Expanded class hierarchy of GlobalState

1 file declares its use of GlobalState
TestRunner.php in vendor/phpunit/phpunit/src/Framework/TestRunner.php

File

vendor/phpunit/phpunit/src/Util/GlobalState.php, line 39

Namespace

PHPUnit\Util
View source
final class GlobalState {
    
    /**
     * @psalm-var list<string>
     */
    private const SUPER_GLOBAL_ARRAYS = [
        '_ENV',
        '_POST',
        '_GET',
        '_COOKIE',
        '_SERVER',
        '_FILES',
        '_REQUEST',
    ];
    
    /**
     * @psalm-var array<string, array<string, true>>
     */
    private const DEPRECATED_INI_SETTINGS = [
        '7.3' => [
            'iconv.input_encoding' => true,
            'iconv.output_encoding' => true,
            'iconv.internal_encoding' => true,
            'mbstring.func_overload' => true,
            'mbstring.http_input' => true,
            'mbstring.http_output' => true,
            'mbstring.internal_encoding' => true,
            'string.strip_tags' => true,
        ],
        '7.4' => [
            'iconv.input_encoding' => true,
            'iconv.output_encoding' => true,
            'iconv.internal_encoding' => true,
            'mbstring.func_overload' => true,
            'mbstring.http_input' => true,
            'mbstring.http_output' => true,
            'mbstring.internal_encoding' => true,
            'pdo_odbc.db2_instance_name' => true,
            'string.strip_tags' => true,
        ],
        '8.0' => [
            'iconv.input_encoding' => true,
            'iconv.output_encoding' => true,
            'iconv.internal_encoding' => true,
            'mbstring.http_input' => true,
            'mbstring.http_output' => true,
            'mbstring.internal_encoding' => true,
        ],
        '8.1' => [
            'auto_detect_line_endings' => true,
            'filter.default' => true,
            'iconv.input_encoding' => true,
            'iconv.output_encoding' => true,
            'iconv.internal_encoding' => true,
            'mbstring.http_input' => true,
            'mbstring.http_output' => true,
            'mbstring.internal_encoding' => true,
            'oci8.old_oci_close_semantics' => true,
        ],
        '8.2' => [
            'auto_detect_line_endings' => true,
            'filter.default' => true,
            'iconv.input_encoding' => true,
            'iconv.output_encoding' => true,
            'iconv.internal_encoding' => true,
            'mbstring.http_input' => true,
            'mbstring.http_output' => true,
            'mbstring.internal_encoding' => true,
            'oci8.old_oci_close_semantics' => true,
        ],
        '8.3' => [
            'auto_detect_line_endings' => true,
            'filter.default' => true,
            'iconv.input_encoding' => true,
            'iconv.output_encoding' => true,
            'iconv.internal_encoding' => true,
            'mbstring.http_input' => true,
            'mbstring.http_output' => true,
            'mbstring.internal_encoding' => true,
            'oci8.old_oci_close_semantics' => true,
        ],
    ];
    
    /**
     * @throws Exception
     */
    public static function getIncludedFilesAsString() : string {
        return self::processIncludedFilesAsString(get_included_files());
    }
    
    /**
     * @psalm-param list<string> $files
     *
     * @throws Exception
     */
    public static function processIncludedFilesAsString(array $files) : string {
        $excludeList = new ExcludeList();
        $prefix = false;
        $result = '';
        if (defined('__PHPUNIT_PHAR__')) {
            $prefix = 'phar://' . __PHPUNIT_PHAR__ . '/';
        }
        // Do not process bootstrap script
        array_shift($files);
        // If bootstrap script was a Composer bin proxy, skip the second entry as well
        if (str_ends_with(strtr($files[0], '\\', '/'), '/phpunit/phpunit/phpunit')) {
            array_shift($files);
        }
        foreach (array_reverse($files) as $file) {
            if (!empty($GLOBALS['__PHPUNIT_ISOLATION_EXCLUDE_LIST']) && in_array($file, $GLOBALS['__PHPUNIT_ISOLATION_EXCLUDE_LIST'], true)) {
                continue;
            }
            if ($prefix !== false && str_starts_with($file, $prefix)) {
                continue;
            }
            // Skip virtual file system protocols
            if (preg_match('/^(vfs|phpvfs[a-z0-9]+):/', $file)) {
                continue;
            }
            if (!$excludeList->isExcluded($file) && is_file($file)) {
                $result = 'require_once \'' . $file . "';\n" . $result;
            }
        }
        return $result;
    }
    public static function getIniSettingsAsString() : string {
        $result = '';
        foreach (ini_get_all(null, false) as $key => $value) {
            if (self::isIniSettingDeprecated($key)) {
                continue;
            }
            $result .= sprintf('@ini_set(%s, %s);' . "\n", self::exportVariable($key), self::exportVariable((string) $value));
        }
        return $result;
    }
    public static function getConstantsAsString() : string {
        $constants = get_defined_constants(true);
        $result = '';
        if (isset($constants['user'])) {
            foreach ($constants['user'] as $name => $value) {
                $result .= sprintf('if (!defined(\'%s\')) define(\'%s\', %s);' . "\n", $name, $name, self::exportVariable($value));
            }
        }
        return $result;
    }
    public static function getGlobalsAsString() : string {
        $result = '';
        foreach (self::SUPER_GLOBAL_ARRAYS as $superGlobalArray) {
            if (isset($GLOBALS[$superGlobalArray]) && is_array($GLOBALS[$superGlobalArray])) {
                foreach (array_keys($GLOBALS[$superGlobalArray]) as $key) {
                    if ($GLOBALS[$superGlobalArray][$key] instanceof Closure) {
                        continue;
                    }
                    $result .= sprintf('$GLOBALS[\'%s\'][\'%s\'] = %s;' . "\n", $superGlobalArray, $key, self::exportVariable($GLOBALS[$superGlobalArray][$key]));
                }
            }
        }
        $excludeList = self::SUPER_GLOBAL_ARRAYS;
        $excludeList[] = 'GLOBALS';
        foreach (array_keys($GLOBALS) as $key) {
            if (!$GLOBALS[$key] instanceof Closure && !in_array($key, $excludeList, true)) {
                $result .= sprintf('$GLOBALS[\'%s\'] = %s;' . "\n", $key, self::exportVariable($GLOBALS[$key]));
            }
        }
        return $result;
    }
    private static function exportVariable(mixed $variable) : string {
        if (is_scalar($variable) || $variable === null || is_array($variable) && self::arrayOnlyContainsScalars($variable)) {
            return var_export($variable, true);
        }
        return 'unserialize(' . var_export(serialize($variable), true) . ')';
    }
    private static function arrayOnlyContainsScalars(array $array) : bool {
        $result = true;
        foreach ($array as $element) {
            if (is_array($element)) {
                $result = self::arrayOnlyContainsScalars($element);
            }
            elseif (!is_scalar($element) && $element !== null) {
                $result = false;
            }
            if (!$result) {
                break;
            }
        }
        return $result;
    }
    private static function isIniSettingDeprecated(string $iniSetting) : bool {
        return isset(self::DEPRECATED_INI_SETTINGS[PHP_MAJOR_VERSION . '.' . PHP_MINOR_VERSION][$iniSetting]);
    }

}

Members

Title Sort descending Modifiers Object type Summary
GlobalState::arrayOnlyContainsScalars private static function
GlobalState::DEPRECATED_INI_SETTINGS private constant @psalm-var array&lt;string, array&lt;string, true&gt;&gt;
GlobalState::exportVariable private static function
GlobalState::getConstantsAsString public static function
GlobalState::getGlobalsAsString public static function
GlobalState::getIncludedFilesAsString public static function
GlobalState::getIniSettingsAsString public static function
GlobalState::isIniSettingDeprecated private static function
GlobalState::processIncludedFilesAsString public static function @psalm-param list&lt;string&gt; $files
GlobalState::SUPER_GLOBAL_ARRAYS private constant @psalm-var list&lt;string&gt;
RSS feed
Powered by Drupal