Skip to content

Commit

Permalink
PhpProcess: Reset $_ENV if it is in use (#693)
Browse files Browse the repository at this point in the history
* PhpProcess: Reset $_ENV if it is in use

As of 1.3.2 xdebug-handler won't update $_ENV if it is in use.
But Symfony's Process will happily import everything from $_ENV,
hence we need to reset it just as xdebug-handler does.

* Add missing phpunit.xml

* Update PhpProcess.php
  • Loading branch information
sanmai authored and maks-rafalko committed May 22, 2019
1 parent add7355 commit a774020
Show file tree
Hide file tree
Showing 9 changed files with 114 additions and 0 deletions.
16 changes: 16 additions & 0 deletions src/Console/Util/PhpProcess.php
Original file line number Diff line number Diff line change
Expand Up @@ -63,7 +63,23 @@ public function start(callable $callback = null, array $env = null): void
$phpConfig = new PhpConfig();

$phpConfig->useOriginal();

// As of 1.3.2 xdebug-handler won't update $_ENV if it is in use.
// But Symfony's Process will happily import everything from $_ENV,
// hence we need to reset it just as xdebug-handler does
$updateEnv = false !== stripos((string) ini_get('variables_order'), 'E');

if ($updateEnv) {
unset($_ENV['PHPRC']);
unset($_ENV['PHP_INI_SCAN_DIR']);
}

parent::start($callback, $env ?? []);
$phpConfig->usePersistent();

if ($updateEnv) {
$_ENV['PHPRC'] = $_SERVER['PHPRC'];
$_ENV['PHP_INI_SCAN_DIR'] = $_SERVER['PHP_INI_SCAN_DIR'];
}
}
}
7 changes: 7 additions & 0 deletions tests/Fixtures/e2e/Variables_Order_EGPCS/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
# Ensure Infection runs with non-empty `$_ENV`

When `variables_order` set to constain an `E`, Infection should just work.

https://github.com/infection/infection/issues/692

https://github.com/infection/infection/pull/693
15 changes: 15 additions & 0 deletions tests/Fixtures/e2e/Variables_Order_EGPCS/composer.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
{
"require-dev": {
"phpunit/phpunit": "^7.5"
},
"autoload": {
"psr-4": {
"Variables_Order_EGPCS\\": "src/"
}
},
"autoload-dev": {
"psr-4": {
"Variables_Order_EGPCS\\Test\\": "tests/"
}
}
}
6 changes: 6 additions & 0 deletions tests/Fixtures/e2e/Variables_Order_EGPCS/expected-output.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
Total: 1
Killed: 1
Errored: 0
Escaped: 0
Timed Out: 0
Not Covered: 0
12 changes: 12 additions & 0 deletions tests/Fixtures/e2e/Variables_Order_EGPCS/infection.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
{
"timeout": 25,
"source": {
"directories": [
"src"
]
},
"logs": {
"summary": "infection.log"
},
"tmpDir": "."
}
18 changes: 18 additions & 0 deletions tests/Fixtures/e2e/Variables_Order_EGPCS/phpunit.xml.dist
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
<?xml version="1.0" encoding="UTF-8"?>
<phpunit xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="./vendor/phpunit/phpunit/phpunit.xsd"
bootstrap="./vendor/autoload.php"
colors="true"
>
<testsuites>
<testsuite name="Test Suite">
<directory>./tests/</directory>
</testsuite>
</testsuites>

<filter>
<whitelist>
<directory>./src/</directory>
</whitelist>
</filter>
</phpunit>
14 changes: 14 additions & 0 deletions tests/Fixtures/e2e/Variables_Order_EGPCS/run_tests.bash
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
#!/usr/bin/env bash

readonly INFECTION=../../../../bin/infection

set -e pipefail

if [ "$PHPDBG" = "1" ]
then
phpdbg -d variables_order=EGPCS -qrr $INFECTION
else
php -d variables_order=EGPCS $INFECTION
fi

diff -w expected-output.txt infection.log
11 changes: 11 additions & 0 deletions tests/Fixtures/e2e/Variables_Order_EGPCS/src/SourceClass.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
<?php

namespace Variables_Order_EGPCS;

class SourceClass
{
public function hello(): string
{
return 'hello';
}
}
15 changes: 15 additions & 0 deletions tests/Fixtures/e2e/Variables_Order_EGPCS/tests/SourceClassTest.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
<?php

namespace Variables_Order_EGPCS\Test;

use Variables_Order_EGPCS\SourceClass;
use PHPUnit\Framework\TestCase;

class SourceClassTest extends TestCase
{
public function test_hello()
{
$sourceClass = new SourceClass();
$this->assertSame('hello', $sourceClass->hello());
}
}

0 comments on commit a774020

Please sign in to comment.