1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134
|
<?php
/*
* This file is part of composer/xdebug-handler.
*
* (c) Composer <https://github.com/composer>
*
* For the full copyright and license information, please view
* the LICENSE file that was distributed with this source code.
*/
declare(strict_types=1);
namespace Composer\XdebugHandler\Tests;
use Composer\XdebugHandler\PhpConfig;
use Composer\XdebugHandler\Tests\Helpers\BaseTestCase;
use Composer\XdebugHandler\Tests\Helpers\EnvHelper;
use Composer\XdebugHandler\Tests\Mocks\CoreMock;
/**
* @phpstan-import-type envTestData from EnvHelper
*/
class PhpConfigTest extends BaseTestCase
{
/**
* Tests that the correct command-line options are returned.
*
* @param string $method PhpConfig method to call
* @param string[] $expected
* @dataProvider commandLineProvider
*/
public function testCommandLineOptions(string $method, array $expected): void
{
$loaded = true;
CoreMock::createAndCheck($loaded);
$settings = CoreMock::getRestartSettings();
if (null === $settings) {
self::fail('getRestartSettings returned null');
}
$config = new PhpConfig();
$options = BaseTestCase::safeCall($config, $method, null, $this);
if ($method === 'useStandard') {
$expected[2] = $settings['tmpIni'];
}
self::assertSame($expected, $options);
}
/**
* @phpstan-return array<string, array{0: string, 1: string[]}>
*/
public function commandLineProvider(): array
{
// $method, $expected
return [
'original' => ['useOriginal', []],
'standard' => ['useStandard', ['-n', '-c', '']],
'persistent' => ['usePersistent', []],
];
}
/**
* Tests that the environment is set correctly for each mode.
*
* @param string $iniFunc IniHelper method to use
* @param false|string $scanDir Initial value for PHP_INI_SCAN_DIR
* @param false|string $phprc Initial value for PHPRC
* @dataProvider environmentProvider
*/
public function testEnvironment(string $iniFunc, $scanDir, $phprc): void
{
$ini = EnvHelper::setInis($iniFunc, $scanDir, $phprc);
$loaded = true;
CoreMock::createAndCheck($loaded);
$settings = CoreMock::getRestartSettings();
if (null === $settings) {
self::fail('getRestartSettings returned null');
}
$config = new PhpConfig();
$tests = ['useOriginal', 'usePersistent', 'useStandard'];
foreach ($tests as $method) {
BaseTestCase::safeCall($config, $method, null, $this);
if ($method === 'usePersistent') {
$expectedScanDir = '';
$expectedPhprc = $settings['tmpIni'];
} else {
$expectedScanDir = $scanDir;
$expectedPhprc = $phprc;
}
$this->checkEnvironment($expectedScanDir, $expectedPhprc, $method);
}
}
/**
* @phpstan-return envTestData
*/
public function environmentProvider(): array
{
return EnvHelper::dataProvider();
}
/**
* Checks the value of variables in the local environment and $_SERVER
*
* @param mixed $scanDir
* @param mixed $phprc
* @param string $name
*/
private function checkEnvironment($scanDir, $phprc, $name): void
{
$tests = ['PHP_INI_SCAN_DIR' => $scanDir, 'PHPRC' => $phprc];
foreach ($tests as $env => $value) {
$message = $name.' '.strtolower($env);
self::assertSame($value, getenv($env), 'getenv '.$message);
if (false === $value) {
self::assertArrayNotHasKey($env, $_SERVER, '$_SERVER '.$message);
} else {
self::assertSame($value, $_SERVER[$env], '$_SERVER '.$message);
}
}
}
}
|