Skip to content

Commit

Permalink
fix: PHPUnit test Process() format
Browse files Browse the repository at this point in the history
\Symfony\Component\Process\Process refuses being passed a string
with version > 5, which is installed with PHP > 7.2.5.

It also refuses being passed an array with version < 3.3, which is
installed with PHP < 5.5.9.

Solved by checking if Process::fromShellCommandLine() exists, which
was introduced in version 4.2.0.
  • Loading branch information
Michaël Dupont committed Dec 2, 2019
1 parent b8346af commit aa44594
Showing 1 changed file with 20 additions and 1 deletion.
21 changes: 20 additions & 1 deletion tests/PhpWord/_includes/AbstractWebServerEmbeddedTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,26 @@ abstract class AbstractWebServerEmbeddedTest extends \PHPUnit\Framework\TestCase
public static function setUpBeforeClass()
{
if (self::isBuiltinServerSupported()) {
self::$httpServer = new Process('php -S localhost:8080 -t tests/PhpWord/_files');
$commandLine = 'php -S localhost:8080 -t tests/PhpWord/_files';

/*
* Make sure to invoke \Symfony\Component\Process\Process correctly
* regardless of PHP version used.
*
* In Process version >= 5 / PHP >= 7.2.5, the constructor requires
* an array, while in version < 3.3 / PHP < 5.5.9 it requires a string.
* In between, it can accept both.
*
* Process::fromShellCommandLine() was introduced in version 4.2.0,
* to enable recent versions of Process to parse a command string,
* so if it is not available it means it is still possible to pass
* a string to the constructor.
*/
if (method_exists('Symfony\Component\Process\Process', 'fromShellCommandLine')) {
self::$httpServer = Process::fromShellCommandline($commandLine);
} else {
self::$httpServer = new Process($commandLine);
}
self::$httpServer->start();
while (!self::$httpServer->isRunning()) {
usleep(1000);
Expand Down

0 comments on commit aa44594

Please sign in to comment.