radarrplexorganizrnginxsonarrdashboardsabnzbdheimdallembycouchpotatonzbgetbookmarkapplication-dashboardmuximuxlandingpagestartpagelandinghtpcserverhomepage
		
		
		
		
			You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							168 lines
						
					
					
						
							7.9 KiB
						
					
					
				
			
		
		
		
			
			
			
				
					
				
				
					
				
			
		
		
	
	
							168 lines
						
					
					
						
							7.9 KiB
						
					
					
				| <?php | |
| 
 | |
| namespace Symfony\Component\Console\Tests\Helper; | |
| 
 | |
| use Symfony\Component\Console\Helper\FormatterHelper; | |
| use Symfony\Component\Console\Helper\HelperSet; | |
| use Symfony\Component\Console\Helper\SymfonyQuestionHelper; | |
| use Symfony\Component\Console\Output\StreamOutput; | |
| use Symfony\Component\Console\Question\ChoiceQuestion; | |
| use Symfony\Component\Console\Question\Question; | |
| 
 | |
| /** | |
|  * @group tty | |
|  */ | |
| class SymfonyQuestionHelperTest extends AbstractQuestionHelperTest | |
| { | |
|     public function testAskChoice() | |
|     { | |
|         $questionHelper = new SymfonyQuestionHelper(); | |
| 
 | |
|         $helperSet = new HelperSet(array(new FormatterHelper())); | |
|         $questionHelper->setHelperSet($helperSet); | |
| 
 | |
|         $heroes = array('Superman', 'Batman', 'Spiderman'); | |
| 
 | |
|         $inputStream = $this->getInputStream("\n1\n  1  \nFabien\n1\nFabien\n1\n0,2\n 0 , 2  \n\n\n"); | |
| 
 | |
|         $question = new ChoiceQuestion('What is your favorite superhero?', $heroes, '2'); | |
|         $question->setMaxAttempts(1); | |
|         // first answer is an empty answer, we're supposed to receive the default value | |
|         $this->assertEquals('Spiderman', $questionHelper->ask($this->createStreamableInputInterfaceMock($inputStream), $output = $this->createOutputInterface(), $question)); | |
|         $this->assertOutputContains('What is your favorite superhero? [Spiderman]', $output); | |
| 
 | |
|         $question = new ChoiceQuestion('What is your favorite superhero?', $heroes); | |
|         $question->setMaxAttempts(1); | |
|         $this->assertEquals('Batman', $questionHelper->ask($this->createStreamableInputInterfaceMock($inputStream), $this->createOutputInterface(), $question)); | |
|         $this->assertEquals('Batman', $questionHelper->ask($this->createStreamableInputInterfaceMock($inputStream), $this->createOutputInterface(), $question)); | |
| 
 | |
|         $question = new ChoiceQuestion('What is your favorite superhero?', $heroes); | |
|         $question->setErrorMessage('Input "%s" is not a superhero!'); | |
|         $question->setMaxAttempts(2); | |
|         $this->assertEquals('Batman', $questionHelper->ask($this->createStreamableInputInterfaceMock($inputStream), $output = $this->createOutputInterface(), $question)); | |
|         $this->assertOutputContains('Input "Fabien" is not a superhero!', $output); | |
| 
 | |
|         try { | |
|             $question = new ChoiceQuestion('What is your favorite superhero?', $heroes, '1'); | |
|             $question->setMaxAttempts(1); | |
|             $questionHelper->ask($this->createStreamableInputInterfaceMock($inputStream), $output = $this->createOutputInterface(), $question); | |
|             $this->fail(); | |
|         } catch (\InvalidArgumentException $e) { | |
|             $this->assertEquals('Value "Fabien" is invalid', $e->getMessage()); | |
|         } | |
| 
 | |
|         $question = new ChoiceQuestion('What is your favorite superhero?', $heroes, null); | |
|         $question->setMaxAttempts(1); | |
|         $question->setMultiselect(true); | |
| 
 | |
|         $this->assertEquals(array('Batman'), $questionHelper->ask($this->createStreamableInputInterfaceMock($inputStream), $this->createOutputInterface(), $question)); | |
|         $this->assertEquals(array('Superman', 'Spiderman'), $questionHelper->ask($this->createStreamableInputInterfaceMock($inputStream), $this->createOutputInterface(), $question)); | |
|         $this->assertEquals(array('Superman', 'Spiderman'), $questionHelper->ask($this->createStreamableInputInterfaceMock($inputStream), $this->createOutputInterface(), $question)); | |
| 
 | |
|         $question = new ChoiceQuestion('What is your favorite superhero?', $heroes, '0,1'); | |
|         $question->setMaxAttempts(1); | |
|         $question->setMultiselect(true); | |
| 
 | |
|         $this->assertEquals(array('Superman', 'Batman'), $questionHelper->ask($this->createStreamableInputInterfaceMock($inputStream), $output = $this->createOutputInterface(), $question)); | |
|         $this->assertOutputContains('What is your favorite superhero? [Superman, Batman]', $output); | |
| 
 | |
|         $question = new ChoiceQuestion('What is your favorite superhero?', $heroes, ' 0 , 1 '); | |
|         $question->setMaxAttempts(1); | |
|         $question->setMultiselect(true); | |
| 
 | |
|         $this->assertEquals(array('Superman', 'Batman'), $questionHelper->ask($this->createStreamableInputInterfaceMock($inputStream), $output = $this->createOutputInterface(), $question)); | |
|         $this->assertOutputContains('What is your favorite superhero? [Superman, Batman]', $output); | |
|     } | |
| 
 | |
|     public function testAskChoiceWithChoiceValueAsDefault() | |
|     { | |
|         $questionHelper = new SymfonyQuestionHelper(); | |
|         $helperSet = new HelperSet(array(new FormatterHelper())); | |
|         $questionHelper->setHelperSet($helperSet); | |
|         $question = new ChoiceQuestion('What is your favorite superhero?', array('Superman', 'Batman', 'Spiderman'), 'Batman'); | |
|         $question->setMaxAttempts(1); | |
| 
 | |
|         $this->assertSame('Batman', $questionHelper->ask($this->createStreamableInputInterfaceMock($this->getInputStream("Batman\n")), $output = $this->createOutputInterface(), $question)); | |
|         $this->assertOutputContains('What is your favorite superhero? [Batman]', $output); | |
|     } | |
| 
 | |
|     public function testAskReturnsNullIfValidatorAllowsIt() | |
|     { | |
|         $questionHelper = new SymfonyQuestionHelper(); | |
|         $question = new Question('What is your favorite superhero?'); | |
|         $question->setValidator(function ($value) { return $value; }); | |
|         $input = $this->createStreamableInputInterfaceMock($this->getInputStream("\n")); | |
|         $this->assertNull($questionHelper->ask($input, $this->createOutputInterface(), $question)); | |
|     } | |
| 
 | |
|     public function testAskEscapeDefaultValue() | |
|     { | |
|         $helper = new SymfonyQuestionHelper(); | |
|         $input = $this->createStreamableInputInterfaceMock($this->getInputStream('\\')); | |
|         $helper->ask($input, $output = $this->createOutputInterface(), new Question('Can I have a backslash?', '\\')); | |
| 
 | |
|         $this->assertOutputContains('Can I have a backslash? [\]', $output); | |
|     } | |
| 
 | |
|     public function testAskEscapeAndFormatLabel() | |
|     { | |
|         $helper = new SymfonyQuestionHelper(); | |
|         $input = $this->createStreamableInputInterfaceMock($this->getInputStream('Foo\\Bar')); | |
|         $helper->ask($input, $output = $this->createOutputInterface(), new Question('Do you want to use Foo\\Bar <comment>or</comment> Foo\\Baz\\?', 'Foo\\Baz')); | |
| 
 | |
|         $this->assertOutputContains('Do you want to use Foo\\Bar or Foo\\Baz\\? [Foo\\Baz]:', $output); | |
|     } | |
| 
 | |
|     public function testLabelTrailingBackslash() | |
|     { | |
|         $helper = new SymfonyQuestionHelper(); | |
|         $input = $this->createStreamableInputInterfaceMock($this->getInputStream('sure')); | |
|         $helper->ask($input, $output = $this->createOutputInterface(), new Question('Question with a trailing \\')); | |
| 
 | |
|         $this->assertOutputContains('Question with a trailing \\', $output); | |
|     } | |
| 
 | |
|     /** | |
|      * @expectedException        \Symfony\Component\Console\Exception\RuntimeException | |
|      * @expectedExceptionMessage Aborted | |
|      */ | |
|     public function testAskThrowsExceptionOnMissingInput() | |
|     { | |
|         $dialog = new SymfonyQuestionHelper(); | |
|         $dialog->ask($this->createStreamableInputInterfaceMock($this->getInputStream('')), $this->createOutputInterface(), new Question('What\'s your name?')); | |
|     } | |
| 
 | |
|     protected function getInputStream($input) | |
|     { | |
|         $stream = fopen('php://memory', 'r+', false); | |
|         fwrite($stream, $input); | |
|         rewind($stream); | |
| 
 | |
|         return $stream; | |
|     } | |
| 
 | |
|     protected function createOutputInterface() | |
|     { | |
|         $output = new StreamOutput(fopen('php://memory', 'r+', false)); | |
|         $output->setDecorated(false); | |
| 
 | |
|         return $output; | |
|     } | |
| 
 | |
|     protected function createInputInterfaceMock($interactive = true) | |
|     { | |
|         $mock = $this->getMockBuilder('Symfony\Component\Console\Input\InputInterface')->getMock(); | |
|         $mock->expects($this->any()) | |
|             ->method('isInteractive') | |
|             ->will($this->returnValue($interactive)); | |
| 
 | |
|         return $mock; | |
|     } | |
| 
 | |
|     private function assertOutputContains($expected, StreamOutput $output) | |
|     { | |
|         rewind($output->getStream()); | |
|         $stream = stream_get_contents($output->getStream()); | |
|         $this->assertContains($expected, $stream); | |
|     } | |
| }
 | |
| 
 |