diff --git a/src/Symfony/Component/Console/Application.php b/src/Symfony/Component/Console/Application.php index b9958582dd90e..2ea7e44698581 100644 --- a/src/Symfony/Component/Console/Application.php +++ b/src/Symfony/Component/Console/Application.php @@ -1036,7 +1036,7 @@ protected function getDefaultInputDefinition() new InputOption('--quiet', '-q', InputOption::VALUE_NONE, 'Do not output any message'), new InputOption('--verbose', '-v|vv|vvv', InputOption::VALUE_NONE, 'Increase the verbosity of messages: 1 for normal output, 2 for more verbose output and 3 for debug'), new InputOption('--version', '-V', InputOption::VALUE_NONE, 'Display this application version'), - new InputOption('--ansi', '', InputOption::VALUE_NEGATABLE, 'Force (or disable --no-ansi) ANSI output', null), + new InputOption('--ansi', '', InputOption::VALUE_NEGATABLE, 'Force (or disable --no-ansi) ANSI output', false), new InputOption('--no-interaction', '-n', InputOption::VALUE_NONE, 'Do not ask any interactive question'), ]); } diff --git a/src/Symfony/Component/Console/Input/InputOption.php b/src/Symfony/Component/Console/Input/InputOption.php index 97690d5641ea7..6d10e696e8fac 100644 --- a/src/Symfony/Component/Console/Input/InputOption.php +++ b/src/Symfony/Component/Console/Input/InputOption.php @@ -186,9 +186,6 @@ public function setDefault($default = null) if (self::VALUE_NONE === (self::VALUE_NONE & $this->mode) && null !== $default) { throw new LogicException('Cannot set a default value when using InputOption::VALUE_NONE mode.'); } - if (self::VALUE_NEGATABLE === (self::VALUE_NEGATABLE & $this->mode) && null !== $default) { - throw new LogicException('Cannot set a default value when using InputOption::VALUE_NEGATABLE mode.'); - } if ($this->isArray()) { if (null === $default) { @@ -198,7 +195,7 @@ public function setDefault($default = null) } } - $this->default = $this->acceptValue() ? $default : false; + $this->default = $this->acceptValue() || $this->isNegatable() ? $default : false; } /** diff --git a/src/Symfony/Component/Console/Tests/Input/ArgvInputTest.php b/src/Symfony/Component/Console/Tests/Input/ArgvInputTest.php index 2209c2b5f4faf..23333327027dd 100644 --- a/src/Symfony/Component/Console/Tests/Input/ArgvInputTest.php +++ b/src/Symfony/Component/Console/Tests/Input/ArgvInputTest.php @@ -214,6 +214,24 @@ public function provideNegatableOptions() ['foo' => false], '->parse() parses long options without a value', ], + [ + ['cli.php'], + [new InputOption('foo', null, InputOption::VALUE_NEGATABLE)], + ['foo' => null], + '->parse() parses long options without a value', + ], + [ + ['cli.php'], + [new InputOption('foo', null, InputOption::VALUE_NONE | InputOption::VALUE_NEGATABLE)], + ['foo' => null], + '->parse() parses long options without a value', + ], + [ + ['cli.php'], + [new InputOption('foo', null, InputOption::VALUE_NEGATABLE, '', false)], + ['foo' => false], + '->parse() parses long options without a value', + ], ]; } diff --git a/src/Symfony/Component/Console/Tests/Input/InputOptionTest.php b/src/Symfony/Component/Console/Tests/Input/InputOptionTest.php index 7adb8d86956d4..8ab83d036fe05 100644 --- a/src/Symfony/Component/Console/Tests/Input/InputOptionTest.php +++ b/src/Symfony/Component/Console/Tests/Input/InputOptionTest.php @@ -164,14 +164,6 @@ public function testDefaultValueWithValueNoneMode() $option->setDefault('default'); } - public function testDefaultValueWithValueBooleanMode() - { - $this->expectException(\LogicException::class); - $this->expectExceptionMessage('Cannot set a default value when using InputOption::VALUE_NEGATABLE mode.'); - $option = new InputOption('foo', 'f', InputOption::VALUE_NEGATABLE); - $option->setDefault('default'); - } - public function testDefaultValueWithIsArrayMode() { $this->expectException(\LogicException::class);