Вход Регистрация
Файл: 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?', $heroes, null, false, '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?', $heroes, null, 1));
            
$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?', $heroes, null, false, 'Input "%s" is not a superhero!', true));
        
$this->assertEquals(array('0', '2'), $dialog->select($this->getOutputStream(), 'What is your favorite superhero?', $heroes, null, false, 'Input "%s" is not a superhero!', true));
        
$this->assertEquals(array('0', '2'), $dialog->select($this->getOutputStream(), 'What is your favorite superhero?', $heroes, null, 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));
        
$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;
    }
}
Онлайн: 2
Реклама