Mercurial > hg > cmmr2012-drupal-site
diff vendor/consolidation/site-process/tests/src/CommandTesterTrait.php @ 5:12f9dff5fda9 tip
Update to Drupal core 8.7.1
author | Chris Cannam |
---|---|
date | Thu, 09 May 2019 15:34:47 +0100 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vendor/consolidation/site-process/tests/src/CommandTesterTrait.php Thu May 09 15:34:47 2019 +0100 @@ -0,0 +1,64 @@ +<?php + +namespace Consolidation\SiteProcess; + +use Symfony\Component\Console\Output\BufferedOutput; + +trait CommandTesterTrait +{ + /** @var string */ + protected $appName; + + /** @var string */ + protected $appVersion; + + /** + * Instantiate a new runner + */ + public function setupCommandTester($appName, $appVersion) + { + // Define our invariants for our test + $this->appName = $appName; + $this->appVersion = $appVersion; + } + + /** + * Prepare our $argv array; put the app name in $argv[0] followed by + * the command name and all command arguments and options. + * + * @param array $functionParameters should usually be func_get_args() + * @param int $leadingParameterCount the number of function parameters + * that are NOT part of argv. Default is 2 (expected content and + * expected status code). + */ + protected function argv($functionParameters, $leadingParameterCount = 2) + { + $argv = $functionParameters; + $argv = array_slice($argv, $leadingParameterCount); + array_unshift($argv, $this->appName); + + return $argv; + } + + /** + * Simulated front controller + */ + protected function execute($argv, $commandClasses, $configurationFile = false) + { + // Define a global output object to capture the test results + $output = new BufferedOutput(); + + // We can only call `Runner::execute()` once; then we need to tear down. + $runner = new \Robo\Runner($commandClasses); + if ($configurationFile) { + $runner->setConfigurationFilename($configurationFile); + } + $statusCode = $runner->execute($argv, $this->appName, $this->appVersion, $output); + + // Destroy our container so that we can call $runner->execute() again for the next test. + \Robo\Robo::unsetContainer(); + + // Return the output and status code. + return [trim($output->fetch()), $statusCode]; + } +}