You are here

GlobalState.php in Zircon Profile 8.0

Same filename and directory in other branches
  1. 8 vendor/phpunit/phpunit/src/Util/GlobalState.php

File

vendor/phpunit/phpunit/src/Util/GlobalState.php
View source
<?php

/*
 * 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.
 */

/**
 * @since Class available since Release 3.4.0
 */
class PHPUnit_Util_GlobalState {

  /**
   * @var array
   */
  protected static $superGlobalArrays = array(
    '_ENV',
    '_POST',
    '_GET',
    '_COOKIE',
    '_SERVER',
    '_FILES',
    '_REQUEST',
  );

  /**
   * @var array
   */
  protected static $superGlobalArraysLong = array(
    'HTTP_ENV_VARS',
    'HTTP_POST_VARS',
    'HTTP_GET_VARS',
    'HTTP_COOKIE_VARS',
    'HTTP_SERVER_VARS',
    'HTTP_POST_FILES',
  );
  public static function getIncludedFilesAsString() {
    return static::processIncludedFilesAsString(get_included_files());
  }
  public static function processIncludedFilesAsString(array $files) {
    $blacklist = new PHPUnit_Util_Blacklist();
    $prefix = false;
    $result = '';
    if (defined('__PHPUNIT_PHAR__')) {
      $prefix = 'phar://' . __PHPUNIT_PHAR__ . '/';
    }
    for ($i = count($files) - 1; $i > 0; $i--) {
      $file = $files[$i];
      if ($prefix !== false && strpos($file, $prefix) === 0) {
        continue;
      }

      // Skip virtual file system protocols
      if (preg_match('/^(vfs|phpvfs[a-z0-9]+):/', $file)) {
        continue;
      }
      if (!$blacklist
        ->isBlacklisted($file) && is_file($file)) {
        $result = 'require_once \'' . $file . "';\n" . $result;
      }
    }
    return $result;
  }
  public static function getIniSettingsAsString() {
    $result = '';
    $iniSettings = ini_get_all(null, false);
    foreach ($iniSettings as $key => $value) {
      $result .= sprintf('@ini_set(%s, %s);' . "\n", self::exportVariable($key), self::exportVariable($value));
    }
    return $result;
  }
  public static function getConstantsAsString() {
    $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() {
    $result = '';
    $superGlobalArrays = self::getSuperGlobalArrays();
    foreach ($superGlobalArrays 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]));
        }
      }
    }
    $blacklist = $superGlobalArrays;
    $blacklist[] = 'GLOBALS';
    foreach (array_keys($GLOBALS) as $key) {
      if (!in_array($key, $blacklist) && !$GLOBALS[$key] instanceof Closure) {
        $result .= sprintf('$GLOBALS[\'%s\'] = %s;' . "\n", $key, self::exportVariable($GLOBALS[$key]));
      }
    }
    return $result;
  }
  protected static function getSuperGlobalArrays() {
    if (ini_get('register_long_arrays') == '1') {
      return array_merge(self::$superGlobalArrays, self::$superGlobalArraysLong);
    }
    else {
      return self::$superGlobalArrays;
    }
  }
  protected static function exportVariable($variable) {
    if (is_scalar($variable) || is_null($variable) || is_array($variable) && self::arrayOnlyContainsScalars($variable)) {
      return var_export($variable, true);
    }
    return 'unserialize(' . var_export(serialize($variable), true) . ')';
  }
  protected static function arrayOnlyContainsScalars(array $array) {
    $result = true;
    foreach ($array as $element) {
      if (is_array($element)) {
        $result = self::arrayOnlyContainsScalars($element);
      }
      elseif (!is_scalar($element) && !is_null($element)) {
        $result = false;
      }
      if ($result === false) {
        break;
      }
    }
    return $result;
  }

}

Classes

Namesort descending Description
PHPUnit_Util_GlobalState @since Class available since Release 3.4.0