ソースを参照

Fix problem with default values and prompts

When you include both a prompt and a default the prompt will not ever be
used, but that seems ok as the default is used.
Mark Story 4 年 前
コミット
da7aefe36c

+ 1 - 1
src/Console/ConsoleOptionParser.php

@@ -733,7 +733,7 @@ class ConsoleOptionParser
                 $params[$name] = false;
             }
             $prompt = $option->prompt();
-            if ($useDefault && $prompt) {
+            if (!isset($params[$name]) && $prompt) {
                 if (!$io) {
                     throw new ConsoleException(
                         'Cannot use interactive option prompts without a ConsoleIo instance. ' .

+ 18 - 0
tests/TestCase/Console/ConsoleOptionParserTest.php

@@ -393,6 +393,24 @@ class ConsoleOptionParserTest extends TestCase
     }
 
     /**
+     * test adding an option and default values
+     */
+    public function testAddOptionWithPromptAndDefault(): void
+    {
+        $parser = new ConsoleOptionParser('test', false);
+        $parser->addOption('color', [
+            'prompt' => 'What is your favorite?',
+            'default' => 'blue'
+        ]);
+        $out = new ConsoleOutput();
+        $io = new ConsoleIo($out, new ConsoleOutput(), new ConsoleInput([]));
+
+        $result = $parser->parse([], $io);
+        $this->assertEquals(['color' => 'blue', 'help' => false], $result[0]);
+        $this->assertCount(0, $out->messages());
+    }
+
+    /**
      * test adding an option and prompting with cli data
      */
     public function testAddOptionWithPromptAndProvidedValue(): void