Skip to content

Commit 22cb37c

Browse files
committed
[console] Negatable option are null by default
1 parent 1ed5e0c commit 22cb37c

File tree

4 files changed

+20
-13
lines changed

4 files changed

+20
-13
lines changed

src/Symfony/Component/Console/Application.php

+1-1
Original file line numberDiff line numberDiff line change
@@ -1036,7 +1036,7 @@ protected function getDefaultInputDefinition()
10361036
new InputOption('--quiet', '-q', InputOption::VALUE_NONE, 'Do not output any message'),
10371037
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'),
10381038
new InputOption('--version', '-V', InputOption::VALUE_NONE, 'Display this application version'),
1039-
new InputOption('--ansi', '', InputOption::VALUE_NEGATABLE, 'Force (or disable --no-ansi) ANSI output', null),
1039+
new InputOption('--ansi', '', InputOption::VALUE_NEGATABLE, 'Force (or disable --no-ansi) ANSI output', false),
10401040
new InputOption('--no-interaction', '-n', InputOption::VALUE_NONE, 'Do not ask any interactive question'),
10411041
]);
10421042
}

src/Symfony/Component/Console/Input/InputOption.php

+1-4
Original file line numberDiff line numberDiff line change
@@ -186,9 +186,6 @@ public function setDefault($default = null)
186186
if (self::VALUE_NONE === (self::VALUE_NONE & $this->mode) && null !== $default) {
187187
throw new LogicException('Cannot set a default value when using InputOption::VALUE_NONE mode.');
188188
}
189-
if (self::VALUE_NEGATABLE === (self::VALUE_NEGATABLE & $this->mode) && null !== $default) {
190-
throw new LogicException('Cannot set a default value when using InputOption::VALUE_NEGATABLE mode.');
191-
}
192189

193190
if ($this->isArray()) {
194191
if (null === $default) {
@@ -198,7 +195,7 @@ public function setDefault($default = null)
198195
}
199196
}
200197

201-
$this->default = $this->acceptValue() ? $default : false;
198+
$this->default = $this->acceptValue() || $this->isNegatable() ? $default : false;
202199
}
203200

204201
/**

src/Symfony/Component/Console/Tests/Input/ArgvInputTest.php

+18
Original file line numberDiff line numberDiff line change
@@ -214,6 +214,24 @@ public function provideNegatableOptions()
214214
['foo' => false],
215215
'->parse() parses long options without a value',
216216
],
217+
[
218+
['cli.php'],
219+
[new InputOption('foo', null, InputOption::VALUE_NEGATABLE)],
220+
['foo' => null],
221+
'->parse() parses long options without a value',
222+
],
223+
[
224+
['cli.php'],
225+
[new InputOption('foo', null, InputOption::VALUE_NONE | InputOption::VALUE_NEGATABLE)],
226+
['foo' => null],
227+
'->parse() parses long options without a value',
228+
],
229+
[
230+
['cli.php'],
231+
[new InputOption('foo', null, InputOption::VALUE_NEGATABLE, '', false)],
232+
['foo' => false],
233+
'->parse() parses long options without a value',
234+
],
217235
];
218236
}
219237

src/Symfony/Component/Console/Tests/Input/InputOptionTest.php

-8
Original file line numberDiff line numberDiff line change
@@ -164,14 +164,6 @@ public function testDefaultValueWithValueNoneMode()
164164
$option->setDefault('default');
165165
}
166166

167-
public function testDefaultValueWithValueBooleanMode()
168-
{
169-
$this->expectException(\LogicException::class);
170-
$this->expectExceptionMessage('Cannot set a default value when using InputOption::VALUE_NEGATABLE mode.');
171-
$option = new InputOption('foo', 'f', InputOption::VALUE_NEGATABLE);
172-
$option->setDefault('default');
173-
}
174-
175167
public function testDefaultValueWithIsArrayMode()
176168
{
177169
$this->expectException(\LogicException::class);

0 commit comments

Comments
 (0)