2015-08-17 17:00:26 -07:00
< ? php
/*
* This file is part of the Symfony package .
*
* ( c ) Fabien Potencier < fabien @ symfony . com >
*
* For the full copyright and license information , please view the LICENSE
* file that was distributed with this source code .
*/
namespace Symfony\Component\Console\Tests\Helper ;
use Symfony\Component\Console\Helper\DebugFormatterHelper ;
use Symfony\Component\Console\Helper\HelperSet ;
use Symfony\Component\Console\Output\StreamOutput ;
use Symfony\Component\Console\Helper\ProcessHelper ;
use Symfony\Component\Process\Process ;
class ProcessHelperTest extends \PHPUnit_Framework_TestCase
{
/**
* @ dataProvider provideCommandsAndOutput
*/
public function testVariousProcessRuns ( $expected , $cmd , $verbosity , $error )
{
$helper = new ProcessHelper ();
$helper -> setHelperSet ( new HelperSet ( array ( new DebugFormatterHelper ())));
$output = $this -> getOutputStream ( $verbosity );
$helper -> run ( $output , $cmd , $error );
$this -> assertEquals ( $expected , $this -> getOutput ( $output ));
}
public function testPassedCallbackIsExecuted ()
{
$helper = new ProcessHelper ();
$helper -> setHelperSet ( new HelperSet ( array ( new DebugFormatterHelper ())));
$output = $this -> getOutputStream ( StreamOutput :: VERBOSITY_NORMAL );
$executed = false ;
$callback = function () use ( & $executed ) { $executed = true ; };
$helper -> run ( $output , 'php -r "echo 42;"' , null , $callback );
$this -> assertTrue ( $executed );
}
public function provideCommandsAndOutput ()
{
$successOutputVerbose = <<< EOT
RUN php - r " echo 42; "
RES Command ran successfully
EOT ;
$successOutputDebug = <<< EOT
RUN php - r " echo 42; "
OUT 42
RES Command ran successfully
EOT ;
$successOutputDebugWithTags = <<< EOT
2015-08-27 12:03:05 -07:00
RUN php - r " echo '<info>42</info>'; "
2015-08-17 17:00:26 -07:00
OUT < info > 42 </ info >
RES Command ran successfully
EOT ;
$successOutputProcessDebug = <<< EOT
RUN 'php' '-r' 'echo 42;'
OUT 42
RES Command ran successfully
EOT ;
$syntaxErrorOutputVerbose = <<< EOT
RUN php - r " fwrite(STDERR, 'error message');usleep(50000);fwrite(STDOUT, 'out message');exit(252); "
RES 252 Command did not run successfully
EOT ;
$syntaxErrorOutputDebug = <<< EOT
2015-10-08 11:40:12 -07:00
RUN php - r " fwrite(STDERR, 'error message');usleep(500000);fwrite(STDOUT, 'out message');exit(252); "
2015-08-17 17:00:26 -07:00
ERR error message
OUT out message
RES 252 Command did not run successfully
EOT ;
$errorMessage = 'An error occurred' ;
if ( '\\' === DIRECTORY_SEPARATOR ) {
$successOutputProcessDebug = str_replace ( " ' " , '"' , $successOutputProcessDebug );
}
return array (
array ( '' , 'php -r "echo 42;"' , StreamOutput :: VERBOSITY_VERBOSE , null ),
array ( $successOutputVerbose , 'php -r "echo 42;"' , StreamOutput :: VERBOSITY_VERY_VERBOSE , null ),
array ( $successOutputDebug , 'php -r "echo 42;"' , StreamOutput :: VERBOSITY_DEBUG , null ),
2015-08-27 12:03:05 -07:00
array ( $successOutputDebugWithTags , 'php -r "echo \'<info>42</info>\';"' , StreamOutput :: VERBOSITY_DEBUG , null ),
2015-08-17 17:00:26 -07:00
array ( '' , 'php -r "syntax error"' , StreamOutput :: VERBOSITY_VERBOSE , null ),
array ( $syntaxErrorOutputVerbose , 'php -r "fwrite(STDERR, \'error message\');usleep(50000);fwrite(STDOUT, \'out message\');exit(252);"' , StreamOutput :: VERBOSITY_VERY_VERBOSE , null ),
2015-10-08 11:40:12 -07:00
array ( $syntaxErrorOutputDebug , 'php -r "fwrite(STDERR, \'error message\');usleep(500000);fwrite(STDOUT, \'out message\');exit(252);"' , StreamOutput :: VERBOSITY_DEBUG , null ),
2015-08-17 17:00:26 -07:00
array ( $errorMessage . PHP_EOL , 'php -r "fwrite(STDERR, \'error message\');usleep(50000);fwrite(STDOUT, \'out message\');exit(252);"' , StreamOutput :: VERBOSITY_VERBOSE , $errorMessage ),
array ( $syntaxErrorOutputVerbose . $errorMessage . PHP_EOL , 'php -r "fwrite(STDERR, \'error message\');usleep(50000);fwrite(STDOUT, \'out message\');exit(252);"' , StreamOutput :: VERBOSITY_VERY_VERBOSE , $errorMessage ),
2015-10-08 11:40:12 -07:00
array ( $syntaxErrorOutputDebug . $errorMessage . PHP_EOL , 'php -r "fwrite(STDERR, \'error message\');usleep(500000);fwrite(STDOUT, \'out message\');exit(252);"' , StreamOutput :: VERBOSITY_DEBUG , $errorMessage ),
2015-08-17 17:00:26 -07:00
array ( $successOutputProcessDebug , array ( 'php' , '-r' , 'echo 42;' ), StreamOutput :: VERBOSITY_DEBUG , null ),
array ( $successOutputDebug , new Process ( 'php -r "echo 42;"' ), StreamOutput :: VERBOSITY_DEBUG , null ),
);
}
private function getOutputStream ( $verbosity )
{
return new StreamOutput ( fopen ( 'php://memory' , 'r+' , false ), $verbosity , false );
}
private function getOutput ( StreamOutput $output )
{
rewind ( $output -> getStream ());
return stream_get_contents ( $output -> getStream ());
}
}