/laravel_tintuc/vendor/phpunit/phpunit/src/Util/GlobalState.php
https://gitlab.com/nmhieucoder/laravel_tintuc · PHP · 195 lines · 161 code · 10 blank · 24 comment · 7 complexity · 9ff710317fc6b912fd67cfb5e4ed2fcd MD5 · raw file
- <?php declare(strict_types=1);
- /*
- * This file is part of PHPUnit.
- *
- * (c) Sebastian Bergmann <sebastian@phpunit.de>
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
- namespace PHPUnit\Util;
- use function array_keys;
- use function array_reverse;
- use function defined;
- use function get_defined_constants;
- use function get_included_files;
- use function in_array;
- use function ini_get_all;
- use function is_array;
- use function is_file;
- use function is_scalar;
- use function preg_match;
- use function serialize;
- use function sprintf;
- use function strpos;
- use function var_export;
- use Closure;
- /**
- * @internal This class is not covered by the backward compatibility promise for PHPUnit
- */
- final class GlobalState
- {
- /**
- * @var string[]
- */
- private const SUPER_GLOBAL_ARRAYS = [
- '_ENV',
- '_POST',
- '_GET',
- '_COOKIE',
- '_SERVER',
- '_FILES',
- '_REQUEST',
- ];
- /**
- * @throws Exception
- */
- public static function getIncludedFilesAsString(): string
- {
- return self::processIncludedFilesAsString(get_included_files());
- }
- /**
- * @param 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
- unset($files[0]);
- 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 && strpos($file, $prefix) === 0) {
- 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) {
- $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($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;
- }
- }