From ee2494bfcb060fa33c59f869e08baa964ba18e86 Mon Sep 17 00:00:00 2001 From: borNfreee Date: Mon, 15 May 2017 23:51:36 +0300 Subject: [PATCH 1/2] [Console] Fixed different behaviour of key and value user inputs in case of special character in multiple ChoiceQuestion Fixed a bug when value from multiple choice list could not be selected by user's input while it could be selected by typing its index in the list. --- .../Console/Question/ChoiceQuestion.php | 2 +- .../Tests/Helper/QuestionHelperTest.php | 31 +++++++++++++++++++ 2 files changed, 32 insertions(+), 1 deletion(-) diff --git a/src/Symfony/Component/Console/Question/ChoiceQuestion.php b/src/Symfony/Component/Console/Question/ChoiceQuestion.php index e5b6ff4ad7217..71eea72ef64a0 100644 --- a/src/Symfony/Component/Console/Question/ChoiceQuestion.php +++ b/src/Symfony/Component/Console/Question/ChoiceQuestion.php @@ -135,7 +135,7 @@ private function getDefaultValidator() if ($multiselect) { // Check for a separated comma values - if (!preg_match('/^[a-zA-Z0-9_-]+(?:,[a-zA-Z0-9_-]+)*$/', $selectedChoices, $matches)) { + if (!preg_match('/^[^,]+(?:,[^,]+)*$/', $selectedChoices, $matches)) { throw new \InvalidArgumentException(sprintf($errorMessage, $selected)); } $selectedChoices = explode(',', $selectedChoices); diff --git a/src/Symfony/Component/Console/Tests/Helper/QuestionHelperTest.php b/src/Symfony/Component/Console/Tests/Helper/QuestionHelperTest.php index 49ba0ee06c79a..ffaafe892a833 100644 --- a/src/Symfony/Component/Console/Tests/Helper/QuestionHelperTest.php +++ b/src/Symfony/Component/Console/Tests/Helper/QuestionHelperTest.php @@ -273,6 +273,37 @@ public function simpleAnswerProvider() ); } + /** + * @dataProvider specialCharacterInMultipleChoice + */ + public function testSpecialCharacterChoiceFromMultipleChoiceList($providedAnswer, $expectedValue) + { + $possibleChoices = array( + '.', + 'src', + ); + + $dialog = new QuestionHelper(); + $dialog->setInputStream($this->getInputStream($providedAnswer."\n")); + $helperSet = new HelperSet(array(new FormatterHelper())); + $dialog->setHelperSet($helperSet); + + $question = new ChoiceQuestion('Please select the directory', $possibleChoices); + $question->setMaxAttempts(1); + $question->setMultiselect(true); + $answer = $dialog->ask($this->createInputInterfaceMock(), $this->createOutputInterface(), $question); + + $this->assertSame($expectedValue, $answer); + } + + public function specialCharacterInMultipleChoice() + { + return array( + array('.', ['.']), + array('., src', ['.', 'src']), + ); + } + /** * @dataProvider mixedKeysChoiceListAnswerProvider */ From 75450b3bb6dec156faacb2ea0ff93557694acae8 Mon Sep 17 00:00:00 2001 From: borNfreee Date: Tue, 16 May 2017 00:06:42 +0300 Subject: [PATCH 2/2] Fix fabbot comments --- .../Component/Console/Tests/Helper/QuestionHelperTest.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/Symfony/Component/Console/Tests/Helper/QuestionHelperTest.php b/src/Symfony/Component/Console/Tests/Helper/QuestionHelperTest.php index ffaafe892a833..f42a5255d5587 100644 --- a/src/Symfony/Component/Console/Tests/Helper/QuestionHelperTest.php +++ b/src/Symfony/Component/Console/Tests/Helper/QuestionHelperTest.php @@ -299,8 +299,8 @@ public function testSpecialCharacterChoiceFromMultipleChoiceList($providedAnswer public function specialCharacterInMultipleChoice() { return array( - array('.', ['.']), - array('., src', ['.', 'src']), + array('.', array('.')), + array('., src', array('.', 'src')), ); }