diff --git a/src/Symfony/Component/Process/ProcessBuilder.php b/src/Symfony/Component/Process/ProcessBuilder.php index ae811e0843..2a5e1db831 100644 --- a/src/Symfony/Component/Process/ProcessBuilder.php +++ b/src/Symfony/Component/Process/ProcessBuilder.php @@ -164,7 +164,8 @@ class ProcessBuilder $script = implode(' ', array_map(array(__NAMESPACE__.'\\ProcessUtils', 'escapeArgument'), $arguments)); if ($this->inheritEnv) { - $env = $this->env ? $this->env + $_ENV : null; + // include $_ENV for BC purposes + $env = array_replace($_ENV, $_SERVER, $this->env); } else { $env = $this->env; } diff --git a/src/Symfony/Component/Process/Tests/ProcessBuilderTest.php b/src/Symfony/Component/Process/Tests/ProcessBuilderTest.php index 0a2083f255..f3ff644bde 100644 --- a/src/Symfony/Component/Process/Tests/ProcessBuilderTest.php +++ b/src/Symfony/Component/Process/Tests/ProcessBuilderTest.php @@ -17,75 +17,33 @@ class ProcessBuilderTest extends \PHPUnit_Framework_TestCase { public function testInheritEnvironmentVars() { - $snapshot = $_ENV; - $_ENV = $expected = array('foo' => 'bar'); + $_ENV['MY_VAR_1'] = 'foo'; - $pb = new ProcessBuilder(); - $pb->add('foo')->inheritEnvironmentVariables(); - $proc = $pb->getProcess(); + $proc = ProcessBuilder::create() + ->add('foo') + ->getProcess(); - $this->assertNull($proc->getEnv(), '->inheritEnvironmentVariables() copies $_ENV'); + unset($_ENV['MY_VAR_1']); - $_ENV = $snapshot; + $env = $proc->getEnv(); + $this->assertArrayHasKey('MY_VAR_1', $env); + $this->assertEquals('foo', $env['MY_VAR_1']); } public function testProcessShouldInheritAndOverrideEnvironmentVars() { - $snapshot = $_ENV; - $_ENV = array('foo' => 'bar', 'bar' => 'baz'); - $expected = array('foo' => 'foo', 'bar' => 'baz'); + $_ENV['MY_VAR_1'] = 'foo'; - $pb = new ProcessBuilder(); - $pb->add('foo')->inheritEnvironmentVariables() - ->setEnv('foo', 'foo'); - $proc = $pb->getProcess(); - - $this->assertEquals($expected, $proc->getEnv(), '->inheritEnvironmentVariables() copies $_ENV'); - - $_ENV = $snapshot; - } - - public function testProcessBuilderShouldNotPassEnvArrays() - { - $snapshot = $_ENV; - $_ENV = array('a' => array('b', 'c'), 'd' => 'e', 'f' => 'g'); - $expected = array('d' => 'e', 'f' => 'g'); - - $pb = new ProcessBuilder(); - $pb->add('a')->inheritEnvironmentVariables() - ->setEnv('d', 'e'); - $proc = $pb->getProcess(); - - $this->assertEquals($expected, $proc->getEnv(), '->inheritEnvironmentVariables() removes array values from $_ENV'); - - $_ENV = $snapshot; - } - - public function testInheritEnvironmentVarsByDefault() - { - $pb = new ProcessBuilder(); - $proc = $pb->add('foo')->getProcess(); - - $this->assertNull($proc->getEnv()); - } - - public function testNotReplaceExplicitlySetVars() - { - $snapshot = $_ENV; - $_ENV = array('foo' => 'bar'); - $expected = array('foo' => 'baz'); - - $pb = new ProcessBuilder(); - $pb - ->setEnv('foo', 'baz') - ->inheritEnvironmentVariables() + $proc = ProcessBuilder::create() + ->setEnv('MY_VAR_1', 'bar') ->add('foo') - ; - $proc = $pb->getProcess(); + ->getProcess(); - $this->assertEquals($expected, $proc->getEnv(), '->inheritEnvironmentVariables() copies $_ENV'); + unset($_ENV['MY_VAR_1']); - $_ENV = $snapshot; + $env = $proc->getEnv(); + $this->assertArrayHasKey('MY_VAR_1', $env); + $this->assertEquals('bar', $env['MY_VAR_1']); } /**