diff --git a/src/Symfony/Component/Console/Input/InputOption.php b/src/Symfony/Component/Console/Input/InputOption.php index 2bec34fe1a395..07a2a7a70be6a 100644 --- a/src/Symfony/Component/Console/Input/InputOption.php +++ b/src/Symfony/Component/Console/Input/InputOption.php @@ -69,7 +69,7 @@ public function __construct(string $name, $shortcut = null, int $mode = null, st throw new InvalidArgumentException('An option name cannot be empty.'); } - if (empty($shortcut)) { + if ('' === $shortcut || [] === $shortcut) { $shortcut = null; } @@ -78,10 +78,10 @@ public function __construct(string $name, $shortcut = null, int $mode = null, st $shortcut = implode('|', $shortcut); } $shortcuts = preg_split('{(\|)-?}', ltrim($shortcut, '-')); - $shortcuts = array_filter($shortcuts); + $shortcuts = array_filter($shortcuts, 'strlen'); $shortcut = implode('|', $shortcuts); - if (empty($shortcut)) { + if ('' === $shortcut) { throw new InvalidArgumentException('An option shortcut cannot be empty.'); } } diff --git a/src/Symfony/Component/Console/Tests/Input/InputOptionTest.php b/src/Symfony/Component/Console/Tests/Input/InputOptionTest.php index 943bcf628c586..55a840ac7c7a8 100644 --- a/src/Symfony/Component/Console/Tests/Input/InputOptionTest.php +++ b/src/Symfony/Component/Console/Tests/Input/InputOptionTest.php @@ -55,6 +55,20 @@ public function testShortcut() $this->assertEquals('f|ff|fff', $option->getShortcut(), '__construct() removes the leading - of the shortcuts'); $option = new InputOption('foo'); $this->assertNull($option->getShortcut(), '__construct() makes the shortcut null by default'); + $option = new InputOption('foo', ''); + $this->assertNull($option->getShortcut(), '__construct() makes the shortcut null when given an empty string'); + $option = new InputOption('foo', []); + $this->assertNull($option->getShortcut(), '__construct() makes the shortcut null when given an empty array'); + $option = new InputOption('foo', ['f', '', 'fff']); + $this->assertEquals('f|fff', $option->getShortcut(), '__construct() removes empty shortcuts'); + $option = new InputOption('foo', 'f||fff'); + $this->assertEquals('f|fff', $option->getShortcut(), '__construct() removes empty shortcuts'); + $option = new InputOption('foo', '0'); + $this->assertEquals('0', $option->getShortcut(), '-0 is an acceptable shortcut value'); + $option = new InputOption('foo', ['0', 'z']); + $this->assertEquals('0|z', $option->getShortcut(), '-0 is an acceptable shortcut value when embedded in an array'); + $option = new InputOption('foo', '0|z'); + $this->assertEquals('0|z', $option->getShortcut(), '-0 is an acceptable shortcut value when embedded in a string-list'); } public function testModes()