You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
76 lines
2.3 KiB
76 lines
2.3 KiB
<?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\Command\Command; |
|
use Symfony\Component\Console\Input\ArrayInput; |
|
|
|
/** |
|
* Eases the testing of console commands. |
|
* |
|
* @author Fabien Potencier <fabien@symfony.com> |
|
* @author Robin Chalas <robin.chalas@gmail.com> |
|
*/ |
|
class CommandTester |
|
{ |
|
use TesterTrait; |
|
|
|
private Command $command; |
|
|
|
public function __construct(Command $command) |
|
{ |
|
$this->command = $command; |
|
} |
|
|
|
/** |
|
* Executes the command. |
|
* |
|
* Available execution options: |
|
* |
|
* * interactive: Sets the input interactive flag |
|
* * decorated: Sets the output decorated flag |
|
* * verbosity: Sets the output verbosity flag |
|
* * capture_stderr_separately: Make output of stdOut and stdErr separately available |
|
* |
|
* @param array $input An array of command arguments and options |
|
* @param array $options An array of execution options |
|
* |
|
* @return int The command exit code |
|
*/ |
|
public function execute(array $input, array $options = []): int |
|
{ |
|
// set the command name automatically if the application requires |
|
// this argument and no command name was passed |
|
if (!isset($input['command']) |
|
&& (null !== $application = $this->command->getApplication()) |
|
&& $application->getDefinition()->hasArgument('command') |
|
) { |
|
$input = array_merge(['command' => $this->command->getName()], $input); |
|
} |
|
|
|
$this->input = new ArrayInput($input); |
|
// Use an in-memory input stream even if no inputs are set so that QuestionHelper::ask() does not rely on the blocking STDIN. |
|
$this->input->setStream(self::createStream($this->inputs)); |
|
|
|
if (isset($options['interactive'])) { |
|
$this->input->setInteractive($options['interactive']); |
|
} |
|
|
|
if (!isset($options['decorated'])) { |
|
$options['decorated'] = false; |
|
} |
|
|
|
$this->initOutput($options); |
|
|
|
return $this->statusCode = $this->command->run($this->input, $this->output); |
|
} |
|
}
|
|
|