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\Tester ;
use Symfony\Component\Console\Application ;
use Symfony\Component\Console\Input\ArrayInput ;
use Symfony\Component\Console\Input\InputInterface ;
use Symfony\Component\Console\Output\OutputInterface ;
use Symfony\Component\Console\Output\StreamOutput ;
/**
* Eases the testing of console applications .
*
* When testing an application , don ' t forget to disable the auto exit flag :
*
* $application = new Application ();
* $application -> setAutoExit ( false );
*
* @ author Fabien Potencier < fabien @ symfony . com >
*/
class ApplicationTester
{
private $application ;
private $input ;
private $output ;
private $statusCode ;
/**
* Constructor .
*
2017-02-02 16:28:38 -08:00
* @ param Application $application An Application instance to test
2015-08-17 17:00:26 -07:00
*/
public function __construct ( Application $application )
{
$this -> application = $application ;
}
/**
* Executes the application .
*
* Available options :
*
* * interactive : Sets the input interactive flag
* * decorated : Sets the output decorated flag
* * verbosity : Sets the output verbosity flag
*
* @ param array $input An array of arguments and options
* @ param array $options An array of options
*
* @ return int The command exit code
*/
public function run ( array $input , $options = array ())
{
$this -> input = new ArrayInput ( $input );
if ( isset ( $options [ 'interactive' ])) {
$this -> input -> setInteractive ( $options [ 'interactive' ]);
}
$this -> output = new StreamOutput ( fopen ( 'php://memory' , 'w' , false ));
if ( isset ( $options [ 'decorated' ])) {
$this -> output -> setDecorated ( $options [ 'decorated' ]);
}
if ( isset ( $options [ 'verbosity' ])) {
$this -> output -> setVerbosity ( $options [ 'verbosity' ]);
}
return $this -> statusCode = $this -> application -> run ( $this -> input , $this -> output );
}
/**
* Gets the display returned by the last execution of the application .
*
* @ param bool $normalize Whether to normalize end of lines to \n or not
*
* @ return string The display
*/
public function getDisplay ( $normalize = false )
{
rewind ( $this -> output -> getStream ());
$display = stream_get_contents ( $this -> output -> getStream ());
if ( $normalize ) {
$display = str_replace ( PHP_EOL , " \n " , $display );
}
return $display ;
}
/**
* Gets the input instance used by the last execution of the application .
*
* @ return InputInterface The current input instance
*/
public function getInput ()
{
return $this -> input ;
}
/**
* Gets the output instance used by the last execution of the application .
*
* @ return OutputInterface The current output instance
*/
public function getOutput ()
{
return $this -> output ;
}
/**
* Gets the status code returned by the last execution of the application .
*
* @ return int The status code
*/
public function getStatusCode ()
{
return $this -> statusCode ;
}
}