Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit5a6dddc

Browse files
committed
[Console] Explicitly passed options without value (or empty) should remain empty
1 parent44f6a8c commit5a6dddc

File tree

6 files changed

+28
-6
lines changed

6 files changed

+28
-6
lines changed

‎src/Symfony/Component/Console/Input/ArgvInput.php‎

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -246,8 +246,8 @@ private function addLongOption($name, $value)
246246
thrownew \RuntimeException(sprintf('The "--%s" option requires a value.',$name));
247247
}
248248

249-
if (!$option->isArray()) {
250-
$value =$option->isValueOptional() ?$option->getDefault() :true;
249+
if (!$option->isArray() && !$option->isValueOptional()) {
250+
$value =true;
251251
}
252252
}
253253

‎src/Symfony/Component/Console/Input/ArrayInput.php‎

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -165,7 +165,9 @@ private function addLongOption($name, $value)
165165
thrownew \InvalidArgumentException(sprintf('The "--%s" option requires a value.',$name));
166166
}
167167

168-
$value =$option->isValueOptional() ?$option->getDefault() :true;
168+
if (!$option->isValueOptional()) {
169+
$value =true;
170+
}
169171
}
170172

171173
$this->options[$name] =$value;

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -154,7 +154,7 @@ public function getOption($name)
154154
thrownew \InvalidArgumentException(sprintf('The "%s" option does not exist.',$name));
155155
}
156156

157-
returnisset($this->options[$name]) ?$this->options[$name] :$this->definition->getOption($name)->getDefault();
157+
returnarray_key_exists($name,$this->options) ?$this->options[$name] :$this->definition->getOption($name)->getDefault();
158158
}
159159

160160
/**

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

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -83,6 +83,12 @@ public function provideOptions()
8383
array('foo' =>null),
8484
'->parse() parses long options with optional value which is empty (with a = separator) followed by an argument',
8585
),
86+
array(
87+
array('cli.php','--foo'),
88+
array(newInputOption('foo','f', InputOption::VALUE_OPTIONAL)),
89+
array('foo' =>null),
90+
'->parse() parses long options with optional value which is empty as null',
91+
),
8692
array(
8793
array('cli.php','-f'),
8894
array(newInputOption('foo','f')),

‎src/Symfony/Component/Console/Tests/Input/ArrayInputTest.php‎

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -80,10 +80,16 @@ public function provideOptions()
8080
'->parse() parses long options with a default value',
8181
),
8282
array(
83-
array('--foo' =>null),
83+
array(),
8484
array(newInputOption('foo','f', InputOption::VALUE_OPTIONAL,'','default')),
8585
array('foo' =>'default'),
86-
'->parse() parses long options with a default value',
86+
'->parse() use the default value for long options which are not passed',
87+
),
88+
array(
89+
array('--foo' =>null),
90+
array(newInputOption('foo','f', InputOption::VALUE_OPTIONAL,'','default')),
91+
array('foo' =>null),
92+
'->parse() keeps empty values for long options with default values',
8793
),
8894
array(
8995
array('-f' =>'bar'),

‎src/Symfony/Component/Console/Tests/Input/InputTest.php‎

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,14 @@ public function testOptions()
3636
$input =newArrayInput(array('--name' =>'foo'),newInputDefinition(array(newInputOption('name'),newInputOption('bar','', InputOption::VALUE_OPTIONAL,'','default'))));
3737
$this->assertEquals('default',$input->getOption('bar'),'->getOption() returns the default value for optional options');
3838
$this->assertEquals(array('name' =>'foo','bar' =>'default'),$input->getOptions(),'->getOptions() returns all option values, even optional ones');
39+
40+
$input =newArrayInput(array('--name' =>'foo','--bar' =>''),newInputDefinition(array(newInputOption('name'),newInputOption('bar','', InputOption::VALUE_OPTIONAL,'','default'))));
41+
$this->assertEquals('',$input->getOption('bar'),'->getOption() returns null for options explicitly passed without value (or an empty value)');
42+
$this->assertEquals(array('name' =>'foo','bar' =>''),$input->getOptions(),'->getOptions() returns all option values.');
43+
44+
$input =newArrayInput(array('--name' =>'foo','--bar' =>null),newInputDefinition(array(newInputOption('name'),newInputOption('bar','', InputOption::VALUE_OPTIONAL,'','default'))));
45+
$this->assertNull($input->getOption('bar'),'->getOption() returns null for options explicitly passed without value (or an empty value)');
46+
$this->assertEquals(array('name' =>'foo','bar' =>null),$input->getOptions(),'->getOptions() returns all option values');
3947
}
4048

4149
/**

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp