소스 검색

[Command] Fix array option parsing

Antoine Hérault 14 년 전
부모
커밋
fb051b2f98
2개의 변경된 파일11개의 추가작업 그리고 1개의 파일을 삭제
  1. 7 1
      src/Symfony/Component/Console/Input/ArgvInput.php
  2. 4 0
      tests/Symfony/Tests/Component/Console/Input/ArgvInputTest.php

+ 7 - 1
src/Symfony/Component/Console/Input/ArgvInput.php

@@ -229,7 +229,13 @@ class ArgvInput extends Input
             $value = $option->isValueOptional() ? $option->getDefault() : true;
         }
 
-        $this->options[$name] = $value;
+        if ($option->isArray() && isset($this->options[$name])) {
+            $this->options[$name][] = $value;
+        } else if ($option->isArray()) {
+            $this->options[$name] = array($value);
+        } else {
+            $this->options[$name] = $value;
+        }
     }
 
     /**

+ 4 - 0
tests/Symfony/Tests/Component/Console/Input/ArgvInputTest.php

@@ -147,6 +147,10 @@ class ArgvInputTest extends \PHPUnit_Framework_TestCase
         } catch (\RuntimeException $e) {
             $this->assertNotEquals('Too many arguments.', $e->getMessage(), '->parse() parses array arguments');
         }
+
+        $input = new ArgvInput(array('cli.php', '--name=foo', '--name=bar', '--name=baz'));
+        $input->bind(new InputDefinition(array(new InputOption('name', null, InputOption::VALUE_OPTIONAL | InputOption::VALUE_IS_ARRAY))));
+        $this->assertEquals(array('name' => array('foo', 'bar', 'baz')), $input->getOptions());
     }
 
     public function testGetFirstArgument()