2016-05-02 02:29:51 +00: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\Process\Tests ;
2019-04-16 04:51:27 +00:00
use PHPUnit\Framework\TestCase ;
2016-05-02 02:29:51 +00:00
use Symfony\Component\Process\Exception\ProcessFailedException ;
/**
* @ author Sebastian Marek < proofek @ gmail . com >
*/
2019-04-16 04:51:27 +00:00
class ProcessFailedExceptionTest extends TestCase
2016-05-02 02:29:51 +00:00
{
/**
* tests ProcessFailedException throws exception if the process was successful .
*/
public function testProcessFailedExceptionThrowsException ()
{
2019-04-16 04:51:27 +00:00
$process = $this -> getMockBuilder ( 'Symfony\Component\Process\Process' ) -> setMethods ([ 'isSuccessful' ]) -> setConstructorArgs ([[ 'php' ]]) -> getMock ();
2016-05-02 02:29:51 +00:00
$process -> expects ( $this -> once ())
-> method ( 'isSuccessful' )
-> will ( $this -> returnValue ( true ));
2019-04-16 04:51:27 +00:00
if ( method_exists ( $this , 'expectException' )) {
$this -> expectException ( \InvalidArgumentException :: class );
$this -> expectExceptionMessage ( 'Expected a failed process, but the given process was successful.' );
} else {
$this -> setExpectedException ( \InvalidArgumentException :: class , 'Expected a failed process, but the given process was successful.' );
}
2016-05-02 02:29:51 +00:00
new ProcessFailedException ( $process );
}
/**
* tests ProcessFailedException uses information from process output
* to generate exception message .
*/
public function testProcessFailedExceptionPopulatesInformationFromProcessOutput ()
{
$cmd = 'php' ;
$exitCode = 1 ;
$exitText = 'General error' ;
$output = 'Command output' ;
$errorOutput = 'FATAL: Unexpected error' ;
$workingDirectory = getcwd ();
2019-04-16 04:51:27 +00:00
$process = $this -> getMockBuilder ( 'Symfony\Component\Process\Process' ) -> setMethods ([ 'isSuccessful' , 'getOutput' , 'getErrorOutput' , 'getExitCode' , 'getExitCodeText' , 'isOutputDisabled' , 'getWorkingDirectory' ]) -> setConstructorArgs ([[ $cmd ]]) -> getMock ();
2016-05-02 02:29:51 +00:00
$process -> expects ( $this -> once ())
-> method ( 'isSuccessful' )
-> will ( $this -> returnValue ( false ));
$process -> expects ( $this -> once ())
-> method ( 'getOutput' )
-> will ( $this -> returnValue ( $output ));
$process -> expects ( $this -> once ())
-> method ( 'getErrorOutput' )
-> will ( $this -> returnValue ( $errorOutput ));
$process -> expects ( $this -> once ())
-> method ( 'getExitCode' )
-> will ( $this -> returnValue ( $exitCode ));
$process -> expects ( $this -> once ())
-> method ( 'getExitCodeText' )
-> will ( $this -> returnValue ( $exitText ));
$process -> expects ( $this -> once ())
-> method ( 'isOutputDisabled' )
-> will ( $this -> returnValue ( false ));
$process -> expects ( $this -> once ())
-> method ( 'getWorkingDirectory' )
-> will ( $this -> returnValue ( $workingDirectory ));
$exception = new ProcessFailedException ( $process );
$this -> assertEquals (
" The command \" $cmd\ " failed . \n\nExit Code : $exitCode ( $exitText ) \n\nWorking directory : { $workingDirectory } \n\nOutput : \n ================ \n { $output } \n\nError Output : \n ================ \n { $errorOutput } " ,
2019-04-16 04:51:27 +00:00
str_replace ( " 'php' " , 'php' , $exception -> getMessage ())
2016-05-02 02:29:51 +00:00
);
}
/**
* Tests that ProcessFailedException does not extract information from
* process output if it was previously disabled .
*/
public function testDisabledOutputInFailedExceptionDoesNotPopulateOutput ()
{
$cmd = 'php' ;
$exitCode = 1 ;
$exitText = 'General error' ;
$workingDirectory = getcwd ();
2019-04-16 04:51:27 +00:00
$process = $this -> getMockBuilder ( 'Symfony\Component\Process\Process' ) -> setMethods ([ 'isSuccessful' , 'isOutputDisabled' , 'getExitCode' , 'getExitCodeText' , 'getOutput' , 'getErrorOutput' , 'getWorkingDirectory' ]) -> setConstructorArgs ([[ $cmd ]]) -> getMock ();
2016-05-02 02:29:51 +00:00
$process -> expects ( $this -> once ())
-> method ( 'isSuccessful' )
-> will ( $this -> returnValue ( false ));
$process -> expects ( $this -> never ())
-> method ( 'getOutput' );
$process -> expects ( $this -> never ())
-> method ( 'getErrorOutput' );
$process -> expects ( $this -> once ())
-> method ( 'getExitCode' )
-> will ( $this -> returnValue ( $exitCode ));
$process -> expects ( $this -> once ())
-> method ( 'getExitCodeText' )
-> will ( $this -> returnValue ( $exitText ));
$process -> expects ( $this -> once ())
-> method ( 'isOutputDisabled' )
-> will ( $this -> returnValue ( true ));
2019-04-16 04:51:27 +00:00
$process -> expects ( $this -> once ())
2016-05-02 02:29:51 +00:00
-> method ( 'getWorkingDirectory' )
-> will ( $this -> returnValue ( $workingDirectory ));
$exception = new ProcessFailedException ( $process );
$this -> assertEquals (
" The command \" $cmd\ " failed . \n\nExit Code : $exitCode ( $exitText ) \n\nWorking directory : { $workingDirectory } " ,
2019-04-16 04:51:27 +00:00
str_replace ( " 'php' " , 'php' , $exception -> getMessage ())
2016-05-02 02:29:51 +00:00
);
}
}