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];
+    }
+}