Вход Регистрация
Файл: concrete5.7.5.6/concrete/vendor/symfony/console/Tests/Helper/LegacyDialogHelperTest.php
Строк: 273
<?php

/*
 * This file is part of the Symfony package.
 *
 * (c) Fabien Potencier <fabien@symfony.com>
 *
 * For the full copyright and license information, please view the LICENSE
 * file that was distributed with this source code.
 */

namespace SymfonyComponentConsoleTestsHelper;

use 
SymfonyComponentConsoleInputArrayInput;
use 
SymfonyComponentConsoleHelperDialogHelper;
use 
SymfonyComponentConsoleHelperHelperSet;
use 
SymfonyComponentConsoleHelperFormatterHelper;
use 
SymfonyComponentConsoleOutputStreamOutput;

/**
 * @group legacy
 */
class LegacyDialogHelperTest extends PHPUnit_Framework_TestCase
{
    public function 
testSelect()
    {
        
$dialog = new DialogHelper();

        
$helperSet = new HelperSet(array(new FormatterHelper()));
        
$dialog->setHelperSet($helperSet);

        
$heroes = array('Superman''Batman''Spiderman');

        
$dialog->setInputStream($this->getInputStream("n1n  1  nFabienn1nFabienn1n0,2n 0 , 2  nnn"));
        
$this->assertEquals('2'$dialog->select($this->getOutputStream(), 'What is your favorite superhero?'$heroes'2'));
        
$this->assertEquals('1'$dialog->select($this->getOutputStream(), 'What is your favorite superhero?'$heroes));
        
$this->assertEquals('1'$dialog->select($this->getOutputStream(), 'What is your favorite superhero?'$heroes));
        
$this->assertEquals('1'$dialog->select($output $this->getOutputStream(), 'What is your favorite superhero?'$heroesnullfalse'Input "%s" is not a superhero!'false));

        
rewind($output->getStream());
        
$this->assertContains('Input "Fabien" is not a superhero!'stream_get_contents($output->getStream()));

        try {
            
$this->assertEquals('1'$dialog->select($output $this->getOutputStream(), 'What is your favorite superhero?'$heroesnull1));
            
$this->fail();
        } catch (
InvalidArgumentException $e) {
            
$this->assertEquals('Value "Fabien" is invalid'$e->getMessage());
        }

        
$this->assertEquals(array('1'), $dialog->select($this->getOutputStream(), 'What is your favorite superhero?'$heroesnullfalse'Input "%s" is not a superhero!'true));
        
$this->assertEquals(array('0''2'), $dialog->select($this->getOutputStream(), 'What is your favorite superhero?'$heroesnullfalse'Input "%s" is not a superhero!'true));
        
$this->assertEquals(array('0''2'), $dialog->select($this->getOutputStream(), 'What is your favorite superhero?'$heroesnullfalse'Input "%s" is not a superhero!'true));
        
$this->assertEquals(array('0''1'), $dialog->select($this->getOutputStream(), 'What is your favorite superhero?'$heroes'0,1'false'Input "%s" is not a superhero!'true));
        
$this->assertEquals(array('0''1'), $dialog->select($this->getOutputStream(), 'What is your favorite superhero?'$heroes' 0 , 1 'false'Input "%s" is not a superhero!'true));
    }

    public function 
testAsk()
    {
        
$dialog = new DialogHelper();

        
$dialog->setInputStream($this->getInputStream("n8AMn"));

        
$this->assertEquals('2PM'$dialog->ask($this->getOutputStream(), 'What time is it?''2PM'));
        
$this->assertEquals('8AM'$dialog->ask($output $this->getOutputStream(), 'What time is it?''2PM'));

        
rewind($output->getStream());
        
$this->assertEquals('What time is it?'stream_get_contents($output->getStream()));
    }

    public function 
testAskWithAutocomplete()
    {
        if (!
$this->hasSttyAvailable()) {
            
$this->markTestSkipped('`stty` is required to test autocomplete functionality');
        }

        
// Acm<NEWLINE>
        // Ac<BACKSPACE><BACKSPACE>s<TAB>Test<NEWLINE>
        // <NEWLINE>
        // <UP ARROW><UP ARROW><NEWLINE>
        // <UP ARROW><UP ARROW><UP ARROW><UP ARROW><UP ARROW><TAB>Test<NEWLINE>
        // <DOWN ARROW><NEWLINE>
        // S<BACKSPACE><BACKSPACE><DOWN ARROW><DOWN ARROW><NEWLINE>
        // F00<BACKSPACE><BACKSPACE>oo<TAB><NEWLINE>
        
$inputStream $this->getInputStream("AcmnAc177177stTestnn33[A33[An33[A33[A33[A33[A33[AtTestn33[BnS17717733[B33[BnF00177177ootn");

        
$dialog = new DialogHelper();
        
$dialog->setInputStream($inputStream);

        
$bundles = array('AcmeDemoBundle''AsseticBundle''SecurityBundle''FooBundle');

        
$this->assertEquals('AcmeDemoBundle'$dialog->ask($this->getOutputStream(), 'Please select a bundle''FrameworkBundle'$bundles));
        
$this->assertEquals('AsseticBundleTest'$dialog->ask($this->getOutputStream(), 'Please select a bundle''FrameworkBundle'$bundles));
        
$this->assertEquals('FrameworkBundle'$dialog->ask($this->getOutputStream(), 'Please select a bundle''FrameworkBundle'$bundles));
        
$this->assertEquals('SecurityBundle'$dialog->ask($this->getOutputStream(), 'Please select a bundle''FrameworkBundle'$bundles));
        
$this->assertEquals('FooBundleTest'$dialog->ask($this->getOutputStream(), 'Please select a bundle''FrameworkBundle'$bundles));
        
$this->assertEquals('AcmeDemoBundle'$dialog->ask($this->getOutputStream(), 'Please select a bundle''FrameworkBundle'$bundles));
        
$this->assertEquals('AsseticBundle'$dialog->ask($this->getOutputStream(), 'Please select a bundle''FrameworkBundle'$bundles));
        
$this->assertEquals('FooBundle'$dialog->ask($this->getOutputStream(), 'Please select a bundle''FrameworkBundle'$bundles));
    }

    
/**
     * @group tty
     */
    
public function testAskHiddenResponse()
    {
        if (
'\' === DIRECTORY_SEPARATOR) {
            $this->markTestSkipped('
This test is not supported on Windows');
        }

        $dialog = new DialogHelper();

        $dialog->setInputStream($this->getInputStream("8AMn"));

        $this->assertEquals('
8AM', $dialog->askHiddenResponse($this->getOutputStream(), 'What time is it?'));
    }

    public function testAskConfirmation()
    {
        $dialog = new DialogHelper();

        $dialog->setInputStream($this->getInputStream("nn"));
        $this->assertTrue($dialog->askConfirmation($this->getOutputStream(), '
Do you like French fries?'));
        $this->assertFalse($dialog->askConfirmation($this->getOutputStream(), '
Do you like French fries?', false));

        $dialog->setInputStream($this->getInputStream("ynyesn"));
        $this->assertTrue($dialog->askConfirmation($this->getOutputStream(), '
Do you like French fries?', false));
        $this->assertTrue($dialog->askConfirmation($this->getOutputStream(), '
Do you like French fries?', false));

        $dialog->setInputStream($this->getInputStream("nnnon"));
        $this->assertFalse($dialog->askConfirmation($this->getOutputStream(), '
Do you like French fries?', true));
        $this->assertFalse($dialog->askConfirmation($this->getOutputStream(), '
Do you like French fries?', true));
    }

    public function testAskAndValidate()
    {
        $dialog = new DialogHelper();
        $helperSet = new HelperSet(array(new FormatterHelper()));
        $dialog->setHelperSet($helperSet);

        $question = '
What color was the white horse of Henry IV?';
        $error = '
This is not a color!';
        $validator = function ($color) use ($error) {
            if (!in_array($color, array('
white', 'black'))) {
                throw new InvalidArgumentException($error);
            }

            return $color;
        };

        $dialog->setInputStream($this->getInputStream("nblackn"));
        $this->assertEquals('
white', $dialog->askAndValidate($this->getOutputStream(), $question, $validator, 2, 'white'));
        $this->assertEquals('
black', $dialog->askAndValidate($this->getOutputStream(), $question, $validator, 2, 'white'));

        $dialog->setInputStream($this->getInputStream("greennyellownorangen"));
        try {
            $this->assertEquals('
white', $dialog->askAndValidate($this->getOutputStream(), $question, $validator, 2, 'white'));
            $this->fail();
        } catch (InvalidArgumentException $e) {
            $this->assertEquals($error, $e->getMessage());
        }
    }

    public function testNoInteraction()
    {
        $dialog = new DialogHelper();

        $input = new ArrayInput(array());
        $input->setInteractive(false);

        $dialog->setInput($input);

        $this->assertEquals('
not yet', $dialog->ask($this->getOutputStream(), 'Do you have a job?', 'not yet'));
    }

    protected function getInputStream($input)
    {
        $stream = fopen('
php://memory', 'r+', false);
        
fwrite($stream$input);
        
rewind($stream);

        return 
$stream;
    }

    protected function 
getOutputStream()
    {
        return new 
StreamOutput(fopen('php://memory''r+'false));
    }

    private function 
hasSttyAvailable()
    {
        
exec('stty 2>&1'$output$exitcode);

        return 
$exitcode === 0;
    }
}
Онлайн: 0
Реклама