public function testCanExecute() { if (!class_exists('Symfony\\Component\\Console\\Helper\\QuestionHelper')) { $this->markTestSkipped('The QuestionHelper must be available.'); } $input = $this->getMockBuilder('Symfony\\Component\\Console\\Input\\ArrayInput')->setConstructorArgs(array(array()))->setMethods(array('isInteractive'))->getMock(); $input->expects($this->any())->method('isInteractive')->will($this->returnValue(true)); $output = $this->getOutputStream(); $class = new \ReflectionClass('Doctrine\\DBAL\\Migrations\\Tools\\Console\\Command\\MigrateCommand'); $method = $class->getMethod('canExecute'); $method->setAccessible(true); /** @var \Doctrine\DBAL\Migrations\Tools\Console\Command\AbstractCommand $command */ $command = $this->getMock('Doctrine\\DBAL\\Migrations\\Tools\\Console\\Command\\MigrateCommand', array('getHelperSet')); $helper = new QuestionHelper(); $helper->setInputStream($this->getInputStream("y\n")); if ($helper instanceof QuestionHelper) { $helperSet = new HelperSet(array('question' => $helper)); } $command->setHelperSet($helperSet); $command->expects($this->any())->method('getHelperSet')->will($this->returnValue($helperSet)); //should return true if user confirm $this->assertEquals(true, $method->invokeArgs($command, array('test', $input, $output))); //shoudl return false if user cancel $helper->setInputStream($this->getInputStream("n\n")); $this->assertEquals(false, $method->invokeArgs($command, array('test', $input, $output))); //should return true if non interactive $input = $this->getMockBuilder('Symfony\\Component\\Console\\Input\\ArrayInput')->setConstructorArgs(array(array()))->setMethods(array('isInteractive'))->getMock(); $input->expects($this->any())->method('isInteractive')->will($this->returnValue(false)); $this->assertEquals(true, $method->invokeArgs($command, array('test', $input, $output))); }
/** * @test */ public function ifTagsFlagIsProvidedTagsColumnIsIncluded() { $this->questionHelper->setInputStream($this->getInputStream('\\n')); $this->shortUrlService->listShortUrls(1, null, [], null)->willReturn(new Paginator(new ArrayAdapter()))->shouldBeCalledTimes(1); $this->commandTester->execute(['command' => 'shortcode:list', '--showTags' => true]); $output = $this->commandTester->getDisplay(); $this->assertTrue(strpos($output, 'Tags') > 0); }
/** * @param string $name */ private function iExecuteCommandAndConfirm($name) { $this->questionHelper = $this->command->getHelper('question'); $inputString = 'y' . PHP_EOL; $this->questionHelper->setInputStream($this->getInputStream($inputString)); try { $this->tester->execute(['command' => $name]); } catch (\Exception $e) { } }
public function execute() { $this->tester = new CommandTester($this->command); if ('' !== $this->inputStream) { if ($this->command->getHelperSet()) { $helper = $this->command->getHelper('question'); } else { $this->command->setHelperSet(new HelperSet([$helper = new QuestionHelper()])); } $helper->setInputStream($this->getInputStream($this->inputStream)); } $this->tester->execute(array_merge($this->options, $this->arguments), ['decorated' => false]); return $this; }
/** * @expectedException \InvalidArgumentException * @expectedExceptionMessage The provided answer is ambiguous. Value should be one of env_2 or env_3. */ public function testAmbiguousChoiceFromChoicelist() { $possibleChoices = array('env_1' => 'My first environment', 'env_2' => 'My environment', 'env_3' => 'My environment'); $dialog = new QuestionHelper(); $dialog->setInputStream($this->getInputStream("My environment\n")); $helperSet = new HelperSet(array(new FormatterHelper())); $dialog->setHelperSet($helperSet); $question = new ChoiceQuestion('Please select the environment to load', $possibleChoices); $question->setMaxAttempts(1); $dialog->ask($this->createInputInterfaceMock(), $this->createOutputInterface(), $question); }
public function testAskAndValidate() { $dialog = new QuestionHelper(); $helperSet = new HelperSet(array(new FormatterHelper())); $dialog->setHelperSet($helperSet); $error = 'This is not a color!'; $validator = function ($color) use($error) { if (!in_array($color, array('white', 'black'))) { throw new \InvalidArgumentException($error); } return $color; }; $question = new Question('What color was the white horse of Henry IV?', 'white'); $question->setValidator($validator); $question->setMaxAttempts(2); $dialog->setInputStream($this->getInputStream("\nblack\n")); $this->assertEquals('white', $dialog->ask($this->createInputInterfaceMock(), $this->createOutputInterface(), $question)); $this->assertEquals('black', $dialog->ask($this->createInputInterfaceMock(), $this->createOutputInterface(), $question)); $dialog->setInputStream($this->getInputStream("green\nyellow\norange\n")); try { $dialog->ask($this->createInputInterfaceMock(), $this->createOutputInterface(), $question); $this->fail(); } catch (\InvalidArgumentException $e) { $this->assertEquals($error, $e->getMessage()); } }
/** * @requires function mb_strwidth */ public function testChoiceOutputFormattingQuestionForUtf8Keys() { $question = 'Lorem ipsum?'; $possibleChoices = array('foo' => 'foo', 'żółw' => 'bar', 'łabądź' => 'baz'); $outputShown = array($question, ' [<info>foo </info>] foo', ' [<info>żółw </info>] bar', ' [<info>łabądź</info>] baz'); $output = $this->getMock('\\Symfony\\Component\\Console\\Output\\OutputInterface'); $output->method('getFormatter')->willReturn(new OutputFormatter()); $dialog = new QuestionHelper(); $dialog->setInputStream($this->getInputStream("\n")); $helperSet = new HelperSet(array(new FormatterHelper())); $dialog->setHelperSet($helperSet); $output->expects($this->once())->method('writeln')->with($this->equalTo($outputShown)); $question = new ChoiceQuestion($question, $possibleChoices, 'foo'); $dialog->ask($this->createInputInterfaceMock(), $output, $question); }
protected function getHelperSet($input = "") { $question = new QuestionHelper(); $question->setInputStream($this->getInputStream($input)); return new HelperSet(array(new FormatterHelper(), $question)); }
public function testAmbiguousChoiceFromChoicelist() { $possibleChoices = array('env_1' => 'My environment 1', 'env_2' => 'My environment', 'env_3' => 'My environment'); $dialog = new QuestionHelper(); $dialog->setInputStream($this->getInputStream("My environment\n")); $helperSet = new HelperSet(array(new FormatterHelper())); $dialog->setHelperSet($helperSet); $question = new ChoiceQuestion('Please select the environment to load', $possibleChoices); try { $dialog->ask($this->createInputInterfaceMock(), $this->createOutputInterface(), $question); } catch (\InvalidArgumentException $e) { $this->assertEquals('The provided answer is ambiguous. Value should be one of env_2 or env_3.', $e->getMessage()); } }
/** * @expectedException \Symfony\Component\Console\Exception\RuntimeException * @expectedExceptionMessage Aborted */ public function testAskThrowsExceptionOnMissingInputWithValidator() { $dialog = new QuestionHelper(); $dialog->setInputStream($this->getInputStream('')); $question = new Question('What\'s your name?'); $question->setValidator(function () { if (!$value) { throw new \Exception('A value is required.'); } }); $dialog->ask($this->createInputInterfaceMock(), $this->createOutputInterface(), $question); }