summaryrefslogtreecommitdiff
path: root/vendor/phpunit/phpunit/src/TextUI/XmlConfiguration/PHP/PhpHandler.php
diff options
context:
space:
mode:
Diffstat (limited to 'vendor/phpunit/phpunit/src/TextUI/XmlConfiguration/PHP/PhpHandler.php')
-rw-r--r--vendor/phpunit/phpunit/src/TextUI/XmlConfiguration/PHP/PhpHandler.php121
1 files changed, 121 insertions, 0 deletions
diff --git a/vendor/phpunit/phpunit/src/TextUI/XmlConfiguration/PHP/PhpHandler.php b/vendor/phpunit/phpunit/src/TextUI/XmlConfiguration/PHP/PhpHandler.php
new file mode 100644
index 000000000..5fb0c72b2
--- /dev/null
+++ b/vendor/phpunit/phpunit/src/TextUI/XmlConfiguration/PHP/PhpHandler.php
@@ -0,0 +1,121 @@
+<?php declare(strict_types=1);
+/*
+ * This file is part of PHPUnit.
+ *
+ * (c) Sebastian Bergmann <[email protected]>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+namespace PHPUnit\TextUI\XmlConfiguration;
+
+use const PATH_SEPARATOR;
+use function constant;
+use function define;
+use function defined;
+use function getenv;
+use function implode;
+use function ini_get;
+use function ini_set;
+use function putenv;
+
+/**
+ * @internal This class is not covered by the backward compatibility promise for PHPUnit
+ */
+final class PhpHandler
+{
+ public function handle(Php $configuration): void
+ {
+ $this->handleIncludePaths($configuration->includePaths());
+ $this->handleIniSettings($configuration->iniSettings());
+ $this->handleConstants($configuration->constants());
+ $this->handleGlobalVariables($configuration->globalVariables());
+ $this->handleServerVariables($configuration->serverVariables());
+ $this->handleEnvVariables($configuration->envVariables());
+ $this->handleVariables('_POST', $configuration->postVariables());
+ $this->handleVariables('_GET', $configuration->getVariables());
+ $this->handleVariables('_COOKIE', $configuration->cookieVariables());
+ $this->handleVariables('_FILES', $configuration->filesVariables());
+ $this->handleVariables('_REQUEST', $configuration->requestVariables());
+ }
+
+ private function handleIncludePaths(DirectoryCollection $includePaths): void
+ {
+ if (!$includePaths->isEmpty()) {
+ $includePathsAsStrings = [];
+
+ foreach ($includePaths as $includePath) {
+ $includePathsAsStrings[] = $includePath->path();
+ }
+
+ ini_set(
+ 'include_path',
+ implode(PATH_SEPARATOR, $includePathsAsStrings) .
+ PATH_SEPARATOR .
+ ini_get('include_path')
+ );
+ }
+ }
+
+ private function handleIniSettings(IniSettingCollection $iniSettings): void
+ {
+ foreach ($iniSettings as $iniSetting) {
+ $value = $iniSetting->value();
+
+ if (defined($value)) {
+ $value = (string) constant($value);
+ }
+
+ ini_set($iniSetting->name(), $value);
+ }
+ }
+
+ private function handleConstants(ConstantCollection $constants): void
+ {
+ foreach ($constants as $constant) {
+ if (!defined($constant->name())) {
+ define($constant->name(), $constant->value());
+ }
+ }
+ }
+
+ private function handleGlobalVariables(VariableCollection $variables): void
+ {
+ foreach ($variables as $variable) {
+ $GLOBALS[$variable->name()] = $variable->value();
+ }
+ }
+
+ private function handleServerVariables(VariableCollection $variables): void
+ {
+ foreach ($variables as $variable) {
+ $_SERVER[$variable->name()] = $variable->value();
+ }
+ }
+
+ private function handleVariables(string $target, VariableCollection $variables): void
+ {
+ foreach ($variables as $variable) {
+ $GLOBALS[$target][$variable->name()] = $variable->value();
+ }
+ }
+
+ private function handleEnvVariables(VariableCollection $variables): void
+ {
+ foreach ($variables as $variable) {
+ $name = $variable->name();
+ $value = $variable->value();
+ $force = $variable->force();
+
+ if ($force || getenv($name) === false) {
+ putenv("{$name}={$value}");
+ }
+
+ $value = getenv($name);
+
+ if ($force || !isset($_ENV[$name])) {
+ $_ENV[$name] = $value;
+ }
+ }
+ }
+}