Update vendored libs
This commit is contained in:
580
vendor/symfony/console/Tests/ApplicationTest.php
vendored
580
vendor/symfony/console/Tests/ApplicationTest.php
vendored
File diff suppressed because it is too large
Load Diff
@@ -12,16 +12,16 @@
|
||||
namespace Symfony\Component\Console\Tests\Command;
|
||||
|
||||
use PHPUnit\Framework\TestCase;
|
||||
use Symfony\Component\Console\Application;
|
||||
use Symfony\Component\Console\Command\Command;
|
||||
use Symfony\Component\Console\Helper\FormatterHelper;
|
||||
use Symfony\Component\Console\Application;
|
||||
use Symfony\Component\Console\Input\InputDefinition;
|
||||
use Symfony\Component\Console\Input\InputArgument;
|
||||
use Symfony\Component\Console\Input\InputOption;
|
||||
use Symfony\Component\Console\Input\InputDefinition;
|
||||
use Symfony\Component\Console\Input\InputInterface;
|
||||
use Symfony\Component\Console\Input\InputOption;
|
||||
use Symfony\Component\Console\Input\StringInput;
|
||||
use Symfony\Component\Console\Output\OutputInterface;
|
||||
use Symfony\Component\Console\Output\NullOutput;
|
||||
use Symfony\Component\Console\Output\OutputInterface;
|
||||
use Symfony\Component\Console\Tester\CommandTester;
|
||||
|
||||
class CommandTest extends TestCase
|
||||
@@ -71,7 +71,7 @@ class CommandTest extends TestCase
|
||||
$ret = $command->setDefinition($definition = new InputDefinition());
|
||||
$this->assertEquals($command, $ret, '->setDefinition() implements a fluent interface');
|
||||
$this->assertEquals($definition, $command->getDefinition(), '->setDefinition() sets the current InputDefinition instance');
|
||||
$command->setDefinition(array(new InputArgument('foo'), new InputOption('bar')));
|
||||
$command->setDefinition([new InputArgument('foo'), new InputOption('bar')]);
|
||||
$this->assertTrue($command->getDefinition()->hasArgument('foo'), '->setDefinition() also takes an array of InputArguments and InputOptions as an argument');
|
||||
$this->assertTrue($command->getDefinition()->hasOption('bar'), '->setDefinition() also takes an array of InputArguments and InputOptions as an argument');
|
||||
$command->setDefinition(new InputDefinition());
|
||||
@@ -130,10 +130,10 @@ class CommandTest extends TestCase
|
||||
|
||||
public function provideInvalidCommandNames()
|
||||
{
|
||||
return array(
|
||||
array(''),
|
||||
array('foo:'),
|
||||
);
|
||||
return [
|
||||
[''],
|
||||
['foo:'],
|
||||
];
|
||||
}
|
||||
|
||||
public function testGetSetDescription()
|
||||
@@ -166,15 +166,23 @@ class CommandTest extends TestCase
|
||||
$command = new \TestCommand();
|
||||
$command->setHelp('');
|
||||
$this->assertContains('description', $command->getProcessedHelp(), '->getProcessedHelp() falls back to the description');
|
||||
|
||||
$command = new \TestCommand();
|
||||
$command->setHelp('The %command.name% command does... Example: php %command.full_name%.');
|
||||
$application = new Application();
|
||||
$application->add($command);
|
||||
$application->setDefaultCommand('namespace:name', true);
|
||||
$this->assertContains('The namespace:name command does...', $command->getProcessedHelp(), '->getProcessedHelp() replaces %command.name% correctly in single command applications');
|
||||
$this->assertNotContains('%command.full_name%', $command->getProcessedHelp(), '->getProcessedHelp() replaces %command.full_name% in single command applications');
|
||||
}
|
||||
|
||||
public function testGetSetAliases()
|
||||
{
|
||||
$command = new \TestCommand();
|
||||
$this->assertEquals(array('name'), $command->getAliases(), '->getAliases() returns the aliases');
|
||||
$ret = $command->setAliases(array('name1'));
|
||||
$this->assertEquals(['name'], $command->getAliases(), '->getAliases() returns the aliases');
|
||||
$ret = $command->setAliases(['name1']);
|
||||
$this->assertEquals($command, $ret, '->setAliases() implements a fluent interface');
|
||||
$this->assertEquals(array('name1'), $command->getAliases(), '->setAliases() sets the aliases');
|
||||
$this->assertEquals(['name1'], $command->getAliases(), '->setAliases() sets the aliases');
|
||||
}
|
||||
|
||||
public function testSetAliasesNull()
|
||||
@@ -223,11 +231,11 @@ class CommandTest extends TestCase
|
||||
public function testMergeApplicationDefinition()
|
||||
{
|
||||
$application1 = new Application();
|
||||
$application1->getDefinition()->addArguments(array(new InputArgument('foo')));
|
||||
$application1->getDefinition()->addOptions(array(new InputOption('bar')));
|
||||
$application1->getDefinition()->addArguments([new InputArgument('foo')]);
|
||||
$application1->getDefinition()->addOptions([new InputOption('bar')]);
|
||||
$command = new \TestCommand();
|
||||
$command->setApplication($application1);
|
||||
$command->setDefinition($definition = new InputDefinition(array(new InputArgument('bar'), new InputOption('foo'))));
|
||||
$command->setDefinition($definition = new InputDefinition([new InputArgument('bar'), new InputOption('foo')]));
|
||||
|
||||
$r = new \ReflectionObject($command);
|
||||
$m = $r->getMethod('mergeApplicationDefinition');
|
||||
@@ -245,11 +253,11 @@ class CommandTest extends TestCase
|
||||
public function testMergeApplicationDefinitionWithoutArgsThenWithArgsAddsArgs()
|
||||
{
|
||||
$application1 = new Application();
|
||||
$application1->getDefinition()->addArguments(array(new InputArgument('foo')));
|
||||
$application1->getDefinition()->addOptions(array(new InputOption('bar')));
|
||||
$application1->getDefinition()->addArguments([new InputArgument('foo')]);
|
||||
$application1->getDefinition()->addOptions([new InputOption('bar')]);
|
||||
$command = new \TestCommand();
|
||||
$command->setApplication($application1);
|
||||
$command->setDefinition($definition = new InputDefinition(array()));
|
||||
$command->setDefinition($definition = new InputDefinition([]));
|
||||
|
||||
$r = new \ReflectionObject($command);
|
||||
$m = $r->getMethod('mergeApplicationDefinition');
|
||||
@@ -269,7 +277,7 @@ class CommandTest extends TestCase
|
||||
{
|
||||
$tester = new CommandTester(new \TestCommand());
|
||||
|
||||
$tester->execute(array(), array('interactive' => true));
|
||||
$tester->execute([], ['interactive' => true]);
|
||||
|
||||
$this->assertEquals('interact called'.PHP_EOL.'execute called'.PHP_EOL, $tester->getDisplay(), '->run() calls the interact() method if the input is interactive');
|
||||
}
|
||||
@@ -278,7 +286,7 @@ class CommandTest extends TestCase
|
||||
{
|
||||
$tester = new CommandTester(new \TestCommand());
|
||||
|
||||
$tester->execute(array(), array('interactive' => false));
|
||||
$tester->execute([], ['interactive' => false]);
|
||||
|
||||
$this->assertEquals('execute called'.PHP_EOL, $tester->getDisplay(), '->run() does not call the interact() method if the input is not interactive');
|
||||
}
|
||||
@@ -301,7 +309,7 @@ class CommandTest extends TestCase
|
||||
{
|
||||
$command = new \TestCommand();
|
||||
$tester = new CommandTester($command);
|
||||
$tester->execute(array('--bar' => true));
|
||||
$tester->execute(['--bar' => true]);
|
||||
}
|
||||
|
||||
public function testRunReturnsIntegerExitCode()
|
||||
@@ -310,10 +318,10 @@ class CommandTest extends TestCase
|
||||
$exitCode = $command->run(new StringInput(''), new NullOutput());
|
||||
$this->assertSame(0, $exitCode, '->run() returns integer exit code (treats null as 0)');
|
||||
|
||||
$command = $this->getMockBuilder('TestCommand')->setMethods(array('execute'))->getMock();
|
||||
$command = $this->getMockBuilder('TestCommand')->setMethods(['execute'])->getMock();
|
||||
$command->expects($this->once())
|
||||
->method('execute')
|
||||
->will($this->returnValue('2.3'));
|
||||
->willReturn('2.3');
|
||||
$exitCode = $command->run(new StringInput(''), new NullOutput());
|
||||
$this->assertSame(2, $exitCode, '->run() returns integer exit code (casts numeric to int)');
|
||||
}
|
||||
@@ -340,7 +348,7 @@ class CommandTest extends TestCase
|
||||
$command->setApplication(new Application());
|
||||
$command->setProcessTitle('foo');
|
||||
$this->assertSame(0, $command->run(new StringInput(''), new NullOutput()));
|
||||
if (function_exists('cli_set_process_title')) {
|
||||
if (\function_exists('cli_set_process_title')) {
|
||||
if (null === @cli_get_process_title() && 'Darwin' === PHP_OS) {
|
||||
$this->markTestSkipped('Running "cli_get_process_title" as an unprivileged user is not supported on MacOS.');
|
||||
}
|
||||
@@ -356,16 +364,16 @@ class CommandTest extends TestCase
|
||||
});
|
||||
$this->assertEquals($command, $ret, '->setCode() implements a fluent interface');
|
||||
$tester = new CommandTester($command);
|
||||
$tester->execute(array());
|
||||
$tester->execute([]);
|
||||
$this->assertEquals('interact called'.PHP_EOL.'from the code...'.PHP_EOL, $tester->getDisplay());
|
||||
}
|
||||
|
||||
public function getSetCodeBindToClosureTests()
|
||||
{
|
||||
return array(
|
||||
array(true, 'not bound to the command'),
|
||||
array(false, 'bound to the command'),
|
||||
);
|
||||
return [
|
||||
[true, 'not bound to the command'],
|
||||
[false, 'bound to the command'],
|
||||
];
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -381,7 +389,7 @@ class CommandTest extends TestCase
|
||||
$command = new \TestCommand();
|
||||
$command->setCode($code);
|
||||
$tester = new CommandTester($command);
|
||||
$tester->execute(array());
|
||||
$tester->execute([]);
|
||||
$this->assertEquals('interact called'.PHP_EOL.$expected.PHP_EOL, $tester->getDisplay());
|
||||
}
|
||||
|
||||
@@ -390,15 +398,9 @@ class CommandTest extends TestCase
|
||||
$command = new \TestCommand();
|
||||
$command->setCode(self::createClosure());
|
||||
$tester = new CommandTester($command);
|
||||
$tester->execute(array());
|
||||
$tester->execute([]);
|
||||
|
||||
if (\PHP_VERSION_ID < 70000) {
|
||||
// Cannot bind static closures in PHP 5
|
||||
$this->assertEquals('interact called'.PHP_EOL.'not bound'.PHP_EOL, $tester->getDisplay());
|
||||
} else {
|
||||
// Can bind static closures in PHP 7
|
||||
$this->assertEquals('interact called'.PHP_EOL.'bound'.PHP_EOL, $tester->getDisplay());
|
||||
}
|
||||
$this->assertEquals('interact called'.PHP_EOL.'bound'.PHP_EOL, $tester->getDisplay());
|
||||
}
|
||||
|
||||
private static function createClosure()
|
||||
@@ -411,10 +413,10 @@ class CommandTest extends TestCase
|
||||
public function testSetCodeWithNonClosureCallable()
|
||||
{
|
||||
$command = new \TestCommand();
|
||||
$ret = $command->setCode(array($this, 'callableMethodCommand'));
|
||||
$ret = $command->setCode([$this, 'callableMethodCommand']);
|
||||
$this->assertEquals($command, $ret, '->setCode() implements a fluent interface');
|
||||
$tester = new CommandTester($command);
|
||||
$tester->execute(array());
|
||||
$tester->execute([]);
|
||||
$this->assertEquals('interact called'.PHP_EOL.'from the code...'.PHP_EOL, $tester->getDisplay());
|
||||
}
|
||||
|
||||
|
||||
@@ -12,10 +12,10 @@
|
||||
namespace Symfony\Component\Console\Tests\Command;
|
||||
|
||||
use PHPUnit\Framework\TestCase;
|
||||
use Symfony\Component\Console\Tester\CommandTester;
|
||||
use Symfony\Component\Console\Application;
|
||||
use Symfony\Component\Console\Command\HelpCommand;
|
||||
use Symfony\Component\Console\Command\ListCommand;
|
||||
use Symfony\Component\Console\Application;
|
||||
use Symfony\Component\Console\Tester\CommandTester;
|
||||
|
||||
class HelpCommandTest extends TestCase
|
||||
{
|
||||
@@ -24,7 +24,7 @@ class HelpCommandTest extends TestCase
|
||||
$command = new HelpCommand();
|
||||
$command->setApplication(new Application());
|
||||
$commandTester = new CommandTester($command);
|
||||
$commandTester->execute(array('command_name' => 'li'), array('decorated' => false));
|
||||
$commandTester->execute(['command_name' => 'li'], ['decorated' => false]);
|
||||
$this->assertContains('list [options] [--] [<namespace>]', $commandTester->getDisplay(), '->execute() returns a text help for the given command alias');
|
||||
$this->assertContains('format=FORMAT', $commandTester->getDisplay(), '->execute() returns a text help for the given command alias');
|
||||
$this->assertContains('raw', $commandTester->getDisplay(), '->execute() returns a text help for the given command alias');
|
||||
@@ -35,7 +35,7 @@ class HelpCommandTest extends TestCase
|
||||
$command = new HelpCommand();
|
||||
$commandTester = new CommandTester($command);
|
||||
$command->setCommand(new ListCommand());
|
||||
$commandTester->execute(array(), array('decorated' => false));
|
||||
$commandTester->execute([], ['decorated' => false]);
|
||||
$this->assertContains('list [options] [--] [<namespace>]', $commandTester->getDisplay(), '->execute() returns a text help for the given command');
|
||||
$this->assertContains('format=FORMAT', $commandTester->getDisplay(), '->execute() returns a text help for the given command');
|
||||
$this->assertContains('raw', $commandTester->getDisplay(), '->execute() returns a text help for the given command');
|
||||
@@ -46,7 +46,7 @@ class HelpCommandTest extends TestCase
|
||||
$command = new HelpCommand();
|
||||
$commandTester = new CommandTester($command);
|
||||
$command->setCommand(new ListCommand());
|
||||
$commandTester->execute(array('--format' => 'xml'));
|
||||
$commandTester->execute(['--format' => 'xml']);
|
||||
$this->assertContains('<command', $commandTester->getDisplay(), '->execute() returns an XML help text if --xml is passed');
|
||||
}
|
||||
|
||||
@@ -54,7 +54,7 @@ class HelpCommandTest extends TestCase
|
||||
{
|
||||
$application = new Application();
|
||||
$commandTester = new CommandTester($application->get('help'));
|
||||
$commandTester->execute(array('command_name' => 'list'));
|
||||
$commandTester->execute(['command_name' => 'list']);
|
||||
$this->assertContains('list [options] [--] [<namespace>]', $commandTester->getDisplay(), '->execute() returns a text help for the given command');
|
||||
$this->assertContains('format=FORMAT', $commandTester->getDisplay(), '->execute() returns a text help for the given command');
|
||||
$this->assertContains('raw', $commandTester->getDisplay(), '->execute() returns a text help for the given command');
|
||||
@@ -64,7 +64,7 @@ class HelpCommandTest extends TestCase
|
||||
{
|
||||
$application = new Application();
|
||||
$commandTester = new CommandTester($application->get('help'));
|
||||
$commandTester->execute(array('command_name' => 'list', '--format' => 'xml'));
|
||||
$commandTester->execute(['command_name' => 'list', '--format' => 'xml']);
|
||||
$this->assertContains('list [--raw] [--format FORMAT] [--] [<namespace>]', $commandTester->getDisplay(), '->execute() returns a text help for the given command');
|
||||
$this->assertContains('<command', $commandTester->getDisplay(), '->execute() returns an XML help text if --format=xml is passed');
|
||||
}
|
||||
|
||||
@@ -12,8 +12,8 @@
|
||||
namespace Symfony\Component\Console\Tests\Command;
|
||||
|
||||
use PHPUnit\Framework\TestCase;
|
||||
use Symfony\Component\Console\Tester\CommandTester;
|
||||
use Symfony\Component\Console\Application;
|
||||
use Symfony\Component\Console\Tester\CommandTester;
|
||||
|
||||
class ListCommandTest extends TestCase
|
||||
{
|
||||
@@ -21,7 +21,7 @@ class ListCommandTest extends TestCase
|
||||
{
|
||||
$application = new Application();
|
||||
$commandTester = new CommandTester($command = $application->get('list'));
|
||||
$commandTester->execute(array('command' => $command->getName()), array('decorated' => false));
|
||||
$commandTester->execute(['command' => $command->getName()], ['decorated' => false]);
|
||||
|
||||
$this->assertRegExp('/help\s{2,}Displays help for a command/', $commandTester->getDisplay(), '->execute() returns a list of available commands');
|
||||
}
|
||||
@@ -30,7 +30,7 @@ class ListCommandTest extends TestCase
|
||||
{
|
||||
$application = new Application();
|
||||
$commandTester = new CommandTester($command = $application->get('list'));
|
||||
$commandTester->execute(array('command' => $command->getName(), '--format' => 'xml'));
|
||||
$commandTester->execute(['command' => $command->getName(), '--format' => 'xml']);
|
||||
$this->assertRegExp('/<command id="list" name="list" hidden="0">/', $commandTester->getDisplay(), '->execute() returns a list of available commands in XML if --xml is passed');
|
||||
}
|
||||
|
||||
@@ -38,7 +38,7 @@ class ListCommandTest extends TestCase
|
||||
{
|
||||
$application = new Application();
|
||||
$commandTester = new CommandTester($command = $application->get('list'));
|
||||
$commandTester->execute(array('command' => $command->getName(), '--raw' => true));
|
||||
$commandTester->execute(['command' => $command->getName(), '--raw' => true]);
|
||||
$output = <<<'EOF'
|
||||
help Displays help for a command
|
||||
list Lists commands
|
||||
@@ -54,7 +54,7 @@ EOF;
|
||||
$application = new Application();
|
||||
$application->add(new \FooCommand());
|
||||
$commandTester = new CommandTester($command = $application->get('list'));
|
||||
$commandTester->execute(array('command' => $command->getName(), 'namespace' => 'foo', '--raw' => true));
|
||||
$commandTester->execute(['command' => $command->getName(), 'namespace' => 'foo', '--raw' => true]);
|
||||
$output = <<<'EOF'
|
||||
foo:bar The foo:bar command
|
||||
|
||||
@@ -69,7 +69,7 @@ EOF;
|
||||
$application = new Application();
|
||||
$application->add(new \Foo6Command());
|
||||
$commandTester = new CommandTester($command = $application->get('list'));
|
||||
$commandTester->execute(array('command' => $command->getName()), array('decorated' => false));
|
||||
$commandTester->execute(['command' => $command->getName()], ['decorated' => false]);
|
||||
$output = <<<'EOF'
|
||||
Console Tool
|
||||
|
||||
@@ -101,7 +101,7 @@ EOF;
|
||||
$application = new Application();
|
||||
$application->add(new \Foo6Command());
|
||||
$commandTester = new CommandTester($command = $application->get('list'));
|
||||
$commandTester->execute(array('command' => $command->getName(), '--raw' => true));
|
||||
$commandTester->execute(['command' => $command->getName(), '--raw' => true]);
|
||||
$output = <<<'EOF'
|
||||
help Displays help for a command
|
||||
list Lists commands
|
||||
|
||||
@@ -33,15 +33,15 @@ class LockableTraitTest extends TestCase
|
||||
$command = new \FooLockCommand();
|
||||
|
||||
$tester = new CommandTester($command);
|
||||
$this->assertSame(2, $tester->execute(array()));
|
||||
$this->assertSame(2, $tester->execute(array()));
|
||||
$this->assertSame(2, $tester->execute([]));
|
||||
$this->assertSame(2, $tester->execute([]));
|
||||
}
|
||||
|
||||
public function testLockReturnsFalseIfAlreadyLockedByAnotherCommand()
|
||||
{
|
||||
$command = new \FooLockCommand();
|
||||
|
||||
if (SemaphoreStore::isSupported(false)) {
|
||||
if (SemaphoreStore::isSupported()) {
|
||||
$store = new SemaphoreStore();
|
||||
} else {
|
||||
$store = new FlockStore();
|
||||
@@ -51,10 +51,10 @@ class LockableTraitTest extends TestCase
|
||||
$lock->acquire();
|
||||
|
||||
$tester = new CommandTester($command);
|
||||
$this->assertSame(1, $tester->execute(array()));
|
||||
$this->assertSame(1, $tester->execute([]));
|
||||
|
||||
$lock->release();
|
||||
$this->assertSame(2, $tester->execute(array()));
|
||||
$this->assertSame(2, $tester->execute([]));
|
||||
}
|
||||
|
||||
public function testMultipleLockCallsThrowLogicException()
|
||||
@@ -62,6 +62,6 @@ class LockableTraitTest extends TestCase
|
||||
$command = new \FooLock2Command();
|
||||
|
||||
$tester = new CommandTester($command);
|
||||
$this->assertSame(1, $tester->execute(array()));
|
||||
$this->assertSame(1, $tester->execute([]));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -20,10 +20,10 @@ class ContainerCommandLoaderTest extends TestCase
|
||||
{
|
||||
public function testHas()
|
||||
{
|
||||
$loader = new ContainerCommandLoader(new ServiceLocator(array(
|
||||
$loader = new ContainerCommandLoader(new ServiceLocator([
|
||||
'foo-service' => function () { return new Command('foo'); },
|
||||
'bar-service' => function () { return new Command('bar'); },
|
||||
)), array('foo' => 'foo-service', 'bar' => 'bar-service'));
|
||||
]), ['foo' => 'foo-service', 'bar' => 'bar-service']);
|
||||
|
||||
$this->assertTrue($loader->has('foo'));
|
||||
$this->assertTrue($loader->has('bar'));
|
||||
@@ -32,10 +32,10 @@ class ContainerCommandLoaderTest extends TestCase
|
||||
|
||||
public function testGet()
|
||||
{
|
||||
$loader = new ContainerCommandLoader(new ServiceLocator(array(
|
||||
$loader = new ContainerCommandLoader(new ServiceLocator([
|
||||
'foo-service' => function () { return new Command('foo'); },
|
||||
'bar-service' => function () { return new Command('bar'); },
|
||||
)), array('foo' => 'foo-service', 'bar' => 'bar-service'));
|
||||
]), ['foo' => 'foo-service', 'bar' => 'bar-service']);
|
||||
|
||||
$this->assertInstanceOf(Command::class, $loader->get('foo'));
|
||||
$this->assertInstanceOf(Command::class, $loader->get('bar'));
|
||||
@@ -46,16 +46,16 @@ class ContainerCommandLoaderTest extends TestCase
|
||||
*/
|
||||
public function testGetUnknownCommandThrows()
|
||||
{
|
||||
(new ContainerCommandLoader(new ServiceLocator(array()), array()))->get('unknown');
|
||||
(new ContainerCommandLoader(new ServiceLocator([]), []))->get('unknown');
|
||||
}
|
||||
|
||||
public function testGetCommandNames()
|
||||
{
|
||||
$loader = new ContainerCommandLoader(new ServiceLocator(array(
|
||||
$loader = new ContainerCommandLoader(new ServiceLocator([
|
||||
'foo-service' => function () { return new Command('foo'); },
|
||||
'bar-service' => function () { return new Command('bar'); },
|
||||
)), array('foo' => 'foo-service', 'bar' => 'bar-service'));
|
||||
]), ['foo' => 'foo-service', 'bar' => 'bar-service']);
|
||||
|
||||
$this->assertSame(array('foo', 'bar'), $loader->getNames());
|
||||
$this->assertSame(['foo', 'bar'], $loader->getNames());
|
||||
}
|
||||
}
|
||||
|
||||
@@ -19,10 +19,10 @@ class FactoryCommandLoaderTest extends TestCase
|
||||
{
|
||||
public function testHas()
|
||||
{
|
||||
$loader = new FactoryCommandLoader(array(
|
||||
$loader = new FactoryCommandLoader([
|
||||
'foo' => function () { return new Command('foo'); },
|
||||
'bar' => function () { return new Command('bar'); },
|
||||
));
|
||||
]);
|
||||
|
||||
$this->assertTrue($loader->has('foo'));
|
||||
$this->assertTrue($loader->has('bar'));
|
||||
@@ -31,10 +31,10 @@ class FactoryCommandLoaderTest extends TestCase
|
||||
|
||||
public function testGet()
|
||||
{
|
||||
$loader = new FactoryCommandLoader(array(
|
||||
$loader = new FactoryCommandLoader([
|
||||
'foo' => function () { return new Command('foo'); },
|
||||
'bar' => function () { return new Command('bar'); },
|
||||
));
|
||||
]);
|
||||
|
||||
$this->assertInstanceOf(Command::class, $loader->get('foo'));
|
||||
$this->assertInstanceOf(Command::class, $loader->get('bar'));
|
||||
@@ -45,16 +45,16 @@ class FactoryCommandLoaderTest extends TestCase
|
||||
*/
|
||||
public function testGetUnknownCommandThrows()
|
||||
{
|
||||
(new FactoryCommandLoader(array()))->get('unknown');
|
||||
(new FactoryCommandLoader([]))->get('unknown');
|
||||
}
|
||||
|
||||
public function testGetCommandNames()
|
||||
{
|
||||
$loader = new FactoryCommandLoader(array(
|
||||
$loader = new FactoryCommandLoader([
|
||||
'foo' => function () { return new Command('foo'); },
|
||||
'bar' => function () { return new Command('bar'); },
|
||||
));
|
||||
]);
|
||||
|
||||
$this->assertSame(array('foo', 'bar'), $loader->getNames());
|
||||
$this->assertSame(['foo', 'bar'], $loader->getNames());
|
||||
}
|
||||
}
|
||||
|
||||
@@ -12,10 +12,12 @@
|
||||
namespace Symfony\Component\Console\Tests\DependencyInjection;
|
||||
|
||||
use PHPUnit\Framework\TestCase;
|
||||
use Symfony\Component\Console\Command\Command;
|
||||
use Symfony\Component\Console\CommandLoader\ContainerCommandLoader;
|
||||
use Symfony\Component\Console\DependencyInjection\AddConsoleCommandPass;
|
||||
use Symfony\Component\Console\Command\Command;
|
||||
use Symfony\Component\DependencyInjection\Argument\ServiceClosureArgument;
|
||||
use Symfony\Component\DependencyInjection\ChildDefinition;
|
||||
use Symfony\Component\DependencyInjection\Compiler\PassConfig;
|
||||
use Symfony\Component\DependencyInjection\ContainerBuilder;
|
||||
use Symfony\Component\DependencyInjection\Definition;
|
||||
use Symfony\Component\DependencyInjection\TypedReference;
|
||||
@@ -28,31 +30,30 @@ class AddConsoleCommandPassTest extends TestCase
|
||||
public function testProcess($public)
|
||||
{
|
||||
$container = new ContainerBuilder();
|
||||
$container->addCompilerPass(new AddConsoleCommandPass());
|
||||
$container->addCompilerPass(new AddConsoleCommandPass(), PassConfig::TYPE_BEFORE_REMOVING);
|
||||
$container->setParameter('my-command.class', 'Symfony\Component\Console\Tests\DependencyInjection\MyCommand');
|
||||
|
||||
$id = 'my-command';
|
||||
$definition = new Definition('%my-command.class%');
|
||||
$definition->setPublic($public);
|
||||
$definition->addTag('console.command');
|
||||
$container->setDefinition('my-command', $definition);
|
||||
$container->setDefinition($id, $definition);
|
||||
|
||||
$container->compile();
|
||||
|
||||
$alias = 'console.command.symfony_component_console_tests_dependencyinjection_mycommand';
|
||||
$alias = 'console.command.public_alias.my-command';
|
||||
|
||||
if ($public) {
|
||||
$this->assertFalse($container->hasAlias($alias));
|
||||
$id = 'my-command';
|
||||
} else {
|
||||
$id = $alias;
|
||||
// The alias is replaced by a Definition by the ReplaceAliasByActualDefinitionPass
|
||||
// in case the original service is private
|
||||
$this->assertFalse($container->hasDefinition('my-command'));
|
||||
$this->assertFalse($container->hasDefinition($id));
|
||||
$this->assertTrue($container->hasDefinition($alias));
|
||||
}
|
||||
|
||||
$this->assertTrue($container->hasParameter('console.command.ids'));
|
||||
$this->assertSame(array($alias => $id), $container->getParameter('console.command.ids'));
|
||||
$this->assertSame([$public ? $id : $alias], $container->getParameter('console.command.ids'));
|
||||
}
|
||||
|
||||
public function testProcessRegistersLazyCommands()
|
||||
@@ -61,8 +62,8 @@ class AddConsoleCommandPassTest extends TestCase
|
||||
$command = $container
|
||||
->register('my-command', MyCommand::class)
|
||||
->setPublic(false)
|
||||
->addTag('console.command', array('command' => 'my:command'))
|
||||
->addTag('console.command', array('command' => 'my:alias'))
|
||||
->addTag('console.command', ['command' => 'my:command'])
|
||||
->addTag('console.command', ['command' => 'my:alias'])
|
||||
;
|
||||
|
||||
(new AddConsoleCommandPass())->process($container);
|
||||
@@ -71,11 +72,10 @@ class AddConsoleCommandPassTest extends TestCase
|
||||
$commandLocator = $container->getDefinition((string) $commandLoader->getArgument(0));
|
||||
|
||||
$this->assertSame(ContainerCommandLoader::class, $commandLoader->getClass());
|
||||
$this->assertSame(array('my:command' => 'my-command', 'my:alias' => 'my-command'), $commandLoader->getArgument(1));
|
||||
$this->assertEquals(array(array('my-command' => new ServiceClosureArgument(new TypedReference('my-command', MyCommand::class)))), $commandLocator->getArguments());
|
||||
$this->assertSame(array('console.command.symfony_component_console_tests_dependencyinjection_mycommand' => 'my-command'), $container->getParameter('console.command.ids'));
|
||||
$this->assertSame(array('my-command' => true), $container->getParameter('console.lazy_command.ids'));
|
||||
$this->assertSame(array(array('setName', array('my:command')), array('setAliases', array(array('my:alias')))), $command->getMethodCalls());
|
||||
$this->assertSame(['my:command' => 'my-command', 'my:alias' => 'my-command'], $commandLoader->getArgument(1));
|
||||
$this->assertEquals([['my-command' => new ServiceClosureArgument(new TypedReference('my-command', MyCommand::class))]], $commandLocator->getArguments());
|
||||
$this->assertSame([], $container->getParameter('console.command.ids'));
|
||||
$this->assertSame([['setName', ['my:command']], ['setAliases', [['my:alias']]]], $command->getMethodCalls());
|
||||
}
|
||||
|
||||
public function testProcessFallsBackToDefaultName()
|
||||
@@ -94,29 +94,28 @@ class AddConsoleCommandPassTest extends TestCase
|
||||
$commandLocator = $container->getDefinition((string) $commandLoader->getArgument(0));
|
||||
|
||||
$this->assertSame(ContainerCommandLoader::class, $commandLoader->getClass());
|
||||
$this->assertSame(array('default' => 'with-default-name'), $commandLoader->getArgument(1));
|
||||
$this->assertEquals(array(array('with-default-name' => new ServiceClosureArgument(new TypedReference('with-default-name', NamedCommand::class)))), $commandLocator->getArguments());
|
||||
$this->assertSame(array('console.command.symfony_component_console_tests_dependencyinjection_namedcommand' => 'with-default-name'), $container->getParameter('console.command.ids'));
|
||||
$this->assertSame(array('with-default-name' => true), $container->getParameter('console.lazy_command.ids'));
|
||||
$this->assertSame(['default' => 'with-default-name'], $commandLoader->getArgument(1));
|
||||
$this->assertEquals([['with-default-name' => new ServiceClosureArgument(new TypedReference('with-default-name', NamedCommand::class))]], $commandLocator->getArguments());
|
||||
$this->assertSame([], $container->getParameter('console.command.ids'));
|
||||
|
||||
$container = new ContainerBuilder();
|
||||
$container
|
||||
->register('with-default-name', NamedCommand::class)
|
||||
->setPublic(false)
|
||||
->addTag('console.command', array('command' => 'new-name'))
|
||||
->addTag('console.command', ['command' => 'new-name'])
|
||||
;
|
||||
|
||||
$pass->process($container);
|
||||
|
||||
$this->assertSame(array('new-name' => 'with-default-name'), $container->getDefinition('console.command_loader')->getArgument(1));
|
||||
$this->assertSame(['new-name' => 'with-default-name'], $container->getDefinition('console.command_loader')->getArgument(1));
|
||||
}
|
||||
|
||||
public function visibilityProvider()
|
||||
{
|
||||
return array(
|
||||
array(true),
|
||||
array(false),
|
||||
);
|
||||
return [
|
||||
[true],
|
||||
[false],
|
||||
];
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -127,7 +126,7 @@ class AddConsoleCommandPassTest extends TestCase
|
||||
{
|
||||
$container = new ContainerBuilder();
|
||||
$container->setResourceTracking(false);
|
||||
$container->addCompilerPass(new AddConsoleCommandPass());
|
||||
$container->addCompilerPass(new AddConsoleCommandPass(), PassConfig::TYPE_BEFORE_REMOVING);
|
||||
|
||||
$definition = new Definition('Symfony\Component\Console\Tests\DependencyInjection\MyCommand');
|
||||
$definition->addTag('console.command');
|
||||
@@ -145,7 +144,7 @@ class AddConsoleCommandPassTest extends TestCase
|
||||
{
|
||||
$container = new ContainerBuilder();
|
||||
$container->setResourceTracking(false);
|
||||
$container->addCompilerPass(new AddConsoleCommandPass());
|
||||
$container->addCompilerPass(new AddConsoleCommandPass(), PassConfig::TYPE_BEFORE_REMOVING);
|
||||
|
||||
$definition = new Definition('SplObjectStorage');
|
||||
$definition->addTag('console.command');
|
||||
@@ -170,10 +169,82 @@ class AddConsoleCommandPassTest extends TestCase
|
||||
|
||||
(new AddConsoleCommandPass())->process($container);
|
||||
|
||||
$alias1 = 'console.command.symfony_component_console_tests_dependencyinjection_mycommand';
|
||||
$alias2 = $alias1.'_my-command2';
|
||||
$this->assertTrue($container->hasAlias($alias1));
|
||||
$this->assertTrue($container->hasAlias($alias2));
|
||||
$aliasPrefix = 'console.command.public_alias.';
|
||||
$this->assertTrue($container->hasAlias($aliasPrefix.'my-command1'));
|
||||
$this->assertTrue($container->hasAlias($aliasPrefix.'my-command2'));
|
||||
}
|
||||
|
||||
public function testProcessOnChildDefinitionWithClass()
|
||||
{
|
||||
$container = new ContainerBuilder();
|
||||
$container->addCompilerPass(new AddConsoleCommandPass(), PassConfig::TYPE_BEFORE_REMOVING);
|
||||
$className = 'Symfony\Component\Console\Tests\DependencyInjection\MyCommand';
|
||||
|
||||
$parentId = 'my-parent-command';
|
||||
$childId = 'my-child-command';
|
||||
|
||||
$parentDefinition = new Definition(/* no class */);
|
||||
$parentDefinition->setAbstract(true)->setPublic(false);
|
||||
|
||||
$childDefinition = new ChildDefinition($parentId);
|
||||
$childDefinition->addTag('console.command')->setPublic(true);
|
||||
$childDefinition->setClass($className);
|
||||
|
||||
$container->setDefinition($parentId, $parentDefinition);
|
||||
$container->setDefinition($childId, $childDefinition);
|
||||
|
||||
$container->compile();
|
||||
$command = $container->get($childId);
|
||||
|
||||
$this->assertInstanceOf($className, $command);
|
||||
}
|
||||
|
||||
public function testProcessOnChildDefinitionWithParentClass()
|
||||
{
|
||||
$container = new ContainerBuilder();
|
||||
$container->addCompilerPass(new AddConsoleCommandPass(), PassConfig::TYPE_BEFORE_REMOVING);
|
||||
$className = 'Symfony\Component\Console\Tests\DependencyInjection\MyCommand';
|
||||
|
||||
$parentId = 'my-parent-command';
|
||||
$childId = 'my-child-command';
|
||||
|
||||
$parentDefinition = new Definition($className);
|
||||
$parentDefinition->setAbstract(true)->setPublic(false);
|
||||
|
||||
$childDefinition = new ChildDefinition($parentId);
|
||||
$childDefinition->addTag('console.command')->setPublic(true);
|
||||
|
||||
$container->setDefinition($parentId, $parentDefinition);
|
||||
$container->setDefinition($childId, $childDefinition);
|
||||
|
||||
$container->compile();
|
||||
$command = $container->get($childId);
|
||||
|
||||
$this->assertInstanceOf($className, $command);
|
||||
}
|
||||
|
||||
/**
|
||||
* @expectedException \RuntimeException
|
||||
* @expectedExceptionMessage The definition for "my-child-command" has no class.
|
||||
*/
|
||||
public function testProcessOnChildDefinitionWithoutClass()
|
||||
{
|
||||
$container = new ContainerBuilder();
|
||||
$container->addCompilerPass(new AddConsoleCommandPass(), PassConfig::TYPE_BEFORE_REMOVING);
|
||||
|
||||
$parentId = 'my-parent-command';
|
||||
$childId = 'my-child-command';
|
||||
|
||||
$parentDefinition = new Definition();
|
||||
$parentDefinition->setAbstract(true)->setPublic(false);
|
||||
|
||||
$childDefinition = new ChildDefinition($parentId);
|
||||
$childDefinition->addTag('console.command')->setPublic(true);
|
||||
|
||||
$container->setDefinition($parentId, $parentDefinition);
|
||||
$container->setDefinition($childId, $childDefinition);
|
||||
|
||||
$container->compile();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -89,19 +89,19 @@ abstract class AbstractDescriptorTest extends TestCase
|
||||
|
||||
protected function getDescriptionTestData(array $objects)
|
||||
{
|
||||
$data = array();
|
||||
$data = [];
|
||||
foreach ($objects as $name => $object) {
|
||||
$description = file_get_contents(sprintf('%s/../Fixtures/%s.%s', __DIR__, $name, $this->getFormat()));
|
||||
$data[] = array($object, $description);
|
||||
$data[] = [$object, $description];
|
||||
}
|
||||
|
||||
return $data;
|
||||
}
|
||||
|
||||
protected function assertDescription($expectedDescription, $describedObject, array $options = array())
|
||||
protected function assertDescription($expectedDescription, $describedObject, array $options = [])
|
||||
{
|
||||
$output = new BufferedOutput(BufferedOutput::VERBOSITY_NORMAL, true);
|
||||
$this->getDescriptor()->describe($output, $describedObject, $options + array('raw_output' => true));
|
||||
$this->getDescriptor()->describe($output, $describedObject, $options + ['raw_output' => true]);
|
||||
$this->assertEquals(trim($expectedDescription), trim(str_replace(PHP_EOL, "\n", $output->fetch())));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -26,10 +26,10 @@ class JsonDescriptorTest extends AbstractDescriptorTest
|
||||
return 'json';
|
||||
}
|
||||
|
||||
protected function assertDescription($expectedDescription, $describedObject, array $options = array())
|
||||
protected function assertDescription($expectedDescription, $describedObject, array $options = [])
|
||||
{
|
||||
$output = new BufferedOutput(BufferedOutput::VERBOSITY_NORMAL, true);
|
||||
$this->getDescriptor()->describe($output, $describedObject, $options + array('raw_output' => true));
|
||||
$this->getDescriptor()->describe($output, $describedObject, $options + ['raw_output' => true]);
|
||||
$this->assertEquals(json_decode(trim($expectedDescription), true), json_decode(trim(str_replace(PHP_EOL, "\n", $output->fetch())), true));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -21,7 +21,7 @@ class MarkdownDescriptorTest extends AbstractDescriptorTest
|
||||
{
|
||||
return $this->getDescriptionTestData(array_merge(
|
||||
ObjectsProvider::getCommands(),
|
||||
array('command_mbstring' => new DescriptorCommandMbString())
|
||||
['command_mbstring' => new DescriptorCommandMbString()]
|
||||
));
|
||||
}
|
||||
|
||||
@@ -29,7 +29,7 @@ class MarkdownDescriptorTest extends AbstractDescriptorTest
|
||||
{
|
||||
return $this->getDescriptionTestData(array_merge(
|
||||
ObjectsProvider::getApplications(),
|
||||
array('application_mbstring' => new DescriptorApplicationMbString())
|
||||
['application_mbstring' => new DescriptorApplicationMbString()]
|
||||
));
|
||||
}
|
||||
|
||||
|
||||
@@ -26,57 +26,57 @@ class ObjectsProvider
|
||||
{
|
||||
public static function getInputArguments()
|
||||
{
|
||||
return array(
|
||||
return [
|
||||
'input_argument_1' => new InputArgument('argument_name', InputArgument::REQUIRED),
|
||||
'input_argument_2' => new InputArgument('argument_name', InputArgument::IS_ARRAY, 'argument description'),
|
||||
'input_argument_3' => new InputArgument('argument_name', InputArgument::OPTIONAL, 'argument description', 'default_value'),
|
||||
'input_argument_4' => new InputArgument('argument_name', InputArgument::REQUIRED, "multiline\nargument description"),
|
||||
'input_argument_with_style' => new InputArgument('argument_name', InputArgument::OPTIONAL, 'argument description', '<comment>style</>'),
|
||||
'input_argument_with_default_inf_value' => new InputArgument('argument_name', InputArgument::OPTIONAL, 'argument description', INF),
|
||||
);
|
||||
];
|
||||
}
|
||||
|
||||
public static function getInputOptions()
|
||||
{
|
||||
return array(
|
||||
return [
|
||||
'input_option_1' => new InputOption('option_name', 'o', InputOption::VALUE_NONE),
|
||||
'input_option_2' => new InputOption('option_name', 'o', InputOption::VALUE_OPTIONAL, 'option description', 'default_value'),
|
||||
'input_option_3' => new InputOption('option_name', 'o', InputOption::VALUE_REQUIRED, 'option description'),
|
||||
'input_option_4' => new InputOption('option_name', 'o', InputOption::VALUE_IS_ARRAY | InputOption::VALUE_OPTIONAL, 'option description', array()),
|
||||
'input_option_4' => new InputOption('option_name', 'o', InputOption::VALUE_IS_ARRAY | InputOption::VALUE_OPTIONAL, 'option description', []),
|
||||
'input_option_5' => new InputOption('option_name', 'o', InputOption::VALUE_REQUIRED, "multiline\noption description"),
|
||||
'input_option_6' => new InputOption('option_name', array('o', 'O'), InputOption::VALUE_REQUIRED, 'option with multiple shortcuts'),
|
||||
'input_option_6' => new InputOption('option_name', ['o', 'O'], InputOption::VALUE_REQUIRED, 'option with multiple shortcuts'),
|
||||
'input_option_with_style' => new InputOption('option_name', 'o', InputOption::VALUE_REQUIRED, 'option description', '<comment>style</>'),
|
||||
'input_option_with_style_array' => new InputOption('option_name', 'o', InputOption::VALUE_IS_ARRAY | InputOption::VALUE_REQUIRED, 'option description', array('<comment>Hello</comment>', '<info>world</info>')),
|
||||
'input_option_with_style_array' => new InputOption('option_name', 'o', InputOption::VALUE_IS_ARRAY | InputOption::VALUE_REQUIRED, 'option description', ['<comment>Hello</comment>', '<info>world</info>']),
|
||||
'input_option_with_default_inf_value' => new InputOption('option_name', 'o', InputOption::VALUE_OPTIONAL, 'option description', INF),
|
||||
);
|
||||
];
|
||||
}
|
||||
|
||||
public static function getInputDefinitions()
|
||||
{
|
||||
return array(
|
||||
return [
|
||||
'input_definition_1' => new InputDefinition(),
|
||||
'input_definition_2' => new InputDefinition(array(new InputArgument('argument_name', InputArgument::REQUIRED))),
|
||||
'input_definition_3' => new InputDefinition(array(new InputOption('option_name', 'o', InputOption::VALUE_NONE))),
|
||||
'input_definition_4' => new InputDefinition(array(
|
||||
'input_definition_2' => new InputDefinition([new InputArgument('argument_name', InputArgument::REQUIRED)]),
|
||||
'input_definition_3' => new InputDefinition([new InputOption('option_name', 'o', InputOption::VALUE_NONE)]),
|
||||
'input_definition_4' => new InputDefinition([
|
||||
new InputArgument('argument_name', InputArgument::REQUIRED),
|
||||
new InputOption('option_name', 'o', InputOption::VALUE_NONE),
|
||||
)),
|
||||
);
|
||||
]),
|
||||
];
|
||||
}
|
||||
|
||||
public static function getCommands()
|
||||
{
|
||||
return array(
|
||||
return [
|
||||
'command_1' => new DescriptorCommand1(),
|
||||
'command_2' => new DescriptorCommand2(),
|
||||
);
|
||||
];
|
||||
}
|
||||
|
||||
public static function getApplications()
|
||||
{
|
||||
return array(
|
||||
return [
|
||||
'application_1' => new DescriptorApplication1(),
|
||||
'application_2' => new DescriptorApplication2(),
|
||||
);
|
||||
];
|
||||
}
|
||||
}
|
||||
|
||||
@@ -22,7 +22,7 @@ class TextDescriptorTest extends AbstractDescriptorTest
|
||||
{
|
||||
return $this->getDescriptionTestData(array_merge(
|
||||
ObjectsProvider::getCommands(),
|
||||
array('command_mbstring' => new DescriptorCommandMbString())
|
||||
['command_mbstring' => new DescriptorCommandMbString()]
|
||||
));
|
||||
}
|
||||
|
||||
@@ -30,7 +30,7 @@ class TextDescriptorTest extends AbstractDescriptorTest
|
||||
{
|
||||
return $this->getDescriptionTestData(array_merge(
|
||||
ObjectsProvider::getApplications(),
|
||||
array('application_mbstring' => new DescriptorApplicationMbString())
|
||||
['application_mbstring' => new DescriptorApplicationMbString()]
|
||||
));
|
||||
}
|
||||
|
||||
@@ -38,7 +38,7 @@ class TextDescriptorTest extends AbstractDescriptorTest
|
||||
{
|
||||
$application = new DescriptorApplication2();
|
||||
|
||||
$this->assertDescription(file_get_contents(__DIR__.'/../Fixtures/application_filtered_namespace.txt'), $application, array('namespace' => 'command4'));
|
||||
$this->assertDescription(file_get_contents(__DIR__.'/../Fixtures/application_filtered_namespace.txt'), $application, ['namespace' => 'command4']);
|
||||
}
|
||||
|
||||
protected function getDescriptor()
|
||||
|
||||
@@ -20,8 +20,8 @@ use Symfony\Component\Console\EventListener\ErrorListener;
|
||||
use Symfony\Component\Console\Input\ArgvInput;
|
||||
use Symfony\Component\Console\Input\ArrayInput;
|
||||
use Symfony\Component\Console\Input\Input;
|
||||
use Symfony\Component\Console\Input\StringInput;
|
||||
use Symfony\Component\Console\Input\InputInterface;
|
||||
use Symfony\Component\Console\Input\StringInput;
|
||||
use Symfony\Component\Console\Output\OutputInterface;
|
||||
|
||||
class ErrorListenerTest extends TestCase
|
||||
@@ -34,11 +34,11 @@ class ErrorListenerTest extends TestCase
|
||||
$logger
|
||||
->expects($this->once())
|
||||
->method('error')
|
||||
->with('Error thrown while running command "{command}". Message: "{message}"', array('error' => $error, 'command' => 'test:run --foo=baz buzz', 'message' => 'An error occurred'))
|
||||
->with('Error thrown while running command "{command}". Message: "{message}"', ['exception' => $error, 'command' => 'test:run --foo=baz buzz', 'message' => 'An error occurred'])
|
||||
;
|
||||
|
||||
$listener = new ErrorListener($logger);
|
||||
$listener->onConsoleError(new ConsoleErrorEvent(new ArgvInput(array('console.php', 'test:run', '--foo=baz', 'buzz')), $this->getOutput(), $error, new Command('test:run')));
|
||||
$listener->onConsoleError(new ConsoleErrorEvent(new ArgvInput(['console.php', 'test:run', '--foo=baz', 'buzz']), $this->getOutput(), $error, new Command('test:run')));
|
||||
}
|
||||
|
||||
public function testOnConsoleErrorWithNoCommandAndNoInputString()
|
||||
@@ -49,7 +49,7 @@ class ErrorListenerTest extends TestCase
|
||||
$logger
|
||||
->expects($this->once())
|
||||
->method('error')
|
||||
->with('An error occurred while using the console. Message: "{message}"', array('error' => $error, 'message' => 'An error occurred'))
|
||||
->with('An error occurred while using the console. Message: "{message}"', ['exception' => $error, 'message' => 'An error occurred'])
|
||||
;
|
||||
|
||||
$listener = new ErrorListener($logger);
|
||||
@@ -62,11 +62,11 @@ class ErrorListenerTest extends TestCase
|
||||
$logger
|
||||
->expects($this->once())
|
||||
->method('debug')
|
||||
->with('Command "{command}" exited with code "{code}"', array('command' => 'test:run', 'code' => 255))
|
||||
->with('Command "{command}" exited with code "{code}"', ['command' => 'test:run', 'code' => 255])
|
||||
;
|
||||
|
||||
$listener = new ErrorListener($logger);
|
||||
$listener->onConsoleTerminate($this->getConsoleTerminateEvent(new ArgvInput(array('console.php', 'test:run')), 255));
|
||||
$listener->onConsoleTerminate($this->getConsoleTerminateEvent(new ArgvInput(['console.php', 'test:run']), 255));
|
||||
}
|
||||
|
||||
public function testOnConsoleTerminateForZeroExitCodeDoesNotWriteToLog()
|
||||
@@ -78,16 +78,16 @@ class ErrorListenerTest extends TestCase
|
||||
;
|
||||
|
||||
$listener = new ErrorListener($logger);
|
||||
$listener->onConsoleTerminate($this->getConsoleTerminateEvent(new ArgvInput(array('console.php', 'test:run')), 0));
|
||||
$listener->onConsoleTerminate($this->getConsoleTerminateEvent(new ArgvInput(['console.php', 'test:run']), 0));
|
||||
}
|
||||
|
||||
public function testGetSubscribedEvents()
|
||||
{
|
||||
$this->assertEquals(
|
||||
array(
|
||||
'console.error' => array('onConsoleError', -128),
|
||||
'console.terminate' => array('onConsoleTerminate', -128),
|
||||
),
|
||||
[
|
||||
'console.error' => ['onConsoleError', -128],
|
||||
'console.terminate' => ['onConsoleTerminate', -128],
|
||||
],
|
||||
ErrorListener::getSubscribedEvents()
|
||||
);
|
||||
}
|
||||
@@ -98,12 +98,12 @@ class ErrorListenerTest extends TestCase
|
||||
$logger
|
||||
->expects($this->exactly(3))
|
||||
->method('debug')
|
||||
->with('Command "{command}" exited with code "{code}"', array('command' => 'test:run --foo=bar', 'code' => 255))
|
||||
->with('Command "{command}" exited with code "{code}"', ['command' => 'test:run --foo=bar', 'code' => 255])
|
||||
;
|
||||
|
||||
$listener = new ErrorListener($logger);
|
||||
$listener->onConsoleTerminate($this->getConsoleTerminateEvent(new ArgvInput(array('console.php', 'test:run', '--foo=bar')), 255));
|
||||
$listener->onConsoleTerminate($this->getConsoleTerminateEvent(new ArrayInput(array('name' => 'test:run', '--foo' => 'bar')), 255));
|
||||
$listener->onConsoleTerminate($this->getConsoleTerminateEvent(new ArgvInput(['console.php', 'test:run', '--foo=bar']), 255));
|
||||
$listener->onConsoleTerminate($this->getConsoleTerminateEvent(new ArrayInput(['name' => 'test:run', '--foo' => 'bar']), 255));
|
||||
$listener->onConsoleTerminate($this->getConsoleTerminateEvent(new StringInput('test:run --foo=bar'), 255));
|
||||
}
|
||||
|
||||
@@ -113,7 +113,7 @@ class ErrorListenerTest extends TestCase
|
||||
$logger
|
||||
->expects($this->once())
|
||||
->method('debug')
|
||||
->with('Command "{command}" exited with code "{code}"', array('command' => 'test:run', 'code' => 255))
|
||||
->with('Command "{command}" exited with code "{code}"', ['command' => 'test:run', 'code' => 255])
|
||||
;
|
||||
|
||||
$listener = new ErrorListener($logger);
|
||||
|
||||
@@ -19,7 +19,7 @@ class DescriptorCommand1 extends Command
|
||||
{
|
||||
$this
|
||||
->setName('descriptor:command1')
|
||||
->setAliases(array('alias1', 'alias2'))
|
||||
->setAliases(['alias1', 'alias2'])
|
||||
->setDescription('command 1 description')
|
||||
->setHelp('command 1 help')
|
||||
;
|
||||
|
||||
@@ -19,7 +19,7 @@ class DescriptorCommand4 extends Command
|
||||
{
|
||||
$this
|
||||
->setName('descriptor:command4')
|
||||
->setAliases(array('descriptor:alias_command4', 'command4:descriptor'))
|
||||
->setAliases(['descriptor:alias_command4', 'command4:descriptor'])
|
||||
;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -25,7 +25,7 @@ class DummyOutput extends BufferedOutput
|
||||
*/
|
||||
public function getLogs()
|
||||
{
|
||||
$logs = array();
|
||||
$logs = [];
|
||||
foreach (explode(PHP_EOL, trim($this->fetch())) as $message) {
|
||||
preg_match('/^\[(.*)\] (.*)/', $message, $matches);
|
||||
$logs[] = sprintf('%s %s', $matches[1], $matches[2]);
|
||||
|
||||
@@ -14,7 +14,7 @@ class Foo1Command extends Command
|
||||
$this
|
||||
->setName('foo:bar1')
|
||||
->setDescription('The foo:bar1 command')
|
||||
->setAliases(array('afoobar1'))
|
||||
->setAliases(['afoobar1'])
|
||||
;
|
||||
}
|
||||
|
||||
|
||||
@@ -11,7 +11,7 @@ class Foo2Command extends Command
|
||||
$this
|
||||
->setName('foo1:bar')
|
||||
->setDescription('The foo1:bar command')
|
||||
->setAliases(array('afoobar2'))
|
||||
->setAliases(['afoobar2'])
|
||||
;
|
||||
}
|
||||
|
||||
|
||||
@@ -1,6 +1,5 @@
|
||||
<?php
|
||||
|
||||
|
||||
use Symfony\Component\Console\Command\Command;
|
||||
|
||||
class Foo6Command extends Command
|
||||
|
||||
@@ -14,7 +14,7 @@ class FooCommand extends Command
|
||||
$this
|
||||
->setName('foo:bar')
|
||||
->setDescription('The foo:bar command')
|
||||
->setAliases(array('afoobar'))
|
||||
->setAliases(['afoobar'])
|
||||
;
|
||||
}
|
||||
|
||||
|
||||
@@ -15,7 +15,7 @@ class FooOptCommand extends Command
|
||||
$this
|
||||
->setName('foo:bar')
|
||||
->setDescription('The foo:bar command')
|
||||
->setAliases(array('afoobar'))
|
||||
->setAliases(['afoobar'])
|
||||
->addOption('fooopt', 'fo', InputOption::VALUE_OPTIONAL, 'fooopt description')
|
||||
;
|
||||
}
|
||||
|
||||
@@ -14,7 +14,7 @@ class FooSubnamespaced1Command extends Command
|
||||
$this
|
||||
->setName('foo:bar:baz')
|
||||
->setDescription('The foo:bar:baz command')
|
||||
->setAliases(array('foobarbaz'))
|
||||
->setAliases(['foobarbaz'])
|
||||
;
|
||||
}
|
||||
|
||||
|
||||
@@ -14,7 +14,7 @@ class FooSubnamespaced2Command extends Command
|
||||
$this
|
||||
->setName('foo:go:bret')
|
||||
->setDescription('The foo:bar:go command')
|
||||
->setAliases(array('foobargo'))
|
||||
->setAliases(['foobargo'])
|
||||
;
|
||||
}
|
||||
|
||||
|
||||
21
vendor/symfony/console/Tests/Fixtures/FooWithoutAliasCommand.php
vendored
Normal file
21
vendor/symfony/console/Tests/Fixtures/FooWithoutAliasCommand.php
vendored
Normal file
@@ -0,0 +1,21 @@
|
||||
<?php
|
||||
|
||||
use Symfony\Component\Console\Command\Command;
|
||||
use Symfony\Component\Console\Input\InputInterface;
|
||||
use Symfony\Component\Console\Output\OutputInterface;
|
||||
|
||||
class FooWithoutAliasCommand extends Command
|
||||
{
|
||||
protected function configure()
|
||||
{
|
||||
$this
|
||||
->setName('foo')
|
||||
->setDescription('The foo command')
|
||||
;
|
||||
}
|
||||
|
||||
protected function execute(InputInterface $input, OutputInterface $output)
|
||||
{
|
||||
$output->writeln('called');
|
||||
}
|
||||
}
|
||||
@@ -20,12 +20,12 @@ return function (InputInterface $input, OutputInterface $output) {
|
||||
|
||||
//Ensure edge case by appending empty strings to history:
|
||||
$output->write('Lorem ipsum dolor sit amet');
|
||||
$output->write(array('', '', ''));
|
||||
$output->write(['', '', '']);
|
||||
$output->title('Fourth title');
|
||||
|
||||
//Ensure have manual control over number of blank lines:
|
||||
$output->writeln('Lorem ipsum dolor sit amet');
|
||||
$output->writeln(array('', '')); //Should append an extra blank line
|
||||
$output->writeln(['', '']); //Should append an extra blank line
|
||||
$output->title('Fifth title');
|
||||
|
||||
$output->writeln('Lorem ipsum dolor sit amet');
|
||||
|
||||
34
vendor/symfony/console/Tests/Fixtures/Style/SymfonyStyle/command/command_4_with_iterators.php
vendored
Normal file
34
vendor/symfony/console/Tests/Fixtures/Style/SymfonyStyle/command/command_4_with_iterators.php
vendored
Normal file
@@ -0,0 +1,34 @@
|
||||
<?php
|
||||
|
||||
use Symfony\Component\Console\Input\InputInterface;
|
||||
use Symfony\Component\Console\Output\OutputInterface;
|
||||
use Symfony\Component\Console\Style\SymfonyStyle;
|
||||
|
||||
//Ensure has single blank line after any text and a title
|
||||
return function (InputInterface $input, OutputInterface $output) {
|
||||
$output = new SymfonyStyle($input, $output);
|
||||
|
||||
$output->write('Lorem ipsum dolor sit amet');
|
||||
$output->title('First title');
|
||||
|
||||
$output->writeln('Lorem ipsum dolor sit amet');
|
||||
$output->title('Second title');
|
||||
|
||||
$output->write('Lorem ipsum dolor sit amet');
|
||||
$output->write('');
|
||||
$output->title('Third title');
|
||||
|
||||
//Ensure edge case by appending empty strings to history:
|
||||
$output->write('Lorem ipsum dolor sit amet');
|
||||
$output->write(new \ArrayIterator(['', '', '']));
|
||||
$output->title('Fourth title');
|
||||
|
||||
//Ensure have manual control over number of blank lines:
|
||||
$output->writeln('Lorem ipsum dolor sit amet');
|
||||
$output->writeln(new \ArrayIterator(['', ''])); //Should append an extra blank line
|
||||
$output->title('Fifth title');
|
||||
|
||||
$output->writeln('Lorem ipsum dolor sit amet');
|
||||
$output->newLine(2); //Should append an extra blank line
|
||||
$output->title('Fifth title');
|
||||
};
|
||||
@@ -9,29 +9,29 @@ return function (InputInterface $input, OutputInterface $output) {
|
||||
$output = new SymfonyStyle($input, $output);
|
||||
|
||||
$output->writeln('Lorem ipsum dolor sit amet');
|
||||
$output->listing(array(
|
||||
$output->listing([
|
||||
'Lorem ipsum dolor sit amet',
|
||||
'consectetur adipiscing elit',
|
||||
));
|
||||
]);
|
||||
|
||||
//Even using write:
|
||||
$output->write('Lorem ipsum dolor sit amet');
|
||||
$output->listing(array(
|
||||
$output->listing([
|
||||
'Lorem ipsum dolor sit amet',
|
||||
'consectetur adipiscing elit',
|
||||
));
|
||||
]);
|
||||
|
||||
$output->write('Lorem ipsum dolor sit amet');
|
||||
$output->text(array(
|
||||
$output->text([
|
||||
'Lorem ipsum dolor sit amet',
|
||||
'consectetur adipiscing elit',
|
||||
));
|
||||
]);
|
||||
|
||||
$output->newLine();
|
||||
|
||||
$output->write('Lorem ipsum dolor sit amet');
|
||||
$output->comment(array(
|
||||
$output->comment([
|
||||
'Lorem ipsum dolor sit amet',
|
||||
'consectetur adipiscing elit',
|
||||
));
|
||||
]);
|
||||
};
|
||||
|
||||
@@ -8,9 +8,9 @@ use Symfony\Component\Console\Style\SymfonyStyle;
|
||||
return function (InputInterface $input, OutputInterface $output) {
|
||||
$output = new SymfonyStyle($input, $output);
|
||||
|
||||
$output->listing(array(
|
||||
$output->listing([
|
||||
'Lorem ipsum dolor sit amet',
|
||||
'consectetur adipiscing elit',
|
||||
));
|
||||
]);
|
||||
$output->success('Lorem ipsum dolor sit amet');
|
||||
};
|
||||
|
||||
@@ -9,7 +9,7 @@ return function (InputInterface $input, OutputInterface $output) {
|
||||
$output = new SymfonyStyle($input, $output);
|
||||
$output->title('Title');
|
||||
$output->askHidden('Hidden question');
|
||||
$output->choice('Choice question with default', array('choice1', 'choice2'), 'choice1');
|
||||
$output->choice('Choice question with default', ['choice1', 'choice2'], 'choice1');
|
||||
$output->confirm('Confirmation with yes default', true);
|
||||
$output->text('Duis aute irure dolor in reprehenderit in voluptate velit esse');
|
||||
};
|
||||
|
||||
@@ -1,25 +1,25 @@
|
||||
<?php
|
||||
|
||||
use Symfony\Component\Console\Helper\TableCell;
|
||||
use Symfony\Component\Console\Input\InputInterface;
|
||||
use Symfony\Component\Console\Output\OutputInterface;
|
||||
use Symfony\Component\Console\Style\SymfonyStyle;
|
||||
use Symfony\Component\Console\Helper\TableCell;
|
||||
|
||||
//Ensure formatting tables when using multiple headers with TableCell
|
||||
return function (InputInterface $input, OutputInterface $output) {
|
||||
$headers = array(
|
||||
array(new TableCell('Main table title', array('colspan' => 3))),
|
||||
array('ISBN', 'Title', 'Author'),
|
||||
);
|
||||
$headers = [
|
||||
[new TableCell('Main table title', ['colspan' => 3])],
|
||||
['ISBN', 'Title', 'Author'],
|
||||
];
|
||||
|
||||
$rows = array(
|
||||
array(
|
||||
$rows = [
|
||||
[
|
||||
'978-0521567817',
|
||||
'De Monarchia',
|
||||
new TableCell("Dante Alighieri\nspans multiple rows", array('rowspan' => 2)),
|
||||
),
|
||||
array('978-0804169127', 'Divine Comedy'),
|
||||
);
|
||||
new TableCell("Dante Alighieri\nspans multiple rows", ['rowspan' => 2]),
|
||||
],
|
||||
['978-0804169127', 'Divine Comedy'],
|
||||
];
|
||||
|
||||
$output = new SymfonyStyle($input, $output);
|
||||
$output->table($headers, $rows);
|
||||
|
||||
@@ -7,5 +7,5 @@ use Symfony\Component\Console\Style\SymfonyStyle;
|
||||
//Ensure that all lines are aligned to the begin of the first line in a multi-line block
|
||||
return function (InputInterface $input, OutputInterface $output) {
|
||||
$output = new SymfonyStyle($input, $output);
|
||||
$output->block(array('Custom block', 'Second custom block line'), 'CUSTOM', 'fg=white;bg=green', 'X ', true);
|
||||
$output->block(['Custom block', 'Second custom block line'], 'CUSTOM', 'fg=white;bg=green', 'X ', true);
|
||||
};
|
||||
|
||||
32
vendor/symfony/console/Tests/Fixtures/Style/SymfonyStyle/output/output_4_with_iterators.txt
vendored
Normal file
32
vendor/symfony/console/Tests/Fixtures/Style/SymfonyStyle/output/output_4_with_iterators.txt
vendored
Normal file
@@ -0,0 +1,32 @@
|
||||
Lorem ipsum dolor sit amet
|
||||
|
||||
First title
|
||||
===========
|
||||
|
||||
Lorem ipsum dolor sit amet
|
||||
|
||||
Second title
|
||||
============
|
||||
|
||||
Lorem ipsum dolor sit amet
|
||||
|
||||
Third title
|
||||
===========
|
||||
|
||||
Lorem ipsum dolor sit amet
|
||||
|
||||
Fourth title
|
||||
============
|
||||
|
||||
Lorem ipsum dolor sit amet
|
||||
|
||||
|
||||
Fifth title
|
||||
===========
|
||||
|
||||
Lorem ipsum dolor sit amet
|
||||
|
||||
|
||||
Fifth title
|
||||
===========
|
||||
|
||||
22
vendor/symfony/console/Tests/Fixtures/TestAmbiguousCommandRegistering.php
vendored
Normal file
22
vendor/symfony/console/Tests/Fixtures/TestAmbiguousCommandRegistering.php
vendored
Normal file
@@ -0,0 +1,22 @@
|
||||
<?php
|
||||
|
||||
use Symfony\Component\Console\Command\Command;
|
||||
use Symfony\Component\Console\Input\InputInterface;
|
||||
use Symfony\Component\Console\Output\OutputInterface;
|
||||
|
||||
class TestAmbiguousCommandRegistering extends Command
|
||||
{
|
||||
protected function configure()
|
||||
{
|
||||
$this
|
||||
->setName('test-ambiguous')
|
||||
->setDescription('The test-ambiguous command')
|
||||
->setAliases(['test'])
|
||||
;
|
||||
}
|
||||
|
||||
protected function execute(InputInterface $input, OutputInterface $output)
|
||||
{
|
||||
$output->write('test-ambiguous');
|
||||
}
|
||||
}
|
||||
21
vendor/symfony/console/Tests/Fixtures/TestAmbiguousCommandRegistering2.php
vendored
Normal file
21
vendor/symfony/console/Tests/Fixtures/TestAmbiguousCommandRegistering2.php
vendored
Normal file
@@ -0,0 +1,21 @@
|
||||
<?php
|
||||
|
||||
use Symfony\Component\Console\Command\Command;
|
||||
use Symfony\Component\Console\Input\InputInterface;
|
||||
use Symfony\Component\Console\Output\OutputInterface;
|
||||
|
||||
class TestAmbiguousCommandRegistering2 extends Command
|
||||
{
|
||||
protected function configure()
|
||||
{
|
||||
$this
|
||||
->setName('test-ambiguous2')
|
||||
->setDescription('The test-ambiguous2 command')
|
||||
;
|
||||
}
|
||||
|
||||
protected function execute(InputInterface $input, OutputInterface $output)
|
||||
{
|
||||
$output->write('test-ambiguous2');
|
||||
}
|
||||
}
|
||||
@@ -10,7 +10,7 @@ class TestCommand extends Command
|
||||
{
|
||||
$this
|
||||
->setName('namespace:name')
|
||||
->setAliases(array('name'))
|
||||
->setAliases(['name'])
|
||||
->setDescription('description')
|
||||
->setHelp('help')
|
||||
;
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
|
||||
In ApplicationTest.php line 716:
|
||||
In ApplicationTest.php line %d:
|
||||
|
||||
エラーメッセージ
|
||||
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
|
||||
[33mIn ApplicationTest.php line 716:[39m
|
||||
[33mIn ApplicationTest.php line %d:[39m
|
||||
[37;41m [39;49m
|
||||
[37;41m エラーメッセージ [39;49m
|
||||
[37;41m [39;49m
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
|
||||
In ApplicationTest.php line 730:
|
||||
In ApplicationTest.php line %d:
|
||||
|
||||
コマンドの実行中にエラーが
|
||||
発生しました。
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
|
||||
In ApplicationTest.php line 744:
|
||||
In ApplicationTest.php line %d:
|
||||
|
||||
dont break here <
|
||||
info>!</info>
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
|
||||
In ApplicationTest.php line 761:
|
||||
In ApplicationTest.php line %d:
|
||||
|
||||
line 1 with extra spaces
|
||||
line 2
|
||||
|
||||
@@ -1,3 +1,6 @@
|
||||
Description:
|
||||
Lists commands
|
||||
|
||||
Usage:
|
||||
list [options] [--] [<namespace>]
|
||||
|
||||
|
||||
@@ -1,3 +1,6 @@
|
||||
Description:
|
||||
Lists commands
|
||||
|
||||
Usage:
|
||||
list [options] [--] [<namespace>]
|
||||
|
||||
|
||||
@@ -1,3 +1,6 @@
|
||||
<comment>Description:</comment>
|
||||
command 1 description
|
||||
|
||||
<comment>Usage:</comment>
|
||||
descriptor:command1
|
||||
alias1
|
||||
|
||||
@@ -1,3 +1,6 @@
|
||||
<comment>Description:</comment>
|
||||
command 2 description
|
||||
|
||||
<comment>Usage:</comment>
|
||||
descriptor:command2 [options] [--] \<argument_name>
|
||||
descriptor:command2 -o|--option_name \<argument_name>
|
||||
|
||||
@@ -1,3 +1,6 @@
|
||||
<comment>Description:</comment>
|
||||
command åèä description
|
||||
|
||||
<comment>Usage:</comment>
|
||||
descriptor:åèä [options] [--] \<argument_åèä>
|
||||
descriptor:åèä -o|--option_name \<argument_name>
|
||||
|
||||
@@ -12,8 +12,8 @@
|
||||
namespace Symfony\Component\Console\Tests\Formatter;
|
||||
|
||||
use PHPUnit\Framework\TestCase;
|
||||
use Symfony\Component\Console\Formatter\OutputFormatterStyleStack;
|
||||
use Symfony\Component\Console\Formatter\OutputFormatterStyle;
|
||||
use Symfony\Component\Console\Formatter\OutputFormatterStyleStack;
|
||||
|
||||
class OutputFormatterStyleStackTest extends TestCase
|
||||
{
|
||||
|
||||
@@ -18,10 +18,10 @@ class OutputFormatterStyleTest extends TestCase
|
||||
{
|
||||
public function testConstructor()
|
||||
{
|
||||
$style = new OutputFormatterStyle('green', 'black', array('bold', 'underscore'));
|
||||
$style = new OutputFormatterStyle('green', 'black', ['bold', 'underscore']);
|
||||
$this->assertEquals("\033[32;40;1;4mfoo\033[39;49;22;24m", $style->apply('foo'));
|
||||
|
||||
$style = new OutputFormatterStyle('red', null, array('blink'));
|
||||
$style = new OutputFormatterStyle('red', null, ['blink']);
|
||||
$this->assertEquals("\033[31;5mfoo\033[39;25m", $style->apply('foo'));
|
||||
|
||||
$style = new OutputFormatterStyle(null, 'white');
|
||||
@@ -66,7 +66,7 @@ class OutputFormatterStyleTest extends TestCase
|
||||
{
|
||||
$style = new OutputFormatterStyle();
|
||||
|
||||
$style->setOptions(array('reverse', 'conceal'));
|
||||
$style->setOptions(['reverse', 'conceal']);
|
||||
$this->assertEquals("\033[7;8mfoo\033[27;28m", $style->apply('foo'));
|
||||
|
||||
$style->setOption('bold');
|
||||
@@ -78,7 +78,7 @@ class OutputFormatterStyleTest extends TestCase
|
||||
$style->setOption('bold');
|
||||
$this->assertEquals("\033[8;1mfoo\033[28;22m", $style->apply('foo'));
|
||||
|
||||
$style->setOptions(array('bold'));
|
||||
$style->setOptions(['bold']);
|
||||
$this->assertEquals("\033[1mfoo\033[22m", $style->apply('foo'));
|
||||
|
||||
try {
|
||||
|
||||
@@ -184,37 +184,26 @@ class OutputFormatterTest extends TestCase
|
||||
|
||||
public function provideInlineStyleOptionsCases()
|
||||
{
|
||||
return array(
|
||||
array('<unknown=_unknown_>'),
|
||||
array('<unknown=_unknown_;a=1;b>'),
|
||||
array('<fg=green;>', "\033[32m[test]\033[39m", '[test]'),
|
||||
array('<fg=green;bg=blue;>', "\033[32;44ma\033[39;49m", 'a'),
|
||||
array('<fg=green;options=bold>', "\033[32;1mb\033[39;22m", 'b'),
|
||||
array('<fg=green;options=reverse;>', "\033[32;7m<a>\033[39;27m", '<a>'),
|
||||
array('<fg=green;options=bold,underscore>', "\033[32;1;4mz\033[39;22;24m", 'z'),
|
||||
array('<fg=green;options=bold,underscore,reverse;>', "\033[32;1;4;7md\033[39;22;24;27m", 'd'),
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* @group legacy
|
||||
* @dataProvider provideInlineStyleTagsWithUnknownOptions
|
||||
* @expectedDeprecation Unknown style options are deprecated since version 3.2 and will be removed in 4.0. Exception "Invalid option specified: "%s". Expected one of (bold, underscore, blink, reverse, conceal)".
|
||||
*/
|
||||
public function testInlineStyleOptionsUnknownAreDeprecated($tag, $option)
|
||||
{
|
||||
$formatter = new OutputFormatter(true);
|
||||
$formatter->format($tag);
|
||||
return [
|
||||
['<unknown=_unknown_>'],
|
||||
['<unknown=_unknown_;a=1;b>'],
|
||||
['<fg=green;>', "\033[32m[test]\033[39m", '[test]'],
|
||||
['<fg=green;bg=blue;>', "\033[32;44ma\033[39;49m", 'a'],
|
||||
['<fg=green;options=bold>', "\033[32;1mb\033[39;22m", 'b'],
|
||||
['<fg=green;options=reverse;>', "\033[32;7m<a>\033[39;27m", '<a>'],
|
||||
['<fg=green;options=bold,underscore>', "\033[32;1;4mz\033[39;22;24m", 'z'],
|
||||
['<fg=green;options=bold,underscore,reverse;>', "\033[32;1;4;7md\033[39;22;24;27m", 'd'],
|
||||
];
|
||||
}
|
||||
|
||||
public function provideInlineStyleTagsWithUnknownOptions()
|
||||
{
|
||||
return array(
|
||||
array('<options=abc;>', 'abc'),
|
||||
array('<options=abc,def;>', 'abc'),
|
||||
array('<fg=green;options=xyz;>', 'xyz'),
|
||||
array('<fg=green;options=efg,abc>', 'efg'),
|
||||
);
|
||||
return [
|
||||
['<options=abc;>', 'abc'],
|
||||
['<options=abc,def;>', 'abc'],
|
||||
['<fg=green;options=xyz;>', 'xyz'],
|
||||
['<fg=green;options=efg,abc>', 'efg'],
|
||||
];
|
||||
}
|
||||
|
||||
public function testNonStyleTag()
|
||||
@@ -333,6 +322,28 @@ more text
|
||||
EOF
|
||||
));
|
||||
}
|
||||
|
||||
public function testFormatAndWrap()
|
||||
{
|
||||
$formatter = new OutputFormatter(true);
|
||||
|
||||
$this->assertSame("fo\no\e[37;41mb\e[39;49m\n\e[37;41mar\e[39;49m\nba\nz", $formatter->formatAndWrap('foo<error>bar</error> baz', 2));
|
||||
$this->assertSame("pr\ne \e[37;41m\e[39;49m\n\e[37;41mfo\e[39;49m\n\e[37;41mo \e[39;49m\n\e[37;41mba\e[39;49m\n\e[37;41mr \e[39;49m\n\e[37;41mba\e[39;49m\n\e[37;41mz\e[39;49m \npo\nst", $formatter->formatAndWrap('pre <error>foo bar baz</error> post', 2));
|
||||
$this->assertSame("pre\e[37;41m\e[39;49m\n\e[37;41mfoo\e[39;49m\n\e[37;41mbar\e[39;49m\n\e[37;41mbaz\e[39;49m\npos\nt", $formatter->formatAndWrap('pre <error>foo bar baz</error> post', 3));
|
||||
$this->assertSame("pre \e[37;41m\e[39;49m\n\e[37;41mfoo \e[39;49m\n\e[37;41mbar \e[39;49m\n\e[37;41mbaz\e[39;49m \npost", $formatter->formatAndWrap('pre <error>foo bar baz</error> post', 4));
|
||||
$this->assertSame("pre \e[37;41mf\e[39;49m\n\e[37;41moo ba\e[39;49m\n\e[37;41mr baz\e[39;49m\npost", $formatter->formatAndWrap('pre <error>foo bar baz</error> post', 5));
|
||||
$this->assertSame("Lore\nm \e[37;41mip\e[39;49m\n\e[37;41msum\e[39;49m \ndolo\nr \e[32msi\e[39m\n\e[32mt\e[39m am\net", $formatter->formatAndWrap('Lorem <error>ipsum</error> dolor <info>sit</info> amet', 4));
|
||||
$this->assertSame("Lorem \e[37;41mip\e[39;49m\n\e[37;41msum\e[39;49m dolo\nr \e[32msit\e[39m am\net", $formatter->formatAndWrap('Lorem <error>ipsum</error> dolor <info>sit</info> amet', 8));
|
||||
$this->assertSame("Lorem \e[37;41mipsum\e[39;49m dolor \e[32m\e[39m\n\e[32msit\e[39m, \e[37;41mamet\e[39;49m et \e[32mlauda\e[39m\n\e[32mntium\e[39m architecto", $formatter->formatAndWrap('Lorem <error>ipsum</error> dolor <info>sit</info>, <error>amet</error> et <info>laudantium</info> architecto', 18));
|
||||
|
||||
$formatter = new OutputFormatter();
|
||||
|
||||
$this->assertSame("fo\nob\nar\nba\nz", $formatter->formatAndWrap('foo<error>bar</error> baz', 2));
|
||||
$this->assertSame("pr\ne \nfo\no \nba\nr \nba\nz \npo\nst", $formatter->formatAndWrap('pre <error>foo bar baz</error> post', 2));
|
||||
$this->assertSame("pre\nfoo\nbar\nbaz\npos\nt", $formatter->formatAndWrap('pre <error>foo bar baz</error> post', 3));
|
||||
$this->assertSame("pre \nfoo \nbar \nbaz \npost", $formatter->formatAndWrap('pre <error>foo bar baz</error> post', 4));
|
||||
$this->assertSame("pre f\noo ba\nr baz\npost", $formatter->formatAndWrap('pre <error>foo bar baz</error> post', 5));
|
||||
}
|
||||
}
|
||||
|
||||
class TableCell
|
||||
|
||||
@@ -21,7 +21,7 @@ abstract class AbstractQuestionHelperTest extends TestCase
|
||||
$mock = $this->getMockBuilder(StreamableInputInterface::class)->getMock();
|
||||
$mock->expects($this->any())
|
||||
->method('isInteractive')
|
||||
->will($this->returnValue($interactive));
|
||||
->willReturn($interactive);
|
||||
|
||||
if ($stream) {
|
||||
$mock->expects($this->any())
|
||||
|
||||
@@ -40,7 +40,7 @@ class FormatterHelperTest extends TestCase
|
||||
$this->assertEquals(
|
||||
'<error> Some text to display </error>'."\n".
|
||||
'<error> foo bar </error>',
|
||||
$formatter->formatBlock(array('Some text to display', 'foo bar'), 'error'),
|
||||
$formatter->formatBlock(['Some text to display', 'foo bar'], 'error'),
|
||||
'::formatBlock() formats a message in a block'
|
||||
);
|
||||
|
||||
|
||||
@@ -12,15 +12,15 @@
|
||||
namespace Symfony\Component\Console\Tests\Helper;
|
||||
|
||||
use PHPUnit\Framework\TestCase;
|
||||
use Symfony\Component\Console\Helper\HelperSet;
|
||||
use Symfony\Component\Console\Command\Command;
|
||||
use Symfony\Component\Console\Helper\HelperSet;
|
||||
|
||||
class HelperSetTest extends TestCase
|
||||
{
|
||||
public function testConstructor()
|
||||
{
|
||||
$mock_helper = $this->getGenericMockHelper('fake_helper');
|
||||
$helperset = new HelperSet(array('fake_helper_alias' => $mock_helper));
|
||||
$helperset = new HelperSet(['fake_helper_alias' => $mock_helper]);
|
||||
|
||||
$this->assertEquals($mock_helper, $helperset->get('fake_helper_alias'), '__construct sets given helper to helpers');
|
||||
$this->assertTrue($helperset->has('fake_helper_alias'), '__construct sets helper alias for given helper');
|
||||
@@ -46,7 +46,7 @@ class HelperSetTest extends TestCase
|
||||
|
||||
public function testHas()
|
||||
{
|
||||
$helperset = new HelperSet(array('fake_helper_alias' => $this->getGenericMockHelper('fake_helper')));
|
||||
$helperset = new HelperSet(['fake_helper_alias' => $this->getGenericMockHelper('fake_helper')]);
|
||||
$this->assertTrue($helperset->has('fake_helper'), '->has() finds set helper');
|
||||
$this->assertTrue($helperset->has('fake_helper_alias'), '->has() finds set helper by alias');
|
||||
}
|
||||
@@ -55,7 +55,7 @@ class HelperSetTest extends TestCase
|
||||
{
|
||||
$helper_01 = $this->getGenericMockHelper('fake_helper_01');
|
||||
$helper_02 = $this->getGenericMockHelper('fake_helper_02');
|
||||
$helperset = new HelperSet(array('fake_helper_01_alias' => $helper_01, 'fake_helper_02_alias' => $helper_02));
|
||||
$helperset = new HelperSet(['fake_helper_01_alias' => $helper_01, 'fake_helper_02_alias' => $helper_02]);
|
||||
$this->assertEquals($helper_01, $helperset->get('fake_helper_01'), '->get() returns correct helper by name');
|
||||
$this->assertEquals($helper_01, $helperset->get('fake_helper_01_alias'), '->get() returns correct helper by alias');
|
||||
$this->assertEquals($helper_02, $helperset->get('fake_helper_02'), '->get() returns correct helper by name');
|
||||
@@ -101,7 +101,7 @@ class HelperSetTest extends TestCase
|
||||
$helperset->set($this->getGenericMockHelper('fake_helper_01', $helperset));
|
||||
$helperset->set($this->getGenericMockHelper('fake_helper_02', $helperset));
|
||||
|
||||
$helpers = array('fake_helper_01', 'fake_helper_02');
|
||||
$helpers = ['fake_helper_01', 'fake_helper_02'];
|
||||
$i = 0;
|
||||
|
||||
foreach ($helperset as $helper) {
|
||||
@@ -114,7 +114,7 @@ class HelperSetTest extends TestCase
|
||||
$mock_helper = $this->getMockBuilder('\Symfony\Component\Console\Helper\HelperInterface')->getMock();
|
||||
$mock_helper->expects($this->any())
|
||||
->method('getName')
|
||||
->will($this->returnValue($name));
|
||||
->willReturn($name);
|
||||
|
||||
if ($helperset) {
|
||||
$mock_helper->expects($this->any())
|
||||
|
||||
@@ -18,28 +18,28 @@ class HelperTest extends TestCase
|
||||
{
|
||||
public function formatTimeProvider()
|
||||
{
|
||||
return array(
|
||||
array(0, '< 1 sec'),
|
||||
array(1, '1 sec'),
|
||||
array(2, '2 secs'),
|
||||
array(59, '59 secs'),
|
||||
array(60, '1 min'),
|
||||
array(61, '1 min'),
|
||||
array(119, '1 min'),
|
||||
array(120, '2 mins'),
|
||||
array(121, '2 mins'),
|
||||
array(3599, '59 mins'),
|
||||
array(3600, '1 hr'),
|
||||
array(7199, '1 hr'),
|
||||
array(7200, '2 hrs'),
|
||||
array(7201, '2 hrs'),
|
||||
array(86399, '23 hrs'),
|
||||
array(86400, '1 day'),
|
||||
array(86401, '1 day'),
|
||||
array(172799, '1 day'),
|
||||
array(172800, '2 days'),
|
||||
array(172801, '2 days'),
|
||||
);
|
||||
return [
|
||||
[0, '< 1 sec'],
|
||||
[1, '1 sec'],
|
||||
[2, '2 secs'],
|
||||
[59, '59 secs'],
|
||||
[60, '1 min'],
|
||||
[61, '1 min'],
|
||||
[119, '1 min'],
|
||||
[120, '2 mins'],
|
||||
[121, '2 mins'],
|
||||
[3599, '59 mins'],
|
||||
[3600, '1 hr'],
|
||||
[7199, '1 hr'],
|
||||
[7200, '2 hrs'],
|
||||
[7201, '2 hrs'],
|
||||
[86399, '23 hrs'],
|
||||
[86400, '1 day'],
|
||||
[86401, '1 day'],
|
||||
[172799, '1 day'],
|
||||
[172800, '2 days'],
|
||||
[172801, '2 days'],
|
||||
];
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -14,8 +14,8 @@ namespace Symfony\Component\Console\Tests\Helper;
|
||||
use PHPUnit\Framework\TestCase;
|
||||
use Symfony\Component\Console\Helper\DebugFormatterHelper;
|
||||
use Symfony\Component\Console\Helper\HelperSet;
|
||||
use Symfony\Component\Console\Output\StreamOutput;
|
||||
use Symfony\Component\Console\Helper\ProcessHelper;
|
||||
use Symfony\Component\Console\Output\StreamOutput;
|
||||
use Symfony\Component\Process\Process;
|
||||
|
||||
class ProcessHelperTest extends TestCase
|
||||
@@ -25,8 +25,12 @@ class ProcessHelperTest extends TestCase
|
||||
*/
|
||||
public function testVariousProcessRuns($expected, $cmd, $verbosity, $error)
|
||||
{
|
||||
if (\is_string($cmd)) {
|
||||
$cmd = method_exists(Process::class, 'fromShellCommandline') ? Process::fromShellCommandline($cmd) : new Process($cmd);
|
||||
}
|
||||
|
||||
$helper = new ProcessHelper();
|
||||
$helper->setHelperSet(new HelperSet(array(new DebugFormatterHelper())));
|
||||
$helper->setHelperSet(new HelperSet([new DebugFormatterHelper()]));
|
||||
$output = $this->getOutputStream($verbosity);
|
||||
$helper->run($output, $cmd, $error);
|
||||
$this->assertEquals($expected, $this->getOutput($output));
|
||||
@@ -35,13 +39,13 @@ class ProcessHelperTest extends TestCase
|
||||
public function testPassedCallbackIsExecuted()
|
||||
{
|
||||
$helper = new ProcessHelper();
|
||||
$helper->setHelperSet(new HelperSet(array(new DebugFormatterHelper())));
|
||||
$helper->setHelperSet(new HelperSet([new DebugFormatterHelper()]));
|
||||
$output = $this->getOutputStream(StreamOutput::VERBOSITY_NORMAL);
|
||||
|
||||
$executed = false;
|
||||
$callback = function () use (&$executed) { $executed = true; };
|
||||
|
||||
$helper->run($output, 'php -r "echo 42;"', null, $callback);
|
||||
$helper->run($output, ['php', '-r', 'echo 42;'], null, $callback);
|
||||
$this->assertTrue($executed);
|
||||
}
|
||||
|
||||
@@ -81,27 +85,38 @@ EOT;
|
||||
OUT out message
|
||||
RES 252 Command did not run successfully
|
||||
|
||||
EOT;
|
||||
|
||||
$PHP = '\\' === \DIRECTORY_SEPARATOR ? '"!PHP!"' : '"$PHP"';
|
||||
$successOutputPhp = <<<EOT
|
||||
RUN php -r $PHP
|
||||
OUT 42
|
||||
RES Command ran successfully
|
||||
|
||||
EOT;
|
||||
|
||||
$errorMessage = 'An error occurred';
|
||||
$args = new Process(array('php', '-r', 'echo 42;'));
|
||||
$args = new Process(['php', '-r', 'echo 42;']);
|
||||
$args = $args->getCommandLine();
|
||||
$successOutputProcessDebug = str_replace("'php' '-r' 'echo 42;'", $args, $successOutputProcessDebug);
|
||||
$fromShellCommandline = method_exists(Process::class, 'fromShellCommandline') ? [Process::class, 'fromShellCommandline'] : function ($cmd) { return new Process($cmd); };
|
||||
|
||||
return array(
|
||||
array('', 'php -r "echo 42;"', StreamOutput::VERBOSITY_VERBOSE, null),
|
||||
array($successOutputVerbose, 'php -r "echo 42;"', StreamOutput::VERBOSITY_VERY_VERBOSE, null),
|
||||
array($successOutputDebug, 'php -r "echo 42;"', StreamOutput::VERBOSITY_DEBUG, null),
|
||||
array($successOutputDebugWithTags, 'php -r "echo \'<info>42</info>\';"', StreamOutput::VERBOSITY_DEBUG, null),
|
||||
array('', 'php -r "syntax error"', StreamOutput::VERBOSITY_VERBOSE, null),
|
||||
array($syntaxErrorOutputVerbose, 'php -r "fwrite(STDERR, \'error message\');usleep(50000);fwrite(STDOUT, \'out message\');exit(252);"', StreamOutput::VERBOSITY_VERY_VERBOSE, null),
|
||||
array($syntaxErrorOutputDebug, 'php -r "fwrite(STDERR, \'error message\');usleep(500000);fwrite(STDOUT, \'out message\');exit(252);"', StreamOutput::VERBOSITY_DEBUG, null),
|
||||
array($errorMessage.PHP_EOL, 'php -r "fwrite(STDERR, \'error message\');usleep(50000);fwrite(STDOUT, \'out message\');exit(252);"', StreamOutput::VERBOSITY_VERBOSE, $errorMessage),
|
||||
array($syntaxErrorOutputVerbose.$errorMessage.PHP_EOL, 'php -r "fwrite(STDERR, \'error message\');usleep(50000);fwrite(STDOUT, \'out message\');exit(252);"', StreamOutput::VERBOSITY_VERY_VERBOSE, $errorMessage),
|
||||
array($syntaxErrorOutputDebug.$errorMessage.PHP_EOL, 'php -r "fwrite(STDERR, \'error message\');usleep(500000);fwrite(STDOUT, \'out message\');exit(252);"', StreamOutput::VERBOSITY_DEBUG, $errorMessage),
|
||||
array($successOutputProcessDebug, array('php', '-r', 'echo 42;'), StreamOutput::VERBOSITY_DEBUG, null),
|
||||
array($successOutputDebug, new Process('php -r "echo 42;"'), StreamOutput::VERBOSITY_DEBUG, null),
|
||||
);
|
||||
return [
|
||||
['', 'php -r "echo 42;"', StreamOutput::VERBOSITY_VERBOSE, null],
|
||||
[$successOutputVerbose, 'php -r "echo 42;"', StreamOutput::VERBOSITY_VERY_VERBOSE, null],
|
||||
[$successOutputDebug, 'php -r "echo 42;"', StreamOutput::VERBOSITY_DEBUG, null],
|
||||
[$successOutputDebugWithTags, 'php -r "echo \'<info>42</info>\';"', StreamOutput::VERBOSITY_DEBUG, null],
|
||||
['', 'php -r "syntax error"', StreamOutput::VERBOSITY_VERBOSE, null],
|
||||
[$syntaxErrorOutputVerbose, 'php -r "fwrite(STDERR, \'error message\');usleep(50000);fwrite(STDOUT, \'out message\');exit(252);"', StreamOutput::VERBOSITY_VERY_VERBOSE, null],
|
||||
[$syntaxErrorOutputDebug, 'php -r "fwrite(STDERR, \'error message\');usleep(500000);fwrite(STDOUT, \'out message\');exit(252);"', StreamOutput::VERBOSITY_DEBUG, null],
|
||||
[$errorMessage.PHP_EOL, 'php -r "fwrite(STDERR, \'error message\');usleep(50000);fwrite(STDOUT, \'out message\');exit(252);"', StreamOutput::VERBOSITY_VERBOSE, $errorMessage],
|
||||
[$syntaxErrorOutputVerbose.$errorMessage.PHP_EOL, 'php -r "fwrite(STDERR, \'error message\');usleep(50000);fwrite(STDOUT, \'out message\');exit(252);"', StreamOutput::VERBOSITY_VERY_VERBOSE, $errorMessage],
|
||||
[$syntaxErrorOutputDebug.$errorMessage.PHP_EOL, 'php -r "fwrite(STDERR, \'error message\');usleep(500000);fwrite(STDOUT, \'out message\');exit(252);"', StreamOutput::VERBOSITY_DEBUG, $errorMessage],
|
||||
[$successOutputProcessDebug, ['php', '-r', 'echo 42;'], StreamOutput::VERBOSITY_DEBUG, null],
|
||||
[$successOutputDebug, $fromShellCommandline('php -r "echo 42;"'), StreamOutput::VERBOSITY_DEBUG, null],
|
||||
[$successOutputProcessDebug, [new Process(['php', '-r', 'echo 42;'])], StreamOutput::VERBOSITY_DEBUG, null],
|
||||
[$successOutputPhp, [$fromShellCommandline('php -r '.$PHP), 'PHP' => 'echo 42;'], StreamOutput::VERBOSITY_DEBUG, null],
|
||||
];
|
||||
}
|
||||
|
||||
private function getOutputStream($verbosity)
|
||||
|
||||
@@ -12,8 +12,10 @@
|
||||
namespace Symfony\Component\Console\Tests\Helper;
|
||||
|
||||
use PHPUnit\Framework\TestCase;
|
||||
use Symfony\Component\Console\Helper\ProgressBar;
|
||||
use Symfony\Component\Console\Formatter\OutputFormatter;
|
||||
use Symfony\Component\Console\Helper\Helper;
|
||||
use Symfony\Component\Console\Helper\ProgressBar;
|
||||
use Symfony\Component\Console\Output\ConsoleSectionOutput;
|
||||
use Symfony\Component\Console\Output\StreamOutput;
|
||||
|
||||
/**
|
||||
@@ -21,6 +23,19 @@ use Symfony\Component\Console\Output\StreamOutput;
|
||||
*/
|
||||
class ProgressBarTest extends TestCase
|
||||
{
|
||||
private $colSize;
|
||||
|
||||
protected function setUp()
|
||||
{
|
||||
$this->colSize = getenv('COLUMNS');
|
||||
putenv('COLUMNS=120');
|
||||
}
|
||||
|
||||
protected function tearDown()
|
||||
{
|
||||
putenv($this->colSize ? 'COLUMNS='.$this->colSize : 'COLUMNS');
|
||||
}
|
||||
|
||||
public function testMultipleStart()
|
||||
{
|
||||
$bar = new ProgressBar($output = $this->getOutputStream());
|
||||
@@ -310,6 +325,88 @@ class ProgressBarTest extends TestCase
|
||||
);
|
||||
}
|
||||
|
||||
public function testOverwriteWithSectionOutput()
|
||||
{
|
||||
$sections = [];
|
||||
$stream = $this->getOutputStream(true);
|
||||
$output = new ConsoleSectionOutput($stream->getStream(), $sections, $stream->getVerbosity(), $stream->isDecorated(), new OutputFormatter());
|
||||
|
||||
$bar = new ProgressBar($output, 50);
|
||||
$bar->start();
|
||||
$bar->display();
|
||||
$bar->advance();
|
||||
$bar->advance();
|
||||
|
||||
rewind($output->getStream());
|
||||
$this->assertEquals(
|
||||
' 0/50 [>---------------------------] 0%'.PHP_EOL.
|
||||
"\x1b[1A\x1b[0J".' 0/50 [>---------------------------] 0%'.PHP_EOL.
|
||||
"\x1b[1A\x1b[0J".' 1/50 [>---------------------------] 2%'.PHP_EOL.
|
||||
"\x1b[1A\x1b[0J".' 2/50 [=>--------------------------] 4%'.PHP_EOL,
|
||||
stream_get_contents($output->getStream())
|
||||
);
|
||||
}
|
||||
|
||||
public function testOverwriteMultipleProgressBarsWithSectionOutputs()
|
||||
{
|
||||
$sections = [];
|
||||
$stream = $this->getOutputStream(true);
|
||||
$output1 = new ConsoleSectionOutput($stream->getStream(), $sections, $stream->getVerbosity(), $stream->isDecorated(), new OutputFormatter());
|
||||
$output2 = new ConsoleSectionOutput($stream->getStream(), $sections, $stream->getVerbosity(), $stream->isDecorated(), new OutputFormatter());
|
||||
|
||||
$progress = new ProgressBar($output1, 50);
|
||||
$progress2 = new ProgressBar($output2, 50);
|
||||
|
||||
$progress->start();
|
||||
$progress2->start();
|
||||
|
||||
$progress2->advance();
|
||||
$progress->advance();
|
||||
|
||||
rewind($stream->getStream());
|
||||
|
||||
$this->assertEquals(
|
||||
' 0/50 [>---------------------------] 0%'.PHP_EOL.
|
||||
' 0/50 [>---------------------------] 0%'.PHP_EOL.
|
||||
"\x1b[1A\x1b[0J".' 1/50 [>---------------------------] 2%'.PHP_EOL.
|
||||
"\x1b[2A\x1b[0J".' 1/50 [>---------------------------] 2%'.PHP_EOL.
|
||||
"\x1b[1A\x1b[0J".' 1/50 [>---------------------------] 2%'.PHP_EOL.
|
||||
' 1/50 [>---------------------------] 2%'.PHP_EOL,
|
||||
stream_get_contents($stream->getStream())
|
||||
);
|
||||
}
|
||||
|
||||
public function testMultipleSectionsWithCustomFormat()
|
||||
{
|
||||
$sections = [];
|
||||
$stream = $this->getOutputStream(true);
|
||||
$output1 = new ConsoleSectionOutput($stream->getStream(), $sections, $stream->getVerbosity(), $stream->isDecorated(), new OutputFormatter());
|
||||
$output2 = new ConsoleSectionOutput($stream->getStream(), $sections, $stream->getVerbosity(), $stream->isDecorated(), new OutputFormatter());
|
||||
|
||||
ProgressBar::setFormatDefinition('test', '%current%/%max% [%bar%] %percent:3s%% Fruitcake marzipan toffee. Cupcake gummi bears tart dessert ice cream chupa chups cupcake chocolate bar sesame snaps. Croissant halvah cookie jujubes powder macaroon. Fruitcake bear claw bonbon jelly beans oat cake pie muffin Fruitcake marzipan toffee.');
|
||||
|
||||
$progress = new ProgressBar($output1, 50);
|
||||
$progress2 = new ProgressBar($output2, 50);
|
||||
$progress2->setFormat('test');
|
||||
|
||||
$progress->start();
|
||||
$progress2->start();
|
||||
|
||||
$progress->advance();
|
||||
$progress2->advance();
|
||||
|
||||
rewind($stream->getStream());
|
||||
|
||||
$this->assertEquals(' 0/50 [>---------------------------] 0%'.PHP_EOL.
|
||||
' 0/50 [>] 0% Fruitcake marzipan toffee. Cupcake gummi bears tart dessert ice cream chupa chups cupcake chocolate bar sesame snaps. Croissant halvah cookie jujubes powder macaroon. Fruitcake bear claw bonbon jelly beans oat cake pie muffin Fruitcake marzipan toffee.'.PHP_EOL.
|
||||
"\x1b[4A\x1b[0J".' 0/50 [>] 0% Fruitcake marzipan toffee. Cupcake gummi bears tart dessert ice cream chupa chups cupcake chocolate bar sesame snaps. Croissant halvah cookie jujubes powder macaroon. Fruitcake bear claw bonbon jelly beans oat cake pie muffin Fruitcake marzipan toffee.'.PHP_EOL.
|
||||
"\x1b[3A\x1b[0J".' 1/50 [>---------------------------] 2%'.PHP_EOL.
|
||||
' 0/50 [>] 0% Fruitcake marzipan toffee. Cupcake gummi bears tart dessert ice cream chupa chups cupcake chocolate bar sesame snaps. Croissant halvah cookie jujubes powder macaroon. Fruitcake bear claw bonbon jelly beans oat cake pie muffin Fruitcake marzipan toffee.'.PHP_EOL.
|
||||
"\x1b[3A\x1b[0J".' 1/50 [>] 2% Fruitcake marzipan toffee. Cupcake gummi bears tart dessert ice cream chupa chups cupcake chocolate bar sesame snaps. Croissant halvah cookie jujubes powder macaroon. Fruitcake bear claw bonbon jelly beans oat cake pie muffin Fruitcake marzipan toffee.'.PHP_EOL,
|
||||
stream_get_contents($stream->getStream())
|
||||
);
|
||||
}
|
||||
|
||||
public function testStartWithMax()
|
||||
{
|
||||
$bar = new ProgressBar($output = $this->getOutputStream());
|
||||
@@ -592,6 +689,29 @@ class ProgressBarTest extends TestCase
|
||||
);
|
||||
}
|
||||
|
||||
public function testSettingMaxStepsDuringProgressing()
|
||||
{
|
||||
$output = $this->getOutputStream();
|
||||
$bar = new ProgressBar($output);
|
||||
$bar->start();
|
||||
$bar->setProgress(2);
|
||||
$bar->setMaxSteps(10);
|
||||
$bar->setProgress(5);
|
||||
$bar->setMaxSteps(100);
|
||||
$bar->setProgress(10);
|
||||
$bar->finish();
|
||||
|
||||
rewind($output->getStream());
|
||||
$this->assertEquals(
|
||||
rtrim(' 0 [>---------------------------]').
|
||||
rtrim($this->generateOutput(' 2 [-->-------------------------]')).
|
||||
rtrim($this->generateOutput(' 5/10 [==============>-------------] 50%')).
|
||||
rtrim($this->generateOutput(' 10/100 [==>-------------------------] 10%')).
|
||||
rtrim($this->generateOutput(' 100/100 [============================] 100%')),
|
||||
stream_get_contents($output->getStream())
|
||||
);
|
||||
}
|
||||
|
||||
public function testWithSmallScreen()
|
||||
{
|
||||
$output = $this->getOutputStream();
|
||||
@@ -752,12 +872,12 @@ class ProgressBarTest extends TestCase
|
||||
*/
|
||||
public function provideFormat()
|
||||
{
|
||||
return array(
|
||||
array('normal'),
|
||||
array('verbose'),
|
||||
array('very_verbose'),
|
||||
array('debug'),
|
||||
);
|
||||
return [
|
||||
['normal'],
|
||||
['verbose'],
|
||||
['very_verbose'],
|
||||
['debug'],
|
||||
];
|
||||
}
|
||||
|
||||
protected function getOutputStream($decorated = true, $verbosity = StreamOutput::VERBOSITY_NORMAL)
|
||||
|
||||
@@ -79,7 +79,7 @@ class ProgressIndicatorTest extends TestCase
|
||||
|
||||
public function testCustomIndicatorValues()
|
||||
{
|
||||
$bar = new ProgressIndicator($output = $this->getOutputStream(), null, 100, array('a', 'b', 'c'));
|
||||
$bar = new ProgressIndicator($output = $this->getOutputStream(), null, 100, ['a', 'b', 'c']);
|
||||
|
||||
$bar->start('Starting...');
|
||||
usleep(101000);
|
||||
@@ -106,7 +106,7 @@ class ProgressIndicatorTest extends TestCase
|
||||
*/
|
||||
public function testCannotSetInvalidIndicatorCharacters()
|
||||
{
|
||||
$bar = new ProgressIndicator($this->getOutputStream(), null, 100, array('1'));
|
||||
$bar = new ProgressIndicator($this->getOutputStream(), null, 100, ['1']);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -161,12 +161,12 @@ class ProgressIndicatorTest extends TestCase
|
||||
*/
|
||||
public function provideFormat()
|
||||
{
|
||||
return array(
|
||||
array('normal'),
|
||||
array('verbose'),
|
||||
array('very_verbose'),
|
||||
array('debug'),
|
||||
);
|
||||
return [
|
||||
['normal'],
|
||||
['verbose'],
|
||||
['very_verbose'],
|
||||
['debug'],
|
||||
];
|
||||
}
|
||||
|
||||
protected function getOutputStream($decorated = true, $verbosity = StreamOutput::VERBOSITY_NORMAL)
|
||||
|
||||
@@ -12,9 +12,9 @@
|
||||
namespace Symfony\Component\Console\Tests\Helper;
|
||||
|
||||
use Symfony\Component\Console\Formatter\OutputFormatter;
|
||||
use Symfony\Component\Console\Helper\QuestionHelper;
|
||||
use Symfony\Component\Console\Helper\HelperSet;
|
||||
use Symfony\Component\Console\Helper\FormatterHelper;
|
||||
use Symfony\Component\Console\Helper\HelperSet;
|
||||
use Symfony\Component\Console\Helper\QuestionHelper;
|
||||
use Symfony\Component\Console\Output\StreamOutput;
|
||||
use Symfony\Component\Console\Question\ChoiceQuestion;
|
||||
use Symfony\Component\Console\Question\ConfirmationQuestion;
|
||||
@@ -29,10 +29,10 @@ class QuestionHelperTest extends AbstractQuestionHelperTest
|
||||
{
|
||||
$questionHelper = new QuestionHelper();
|
||||
|
||||
$helperSet = new HelperSet(array(new FormatterHelper()));
|
||||
$helperSet = new HelperSet([new FormatterHelper()]);
|
||||
$questionHelper->setHelperSet($helperSet);
|
||||
|
||||
$heroes = array('Superman', 'Batman', 'Spiderman');
|
||||
$heroes = ['Superman', 'Batman', 'Spiderman'];
|
||||
|
||||
$inputStream = $this->getInputStream("\n1\n 1 \nFabien\n1\nFabien\n1\n0,2\n 0 , 2 \n\n\n");
|
||||
|
||||
@@ -68,21 +68,85 @@ class QuestionHelperTest extends AbstractQuestionHelperTest
|
||||
$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));
|
||||
$this->assertEquals(['Batman'], $questionHelper->ask($this->createStreamableInputInterfaceMock($inputStream), $this->createOutputInterface(), $question));
|
||||
$this->assertEquals(['Superman', 'Spiderman'], $questionHelper->ask($this->createStreamableInputInterfaceMock($inputStream), $this->createOutputInterface(), $question));
|
||||
$this->assertEquals(['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), $this->createOutputInterface(), $question));
|
||||
$this->assertEquals(['Superman', 'Batman'], $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), $this->createOutputInterface(), $question));
|
||||
$this->assertEquals(['Superman', 'Batman'], $questionHelper->ask($this->createStreamableInputInterfaceMock($inputStream), $this->createOutputInterface(), $question));
|
||||
|
||||
$question = new ChoiceQuestion('What is your favorite superhero?', $heroes, 0);
|
||||
// We are supposed to get the default value since we are not in interactive mode
|
||||
$this->assertEquals('Superman', $questionHelper->ask($this->createStreamableInputInterfaceMock($inputStream, true), $this->createOutputInterface(), $question));
|
||||
}
|
||||
|
||||
public function testAskChoiceNonInteractive()
|
||||
{
|
||||
$questionHelper = new QuestionHelper();
|
||||
|
||||
$helperSet = new HelperSet([new FormatterHelper()]);
|
||||
$questionHelper->setHelperSet($helperSet);
|
||||
$inputStream = $this->getInputStream("\n1\n 1 \nFabien\n1\nFabien\n1\n0,2\n 0 , 2 \n\n\n");
|
||||
|
||||
$heroes = ['Superman', 'Batman', 'Spiderman'];
|
||||
|
||||
$question = new ChoiceQuestion('What is your favorite superhero?', $heroes, '0');
|
||||
|
||||
$this->assertSame('Superman', $questionHelper->ask($this->createStreamableInputInterfaceMock($inputStream, false), $this->createOutputInterface(), $question));
|
||||
|
||||
$question = new ChoiceQuestion('What is your favorite superhero?', $heroes, 'Batman');
|
||||
$this->assertSame('Batman', $questionHelper->ask($this->createStreamableInputInterfaceMock($inputStream, false), $this->createOutputInterface(), $question));
|
||||
|
||||
$question = new ChoiceQuestion('What is your favorite superhero?', $heroes, null);
|
||||
$this->assertNull($questionHelper->ask($this->createStreamableInputInterfaceMock($inputStream, false), $this->createOutputInterface(), $question));
|
||||
|
||||
$question = new ChoiceQuestion('What is your favorite superhero?', $heroes, '0');
|
||||
$question->setValidator(null);
|
||||
$this->assertSame('Superman', $questionHelper->ask($this->createStreamableInputInterfaceMock($inputStream, false), $this->createOutputInterface(), $question));
|
||||
|
||||
try {
|
||||
$question = new ChoiceQuestion('What is your favorite superhero?', $heroes, null);
|
||||
$questionHelper->ask($this->createStreamableInputInterfaceMock($inputStream, false), $this->createOutputInterface(), $question);
|
||||
} catch (\InvalidArgumentException $e) {
|
||||
$this->assertSame('Value "" is invalid', $e->getMessage());
|
||||
}
|
||||
|
||||
$question = new ChoiceQuestion('Who are your favorite superheros?', $heroes, '0, 1');
|
||||
$question->setMultiselect(true);
|
||||
$this->assertSame(['Superman', 'Batman'], $questionHelper->ask($this->createStreamableInputInterfaceMock($inputStream, false), $this->createOutputInterface(), $question));
|
||||
|
||||
$question = new ChoiceQuestion('Who are your favorite superheros?', $heroes, '0, 1');
|
||||
$question->setMultiselect(true);
|
||||
$question->setValidator(null);
|
||||
$this->assertSame(['Superman', 'Batman'], $questionHelper->ask($this->createStreamableInputInterfaceMock($inputStream, false), $this->createOutputInterface(), $question));
|
||||
|
||||
$question = new ChoiceQuestion('Who are your favorite superheros?', $heroes, '0, Batman');
|
||||
$question->setMultiselect(true);
|
||||
$this->assertSame(['Superman', 'Batman'], $questionHelper->ask($this->createStreamableInputInterfaceMock($inputStream, false), $this->createOutputInterface(), $question));
|
||||
|
||||
$question = new ChoiceQuestion('Who are your favorite superheros?', $heroes, null);
|
||||
$question->setMultiselect(true);
|
||||
$this->assertNull($questionHelper->ask($this->createStreamableInputInterfaceMock($inputStream, false), $this->createOutputInterface(), $question));
|
||||
|
||||
$question = new ChoiceQuestion('Who are your favorite superheros?', ['a' => 'Batman', 'b' => 'Superman'], 'a');
|
||||
$this->assertSame('a', $questionHelper->ask($this->createStreamableInputInterfaceMock('', false), $this->createOutputInterface(), $question), 'ChoiceQuestion validator returns the key if it\'s a string');
|
||||
|
||||
try {
|
||||
$question = new ChoiceQuestion('Who are your favorite superheros?', $heroes, '');
|
||||
$question->setMultiselect(true);
|
||||
$questionHelper->ask($this->createStreamableInputInterfaceMock($inputStream, false), $this->createOutputInterface(), $question);
|
||||
} catch (\InvalidArgumentException $e) {
|
||||
$this->assertSame('Value "" is invalid', $e->getMessage());
|
||||
}
|
||||
}
|
||||
|
||||
public function testAsk()
|
||||
@@ -118,11 +182,11 @@ class QuestionHelperTest extends AbstractQuestionHelperTest
|
||||
$inputStream = $this->getInputStream("Acm\nAc\177\177s\tTest\n\n\033[A\033[A\n\033[A\033[A\033[A\033[A\033[A\tTest\n\033[B\nS\177\177\033[B\033[B\nF00\177\177oo\t\n");
|
||||
|
||||
$dialog = new QuestionHelper();
|
||||
$helperSet = new HelperSet(array(new FormatterHelper()));
|
||||
$helperSet = new HelperSet([new FormatterHelper()]);
|
||||
$dialog->setHelperSet($helperSet);
|
||||
|
||||
$question = new Question('Please select a bundle', 'FrameworkBundle');
|
||||
$question->setAutocompleterValues(array('AcmeDemoBundle', 'AsseticBundle', 'SecurityBundle', 'FooBundle'));
|
||||
$question->setAutocompleterValues(['AcmeDemoBundle', 'AsseticBundle', 'SecurityBundle', 'FooBundle']);
|
||||
|
||||
$this->assertEquals('AcmeDemoBundle', $dialog->ask($this->createStreamableInputInterfaceMock($inputStream), $this->createOutputInterface(), $question));
|
||||
$this->assertEquals('AsseticBundleTest', $dialog->ask($this->createStreamableInputInterfaceMock($inputStream), $this->createOutputInterface(), $question));
|
||||
@@ -144,15 +208,75 @@ class QuestionHelperTest extends AbstractQuestionHelperTest
|
||||
$inputStream = $this->getInputStream("\033[A\033[A\n\033[B\033[B\n");
|
||||
|
||||
$dialog = new QuestionHelper();
|
||||
$dialog->setHelperSet(new HelperSet(array(new FormatterHelper())));
|
||||
$dialog->setHelperSet(new HelperSet([new FormatterHelper()]));
|
||||
|
||||
$question = new ChoiceQuestion('Please select a bundle', array(1 => 'AcmeDemoBundle', 4 => 'AsseticBundle'));
|
||||
$question = new ChoiceQuestion('Please select a bundle', [1 => 'AcmeDemoBundle', 4 => 'AsseticBundle']);
|
||||
$question->setMaxAttempts(1);
|
||||
|
||||
$this->assertEquals('AcmeDemoBundle', $dialog->ask($this->createStreamableInputInterfaceMock($inputStream), $this->createOutputInterface(), $question));
|
||||
$this->assertEquals('AsseticBundle', $dialog->ask($this->createStreamableInputInterfaceMock($inputStream), $this->createOutputInterface(), $question));
|
||||
}
|
||||
|
||||
public function testAskWithAutocompleteWithExactMatch()
|
||||
{
|
||||
if (!$this->hasSttyAvailable()) {
|
||||
$this->markTestSkipped('`stty` is required to test autocomplete functionality');
|
||||
}
|
||||
|
||||
$inputStream = $this->getInputStream("b\n");
|
||||
|
||||
$possibleChoices = [
|
||||
'a' => 'berlin',
|
||||
'b' => 'copenhagen',
|
||||
'c' => 'amsterdam',
|
||||
];
|
||||
|
||||
$dialog = new QuestionHelper();
|
||||
$dialog->setHelperSet(new HelperSet([new FormatterHelper()]));
|
||||
|
||||
$question = new ChoiceQuestion('Please select a city', $possibleChoices);
|
||||
$question->setMaxAttempts(1);
|
||||
|
||||
$this->assertSame('b', $dialog->ask($this->createStreamableInputInterfaceMock($inputStream), $this->createOutputInterface(), $question));
|
||||
}
|
||||
|
||||
public function getInputs()
|
||||
{
|
||||
return [
|
||||
['$'], // 1 byte character
|
||||
['¢'], // 2 bytes character
|
||||
['€'], // 3 bytes character
|
||||
['𐍈'], // 4 bytes character
|
||||
];
|
||||
}
|
||||
|
||||
/**
|
||||
* @dataProvider getInputs
|
||||
*/
|
||||
public function testAskWithAutocompleteWithMultiByteCharacter($character)
|
||||
{
|
||||
if (!$this->hasSttyAvailable()) {
|
||||
$this->markTestSkipped('`stty` is required to test autocomplete functionality');
|
||||
}
|
||||
|
||||
$inputStream = $this->getInputStream("$character\n");
|
||||
|
||||
$possibleChoices = [
|
||||
'$' => '1 byte character',
|
||||
'¢' => '2 bytes character',
|
||||
'€' => '3 bytes character',
|
||||
'𐍈' => '4 bytes character',
|
||||
];
|
||||
|
||||
$dialog = new QuestionHelper();
|
||||
$dialog->setHelperSet(new HelperSet([new FormatterHelper()]));
|
||||
|
||||
$question = new ChoiceQuestion('Please select a character', $possibleChoices);
|
||||
$question->setMaxAttempts(1);
|
||||
|
||||
$this->assertSame($character, $dialog->ask($this->createStreamableInputInterfaceMock($inputStream), $this->createOutputInterface(), $question));
|
||||
}
|
||||
|
||||
public function testAutocompleteWithTrailingBackslash()
|
||||
{
|
||||
if (!$this->hasSttyAvailable()) {
|
||||
@@ -162,12 +286,12 @@ class QuestionHelperTest extends AbstractQuestionHelperTest
|
||||
$inputStream = $this->getInputStream('E');
|
||||
|
||||
$dialog = new QuestionHelper();
|
||||
$helperSet = new HelperSet(array(new FormatterHelper()));
|
||||
$helperSet = new HelperSet([new FormatterHelper()]);
|
||||
$dialog->setHelperSet($helperSet);
|
||||
|
||||
$question = new Question('');
|
||||
$expectedCompletion = 'ExampleNamespace\\';
|
||||
$question->setAutocompleterValues(array($expectedCompletion));
|
||||
$question->setAutocompleterValues([$expectedCompletion]);
|
||||
|
||||
$output = $this->createOutputInterface();
|
||||
$dialog->ask($this->createStreamableInputInterfaceMock($inputStream), $output, $question);
|
||||
@@ -178,11 +302,11 @@ class QuestionHelperTest extends AbstractQuestionHelperTest
|
||||
|
||||
// Shell control (esc) sequences are not so important: we only care that
|
||||
// <hl> tag is interpreted correctly and replaced
|
||||
$irrelevantEscSequences = array(
|
||||
$irrelevantEscSequences = [
|
||||
"\0337" => '', // Save cursor position
|
||||
"\0338" => '', // Restore cursor position
|
||||
"\033[K" => '', // Clear line from cursor till the end
|
||||
);
|
||||
];
|
||||
|
||||
$importantActualOutput = strtr($actualOutput, $irrelevantEscSequences);
|
||||
|
||||
@@ -194,7 +318,7 @@ class QuestionHelperTest extends AbstractQuestionHelperTest
|
||||
|
||||
public function testAskHiddenResponse()
|
||||
{
|
||||
if ('\\' === DIRECTORY_SEPARATOR) {
|
||||
if ('\\' === \DIRECTORY_SEPARATOR) {
|
||||
$this->markTestSkipped('This test is not supported on Windows');
|
||||
}
|
||||
|
||||
@@ -220,14 +344,14 @@ class QuestionHelperTest extends AbstractQuestionHelperTest
|
||||
|
||||
public function getAskConfirmationData()
|
||||
{
|
||||
return array(
|
||||
array('', true),
|
||||
array('', false, false),
|
||||
array('y', true),
|
||||
array('yes', true),
|
||||
array('n', false),
|
||||
array('no', false),
|
||||
);
|
||||
return [
|
||||
['', true],
|
||||
['', false, false],
|
||||
['y', true],
|
||||
['yes', true],
|
||||
['n', false],
|
||||
['no', false],
|
||||
];
|
||||
}
|
||||
|
||||
public function testAskConfirmationWithCustomTrueAnswer()
|
||||
@@ -244,12 +368,12 @@ class QuestionHelperTest extends AbstractQuestionHelperTest
|
||||
public function testAskAndValidate()
|
||||
{
|
||||
$dialog = new QuestionHelper();
|
||||
$helperSet = new HelperSet(array(new FormatterHelper()));
|
||||
$helperSet = new HelperSet([new FormatterHelper()]);
|
||||
$dialog->setHelperSet($helperSet);
|
||||
|
||||
$error = 'This is not a color!';
|
||||
$validator = function ($color) use ($error) {
|
||||
if (!in_array($color, array('white', 'black'))) {
|
||||
if (!\in_array($color, ['white', 'black'])) {
|
||||
throw new \InvalidArgumentException($error);
|
||||
}
|
||||
|
||||
@@ -277,14 +401,14 @@ class QuestionHelperTest extends AbstractQuestionHelperTest
|
||||
*/
|
||||
public function testSelectChoiceFromSimpleChoices($providedAnswer, $expectedValue)
|
||||
{
|
||||
$possibleChoices = array(
|
||||
$possibleChoices = [
|
||||
'My environment 1',
|
||||
'My environment 2',
|
||||
'My environment 3',
|
||||
);
|
||||
];
|
||||
|
||||
$dialog = new QuestionHelper();
|
||||
$helperSet = new HelperSet(array(new FormatterHelper()));
|
||||
$helperSet = new HelperSet([new FormatterHelper()]);
|
||||
$dialog->setHelperSet($helperSet);
|
||||
|
||||
$question = new ChoiceQuestion('Please select the environment to load', $possibleChoices);
|
||||
@@ -296,14 +420,14 @@ class QuestionHelperTest extends AbstractQuestionHelperTest
|
||||
|
||||
public function simpleAnswerProvider()
|
||||
{
|
||||
return array(
|
||||
array(0, 'My environment 1'),
|
||||
array(1, 'My environment 2'),
|
||||
array(2, 'My environment 3'),
|
||||
array('My environment 1', 'My environment 1'),
|
||||
array('My environment 2', 'My environment 2'),
|
||||
array('My environment 3', 'My environment 3'),
|
||||
);
|
||||
return [
|
||||
[0, 'My environment 1'],
|
||||
[1, 'My environment 2'],
|
||||
[2, 'My environment 3'],
|
||||
['My environment 1', 'My environment 1'],
|
||||
['My environment 2', 'My environment 2'],
|
||||
['My environment 3', 'My environment 3'],
|
||||
];
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -311,14 +435,14 @@ class QuestionHelperTest extends AbstractQuestionHelperTest
|
||||
*/
|
||||
public function testSpecialCharacterChoiceFromMultipleChoiceList($providedAnswer, $expectedValue)
|
||||
{
|
||||
$possibleChoices = array(
|
||||
$possibleChoices = [
|
||||
'.',
|
||||
'src',
|
||||
);
|
||||
];
|
||||
|
||||
$dialog = new QuestionHelper();
|
||||
$inputStream = $this->getInputStream($providedAnswer."\n");
|
||||
$helperSet = new HelperSet(array(new FormatterHelper()));
|
||||
$helperSet = new HelperSet([new FormatterHelper()]);
|
||||
$dialog->setHelperSet($helperSet);
|
||||
|
||||
$question = new ChoiceQuestion('Please select the directory', $possibleChoices);
|
||||
@@ -331,10 +455,10 @@ class QuestionHelperTest extends AbstractQuestionHelperTest
|
||||
|
||||
public function specialCharacterInMultipleChoice()
|
||||
{
|
||||
return array(
|
||||
array('.', array('.')),
|
||||
array('., src', array('.', 'src')),
|
||||
);
|
||||
return [
|
||||
['.', ['.']],
|
||||
['., src', ['.', 'src']],
|
||||
];
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -342,15 +466,15 @@ class QuestionHelperTest extends AbstractQuestionHelperTest
|
||||
*/
|
||||
public function testChoiceFromChoicelistWithMixedKeys($providedAnswer, $expectedValue)
|
||||
{
|
||||
$possibleChoices = array(
|
||||
$possibleChoices = [
|
||||
'0' => 'No environment',
|
||||
'1' => 'My environment 1',
|
||||
'env_2' => 'My environment 2',
|
||||
3 => 'My environment 3',
|
||||
);
|
||||
];
|
||||
|
||||
$dialog = new QuestionHelper();
|
||||
$helperSet = new HelperSet(array(new FormatterHelper()));
|
||||
$helperSet = new HelperSet([new FormatterHelper()]);
|
||||
$dialog->setHelperSet($helperSet);
|
||||
|
||||
$question = new ChoiceQuestion('Please select the environment to load', $possibleChoices);
|
||||
@@ -362,14 +486,14 @@ class QuestionHelperTest extends AbstractQuestionHelperTest
|
||||
|
||||
public function mixedKeysChoiceListAnswerProvider()
|
||||
{
|
||||
return array(
|
||||
array('0', '0'),
|
||||
array('No environment', '0'),
|
||||
array('1', '1'),
|
||||
array('env_2', 'env_2'),
|
||||
array(3, '3'),
|
||||
array('My environment 1', '1'),
|
||||
);
|
||||
return [
|
||||
['0', '0'],
|
||||
['No environment', '0'],
|
||||
['1', '1'],
|
||||
['env_2', 'env_2'],
|
||||
[3, '3'],
|
||||
['My environment 1', '1'],
|
||||
];
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -377,14 +501,14 @@ class QuestionHelperTest extends AbstractQuestionHelperTest
|
||||
*/
|
||||
public function testSelectChoiceFromChoiceList($providedAnswer, $expectedValue)
|
||||
{
|
||||
$possibleChoices = array(
|
||||
$possibleChoices = [
|
||||
'env_1' => 'My environment 1',
|
||||
'env_2' => 'My environment',
|
||||
'env_3' => 'My environment',
|
||||
);
|
||||
];
|
||||
|
||||
$dialog = new QuestionHelper();
|
||||
$helperSet = new HelperSet(array(new FormatterHelper()));
|
||||
$helperSet = new HelperSet([new FormatterHelper()]);
|
||||
$dialog->setHelperSet($helperSet);
|
||||
|
||||
$question = new ChoiceQuestion('Please select the environment to load', $possibleChoices);
|
||||
@@ -400,14 +524,14 @@ class QuestionHelperTest extends AbstractQuestionHelperTest
|
||||
*/
|
||||
public function testAmbiguousChoiceFromChoicelist()
|
||||
{
|
||||
$possibleChoices = array(
|
||||
$possibleChoices = [
|
||||
'env_1' => 'My first environment',
|
||||
'env_2' => 'My environment',
|
||||
'env_3' => 'My environment',
|
||||
);
|
||||
];
|
||||
|
||||
$dialog = new QuestionHelper();
|
||||
$helperSet = new HelperSet(array(new FormatterHelper()));
|
||||
$helperSet = new HelperSet([new FormatterHelper()]);
|
||||
$dialog->setHelperSet($helperSet);
|
||||
|
||||
$question = new ChoiceQuestion('Please select the environment to load', $possibleChoices);
|
||||
@@ -418,12 +542,12 @@ class QuestionHelperTest extends AbstractQuestionHelperTest
|
||||
|
||||
public function answerProvider()
|
||||
{
|
||||
return array(
|
||||
array('env_1', 'env_1'),
|
||||
array('env_2', 'env_2'),
|
||||
array('env_3', 'env_3'),
|
||||
array('My environment 1', 'env_1'),
|
||||
);
|
||||
return [
|
||||
['env_1', 'env_1'],
|
||||
['env_2', 'env_2'],
|
||||
['env_3', 'env_3'],
|
||||
['My environment 1', 'env_1'],
|
||||
];
|
||||
}
|
||||
|
||||
public function testNoInteraction()
|
||||
@@ -439,22 +563,22 @@ class QuestionHelperTest extends AbstractQuestionHelperTest
|
||||
public function testChoiceOutputFormattingQuestionForUtf8Keys()
|
||||
{
|
||||
$question = 'Lorem ipsum?';
|
||||
$possibleChoices = array(
|
||||
$possibleChoices = [
|
||||
'foo' => 'foo',
|
||||
'żółw' => 'bar',
|
||||
'łabądź' => 'baz',
|
||||
);
|
||||
$outputShown = array(
|
||||
];
|
||||
$outputShown = [
|
||||
$question,
|
||||
' [<info>foo </info>] foo',
|
||||
' [<info>żółw </info>] bar',
|
||||
' [<info>łabądź</info>] baz',
|
||||
);
|
||||
];
|
||||
$output = $this->getMockBuilder('\Symfony\Component\Console\Output\OutputInterface')->getMock();
|
||||
$output->method('getFormatter')->willReturn(new OutputFormatter());
|
||||
|
||||
$dialog = new QuestionHelper();
|
||||
$helperSet = new HelperSet(array(new FormatterHelper()));
|
||||
$helperSet = new HelperSet([new FormatterHelper()]);
|
||||
$dialog->setHelperSet($helperSet);
|
||||
|
||||
$output->expects($this->once())->method('writeln')->with($this->equalTo($outputShown));
|
||||
@@ -463,360 +587,9 @@ class QuestionHelperTest extends AbstractQuestionHelperTest
|
||||
$dialog->ask($this->createStreamableInputInterfaceMock($this->getInputStream("\n")), $output, $question);
|
||||
}
|
||||
|
||||
/**
|
||||
* @group legacy
|
||||
*/
|
||||
public function testLegacyAskChoice()
|
||||
{
|
||||
$questionHelper = new QuestionHelper();
|
||||
|
||||
$helperSet = new HelperSet(array(new FormatterHelper()));
|
||||
$questionHelper->setHelperSet($helperSet);
|
||||
|
||||
$heroes = array('Superman', 'Batman', 'Spiderman');
|
||||
|
||||
$questionHelper->setInputStream($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->createInputInterfaceMock(), $this->createOutputInterface(), $question));
|
||||
|
||||
$question = new ChoiceQuestion('What is your favorite superhero?', $heroes);
|
||||
$question->setMaxAttempts(1);
|
||||
$this->assertEquals('Batman', $questionHelper->ask($this->createInputInterfaceMock(), $this->createOutputInterface(), $question));
|
||||
$this->assertEquals('Batman', $questionHelper->ask($this->createInputInterfaceMock(), $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->createInputInterfaceMock(), $output = $this->createOutputInterface(), $question));
|
||||
|
||||
rewind($output->getStream());
|
||||
$stream = stream_get_contents($output->getStream());
|
||||
$this->assertContains('Input "Fabien" is not a superhero!', $stream);
|
||||
|
||||
try {
|
||||
$question = new ChoiceQuestion('What is your favorite superhero?', $heroes, '1');
|
||||
$question->setMaxAttempts(1);
|
||||
$questionHelper->ask($this->createInputInterfaceMock(), $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->createInputInterfaceMock(), $this->createOutputInterface(), $question));
|
||||
$this->assertEquals(array('Superman', 'Spiderman'), $questionHelper->ask($this->createInputInterfaceMock(), $this->createOutputInterface(), $question));
|
||||
$this->assertEquals(array('Superman', 'Spiderman'), $questionHelper->ask($this->createInputInterfaceMock(), $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->createInputInterfaceMock(), $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->createInputInterfaceMock(), $this->createOutputInterface(), $question));
|
||||
}
|
||||
|
||||
/**
|
||||
* @group legacy
|
||||
*/
|
||||
public function testLegacyAsk()
|
||||
{
|
||||
$dialog = new QuestionHelper();
|
||||
|
||||
$dialog->setInputStream($this->getInputStream("\n8AM\n"));
|
||||
|
||||
$question = new Question('What time is it?', '2PM');
|
||||
$this->assertEquals('2PM', $dialog->ask($this->createInputInterfaceMock(), $this->createOutputInterface(), $question));
|
||||
|
||||
$question = new Question('What time is it?', '2PM');
|
||||
$this->assertEquals('8AM', $dialog->ask($this->createInputInterfaceMock(), $output = $this->createOutputInterface(), $question));
|
||||
|
||||
rewind($output->getStream());
|
||||
$this->assertEquals('What time is it?', stream_get_contents($output->getStream()));
|
||||
}
|
||||
|
||||
/**
|
||||
* @group legacy
|
||||
*/
|
||||
public function testLegacyAskWithAutocomplete()
|
||||
{
|
||||
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("Acm\nAc\177\177s\tTest\n\n\033[A\033[A\n\033[A\033[A\033[A\033[A\033[A\tTest\n\033[B\nS\177\177\033[B\033[B\nF00\177\177oo\t\n");
|
||||
|
||||
$dialog = new QuestionHelper();
|
||||
$dialog->setInputStream($inputStream);
|
||||
$helperSet = new HelperSet(array(new FormatterHelper()));
|
||||
$dialog->setHelperSet($helperSet);
|
||||
|
||||
$question = new Question('Please select a bundle', 'FrameworkBundle');
|
||||
$question->setAutocompleterValues(array('AcmeDemoBundle', 'AsseticBundle', 'SecurityBundle', 'FooBundle'));
|
||||
|
||||
$this->assertEquals('AcmeDemoBundle', $dialog->ask($this->createInputInterfaceMock(), $this->createOutputInterface(), $question));
|
||||
$this->assertEquals('AsseticBundleTest', $dialog->ask($this->createInputInterfaceMock(), $this->createOutputInterface(), $question));
|
||||
$this->assertEquals('FrameworkBundle', $dialog->ask($this->createInputInterfaceMock(), $this->createOutputInterface(), $question));
|
||||
$this->assertEquals('SecurityBundle', $dialog->ask($this->createInputInterfaceMock(), $this->createOutputInterface(), $question));
|
||||
$this->assertEquals('FooBundleTest', $dialog->ask($this->createInputInterfaceMock(), $this->createOutputInterface(), $question));
|
||||
$this->assertEquals('AcmeDemoBundle', $dialog->ask($this->createInputInterfaceMock(), $this->createOutputInterface(), $question));
|
||||
$this->assertEquals('AsseticBundle', $dialog->ask($this->createInputInterfaceMock(), $this->createOutputInterface(), $question));
|
||||
$this->assertEquals('FooBundle', $dialog->ask($this->createInputInterfaceMock(), $this->createOutputInterface(), $question));
|
||||
}
|
||||
|
||||
/**
|
||||
* @group legacy
|
||||
*/
|
||||
public function testLegacyAskWithAutocompleteWithNonSequentialKeys()
|
||||
{
|
||||
if (!$this->hasSttyAvailable()) {
|
||||
$this->markTestSkipped('`stty` is required to test autocomplete functionality');
|
||||
}
|
||||
|
||||
// <UP ARROW><UP ARROW><NEWLINE><DOWN ARROW><DOWN ARROW><NEWLINE>
|
||||
$inputStream = $this->getInputStream("\033[A\033[A\n\033[B\033[B\n");
|
||||
|
||||
$dialog = new QuestionHelper();
|
||||
$dialog->setInputStream($inputStream);
|
||||
$dialog->setHelperSet(new HelperSet(array(new FormatterHelper())));
|
||||
|
||||
$question = new ChoiceQuestion('Please select a bundle', array(1 => 'AcmeDemoBundle', 4 => 'AsseticBundle'));
|
||||
$question->setMaxAttempts(1);
|
||||
|
||||
$this->assertEquals('AcmeDemoBundle', $dialog->ask($this->createInputInterfaceMock(), $this->createOutputInterface(), $question));
|
||||
$this->assertEquals('AsseticBundle', $dialog->ask($this->createInputInterfaceMock(), $this->createOutputInterface(), $question));
|
||||
}
|
||||
|
||||
/**
|
||||
* @group legacy
|
||||
*/
|
||||
public function testLegacyAskHiddenResponse()
|
||||
{
|
||||
if ('\\' === DIRECTORY_SEPARATOR) {
|
||||
$this->markTestSkipped('This test is not supported on Windows');
|
||||
}
|
||||
|
||||
$dialog = new QuestionHelper();
|
||||
$dialog->setInputStream($this->getInputStream("8AM\n"));
|
||||
|
||||
$question = new Question('What time is it?');
|
||||
$question->setHidden(true);
|
||||
|
||||
$this->assertEquals('8AM', $dialog->ask($this->createInputInterfaceMock(), $this->createOutputInterface(), $question));
|
||||
}
|
||||
|
||||
/**
|
||||
* @group legacy
|
||||
* @dataProvider getAskConfirmationData
|
||||
*/
|
||||
public function testLegacyAskConfirmation($question, $expected, $default = true)
|
||||
{
|
||||
$dialog = new QuestionHelper();
|
||||
|
||||
$dialog->setInputStream($this->getInputStream($question."\n"));
|
||||
$question = new ConfirmationQuestion('Do you like French fries?', $default);
|
||||
$this->assertEquals($expected, $dialog->ask($this->createInputInterfaceMock(), $this->createOutputInterface(), $question), 'confirmation question should '.($expected ? 'pass' : 'cancel'));
|
||||
}
|
||||
|
||||
/**
|
||||
* @group legacy
|
||||
*/
|
||||
public function testLegacyAskConfirmationWithCustomTrueAnswer()
|
||||
{
|
||||
$dialog = new QuestionHelper();
|
||||
|
||||
$dialog->setInputStream($this->getInputStream("j\ny\n"));
|
||||
$question = new ConfirmationQuestion('Do you like French fries?', false, '/^(j|y)/i');
|
||||
$this->assertTrue($dialog->ask($this->createInputInterfaceMock(), $this->createOutputInterface(), $question));
|
||||
$question = new ConfirmationQuestion('Do you like French fries?', false, '/^(j|y)/i');
|
||||
$this->assertTrue($dialog->ask($this->createInputInterfaceMock(), $this->createOutputInterface(), $question));
|
||||
}
|
||||
|
||||
/**
|
||||
* @group legacy
|
||||
*/
|
||||
public function testLegacyAskAndValidate()
|
||||
{
|
||||
$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());
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @group legacy
|
||||
* @dataProvider simpleAnswerProvider
|
||||
*/
|
||||
public function testLegacySelectChoiceFromSimpleChoices($providedAnswer, $expectedValue)
|
||||
{
|
||||
$possibleChoices = array(
|
||||
'My environment 1',
|
||||
'My environment 2',
|
||||
'My environment 3',
|
||||
);
|
||||
|
||||
$dialog = new QuestionHelper();
|
||||
$dialog->setInputStream($this->getInputStream($providedAnswer."\n"));
|
||||
$helperSet = new HelperSet(array(new FormatterHelper()));
|
||||
$dialog->setHelperSet($helperSet);
|
||||
|
||||
$question = new ChoiceQuestion('Please select the environment to load', $possibleChoices);
|
||||
$question->setMaxAttempts(1);
|
||||
$answer = $dialog->ask($this->createInputInterfaceMock(), $this->createOutputInterface(), $question);
|
||||
|
||||
$this->assertSame($expectedValue, $answer);
|
||||
}
|
||||
|
||||
/**
|
||||
* @group legacy
|
||||
* @dataProvider mixedKeysChoiceListAnswerProvider
|
||||
*/
|
||||
public function testLegacyChoiceFromChoicelistWithMixedKeys($providedAnswer, $expectedValue)
|
||||
{
|
||||
$possibleChoices = array(
|
||||
'0' => 'No environment',
|
||||
'1' => 'My environment 1',
|
||||
'env_2' => 'My environment 2',
|
||||
3 => 'My environment 3',
|
||||
);
|
||||
|
||||
$dialog = new QuestionHelper();
|
||||
$dialog->setInputStream($this->getInputStream($providedAnswer."\n"));
|
||||
$helperSet = new HelperSet(array(new FormatterHelper()));
|
||||
$dialog->setHelperSet($helperSet);
|
||||
|
||||
$question = new ChoiceQuestion('Please select the environment to load', $possibleChoices);
|
||||
$question->setMaxAttempts(1);
|
||||
$answer = $dialog->ask($this->createInputInterfaceMock(), $this->createOutputInterface(), $question);
|
||||
|
||||
$this->assertSame($expectedValue, $answer);
|
||||
}
|
||||
|
||||
/**
|
||||
* @group legacy
|
||||
* @dataProvider answerProvider
|
||||
*/
|
||||
public function testLegacySelectChoiceFromChoiceList($providedAnswer, $expectedValue)
|
||||
{
|
||||
$possibleChoices = array(
|
||||
'env_1' => 'My environment 1',
|
||||
'env_2' => 'My environment',
|
||||
'env_3' => 'My environment',
|
||||
);
|
||||
|
||||
$dialog = new QuestionHelper();
|
||||
$dialog->setInputStream($this->getInputStream($providedAnswer."\n"));
|
||||
$helperSet = new HelperSet(array(new FormatterHelper()));
|
||||
$dialog->setHelperSet($helperSet);
|
||||
|
||||
$question = new ChoiceQuestion('Please select the environment to load', $possibleChoices);
|
||||
$question->setMaxAttempts(1);
|
||||
$answer = $dialog->ask($this->createInputInterfaceMock(), $this->createOutputInterface(), $question);
|
||||
|
||||
$this->assertSame($expectedValue, $answer);
|
||||
}
|
||||
|
||||
/**
|
||||
* @group legacy
|
||||
* @expectedException \InvalidArgumentException
|
||||
* @expectedExceptionMessage The provided answer is ambiguous. Value should be one of env_2 or env_3.
|
||||
*/
|
||||
public function testLegacyAmbiguousChoiceFromChoicelist()
|
||||
{
|
||||
$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);
|
||||
}
|
||||
|
||||
/**
|
||||
* @requires function mb_strwidth
|
||||
* @group legacy
|
||||
*/
|
||||
public function testLegacyChoiceOutputFormattingQuestionForUtf8Keys()
|
||||
{
|
||||
$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->getMockBuilder('\Symfony\Component\Console\Output\OutputInterface')->getMock();
|
||||
$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);
|
||||
}
|
||||
|
||||
/**
|
||||
* @expectedException \Symfony\Component\Console\Exception\RuntimeException
|
||||
* @expectedExceptionMessage Aborted
|
||||
* @expectedExceptionMessage Aborted.
|
||||
*/
|
||||
public function testAskThrowsExceptionOnMissingInput()
|
||||
{
|
||||
@@ -826,7 +599,17 @@ class QuestionHelperTest extends AbstractQuestionHelperTest
|
||||
|
||||
/**
|
||||
* @expectedException \Symfony\Component\Console\Exception\RuntimeException
|
||||
* @expectedExceptionMessage Aborted
|
||||
* @expectedExceptionMessage Aborted.
|
||||
*/
|
||||
public function testAskThrowsExceptionOnMissingInputForChoiceQuestion()
|
||||
{
|
||||
$dialog = new QuestionHelper();
|
||||
$dialog->ask($this->createStreamableInputInterfaceMock($this->getInputStream('')), $this->createOutputInterface(), new ChoiceQuestion('Choice', ['a', 'b']));
|
||||
}
|
||||
|
||||
/**
|
||||
* @expectedException \Symfony\Component\Console\Exception\RuntimeException
|
||||
* @expectedExceptionMessage Aborted.
|
||||
*/
|
||||
public function testAskThrowsExceptionOnMissingInputWithValidator()
|
||||
{
|
||||
@@ -848,7 +631,7 @@ class QuestionHelperTest extends AbstractQuestionHelperTest
|
||||
*/
|
||||
public function testEmptyChoices()
|
||||
{
|
||||
new ChoiceQuestion('Question', array(), 'irrelevant');
|
||||
new ChoiceQuestion('Question', [], 'irrelevant');
|
||||
}
|
||||
|
||||
public function testTraversableAutocomplete()
|
||||
@@ -868,11 +651,11 @@ class QuestionHelperTest extends AbstractQuestionHelperTest
|
||||
$inputStream = $this->getInputStream("Acm\nAc\177\177s\tTest\n\n\033[A\033[A\n\033[A\033[A\033[A\033[A\033[A\tTest\n\033[B\nS\177\177\033[B\033[B\nF00\177\177oo\t\n");
|
||||
|
||||
$dialog = new QuestionHelper();
|
||||
$helperSet = new HelperSet(array(new FormatterHelper()));
|
||||
$helperSet = new HelperSet([new FormatterHelper()]);
|
||||
$dialog->setHelperSet($helperSet);
|
||||
|
||||
$question = new Question('Please select a bundle', 'FrameworkBundle');
|
||||
$question->setAutocompleterValues(new AutocompleteValues(array('irrelevant' => 'AcmeDemoBundle', 'AsseticBundle', 'SecurityBundle', 'FooBundle')));
|
||||
$question->setAutocompleterValues(new AutocompleteValues(['irrelevant' => 'AcmeDemoBundle', 'AsseticBundle', 'SecurityBundle', 'FooBundle']));
|
||||
|
||||
$this->assertEquals('AcmeDemoBundle', $dialog->ask($this->createStreamableInputInterfaceMock($inputStream), $this->createOutputInterface(), $question));
|
||||
$this->assertEquals('AsseticBundleTest', $dialog->ask($this->createStreamableInputInterfaceMock($inputStream), $this->createOutputInterface(), $question));
|
||||
@@ -884,6 +667,37 @@ class QuestionHelperTest extends AbstractQuestionHelperTest
|
||||
$this->assertEquals('FooBundle', $dialog->ask($this->createStreamableInputInterfaceMock($inputStream), $this->createOutputInterface(), $question));
|
||||
}
|
||||
|
||||
public function testTraversableMultiselectAutocomplete()
|
||||
{
|
||||
// <NEWLINE>
|
||||
// F<TAB><NEWLINE>
|
||||
// A<3x UP ARROW><TAB>,F<TAB><NEWLINE>
|
||||
// F00<BACKSPACE><BACKSPACE>o<TAB>,A<DOWN ARROW>,<SPACE>SecurityBundle<NEWLINE>
|
||||
// Acme<TAB>,<SPACE>As<TAB><29x BACKSPACE>S<TAB><NEWLINE>
|
||||
// Ac<TAB>,As<TAB><3x BACKSPACE>d<TAB><NEWLINE>
|
||||
$inputStream = $this->getInputStream("\nF\t\nA\033[A\033[A\033[A\t,F\t\nF00\177\177o\t,A\033[B\t, SecurityBundle\nAcme\t, As\t\177\177\177\177\177\177\177\177\177\177\177\177\177\177\177\177\177\177\177\177\177\177\177\177\177\177\177\177\177S\t\nAc\t,As\t\177\177\177d\t\n");
|
||||
|
||||
$dialog = new QuestionHelper();
|
||||
$helperSet = new HelperSet([new FormatterHelper()]);
|
||||
$dialog->setHelperSet($helperSet);
|
||||
|
||||
$question = new ChoiceQuestion(
|
||||
'Please select a bundle (defaults to AcmeDemoBundle and AsseticBundle)',
|
||||
['AcmeDemoBundle', 'AsseticBundle', 'SecurityBundle', 'FooBundle'],
|
||||
'0,1'
|
||||
);
|
||||
|
||||
// This tests that autocomplete works for all multiselect choices entered by the user
|
||||
$question->setMultiselect(true);
|
||||
|
||||
$this->assertEquals(['AcmeDemoBundle', 'AsseticBundle'], $dialog->ask($this->createStreamableInputInterfaceMock($inputStream), $this->createOutputInterface(), $question));
|
||||
$this->assertEquals(['FooBundle'], $dialog->ask($this->createStreamableInputInterfaceMock($inputStream), $this->createOutputInterface(), $question));
|
||||
$this->assertEquals(['AsseticBundle', 'FooBundle'], $dialog->ask($this->createStreamableInputInterfaceMock($inputStream), $this->createOutputInterface(), $question));
|
||||
$this->assertEquals(['FooBundle', 'AsseticBundle', 'SecurityBundle'], $dialog->ask($this->createStreamableInputInterfaceMock($inputStream), $this->createOutputInterface(), $question));
|
||||
$this->assertEquals(['SecurityBundle'], $dialog->ask($this->createStreamableInputInterfaceMock($inputStream), $this->createOutputInterface(), $question));
|
||||
$this->assertEquals(['AcmeDemoBundle', 'AsseticBundle'], $dialog->ask($this->createStreamableInputInterfaceMock($inputStream), $this->createOutputInterface(), $question));
|
||||
}
|
||||
|
||||
protected function getInputStream($input)
|
||||
{
|
||||
$stream = fopen('php://memory', 'r+', false);
|
||||
@@ -903,7 +717,7 @@ class QuestionHelperTest extends AbstractQuestionHelperTest
|
||||
$mock = $this->getMockBuilder('Symfony\Component\Console\Input\InputInterface')->getMock();
|
||||
$mock->expects($this->any())
|
||||
->method('isInteractive')
|
||||
->will($this->returnValue($interactive));
|
||||
->willReturn($interactive);
|
||||
|
||||
return $mock;
|
||||
}
|
||||
|
||||
@@ -6,8 +6,8 @@ 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\Question;
|
||||
use Symfony\Component\Console\Question\ChoiceQuestion;
|
||||
use Symfony\Component\Console\Question\Question;
|
||||
|
||||
/**
|
||||
* @group tty
|
||||
@@ -18,10 +18,10 @@ class SymfonyQuestionHelperTest extends AbstractQuestionHelperTest
|
||||
{
|
||||
$questionHelper = new SymfonyQuestionHelper();
|
||||
|
||||
$helperSet = new HelperSet(array(new FormatterHelper()));
|
||||
$helperSet = new HelperSet([new FormatterHelper()]);
|
||||
$questionHelper->setHelperSet($helperSet);
|
||||
|
||||
$heroes = array('Superman', 'Batman', 'Spiderman');
|
||||
$heroes = ['Superman', 'Batman', 'Spiderman'];
|
||||
|
||||
$inputStream = $this->getInputStream("\n1\n 1 \nFabien\n1\nFabien\n1\n0,2\n 0 , 2 \n\n\n");
|
||||
|
||||
@@ -55,25 +55,37 @@ class SymfonyQuestionHelperTest extends AbstractQuestionHelperTest
|
||||
$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));
|
||||
$this->assertEquals(['Batman'], $questionHelper->ask($this->createStreamableInputInterfaceMock($inputStream), $this->createOutputInterface(), $question));
|
||||
$this->assertEquals(['Superman', 'Spiderman'], $questionHelper->ask($this->createStreamableInputInterfaceMock($inputStream), $this->createOutputInterface(), $question));
|
||||
$this->assertEquals(['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->assertEquals(['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->assertEquals(['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([new FormatterHelper()]);
|
||||
$questionHelper->setHelperSet($helperSet);
|
||||
$question = new ChoiceQuestion('What is your favorite superhero?', ['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();
|
||||
@@ -112,7 +124,7 @@ class SymfonyQuestionHelperTest extends AbstractQuestionHelperTest
|
||||
|
||||
/**
|
||||
* @expectedException \Symfony\Component\Console\Exception\RuntimeException
|
||||
* @expectedExceptionMessage Aborted
|
||||
* @expectedExceptionMessage Aborted.
|
||||
*/
|
||||
public function testAskThrowsExceptionOnMissingInput()
|
||||
{
|
||||
@@ -142,7 +154,7 @@ class SymfonyQuestionHelperTest extends AbstractQuestionHelperTest
|
||||
$mock = $this->getMockBuilder('Symfony\Component\Console\Input\InputInterface')->getMock();
|
||||
$mock->expects($this->any())
|
||||
->method('isInteractive')
|
||||
->will($this->returnValue($interactive));
|
||||
->willReturn($interactive);
|
||||
|
||||
return $mock;
|
||||
}
|
||||
|
||||
837
vendor/symfony/console/Tests/Helper/TableTest.php
vendored
837
vendor/symfony/console/Tests/Helper/TableTest.php
vendored
File diff suppressed because it is too large
Load Diff
500
vendor/symfony/console/Tests/Input/ArgvInputTest.php
vendored
500
vendor/symfony/console/Tests/Input/ArgvInputTest.php
vendored
@@ -13,31 +13,31 @@ namespace Symfony\Component\Console\Tests\Input;
|
||||
|
||||
use PHPUnit\Framework\TestCase;
|
||||
use Symfony\Component\Console\Input\ArgvInput;
|
||||
use Symfony\Component\Console\Input\InputDefinition;
|
||||
use Symfony\Component\Console\Input\InputArgument;
|
||||
use Symfony\Component\Console\Input\InputDefinition;
|
||||
use Symfony\Component\Console\Input\InputOption;
|
||||
|
||||
class ArgvInputTest extends TestCase
|
||||
{
|
||||
public function testConstructor()
|
||||
{
|
||||
$_SERVER['argv'] = array('cli.php', 'foo');
|
||||
$_SERVER['argv'] = ['cli.php', 'foo'];
|
||||
$input = new ArgvInput();
|
||||
$r = new \ReflectionObject($input);
|
||||
$p = $r->getProperty('tokens');
|
||||
$p->setAccessible(true);
|
||||
|
||||
$this->assertEquals(array('foo'), $p->getValue($input), '__construct() automatically get its input from the argv server variable');
|
||||
$this->assertEquals(['foo'], $p->getValue($input), '__construct() automatically get its input from the argv server variable');
|
||||
}
|
||||
|
||||
public function testParseArguments()
|
||||
{
|
||||
$input = new ArgvInput(array('cli.php', 'foo'));
|
||||
$input->bind(new InputDefinition(array(new InputArgument('name'))));
|
||||
$this->assertEquals(array('name' => 'foo'), $input->getArguments(), '->parse() parses required arguments');
|
||||
$input = new ArgvInput(['cli.php', 'foo']);
|
||||
$input->bind(new InputDefinition([new InputArgument('name')]));
|
||||
$this->assertEquals(['name' => 'foo'], $input->getArguments(), '->parse() parses required arguments');
|
||||
|
||||
$input->bind(new InputDefinition(array(new InputArgument('name'))));
|
||||
$this->assertEquals(array('name' => 'foo'), $input->getArguments(), '->parse() is stateless');
|
||||
$input->bind(new InputDefinition([new InputArgument('name')]));
|
||||
$this->assertEquals(['name' => 'foo'], $input->getArguments(), '->parse() is stateless');
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -53,128 +53,128 @@ class ArgvInputTest extends TestCase
|
||||
|
||||
public function provideOptions()
|
||||
{
|
||||
return array(
|
||||
array(
|
||||
array('cli.php', '--foo'),
|
||||
array(new InputOption('foo')),
|
||||
array('foo' => true),
|
||||
return [
|
||||
[
|
||||
['cli.php', '--foo'],
|
||||
[new InputOption('foo')],
|
||||
['foo' => true],
|
||||
'->parse() parses long options without a value',
|
||||
),
|
||||
array(
|
||||
array('cli.php', '--foo=bar'),
|
||||
array(new InputOption('foo', 'f', InputOption::VALUE_REQUIRED)),
|
||||
array('foo' => 'bar'),
|
||||
],
|
||||
[
|
||||
['cli.php', '--foo=bar'],
|
||||
[new InputOption('foo', 'f', InputOption::VALUE_REQUIRED)],
|
||||
['foo' => 'bar'],
|
||||
'->parse() parses long options with a required value (with a = separator)',
|
||||
),
|
||||
array(
|
||||
array('cli.php', '--foo', 'bar'),
|
||||
array(new InputOption('foo', 'f', InputOption::VALUE_REQUIRED)),
|
||||
array('foo' => 'bar'),
|
||||
],
|
||||
[
|
||||
['cli.php', '--foo', 'bar'],
|
||||
[new InputOption('foo', 'f', InputOption::VALUE_REQUIRED)],
|
||||
['foo' => 'bar'],
|
||||
'->parse() parses long options with a required value (with a space separator)',
|
||||
),
|
||||
array(
|
||||
array('cli.php', '--foo='),
|
||||
array(new InputOption('foo', 'f', InputOption::VALUE_OPTIONAL)),
|
||||
array('foo' => ''),
|
||||
],
|
||||
[
|
||||
['cli.php', '--foo='],
|
||||
[new InputOption('foo', 'f', InputOption::VALUE_OPTIONAL)],
|
||||
['foo' => ''],
|
||||
'->parse() parses long options with optional value which is empty (with a = separator) as empty string',
|
||||
),
|
||||
array(
|
||||
array('cli.php', '--foo=', 'bar'),
|
||||
array(new InputOption('foo', 'f', InputOption::VALUE_OPTIONAL), new InputArgument('name', InputArgument::REQUIRED)),
|
||||
array('foo' => ''),
|
||||
],
|
||||
[
|
||||
['cli.php', '--foo=', 'bar'],
|
||||
[new InputOption('foo', 'f', InputOption::VALUE_OPTIONAL), new InputArgument('name', InputArgument::REQUIRED)],
|
||||
['foo' => ''],
|
||||
'->parse() parses long options with optional value without value specified or an empty string (with a = separator) followed by an argument as empty string',
|
||||
),
|
||||
array(
|
||||
array('cli.php', 'bar', '--foo'),
|
||||
array(new InputOption('foo', 'f', InputOption::VALUE_OPTIONAL), new InputArgument('name', InputArgument::REQUIRED)),
|
||||
array('foo' => null),
|
||||
],
|
||||
[
|
||||
['cli.php', 'bar', '--foo'],
|
||||
[new InputOption('foo', 'f', InputOption::VALUE_OPTIONAL), new InputArgument('name', InputArgument::REQUIRED)],
|
||||
['foo' => null],
|
||||
'->parse() parses long options with optional value which is empty (with a = separator) preceded by an argument',
|
||||
),
|
||||
array(
|
||||
array('cli.php', '--foo', '', 'bar'),
|
||||
array(new InputOption('foo', 'f', InputOption::VALUE_OPTIONAL), new InputArgument('name', InputArgument::REQUIRED)),
|
||||
array('foo' => ''),
|
||||
],
|
||||
[
|
||||
['cli.php', '--foo', '', 'bar'],
|
||||
[new InputOption('foo', 'f', InputOption::VALUE_OPTIONAL), new InputArgument('name', InputArgument::REQUIRED)],
|
||||
['foo' => ''],
|
||||
'->parse() parses long options with optional value which is empty as empty string even followed by an argument',
|
||||
),
|
||||
array(
|
||||
array('cli.php', '--foo'),
|
||||
array(new InputOption('foo', 'f', InputOption::VALUE_OPTIONAL)),
|
||||
array('foo' => null),
|
||||
],
|
||||
[
|
||||
['cli.php', '--foo'],
|
||||
[new InputOption('foo', 'f', InputOption::VALUE_OPTIONAL)],
|
||||
['foo' => null],
|
||||
'->parse() parses long options with optional value specified with no separator and no value as null',
|
||||
),
|
||||
array(
|
||||
array('cli.php', '-f'),
|
||||
array(new InputOption('foo', 'f')),
|
||||
array('foo' => true),
|
||||
],
|
||||
[
|
||||
['cli.php', '-f'],
|
||||
[new InputOption('foo', 'f')],
|
||||
['foo' => true],
|
||||
'->parse() parses short options without a value',
|
||||
),
|
||||
array(
|
||||
array('cli.php', '-fbar'),
|
||||
array(new InputOption('foo', 'f', InputOption::VALUE_REQUIRED)),
|
||||
array('foo' => 'bar'),
|
||||
],
|
||||
[
|
||||
['cli.php', '-fbar'],
|
||||
[new InputOption('foo', 'f', InputOption::VALUE_REQUIRED)],
|
||||
['foo' => 'bar'],
|
||||
'->parse() parses short options with a required value (with no separator)',
|
||||
),
|
||||
array(
|
||||
array('cli.php', '-f', 'bar'),
|
||||
array(new InputOption('foo', 'f', InputOption::VALUE_REQUIRED)),
|
||||
array('foo' => 'bar'),
|
||||
],
|
||||
[
|
||||
['cli.php', '-f', 'bar'],
|
||||
[new InputOption('foo', 'f', InputOption::VALUE_REQUIRED)],
|
||||
['foo' => 'bar'],
|
||||
'->parse() parses short options with a required value (with a space separator)',
|
||||
),
|
||||
array(
|
||||
array('cli.php', '-f', ''),
|
||||
array(new InputOption('foo', 'f', InputOption::VALUE_OPTIONAL)),
|
||||
array('foo' => ''),
|
||||
],
|
||||
[
|
||||
['cli.php', '-f', ''],
|
||||
[new InputOption('foo', 'f', InputOption::VALUE_OPTIONAL)],
|
||||
['foo' => ''],
|
||||
'->parse() parses short options with an optional empty value',
|
||||
),
|
||||
array(
|
||||
array('cli.php', '-f', '', 'foo'),
|
||||
array(new InputArgument('name'), new InputOption('foo', 'f', InputOption::VALUE_OPTIONAL)),
|
||||
array('foo' => ''),
|
||||
],
|
||||
[
|
||||
['cli.php', '-f', '', 'foo'],
|
||||
[new InputArgument('name'), new InputOption('foo', 'f', InputOption::VALUE_OPTIONAL)],
|
||||
['foo' => ''],
|
||||
'->parse() parses short options with an optional empty value followed by an argument',
|
||||
),
|
||||
array(
|
||||
array('cli.php', '-f', '', '-b'),
|
||||
array(new InputOption('foo', 'f', InputOption::VALUE_OPTIONAL), new InputOption('bar', 'b')),
|
||||
array('foo' => '', 'bar' => true),
|
||||
],
|
||||
[
|
||||
['cli.php', '-f', '', '-b'],
|
||||
[new InputOption('foo', 'f', InputOption::VALUE_OPTIONAL), new InputOption('bar', 'b')],
|
||||
['foo' => '', 'bar' => true],
|
||||
'->parse() parses short options with an optional empty value followed by an option',
|
||||
),
|
||||
array(
|
||||
array('cli.php', '-f', '-b', 'foo'),
|
||||
array(new InputArgument('name'), new InputOption('foo', 'f', InputOption::VALUE_OPTIONAL), new InputOption('bar', 'b')),
|
||||
array('foo' => null, 'bar' => true),
|
||||
],
|
||||
[
|
||||
['cli.php', '-f', '-b', 'foo'],
|
||||
[new InputArgument('name'), new InputOption('foo', 'f', InputOption::VALUE_OPTIONAL), new InputOption('bar', 'b')],
|
||||
['foo' => null, 'bar' => true],
|
||||
'->parse() parses short options with an optional value which is not present',
|
||||
),
|
||||
array(
|
||||
array('cli.php', '-fb'),
|
||||
array(new InputOption('foo', 'f'), new InputOption('bar', 'b')),
|
||||
array('foo' => true, 'bar' => true),
|
||||
],
|
||||
[
|
||||
['cli.php', '-fb'],
|
||||
[new InputOption('foo', 'f'), new InputOption('bar', 'b')],
|
||||
['foo' => true, 'bar' => true],
|
||||
'->parse() parses short options when they are aggregated as a single one',
|
||||
),
|
||||
array(
|
||||
array('cli.php', '-fb', 'bar'),
|
||||
array(new InputOption('foo', 'f'), new InputOption('bar', 'b', InputOption::VALUE_REQUIRED)),
|
||||
array('foo' => true, 'bar' => 'bar'),
|
||||
],
|
||||
[
|
||||
['cli.php', '-fb', 'bar'],
|
||||
[new InputOption('foo', 'f'), new InputOption('bar', 'b', InputOption::VALUE_REQUIRED)],
|
||||
['foo' => true, 'bar' => 'bar'],
|
||||
'->parse() parses short options when they are aggregated as a single one and the last one has a required value',
|
||||
),
|
||||
array(
|
||||
array('cli.php', '-fb', 'bar'),
|
||||
array(new InputOption('foo', 'f'), new InputOption('bar', 'b', InputOption::VALUE_OPTIONAL)),
|
||||
array('foo' => true, 'bar' => 'bar'),
|
||||
],
|
||||
[
|
||||
['cli.php', '-fb', 'bar'],
|
||||
[new InputOption('foo', 'f'), new InputOption('bar', 'b', InputOption::VALUE_OPTIONAL)],
|
||||
['foo' => true, 'bar' => 'bar'],
|
||||
'->parse() parses short options when they are aggregated as a single one and the last one has an optional value',
|
||||
),
|
||||
array(
|
||||
array('cli.php', '-fbbar'),
|
||||
array(new InputOption('foo', 'f'), new InputOption('bar', 'b', InputOption::VALUE_OPTIONAL)),
|
||||
array('foo' => true, 'bar' => 'bar'),
|
||||
],
|
||||
[
|
||||
['cli.php', '-fbbar'],
|
||||
[new InputOption('foo', 'f'), new InputOption('bar', 'b', InputOption::VALUE_OPTIONAL)],
|
||||
['foo' => true, 'bar' => 'bar'],
|
||||
'->parse() parses short options when they are aggregated as a single one and the last one has an optional value with no separator',
|
||||
),
|
||||
array(
|
||||
array('cli.php', '-fbbar'),
|
||||
array(new InputOption('foo', 'f', InputOption::VALUE_OPTIONAL), new InputOption('bar', 'b', InputOption::VALUE_OPTIONAL)),
|
||||
array('foo' => 'bbar', 'bar' => null),
|
||||
],
|
||||
[
|
||||
['cli.php', '-fbbar'],
|
||||
[new InputOption('foo', 'f', InputOption::VALUE_OPTIONAL), new InputOption('bar', 'b', InputOption::VALUE_OPTIONAL)],
|
||||
['foo' => 'bbar', 'bar' => null],
|
||||
'->parse() parses short options when they are aggregated as a single one and one of them takes a value',
|
||||
),
|
||||
);
|
||||
],
|
||||
];
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -195,220 +195,272 @@ class ArgvInputTest extends TestCase
|
||||
|
||||
public function provideInvalidInput()
|
||||
{
|
||||
return array(
|
||||
array(
|
||||
array('cli.php', '--foo'),
|
||||
new InputDefinition(array(new InputOption('foo', 'f', InputOption::VALUE_REQUIRED))),
|
||||
return [
|
||||
[
|
||||
['cli.php', '--foo'],
|
||||
new InputDefinition([new InputOption('foo', 'f', InputOption::VALUE_REQUIRED)]),
|
||||
'The "--foo" option requires a value.',
|
||||
),
|
||||
array(
|
||||
array('cli.php', '-f'),
|
||||
new InputDefinition(array(new InputOption('foo', 'f', InputOption::VALUE_REQUIRED))),
|
||||
],
|
||||
[
|
||||
['cli.php', '-f'],
|
||||
new InputDefinition([new InputOption('foo', 'f', InputOption::VALUE_REQUIRED)]),
|
||||
'The "--foo" option requires a value.',
|
||||
),
|
||||
array(
|
||||
array('cli.php', '-ffoo'),
|
||||
new InputDefinition(array(new InputOption('foo', 'f', InputOption::VALUE_NONE))),
|
||||
],
|
||||
[
|
||||
['cli.php', '-ffoo'],
|
||||
new InputDefinition([new InputOption('foo', 'f', InputOption::VALUE_NONE)]),
|
||||
'The "-o" option does not exist.',
|
||||
),
|
||||
array(
|
||||
array('cli.php', '--foo=bar'),
|
||||
new InputDefinition(array(new InputOption('foo', 'f', InputOption::VALUE_NONE))),
|
||||
],
|
||||
[
|
||||
['cli.php', '--foo=bar'],
|
||||
new InputDefinition([new InputOption('foo', 'f', InputOption::VALUE_NONE)]),
|
||||
'The "--foo" option does not accept a value.',
|
||||
),
|
||||
array(
|
||||
array('cli.php', 'foo', 'bar'),
|
||||
],
|
||||
[
|
||||
['cli.php', 'foo', 'bar'],
|
||||
new InputDefinition(),
|
||||
'No arguments expected, got "foo".',
|
||||
),
|
||||
array(
|
||||
array('cli.php', 'foo', 'bar'),
|
||||
new InputDefinition(array(new InputArgument('number'))),
|
||||
],
|
||||
[
|
||||
['cli.php', 'foo', 'bar'],
|
||||
new InputDefinition([new InputArgument('number')]),
|
||||
'Too many arguments, expected arguments "number".',
|
||||
),
|
||||
array(
|
||||
array('cli.php', 'foo', 'bar', 'zzz'),
|
||||
new InputDefinition(array(new InputArgument('number'), new InputArgument('county'))),
|
||||
],
|
||||
[
|
||||
['cli.php', 'foo', 'bar', 'zzz'],
|
||||
new InputDefinition([new InputArgument('number'), new InputArgument('county')]),
|
||||
'Too many arguments, expected arguments "number" "county".',
|
||||
),
|
||||
array(
|
||||
array('cli.php', '--foo'),
|
||||
],
|
||||
[
|
||||
['cli.php', '--foo'],
|
||||
new InputDefinition(),
|
||||
'The "--foo" option does not exist.',
|
||||
),
|
||||
array(
|
||||
array('cli.php', '-f'),
|
||||
],
|
||||
[
|
||||
['cli.php', '-f'],
|
||||
new InputDefinition(),
|
||||
'The "-f" option does not exist.',
|
||||
),
|
||||
array(
|
||||
array('cli.php', '-1'),
|
||||
new InputDefinition(array(new InputArgument('number'))),
|
||||
],
|
||||
[
|
||||
['cli.php', '-1'],
|
||||
new InputDefinition([new InputArgument('number')]),
|
||||
'The "-1" option does not exist.',
|
||||
),
|
||||
);
|
||||
],
|
||||
[
|
||||
['cli.php', '-fЩ'],
|
||||
new InputDefinition([new InputOption('foo', 'f', InputOption::VALUE_NONE)]),
|
||||
'The "-Щ" option does not exist.',
|
||||
],
|
||||
];
|
||||
}
|
||||
|
||||
public function testParseArrayArgument()
|
||||
{
|
||||
$input = new ArgvInput(array('cli.php', 'foo', 'bar', 'baz', 'bat'));
|
||||
$input->bind(new InputDefinition(array(new InputArgument('name', InputArgument::IS_ARRAY))));
|
||||
$input = new ArgvInput(['cli.php', 'foo', 'bar', 'baz', 'bat']);
|
||||
$input->bind(new InputDefinition([new InputArgument('name', InputArgument::IS_ARRAY)]));
|
||||
|
||||
$this->assertEquals(array('name' => array('foo', 'bar', 'baz', 'bat')), $input->getArguments(), '->parse() parses array arguments');
|
||||
$this->assertEquals(['name' => ['foo', 'bar', 'baz', 'bat']], $input->getArguments(), '->parse() parses array arguments');
|
||||
}
|
||||
|
||||
public function testParseArrayOption()
|
||||
{
|
||||
$input = new ArgvInput(array('cli.php', '--name=foo', '--name=bar', '--name=baz'));
|
||||
$input->bind(new InputDefinition(array(new InputOption('name', null, InputOption::VALUE_OPTIONAL | InputOption::VALUE_IS_ARRAY))));
|
||||
$input = new ArgvInput(['cli.php', '--name=foo', '--name=bar', '--name=baz']);
|
||||
$input->bind(new InputDefinition([new InputOption('name', null, InputOption::VALUE_OPTIONAL | InputOption::VALUE_IS_ARRAY)]));
|
||||
|
||||
$this->assertEquals(array('name' => array('foo', 'bar', 'baz')), $input->getOptions(), '->parse() parses array options ("--option=value" syntax)');
|
||||
$this->assertEquals(['name' => ['foo', 'bar', 'baz']], $input->getOptions(), '->parse() parses array options ("--option=value" syntax)');
|
||||
|
||||
$input = new ArgvInput(array('cli.php', '--name', 'foo', '--name', 'bar', '--name', 'baz'));
|
||||
$input->bind(new InputDefinition(array(new InputOption('name', null, InputOption::VALUE_OPTIONAL | InputOption::VALUE_IS_ARRAY))));
|
||||
$this->assertEquals(array('name' => array('foo', 'bar', 'baz')), $input->getOptions(), '->parse() parses array options ("--option value" syntax)');
|
||||
$input = new ArgvInput(['cli.php', '--name', 'foo', '--name', 'bar', '--name', 'baz']);
|
||||
$input->bind(new InputDefinition([new InputOption('name', null, InputOption::VALUE_OPTIONAL | InputOption::VALUE_IS_ARRAY)]));
|
||||
$this->assertEquals(['name' => ['foo', 'bar', 'baz']], $input->getOptions(), '->parse() parses array options ("--option value" syntax)');
|
||||
|
||||
$input = new ArgvInput(array('cli.php', '--name=foo', '--name=bar', '--name='));
|
||||
$input->bind(new InputDefinition(array(new InputOption('name', null, InputOption::VALUE_OPTIONAL | InputOption::VALUE_IS_ARRAY))));
|
||||
$this->assertSame(array('name' => array('foo', 'bar', '')), $input->getOptions(), '->parse() parses empty array options as null ("--option=value" syntax)');
|
||||
$input = new ArgvInput(['cli.php', '--name=foo', '--name=bar', '--name=']);
|
||||
$input->bind(new InputDefinition([new InputOption('name', null, InputOption::VALUE_OPTIONAL | InputOption::VALUE_IS_ARRAY)]));
|
||||
$this->assertSame(['name' => ['foo', 'bar', '']], $input->getOptions(), '->parse() parses empty array options as null ("--option=value" syntax)');
|
||||
|
||||
$input = new ArgvInput(array('cli.php', '--name', 'foo', '--name', 'bar', '--name', '--anotherOption'));
|
||||
$input->bind(new InputDefinition(array(
|
||||
$input = new ArgvInput(['cli.php', '--name', 'foo', '--name', 'bar', '--name', '--anotherOption']);
|
||||
$input->bind(new InputDefinition([
|
||||
new InputOption('name', null, InputOption::VALUE_OPTIONAL | InputOption::VALUE_IS_ARRAY),
|
||||
new InputOption('anotherOption', null, InputOption::VALUE_NONE),
|
||||
)));
|
||||
$this->assertSame(array('name' => array('foo', 'bar', null), 'anotherOption' => true), $input->getOptions(), '->parse() parses empty array options ("--option value" syntax)');
|
||||
]));
|
||||
$this->assertSame(['name' => ['foo', 'bar', null], 'anotherOption' => true], $input->getOptions(), '->parse() parses empty array options ("--option value" syntax)');
|
||||
}
|
||||
|
||||
public function testParseNegativeNumberAfterDoubleDash()
|
||||
{
|
||||
$input = new ArgvInput(array('cli.php', '--', '-1'));
|
||||
$input->bind(new InputDefinition(array(new InputArgument('number'))));
|
||||
$this->assertEquals(array('number' => '-1'), $input->getArguments(), '->parse() parses arguments with leading dashes as arguments after having encountered a double-dash sequence');
|
||||
$input = new ArgvInput(['cli.php', '--', '-1']);
|
||||
$input->bind(new InputDefinition([new InputArgument('number')]));
|
||||
$this->assertEquals(['number' => '-1'], $input->getArguments(), '->parse() parses arguments with leading dashes as arguments after having encountered a double-dash sequence');
|
||||
|
||||
$input = new ArgvInput(array('cli.php', '-f', 'bar', '--', '-1'));
|
||||
$input->bind(new InputDefinition(array(new InputArgument('number'), new InputOption('foo', 'f', InputOption::VALUE_OPTIONAL))));
|
||||
$this->assertEquals(array('foo' => 'bar'), $input->getOptions(), '->parse() parses arguments with leading dashes as options before having encountered a double-dash sequence');
|
||||
$this->assertEquals(array('number' => '-1'), $input->getArguments(), '->parse() parses arguments with leading dashes as arguments after having encountered a double-dash sequence');
|
||||
$input = new ArgvInput(['cli.php', '-f', 'bar', '--', '-1']);
|
||||
$input->bind(new InputDefinition([new InputArgument('number'), new InputOption('foo', 'f', InputOption::VALUE_OPTIONAL)]));
|
||||
$this->assertEquals(['foo' => 'bar'], $input->getOptions(), '->parse() parses arguments with leading dashes as options before having encountered a double-dash sequence');
|
||||
$this->assertEquals(['number' => '-1'], $input->getArguments(), '->parse() parses arguments with leading dashes as arguments after having encountered a double-dash sequence');
|
||||
}
|
||||
|
||||
public function testParseEmptyStringArgument()
|
||||
{
|
||||
$input = new ArgvInput(array('cli.php', '-f', 'bar', ''));
|
||||
$input->bind(new InputDefinition(array(new InputArgument('empty'), new InputOption('foo', 'f', InputOption::VALUE_OPTIONAL))));
|
||||
$input = new ArgvInput(['cli.php', '-f', 'bar', '']);
|
||||
$input->bind(new InputDefinition([new InputArgument('empty'), new InputOption('foo', 'f', InputOption::VALUE_OPTIONAL)]));
|
||||
|
||||
$this->assertEquals(array('empty' => ''), $input->getArguments(), '->parse() parses empty string arguments');
|
||||
$this->assertEquals(['empty' => ''], $input->getArguments(), '->parse() parses empty string arguments');
|
||||
}
|
||||
|
||||
public function testGetFirstArgument()
|
||||
{
|
||||
$input = new ArgvInput(array('cli.php', '-fbbar'));
|
||||
$input = new ArgvInput(['cli.php', '-fbbar']);
|
||||
$this->assertNull($input->getFirstArgument(), '->getFirstArgument() returns null when there is no arguments');
|
||||
|
||||
$input = new ArgvInput(array('cli.php', '-fbbar', 'foo'));
|
||||
$input = new ArgvInput(['cli.php', '-fbbar', 'foo']);
|
||||
$this->assertEquals('foo', $input->getFirstArgument(), '->getFirstArgument() returns the first argument from the raw input');
|
||||
|
||||
$input = new ArgvInput(['cli.php', '--foo', 'fooval', 'bar']);
|
||||
$input->bind(new InputDefinition([new InputOption('foo', 'f', InputOption::VALUE_OPTIONAL), new InputArgument('arg')]));
|
||||
$this->assertSame('bar', $input->getFirstArgument());
|
||||
|
||||
$input = new ArgvInput(['cli.php', '-bf', 'fooval', 'argval']);
|
||||
$input->bind(new InputDefinition([new InputOption('bar', 'b', InputOption::VALUE_NONE), new InputOption('foo', 'f', InputOption::VALUE_OPTIONAL), new InputArgument('arg')]));
|
||||
$this->assertSame('argval', $input->getFirstArgument());
|
||||
}
|
||||
|
||||
public function testHasParameterOption()
|
||||
{
|
||||
$input = new ArgvInput(array('cli.php', '-f', 'foo'));
|
||||
$input = new ArgvInput(['cli.php', '-f', 'foo']);
|
||||
$this->assertTrue($input->hasParameterOption('-f'), '->hasParameterOption() returns true if the given short option is in the raw input');
|
||||
|
||||
$input = new ArgvInput(array('cli.php', '-fh'));
|
||||
$this->assertTrue($input->hasParameterOption('-fh'), '->hasParameterOption() returns true if the given short option is in the raw input');
|
||||
|
||||
$input = new ArgvInput(array('cli.php', '-e=test'));
|
||||
$input = new ArgvInput(['cli.php', '-etest']);
|
||||
$this->assertTrue($input->hasParameterOption('-e'), '->hasParameterOption() returns true if the given short option is in the raw input');
|
||||
$this->assertFalse($input->hasParameterOption('-s'), '->hasParameterOption() returns true if the given short option is in the raw input');
|
||||
|
||||
$input = new ArgvInput(array('cli.php', '--foo', 'foo'));
|
||||
$input = new ArgvInput(['cli.php', '--foo', 'foo']);
|
||||
$this->assertTrue($input->hasParameterOption('--foo'), '->hasParameterOption() returns true if the given short option is in the raw input');
|
||||
|
||||
$input = new ArgvInput(array('cli.php', 'foo'));
|
||||
$input = new ArgvInput(['cli.php', 'foo']);
|
||||
$this->assertFalse($input->hasParameterOption('--foo'), '->hasParameterOption() returns false if the given short option is not in the raw input');
|
||||
|
||||
$input = new ArgvInput(array('cli.php', '--foo=bar'));
|
||||
$input = new ArgvInput(['cli.php', '--foo=bar']);
|
||||
$this->assertTrue($input->hasParameterOption('--foo'), '->hasParameterOption() returns true if the given option with provided value is in the raw input');
|
||||
}
|
||||
|
||||
public function testHasParameterOptionOnlyOptions()
|
||||
{
|
||||
$input = new ArgvInput(array('cli.php', '-f', 'foo'));
|
||||
$input = new ArgvInput(['cli.php', '-f', 'foo']);
|
||||
$this->assertTrue($input->hasParameterOption('-f', true), '->hasParameterOption() returns true if the given short option is in the raw input');
|
||||
|
||||
$input = new ArgvInput(array('cli.php', '--foo', '--', 'foo'));
|
||||
$input = new ArgvInput(['cli.php', '--foo', '--', 'foo']);
|
||||
$this->assertTrue($input->hasParameterOption('--foo', true), '->hasParameterOption() returns true if the given long option is in the raw input');
|
||||
|
||||
$input = new ArgvInput(array('cli.php', '--foo=bar', 'foo'));
|
||||
$input = new ArgvInput(['cli.php', '--foo=bar', 'foo']);
|
||||
$this->assertTrue($input->hasParameterOption('--foo', true), '->hasParameterOption() returns true if the given long option with provided value is in the raw input');
|
||||
|
||||
$input = new ArgvInput(array('cli.php', '--', '--foo'));
|
||||
$input = new ArgvInput(['cli.php', '--', '--foo']);
|
||||
$this->assertFalse($input->hasParameterOption('--foo', true), '->hasParameterOption() returns false if the given option is in the raw input but after an end of options signal');
|
||||
}
|
||||
|
||||
public function testHasParameterOptionEdgeCasesAndLimitations()
|
||||
{
|
||||
$input = new ArgvInput(['cli.php', '-fh']);
|
||||
// hasParameterOption does not know if the previous short option, -f,
|
||||
// takes a value or not. If -f takes a value, then -fh does NOT include
|
||||
// -h; Otherwise it does. Since we do not know which short options take
|
||||
// values, hasParameterOption does not support this use-case.
|
||||
$this->assertFalse($input->hasParameterOption('-h'), '->hasParameterOption() returns true if the given short option is in the raw input');
|
||||
// hasParameterOption does detect that `-fh` contains `-f`, since
|
||||
// `-f` is the first short option in the set.
|
||||
$this->assertTrue($input->hasParameterOption('-f'), '->hasParameterOption() returns true if the given short option is in the raw input');
|
||||
// The test below happens to pass, although it might make more sense
|
||||
// to disallow it, and require the use of
|
||||
// $input->hasParameterOption('-f') && $input->hasParameterOption('-h')
|
||||
// instead.
|
||||
$this->assertTrue($input->hasParameterOption('-fh'), '->hasParameterOption() returns true if the given short option is in the raw input');
|
||||
// In theory, if -fh is supported, then -hf should also work.
|
||||
// However, this is not supported.
|
||||
$this->assertFalse($input->hasParameterOption('-hf'), '->hasParameterOption() returns true if the given short option is in the raw input');
|
||||
|
||||
$input = new ArgvInput(['cli.php', '-f', '-h']);
|
||||
// If hasParameterOption('-fh') is supported for 'cli.php -fh', then
|
||||
// one might also expect that it should also be supported for
|
||||
// 'cli.php -f -h'. However, this is not supported.
|
||||
$this->assertFalse($input->hasParameterOption('-fh'), '->hasParameterOption() returns true if the given short option is in the raw input');
|
||||
}
|
||||
|
||||
public function testNoWarningOnInvalidParameterOption()
|
||||
{
|
||||
$input = new ArgvInput(['cli.php', '-edev']);
|
||||
|
||||
$this->assertTrue($input->hasParameterOption(['-e', '']));
|
||||
// No warning thrown
|
||||
$this->assertFalse($input->hasParameterOption(['-m', '']));
|
||||
|
||||
$this->assertEquals('dev', $input->getParameterOption(['-e', '']));
|
||||
// No warning thrown
|
||||
$this->assertFalse($input->getParameterOption(['-m', '']));
|
||||
}
|
||||
|
||||
public function testToString()
|
||||
{
|
||||
$input = new ArgvInput(array('cli.php', '-f', 'foo'));
|
||||
$input = new ArgvInput(['cli.php', '-f', 'foo']);
|
||||
$this->assertEquals('-f foo', (string) $input);
|
||||
|
||||
$input = new ArgvInput(array('cli.php', '-f', '--bar=foo', 'a b c d', "A\nB'C"));
|
||||
$input = new ArgvInput(['cli.php', '-f', '--bar=foo', 'a b c d', "A\nB'C"]);
|
||||
$this->assertEquals('-f --bar=foo '.escapeshellarg('a b c d').' '.escapeshellarg("A\nB'C"), (string) $input);
|
||||
}
|
||||
|
||||
/**
|
||||
* @dataProvider provideGetParameterOptionValues
|
||||
*/
|
||||
public function testGetParameterOptionEqualSign($argv, $key, $onlyParams, $expected)
|
||||
public function testGetParameterOptionEqualSign($argv, $key, $default, $onlyParams, $expected)
|
||||
{
|
||||
$input = new ArgvInput($argv);
|
||||
$this->assertEquals($expected, $input->getParameterOption($key, false, $onlyParams), '->getParameterOption() returns the expected value');
|
||||
$this->assertEquals($expected, $input->getParameterOption($key, $default, $onlyParams), '->getParameterOption() returns the expected value');
|
||||
}
|
||||
|
||||
public function provideGetParameterOptionValues()
|
||||
{
|
||||
return array(
|
||||
array(array('app/console', 'foo:bar', '-e', 'dev'), '-e', false, 'dev'),
|
||||
array(array('app/console', 'foo:bar', '--env=dev'), '--env', false, 'dev'),
|
||||
array(array('app/console', 'foo:bar', '-e', 'dev'), array('-e', '--env'), false, 'dev'),
|
||||
array(array('app/console', 'foo:bar', '--env=dev'), array('-e', '--env'), false, 'dev'),
|
||||
array(array('app/console', 'foo:bar', '--env=dev', '--en=1'), array('--en'), false, '1'),
|
||||
array(array('app/console', 'foo:bar', '--env=dev', '', '--en=1'), array('--en'), false, '1'),
|
||||
array(array('app/console', 'foo:bar', '--env', 'val'), '--env', false, 'val'),
|
||||
array(array('app/console', 'foo:bar', '--env', 'val', '--dummy'), '--env', false, 'val'),
|
||||
array(array('app/console', 'foo:bar', '--', '--env=dev'), '--env', false, 'dev'),
|
||||
array(array('app/console', 'foo:bar', '--', '--env=dev'), '--env', true, false),
|
||||
);
|
||||
return [
|
||||
[['app/console', 'foo:bar'], '-e', 'default', false, 'default'],
|
||||
[['app/console', 'foo:bar', '-e', 'dev'], '-e', 'default', false, 'dev'],
|
||||
[['app/console', 'foo:bar', '--env=dev'], '--env', 'default', false, 'dev'],
|
||||
[['app/console', 'foo:bar', '-e', 'dev'], ['-e', '--env'], 'default', false, 'dev'],
|
||||
[['app/console', 'foo:bar', '--env=dev'], ['-e', '--env'], 'default', false, 'dev'],
|
||||
[['app/console', 'foo:bar', '--env=dev', '--en=1'], ['--en'], 'default', false, '1'],
|
||||
[['app/console', 'foo:bar', '--env=dev', '', '--en=1'], ['--en'], 'default', false, '1'],
|
||||
[['app/console', 'foo:bar', '--env', 'val'], '--env', 'default', false, 'val'],
|
||||
[['app/console', 'foo:bar', '--env', 'val', '--dummy'], '--env', 'default', false, 'val'],
|
||||
[['app/console', 'foo:bar', '--', '--env=dev'], '--env', 'default', false, 'dev'],
|
||||
[['app/console', 'foo:bar', '--', '--env=dev'], '--env', 'default', true, 'default'],
|
||||
];
|
||||
}
|
||||
|
||||
public function testParseSingleDashAsArgument()
|
||||
{
|
||||
$input = new ArgvInput(array('cli.php', '-'));
|
||||
$input->bind(new InputDefinition(array(new InputArgument('file'))));
|
||||
$this->assertEquals(array('file' => '-'), $input->getArguments(), '->parse() parses single dash as an argument');
|
||||
$input = new ArgvInput(['cli.php', '-']);
|
||||
$input->bind(new InputDefinition([new InputArgument('file')]));
|
||||
$this->assertEquals(['file' => '-'], $input->getArguments(), '->parse() parses single dash as an argument');
|
||||
}
|
||||
|
||||
public function testParseOptionWithValueOptionalGivenEmptyAndRequiredArgument()
|
||||
{
|
||||
$input = new ArgvInput(array('cli.php', '--foo=', 'bar'));
|
||||
$input->bind(new InputDefinition(array(new InputOption('foo', 'f', InputOption::VALUE_OPTIONAL), new InputArgument('name', InputArgument::REQUIRED))));
|
||||
$this->assertEquals(array('foo' => null), $input->getOptions(), '->parse() parses optional options with empty value as null');
|
||||
$this->assertEquals(array('name' => 'bar'), $input->getArguments(), '->parse() parses required arguments');
|
||||
$input = new ArgvInput(['cli.php', '--foo=', 'bar']);
|
||||
$input->bind(new InputDefinition([new InputOption('foo', 'f', InputOption::VALUE_OPTIONAL), new InputArgument('name', InputArgument::REQUIRED)]));
|
||||
$this->assertEquals(['foo' => null], $input->getOptions(), '->parse() parses optional options with empty value as null');
|
||||
$this->assertEquals(['name' => 'bar'], $input->getArguments(), '->parse() parses required arguments');
|
||||
|
||||
$input = new ArgvInput(array('cli.php', '--foo=0', 'bar'));
|
||||
$input->bind(new InputDefinition(array(new InputOption('foo', 'f', InputOption::VALUE_OPTIONAL), new InputArgument('name', InputArgument::REQUIRED))));
|
||||
$this->assertEquals(array('foo' => '0'), $input->getOptions(), '->parse() parses optional options with empty value as null');
|
||||
$this->assertEquals(array('name' => 'bar'), $input->getArguments(), '->parse() parses required arguments');
|
||||
$input = new ArgvInput(['cli.php', '--foo=0', 'bar']);
|
||||
$input->bind(new InputDefinition([new InputOption('foo', 'f', InputOption::VALUE_OPTIONAL), new InputArgument('name', InputArgument::REQUIRED)]));
|
||||
$this->assertEquals(['foo' => '0'], $input->getOptions(), '->parse() parses optional options with empty value as null');
|
||||
$this->assertEquals(['name' => 'bar'], $input->getArguments(), '->parse() parses required arguments');
|
||||
}
|
||||
|
||||
public function testParseOptionWithValueOptionalGivenEmptyAndOptionalArgument()
|
||||
{
|
||||
$input = new ArgvInput(array('cli.php', '--foo=', 'bar'));
|
||||
$input->bind(new InputDefinition(array(new InputOption('foo', 'f', InputOption::VALUE_OPTIONAL), new InputArgument('name', InputArgument::OPTIONAL))));
|
||||
$this->assertEquals(array('foo' => null), $input->getOptions(), '->parse() parses optional options with empty value as null');
|
||||
$this->assertEquals(array('name' => 'bar'), $input->getArguments(), '->parse() parses optional arguments');
|
||||
$input = new ArgvInput(['cli.php', '--foo=', 'bar']);
|
||||
$input->bind(new InputDefinition([new InputOption('foo', 'f', InputOption::VALUE_OPTIONAL), new InputArgument('name', InputArgument::OPTIONAL)]));
|
||||
$this->assertEquals(['foo' => null], $input->getOptions(), '->parse() parses optional options with empty value as null');
|
||||
$this->assertEquals(['name' => 'bar'], $input->getArguments(), '->parse() parses optional arguments');
|
||||
|
||||
$input = new ArgvInput(array('cli.php', '--foo=0', 'bar'));
|
||||
$input->bind(new InputDefinition(array(new InputOption('foo', 'f', InputOption::VALUE_OPTIONAL), new InputArgument('name', InputArgument::OPTIONAL))));
|
||||
$this->assertEquals(array('foo' => '0'), $input->getOptions(), '->parse() parses optional options with empty value as null');
|
||||
$this->assertEquals(array('name' => 'bar'), $input->getArguments(), '->parse() parses optional arguments');
|
||||
$input = new ArgvInput(['cli.php', '--foo=0', 'bar']);
|
||||
$input->bind(new InputDefinition([new InputOption('foo', 'f', InputOption::VALUE_OPTIONAL), new InputArgument('name', InputArgument::OPTIONAL)]));
|
||||
$this->assertEquals(['foo' => '0'], $input->getOptions(), '->parse() parses optional options with empty value as null');
|
||||
$this->assertEquals(['name' => 'bar'], $input->getArguments(), '->parse() parses optional arguments');
|
||||
}
|
||||
}
|
||||
|
||||
@@ -13,55 +13,55 @@ namespace Symfony\Component\Console\Tests\Input;
|
||||
|
||||
use PHPUnit\Framework\TestCase;
|
||||
use Symfony\Component\Console\Input\ArrayInput;
|
||||
use Symfony\Component\Console\Input\InputDefinition;
|
||||
use Symfony\Component\Console\Input\InputArgument;
|
||||
use Symfony\Component\Console\Input\InputDefinition;
|
||||
use Symfony\Component\Console\Input\InputOption;
|
||||
|
||||
class ArrayInputTest extends TestCase
|
||||
{
|
||||
public function testGetFirstArgument()
|
||||
{
|
||||
$input = new ArrayInput(array());
|
||||
$input = new ArrayInput([]);
|
||||
$this->assertNull($input->getFirstArgument(), '->getFirstArgument() returns null if no argument were passed');
|
||||
$input = new ArrayInput(array('name' => 'Fabien'));
|
||||
$input = new ArrayInput(['name' => 'Fabien']);
|
||||
$this->assertEquals('Fabien', $input->getFirstArgument(), '->getFirstArgument() returns the first passed argument');
|
||||
$input = new ArrayInput(array('--foo' => 'bar', 'name' => 'Fabien'));
|
||||
$input = new ArrayInput(['--foo' => 'bar', 'name' => 'Fabien']);
|
||||
$this->assertEquals('Fabien', $input->getFirstArgument(), '->getFirstArgument() returns the first passed argument');
|
||||
}
|
||||
|
||||
public function testHasParameterOption()
|
||||
{
|
||||
$input = new ArrayInput(array('name' => 'Fabien', '--foo' => 'bar'));
|
||||
$input = new ArrayInput(['name' => 'Fabien', '--foo' => 'bar']);
|
||||
$this->assertTrue($input->hasParameterOption('--foo'), '->hasParameterOption() returns true if an option is present in the passed parameters');
|
||||
$this->assertFalse($input->hasParameterOption('--bar'), '->hasParameterOption() returns false if an option is not present in the passed parameters');
|
||||
|
||||
$input = new ArrayInput(array('--foo'));
|
||||
$input = new ArrayInput(['--foo']);
|
||||
$this->assertTrue($input->hasParameterOption('--foo'), '->hasParameterOption() returns true if an option is present in the passed parameters');
|
||||
|
||||
$input = new ArrayInput(array('--foo', '--', '--bar'));
|
||||
$input = new ArrayInput(['--foo', '--', '--bar']);
|
||||
$this->assertTrue($input->hasParameterOption('--bar'), '->hasParameterOption() returns true if an option is present in the passed parameters');
|
||||
$this->assertFalse($input->hasParameterOption('--bar', true), '->hasParameterOption() returns false if an option is present in the passed parameters after an end of options signal');
|
||||
}
|
||||
|
||||
public function testGetParameterOption()
|
||||
{
|
||||
$input = new ArrayInput(array('name' => 'Fabien', '--foo' => 'bar'));
|
||||
$input = new ArrayInput(['name' => 'Fabien', '--foo' => 'bar']);
|
||||
$this->assertEquals('bar', $input->getParameterOption('--foo'), '->getParameterOption() returns the option of specified name');
|
||||
$this->assertFalse($input->getParameterOption('--bar'), '->getParameterOption() returns the default if an option is not present in the passed parameters');
|
||||
$this->assertEquals('default', $input->getParameterOption('--bar', 'default'), '->getParameterOption() returns the default value if an option is not present in the passed parameters');
|
||||
|
||||
$input = new ArrayInput(array('Fabien', '--foo' => 'bar'));
|
||||
$input = new ArrayInput(['Fabien', '--foo' => 'bar']);
|
||||
$this->assertEquals('bar', $input->getParameterOption('--foo'), '->getParameterOption() returns the option of specified name');
|
||||
|
||||
$input = new ArrayInput(array('--foo', '--', '--bar' => 'woop'));
|
||||
$input = new ArrayInput(['--foo', '--', '--bar' => 'woop']);
|
||||
$this->assertEquals('woop', $input->getParameterOption('--bar'), '->getParameterOption() returns the correct value if an option is present in the passed parameters');
|
||||
$this->assertFalse($input->getParameterOption('--bar', false, true), '->getParameterOption() returns false if an option is present in the passed parameters after an end of options signal');
|
||||
$this->assertEquals('default', $input->getParameterOption('--bar', 'default', true), '->getParameterOption() returns the default value if an option is present in the passed parameters after an end of options signal');
|
||||
}
|
||||
|
||||
public function testParseArguments()
|
||||
{
|
||||
$input = new ArrayInput(array('name' => 'foo'), new InputDefinition(array(new InputArgument('name'))));
|
||||
$input = new ArrayInput(['name' => 'foo'], new InputDefinition([new InputArgument('name')]));
|
||||
|
||||
$this->assertEquals(array('name' => 'foo'), $input->getArguments(), '->parse() parses required arguments');
|
||||
$this->assertEquals(['name' => 'foo'], $input->getArguments(), '->parse() parses required arguments');
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -76,50 +76,50 @@ class ArrayInputTest extends TestCase
|
||||
|
||||
public function provideOptions()
|
||||
{
|
||||
return array(
|
||||
array(
|
||||
array('--foo' => 'bar'),
|
||||
array(new InputOption('foo')),
|
||||
array('foo' => 'bar'),
|
||||
return [
|
||||
[
|
||||
['--foo' => 'bar'],
|
||||
[new InputOption('foo')],
|
||||
['foo' => 'bar'],
|
||||
'->parse() parses long options',
|
||||
),
|
||||
array(
|
||||
array('--foo' => 'bar'),
|
||||
array(new InputOption('foo', 'f', InputOption::VALUE_OPTIONAL, '', 'default')),
|
||||
array('foo' => 'bar'),
|
||||
],
|
||||
[
|
||||
['--foo' => 'bar'],
|
||||
[new InputOption('foo', 'f', InputOption::VALUE_OPTIONAL, '', 'default')],
|
||||
['foo' => 'bar'],
|
||||
'->parse() parses long options with a default value',
|
||||
),
|
||||
array(
|
||||
array(),
|
||||
array(new InputOption('foo', 'f', InputOption::VALUE_OPTIONAL, '', 'default')),
|
||||
array('foo' => 'default'),
|
||||
],
|
||||
[
|
||||
[],
|
||||
[new InputOption('foo', 'f', InputOption::VALUE_OPTIONAL, '', 'default')],
|
||||
['foo' => 'default'],
|
||||
'->parse() uses the default value for long options with value optional which are not passed',
|
||||
),
|
||||
array(
|
||||
array('--foo' => null),
|
||||
array(new InputOption('foo', 'f', InputOption::VALUE_OPTIONAL, '', 'default')),
|
||||
array('foo' => null),
|
||||
],
|
||||
[
|
||||
['--foo' => null],
|
||||
[new InputOption('foo', 'f', InputOption::VALUE_OPTIONAL, '', 'default')],
|
||||
['foo' => null],
|
||||
'->parse() parses long options with a default value',
|
||||
),
|
||||
array(
|
||||
array('-f' => 'bar'),
|
||||
array(new InputOption('foo', 'f')),
|
||||
array('foo' => 'bar'),
|
||||
],
|
||||
[
|
||||
['-f' => 'bar'],
|
||||
[new InputOption('foo', 'f')],
|
||||
['foo' => 'bar'],
|
||||
'->parse() parses short options',
|
||||
),
|
||||
array(
|
||||
array('--' => null, '-f' => 'bar'),
|
||||
array(new InputOption('foo', 'f', InputOption::VALUE_OPTIONAL, '', 'default')),
|
||||
array('foo' => 'default'),
|
||||
],
|
||||
[
|
||||
['--' => null, '-f' => 'bar'],
|
||||
[new InputOption('foo', 'f', InputOption::VALUE_OPTIONAL, '', 'default')],
|
||||
['foo' => 'default'],
|
||||
'->parse() does not parse opts after an end of options signal',
|
||||
),
|
||||
array(
|
||||
array('--' => null),
|
||||
array(),
|
||||
array(),
|
||||
],
|
||||
[
|
||||
['--' => null],
|
||||
[],
|
||||
[],
|
||||
'->parse() does not choke on end of options signal',
|
||||
),
|
||||
);
|
||||
],
|
||||
];
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -139,36 +139,39 @@ class ArrayInputTest extends TestCase
|
||||
|
||||
public function provideInvalidInput()
|
||||
{
|
||||
return array(
|
||||
array(
|
||||
array('foo' => 'foo'),
|
||||
new InputDefinition(array(new InputArgument('name'))),
|
||||
return [
|
||||
[
|
||||
['foo' => 'foo'],
|
||||
new InputDefinition([new InputArgument('name')]),
|
||||
'The "foo" argument does not exist.',
|
||||
),
|
||||
array(
|
||||
array('--foo' => null),
|
||||
new InputDefinition(array(new InputOption('foo', 'f', InputOption::VALUE_REQUIRED))),
|
||||
],
|
||||
[
|
||||
['--foo' => null],
|
||||
new InputDefinition([new InputOption('foo', 'f', InputOption::VALUE_REQUIRED)]),
|
||||
'The "--foo" option requires a value.',
|
||||
),
|
||||
array(
|
||||
array('--foo' => 'foo'),
|
||||
],
|
||||
[
|
||||
['--foo' => 'foo'],
|
||||
new InputDefinition(),
|
||||
'The "--foo" option does not exist.',
|
||||
),
|
||||
array(
|
||||
array('-o' => 'foo'),
|
||||
],
|
||||
[
|
||||
['-o' => 'foo'],
|
||||
new InputDefinition(),
|
||||
'The "-o" option does not exist.',
|
||||
),
|
||||
);
|
||||
],
|
||||
];
|
||||
}
|
||||
|
||||
public function testToString()
|
||||
{
|
||||
$input = new ArrayInput(array('-f' => null, '-b' => 'bar', '--foo' => 'b a z', '--lala' => null, 'test' => 'Foo', 'test2' => "A\nB'C"));
|
||||
$input = new ArrayInput(['-f' => null, '-b' => 'bar', '--foo' => 'b a z', '--lala' => null, 'test' => 'Foo', 'test2' => "A\nB'C"]);
|
||||
$this->assertEquals('-f -b=bar --foo='.escapeshellarg('b a z').' --lala Foo '.escapeshellarg("A\nB'C"), (string) $input);
|
||||
|
||||
$input = new ArrayInput(array('-b' => array('bval_1', 'bval_2'), '--f' => array('fval_1', 'fval_2')));
|
||||
$input = new ArrayInput(['-b' => ['bval_1', 'bval_2'], '--f' => ['fval_1', 'fval_2']]);
|
||||
$this->assertSame('-b=bval_1 -b=bval_2 --f=fval_1 --f=fval_2', (string) $input);
|
||||
|
||||
$input = new ArrayInput(['array_arg' => ['val_1', 'val_2']]);
|
||||
$this->assertSame('val_1 val_2', (string) $input);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -38,26 +38,12 @@ class InputArgumentTest extends TestCase
|
||||
}
|
||||
|
||||
/**
|
||||
* @dataProvider provideInvalidModes
|
||||
* @expectedException \InvalidArgumentException
|
||||
* @expectedExceptionMessage Argument mode "-1" is not valid.
|
||||
*/
|
||||
public function testInvalidModes($mode)
|
||||
public function testInvalidModes()
|
||||
{
|
||||
if (method_exists($this, 'expectException')) {
|
||||
$this->expectException('InvalidArgumentException');
|
||||
$this->expectExceptionMessage(sprintf('Argument mode "%s" is not valid.', $mode));
|
||||
} else {
|
||||
$this->setExpectedException('InvalidArgumentException', sprintf('Argument mode "%s" is not valid.', $mode));
|
||||
}
|
||||
|
||||
new InputArgument('foo', $mode);
|
||||
}
|
||||
|
||||
public function provideInvalidModes()
|
||||
{
|
||||
return array(
|
||||
array('ANOTHER_ONE'),
|
||||
array(-1),
|
||||
);
|
||||
new InputArgument('foo', '-1');
|
||||
}
|
||||
|
||||
public function testIsArray()
|
||||
@@ -91,8 +77,8 @@ class InputArgumentTest extends TestCase
|
||||
$this->assertEquals('another', $argument->getDefault(), '->setDefault() changes the default value');
|
||||
|
||||
$argument = new InputArgument('foo', InputArgument::OPTIONAL | InputArgument::IS_ARRAY);
|
||||
$argument->setDefault(array(1, 2));
|
||||
$this->assertEquals(array(1, 2), $argument->getDefault(), '->setDefault() changes the default value');
|
||||
$argument->setDefault([1, 2]);
|
||||
$this->assertEquals([1, 2], $argument->getDefault(), '->setDefault() changes the default value');
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -12,8 +12,8 @@
|
||||
namespace Symfony\Component\Console\Tests\Input;
|
||||
|
||||
use PHPUnit\Framework\TestCase;
|
||||
use Symfony\Component\Console\Input\InputDefinition;
|
||||
use Symfony\Component\Console\Input\InputArgument;
|
||||
use Symfony\Component\Console\Input\InputDefinition;
|
||||
use Symfony\Component\Console\Input\InputOption;
|
||||
|
||||
class InputDefinitionTest extends TestCase
|
||||
@@ -35,10 +35,10 @@ class InputDefinitionTest extends TestCase
|
||||
$this->initializeArguments();
|
||||
|
||||
$definition = new InputDefinition();
|
||||
$this->assertEquals(array(), $definition->getArguments(), '__construct() creates a new InputDefinition object');
|
||||
$this->assertEquals([], $definition->getArguments(), '__construct() creates a new InputDefinition object');
|
||||
|
||||
$definition = new InputDefinition(array($this->foo, $this->bar));
|
||||
$this->assertEquals(array('foo' => $this->foo, 'bar' => $this->bar), $definition->getArguments(), '__construct() takes an array of InputArgument objects as its first argument');
|
||||
$definition = new InputDefinition([$this->foo, $this->bar]);
|
||||
$this->assertEquals(['foo' => $this->foo, 'bar' => $this->bar], $definition->getArguments(), '__construct() takes an array of InputArgument objects as its first argument');
|
||||
}
|
||||
|
||||
public function testConstructorOptions()
|
||||
@@ -46,10 +46,10 @@ class InputDefinitionTest extends TestCase
|
||||
$this->initializeOptions();
|
||||
|
||||
$definition = new InputDefinition();
|
||||
$this->assertEquals(array(), $definition->getOptions(), '__construct() creates a new InputDefinition object');
|
||||
$this->assertEquals([], $definition->getOptions(), '__construct() creates a new InputDefinition object');
|
||||
|
||||
$definition = new InputDefinition(array($this->foo, $this->bar));
|
||||
$this->assertEquals(array('foo' => $this->foo, 'bar' => $this->bar), $definition->getOptions(), '__construct() takes an array of InputOption objects as its first argument');
|
||||
$definition = new InputDefinition([$this->foo, $this->bar]);
|
||||
$this->assertEquals(['foo' => $this->foo, 'bar' => $this->bar], $definition->getOptions(), '__construct() takes an array of InputOption objects as its first argument');
|
||||
}
|
||||
|
||||
public function testSetArguments()
|
||||
@@ -57,11 +57,11 @@ class InputDefinitionTest extends TestCase
|
||||
$this->initializeArguments();
|
||||
|
||||
$definition = new InputDefinition();
|
||||
$definition->setArguments(array($this->foo));
|
||||
$this->assertEquals(array('foo' => $this->foo), $definition->getArguments(), '->setArguments() sets the array of InputArgument objects');
|
||||
$definition->setArguments(array($this->bar));
|
||||
$definition->setArguments([$this->foo]);
|
||||
$this->assertEquals(['foo' => $this->foo], $definition->getArguments(), '->setArguments() sets the array of InputArgument objects');
|
||||
$definition->setArguments([$this->bar]);
|
||||
|
||||
$this->assertEquals(array('bar' => $this->bar), $definition->getArguments(), '->setArguments() clears all InputArgument objects');
|
||||
$this->assertEquals(['bar' => $this->bar], $definition->getArguments(), '->setArguments() clears all InputArgument objects');
|
||||
}
|
||||
|
||||
public function testAddArguments()
|
||||
@@ -69,10 +69,10 @@ class InputDefinitionTest extends TestCase
|
||||
$this->initializeArguments();
|
||||
|
||||
$definition = new InputDefinition();
|
||||
$definition->addArguments(array($this->foo));
|
||||
$this->assertEquals(array('foo' => $this->foo), $definition->getArguments(), '->addArguments() adds an array of InputArgument objects');
|
||||
$definition->addArguments(array($this->bar));
|
||||
$this->assertEquals(array('foo' => $this->foo, 'bar' => $this->bar), $definition->getArguments(), '->addArguments() does not clear existing InputArgument objects');
|
||||
$definition->addArguments([$this->foo]);
|
||||
$this->assertEquals(['foo' => $this->foo], $definition->getArguments(), '->addArguments() adds an array of InputArgument objects');
|
||||
$definition->addArguments([$this->bar]);
|
||||
$this->assertEquals(['foo' => $this->foo, 'bar' => $this->bar], $definition->getArguments(), '->addArguments() does not clear existing InputArgument objects');
|
||||
}
|
||||
|
||||
public function testAddArgument()
|
||||
@@ -81,9 +81,9 @@ class InputDefinitionTest extends TestCase
|
||||
|
||||
$definition = new InputDefinition();
|
||||
$definition->addArgument($this->foo);
|
||||
$this->assertEquals(array('foo' => $this->foo), $definition->getArguments(), '->addArgument() adds a InputArgument object');
|
||||
$this->assertEquals(['foo' => $this->foo], $definition->getArguments(), '->addArgument() adds a InputArgument object');
|
||||
$definition->addArgument($this->bar);
|
||||
$this->assertEquals(array('foo' => $this->foo, 'bar' => $this->bar), $definition->getArguments(), '->addArgument() adds a InputArgument object');
|
||||
$this->assertEquals(['foo' => $this->foo, 'bar' => $this->bar], $definition->getArguments(), '->addArgument() adds a InputArgument object');
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -130,7 +130,7 @@ class InputDefinitionTest extends TestCase
|
||||
$this->initializeArguments();
|
||||
|
||||
$definition = new InputDefinition();
|
||||
$definition->addArguments(array($this->foo));
|
||||
$definition->addArguments([$this->foo]);
|
||||
$this->assertEquals($this->foo, $definition->getArgument('foo'), '->getArgument() returns a InputArgument by its name');
|
||||
}
|
||||
|
||||
@@ -143,7 +143,7 @@ class InputDefinitionTest extends TestCase
|
||||
$this->initializeArguments();
|
||||
|
||||
$definition = new InputDefinition();
|
||||
$definition->addArguments(array($this->foo));
|
||||
$definition->addArguments([$this->foo]);
|
||||
$definition->getArgument('bar');
|
||||
}
|
||||
|
||||
@@ -152,7 +152,7 @@ class InputDefinitionTest extends TestCase
|
||||
$this->initializeArguments();
|
||||
|
||||
$definition = new InputDefinition();
|
||||
$definition->addArguments(array($this->foo));
|
||||
$definition->addArguments([$this->foo]);
|
||||
|
||||
$this->assertTrue($definition->hasArgument('foo'), '->hasArgument() returns true if a InputArgument exists for the given name');
|
||||
$this->assertFalse($definition->hasArgument('bar'), '->hasArgument() returns false if a InputArgument exists for the given name');
|
||||
@@ -182,28 +182,28 @@ class InputDefinitionTest extends TestCase
|
||||
|
||||
public function testGetArgumentDefaults()
|
||||
{
|
||||
$definition = new InputDefinition(array(
|
||||
$definition = new InputDefinition([
|
||||
new InputArgument('foo1', InputArgument::OPTIONAL),
|
||||
new InputArgument('foo2', InputArgument::OPTIONAL, '', 'default'),
|
||||
new InputArgument('foo3', InputArgument::OPTIONAL | InputArgument::IS_ARRAY),
|
||||
// new InputArgument('foo4', InputArgument::OPTIONAL | InputArgument::IS_ARRAY, '', array(1, 2)),
|
||||
));
|
||||
$this->assertEquals(array('foo1' => null, 'foo2' => 'default', 'foo3' => array()), $definition->getArgumentDefaults(), '->getArgumentDefaults() return the default values for each argument');
|
||||
// new InputArgument('foo4', InputArgument::OPTIONAL | InputArgument::IS_ARRAY, '', [1, 2]),
|
||||
]);
|
||||
$this->assertEquals(['foo1' => null, 'foo2' => 'default', 'foo3' => []], $definition->getArgumentDefaults(), '->getArgumentDefaults() return the default values for each argument');
|
||||
|
||||
$definition = new InputDefinition(array(
|
||||
new InputArgument('foo4', InputArgument::OPTIONAL | InputArgument::IS_ARRAY, '', array(1, 2)),
|
||||
));
|
||||
$this->assertEquals(array('foo4' => array(1, 2)), $definition->getArgumentDefaults(), '->getArgumentDefaults() return the default values for each argument');
|
||||
$definition = new InputDefinition([
|
||||
new InputArgument('foo4', InputArgument::OPTIONAL | InputArgument::IS_ARRAY, '', [1, 2]),
|
||||
]);
|
||||
$this->assertEquals(['foo4' => [1, 2]], $definition->getArgumentDefaults(), '->getArgumentDefaults() return the default values for each argument');
|
||||
}
|
||||
|
||||
public function testSetOptions()
|
||||
{
|
||||
$this->initializeOptions();
|
||||
|
||||
$definition = new InputDefinition(array($this->foo));
|
||||
$this->assertEquals(array('foo' => $this->foo), $definition->getOptions(), '->setOptions() sets the array of InputOption objects');
|
||||
$definition->setOptions(array($this->bar));
|
||||
$this->assertEquals(array('bar' => $this->bar), $definition->getOptions(), '->setOptions() clears all InputOption objects');
|
||||
$definition = new InputDefinition([$this->foo]);
|
||||
$this->assertEquals(['foo' => $this->foo], $definition->getOptions(), '->setOptions() sets the array of InputOption objects');
|
||||
$definition->setOptions([$this->bar]);
|
||||
$this->assertEquals(['bar' => $this->bar], $definition->getOptions(), '->setOptions() clears all InputOption objects');
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -214,8 +214,8 @@ class InputDefinitionTest extends TestCase
|
||||
{
|
||||
$this->initializeOptions();
|
||||
|
||||
$definition = new InputDefinition(array($this->foo));
|
||||
$definition->setOptions(array($this->bar));
|
||||
$definition = new InputDefinition([$this->foo]);
|
||||
$definition->setOptions([$this->bar]);
|
||||
$definition->getOptionForShortcut('f');
|
||||
}
|
||||
|
||||
@@ -223,10 +223,10 @@ class InputDefinitionTest extends TestCase
|
||||
{
|
||||
$this->initializeOptions();
|
||||
|
||||
$definition = new InputDefinition(array($this->foo));
|
||||
$this->assertEquals(array('foo' => $this->foo), $definition->getOptions(), '->addOptions() adds an array of InputOption objects');
|
||||
$definition->addOptions(array($this->bar));
|
||||
$this->assertEquals(array('foo' => $this->foo, 'bar' => $this->bar), $definition->getOptions(), '->addOptions() does not clear existing InputOption objects');
|
||||
$definition = new InputDefinition([$this->foo]);
|
||||
$this->assertEquals(['foo' => $this->foo], $definition->getOptions(), '->addOptions() adds an array of InputOption objects');
|
||||
$definition->addOptions([$this->bar]);
|
||||
$this->assertEquals(['foo' => $this->foo, 'bar' => $this->bar], $definition->getOptions(), '->addOptions() does not clear existing InputOption objects');
|
||||
}
|
||||
|
||||
public function testAddOption()
|
||||
@@ -235,9 +235,9 @@ class InputDefinitionTest extends TestCase
|
||||
|
||||
$definition = new InputDefinition();
|
||||
$definition->addOption($this->foo);
|
||||
$this->assertEquals(array('foo' => $this->foo), $definition->getOptions(), '->addOption() adds a InputOption object');
|
||||
$this->assertEquals(['foo' => $this->foo], $definition->getOptions(), '->addOption() adds a InputOption object');
|
||||
$definition->addOption($this->bar);
|
||||
$this->assertEquals(array('foo' => $this->foo, 'bar' => $this->bar), $definition->getOptions(), '->addOption() adds a InputOption object');
|
||||
$this->assertEquals(['foo' => $this->foo, 'bar' => $this->bar], $definition->getOptions(), '->addOption() adds a InputOption object');
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -270,7 +270,7 @@ class InputDefinitionTest extends TestCase
|
||||
{
|
||||
$this->initializeOptions();
|
||||
|
||||
$definition = new InputDefinition(array($this->foo));
|
||||
$definition = new InputDefinition([$this->foo]);
|
||||
$this->assertEquals($this->foo, $definition->getOption('foo'), '->getOption() returns a InputOption by its name');
|
||||
}
|
||||
|
||||
@@ -282,7 +282,7 @@ class InputDefinitionTest extends TestCase
|
||||
{
|
||||
$this->initializeOptions();
|
||||
|
||||
$definition = new InputDefinition(array($this->foo));
|
||||
$definition = new InputDefinition([$this->foo]);
|
||||
$definition->getOption('bar');
|
||||
}
|
||||
|
||||
@@ -290,7 +290,7 @@ class InputDefinitionTest extends TestCase
|
||||
{
|
||||
$this->initializeOptions();
|
||||
|
||||
$definition = new InputDefinition(array($this->foo));
|
||||
$definition = new InputDefinition([$this->foo]);
|
||||
$this->assertTrue($definition->hasOption('foo'), '->hasOption() returns true if a InputOption exists for the given name');
|
||||
$this->assertFalse($definition->hasOption('bar'), '->hasOption() returns false if a InputOption exists for the given name');
|
||||
}
|
||||
@@ -299,7 +299,7 @@ class InputDefinitionTest extends TestCase
|
||||
{
|
||||
$this->initializeOptions();
|
||||
|
||||
$definition = new InputDefinition(array($this->foo));
|
||||
$definition = new InputDefinition([$this->foo]);
|
||||
$this->assertTrue($definition->hasShortcut('f'), '->hasShortcut() returns true if a InputOption exists for the given shortcut');
|
||||
$this->assertFalse($definition->hasShortcut('b'), '->hasShortcut() returns false if a InputOption exists for the given shortcut');
|
||||
}
|
||||
@@ -308,7 +308,7 @@ class InputDefinitionTest extends TestCase
|
||||
{
|
||||
$this->initializeOptions();
|
||||
|
||||
$definition = new InputDefinition(array($this->foo));
|
||||
$definition = new InputDefinition([$this->foo]);
|
||||
$this->assertEquals($this->foo, $definition->getOptionForShortcut('f'), '->getOptionForShortcut() returns a InputOption by its shortcut');
|
||||
}
|
||||
|
||||
@@ -316,7 +316,7 @@ class InputDefinitionTest extends TestCase
|
||||
{
|
||||
$this->initializeOptions();
|
||||
|
||||
$definition = new InputDefinition(array($this->multi));
|
||||
$definition = new InputDefinition([$this->multi]);
|
||||
$this->assertEquals($this->multi, $definition->getOptionForShortcut('m'), '->getOptionForShortcut() returns a InputOption by its shortcut');
|
||||
$this->assertEquals($this->multi, $definition->getOptionForShortcut('mmm'), '->getOptionForShortcut() returns a InputOption by its shortcut');
|
||||
}
|
||||
@@ -329,30 +329,30 @@ class InputDefinitionTest extends TestCase
|
||||
{
|
||||
$this->initializeOptions();
|
||||
|
||||
$definition = new InputDefinition(array($this->foo));
|
||||
$definition = new InputDefinition([$this->foo]);
|
||||
$definition->getOptionForShortcut('l');
|
||||
}
|
||||
|
||||
public function testGetOptionDefaults()
|
||||
{
|
||||
$definition = new InputDefinition(array(
|
||||
$definition = new InputDefinition([
|
||||
new InputOption('foo1', null, InputOption::VALUE_NONE),
|
||||
new InputOption('foo2', null, InputOption::VALUE_REQUIRED),
|
||||
new InputOption('foo3', null, InputOption::VALUE_REQUIRED, '', 'default'),
|
||||
new InputOption('foo4', null, InputOption::VALUE_OPTIONAL),
|
||||
new InputOption('foo5', null, InputOption::VALUE_OPTIONAL, '', 'default'),
|
||||
new InputOption('foo6', null, InputOption::VALUE_OPTIONAL | InputOption::VALUE_IS_ARRAY),
|
||||
new InputOption('foo7', null, InputOption::VALUE_OPTIONAL | InputOption::VALUE_IS_ARRAY, '', array(1, 2)),
|
||||
));
|
||||
$defaults = array(
|
||||
new InputOption('foo7', null, InputOption::VALUE_OPTIONAL | InputOption::VALUE_IS_ARRAY, '', [1, 2]),
|
||||
]);
|
||||
$defaults = [
|
||||
'foo1' => false,
|
||||
'foo2' => null,
|
||||
'foo3' => 'default',
|
||||
'foo4' => null,
|
||||
'foo5' => 'default',
|
||||
'foo6' => array(),
|
||||
'foo7' => array(1, 2),
|
||||
);
|
||||
'foo6' => [],
|
||||
'foo7' => [1, 2],
|
||||
];
|
||||
$this->assertSame($defaults, $definition->getOptionDefaults(), '->getOptionDefaults() returns the default values for all options');
|
||||
}
|
||||
|
||||
@@ -366,24 +366,25 @@ class InputDefinitionTest extends TestCase
|
||||
|
||||
public function getGetSynopsisData()
|
||||
{
|
||||
return array(
|
||||
array(new InputDefinition(array(new InputOption('foo'))), '[--foo]', 'puts optional options in square brackets'),
|
||||
array(new InputDefinition(array(new InputOption('foo', 'f'))), '[-f|--foo]', 'separates shortcut with a pipe'),
|
||||
array(new InputDefinition(array(new InputOption('foo', 'f', InputOption::VALUE_REQUIRED))), '[-f|--foo FOO]', 'uses shortcut as value placeholder'),
|
||||
array(new InputDefinition(array(new InputOption('foo', 'f', InputOption::VALUE_OPTIONAL))), '[-f|--foo [FOO]]', 'puts optional values in square brackets'),
|
||||
return [
|
||||
[new InputDefinition([new InputOption('foo')]), '[--foo]', 'puts optional options in square brackets'],
|
||||
[new InputDefinition([new InputOption('foo', 'f')]), '[-f|--foo]', 'separates shortcut with a pipe'],
|
||||
[new InputDefinition([new InputOption('foo', 'f', InputOption::VALUE_REQUIRED)]), '[-f|--foo FOO]', 'uses shortcut as value placeholder'],
|
||||
[new InputDefinition([new InputOption('foo', 'f', InputOption::VALUE_OPTIONAL)]), '[-f|--foo [FOO]]', 'puts optional values in square brackets'],
|
||||
|
||||
array(new InputDefinition(array(new InputArgument('foo', InputArgument::REQUIRED))), '<foo>', 'puts arguments in angle brackets'),
|
||||
array(new InputDefinition(array(new InputArgument('foo'))), '[<foo>]', 'puts optional arguments in square brackets'),
|
||||
array(new InputDefinition(array(new InputArgument('foo', InputArgument::IS_ARRAY))), '[<foo>]...', 'uses an ellipsis for array arguments'),
|
||||
array(new InputDefinition(array(new InputArgument('foo', InputArgument::REQUIRED | InputArgument::IS_ARRAY))), '<foo> (<foo>)...', 'uses parenthesis and ellipsis for required array arguments'),
|
||||
[new InputDefinition([new InputArgument('foo', InputArgument::REQUIRED)]), '<foo>', 'puts arguments in angle brackets'],
|
||||
[new InputDefinition([new InputArgument('foo')]), '[<foo>]', 'puts optional arguments in square brackets'],
|
||||
[new InputDefinition([new InputArgument('foo'), new InputArgument('bar')]), '[<foo> [<bar>]]', 'chains optional arguments inside brackets'],
|
||||
[new InputDefinition([new InputArgument('foo', InputArgument::IS_ARRAY)]), '[<foo>...]', 'uses an ellipsis for array arguments'],
|
||||
[new InputDefinition([new InputArgument('foo', InputArgument::REQUIRED | InputArgument::IS_ARRAY)]), '<foo>...', 'uses an ellipsis for required array arguments'],
|
||||
|
||||
array(new InputDefinition(array(new InputOption('foo'), new InputArgument('foo', InputArgument::REQUIRED))), '[--foo] [--] <foo>', 'puts [--] between options and arguments'),
|
||||
);
|
||||
[new InputDefinition([new InputOption('foo'), new InputArgument('foo', InputArgument::REQUIRED)]), '[--foo] [--] <foo>', 'puts [--] between options and arguments'],
|
||||
];
|
||||
}
|
||||
|
||||
public function testGetShortSynopsis()
|
||||
{
|
||||
$definition = new InputDefinition(array(new InputOption('foo'), new InputOption('bar'), new InputArgument('cat')));
|
||||
$definition = new InputDefinition([new InputOption('foo'), new InputOption('bar'), new InputArgument('cat')]);
|
||||
$this->assertEquals('[options] [--] [<cat>]', $definition->getSynopsis(true), '->getSynopsis(true) groups options in [options]');
|
||||
}
|
||||
|
||||
|
||||
@@ -39,7 +39,7 @@ class InputOptionTest extends TestCase
|
||||
$this->assertEquals('f', $option->getShortcut(), '__construct() can take a shortcut as its second argument');
|
||||
$option = new InputOption('foo', '-f|-ff|fff');
|
||||
$this->assertEquals('f|ff|fff', $option->getShortcut(), '__construct() removes the leading - of the shortcuts');
|
||||
$option = new InputOption('foo', array('f', 'ff', '-fff'));
|
||||
$option = new InputOption('foo', ['f', 'ff', '-fff']);
|
||||
$this->assertEquals('f|ff|fff', $option->getShortcut(), '__construct() removes the leading - of the shortcuts');
|
||||
$option = new InputOption('foo');
|
||||
$this->assertNull($option->getShortcut(), '__construct() makes the shortcut null by default');
|
||||
@@ -74,26 +74,12 @@ class InputOptionTest extends TestCase
|
||||
}
|
||||
|
||||
/**
|
||||
* @dataProvider provideInvalidModes
|
||||
* @expectedException \InvalidArgumentException
|
||||
* @expectedExceptionMessage Option mode "-1" is not valid.
|
||||
*/
|
||||
public function testInvalidModes($mode)
|
||||
public function testInvalidModes()
|
||||
{
|
||||
if (method_exists($this, 'expectException')) {
|
||||
$this->expectException('InvalidArgumentException');
|
||||
$this->expectExceptionMessage(sprintf('Option mode "%s" is not valid.', $mode));
|
||||
} else {
|
||||
$this->setExpectedException('InvalidArgumentException', sprintf('Option mode "%s" is not valid.', $mode));
|
||||
}
|
||||
|
||||
new InputOption('foo', 'f', $mode);
|
||||
}
|
||||
|
||||
public function provideInvalidModes()
|
||||
{
|
||||
return array(
|
||||
array('ANOTHER_ONE'),
|
||||
array(-1),
|
||||
);
|
||||
new InputOption('foo', 'f', '-1');
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -146,7 +132,7 @@ class InputOptionTest extends TestCase
|
||||
$this->assertNull($option->getDefault(), '->getDefault() returns null if no default value is configured');
|
||||
|
||||
$option = new InputOption('foo', null, InputOption::VALUE_OPTIONAL | InputOption::VALUE_IS_ARRAY);
|
||||
$this->assertEquals(array(), $option->getDefault(), '->getDefault() returns an empty array if option is an array');
|
||||
$this->assertEquals([], $option->getDefault(), '->getDefault() returns an empty array if option is an array');
|
||||
|
||||
$option = new InputOption('foo', null, InputOption::VALUE_NONE);
|
||||
$this->assertFalse($option->getDefault(), '->getDefault() returns false if the option does not take a value');
|
||||
@@ -161,8 +147,8 @@ class InputOptionTest extends TestCase
|
||||
$this->assertEquals('another', $option->getDefault(), '->setDefault() changes the default value');
|
||||
|
||||
$option = new InputOption('foo', null, InputOption::VALUE_REQUIRED | InputOption::VALUE_IS_ARRAY);
|
||||
$option->setDefault(array(1, 2));
|
||||
$this->assertEquals(array(1, 2), $option->getDefault(), '->setDefault() changes the default value');
|
||||
$option->setDefault([1, 2]);
|
||||
$this->assertEquals([1, 2], $option->getDefault(), '->setDefault() changes the default value');
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
52
vendor/symfony/console/Tests/Input/InputTest.php
vendored
52
vendor/symfony/console/Tests/Input/InputTest.php
vendored
@@ -13,38 +13,38 @@ namespace Symfony\Component\Console\Tests\Input;
|
||||
|
||||
use PHPUnit\Framework\TestCase;
|
||||
use Symfony\Component\Console\Input\ArrayInput;
|
||||
use Symfony\Component\Console\Input\InputDefinition;
|
||||
use Symfony\Component\Console\Input\InputArgument;
|
||||
use Symfony\Component\Console\Input\InputDefinition;
|
||||
use Symfony\Component\Console\Input\InputOption;
|
||||
|
||||
class InputTest extends TestCase
|
||||
{
|
||||
public function testConstructor()
|
||||
{
|
||||
$input = new ArrayInput(array('name' => 'foo'), new InputDefinition(array(new InputArgument('name'))));
|
||||
$input = new ArrayInput(['name' => 'foo'], new InputDefinition([new InputArgument('name')]));
|
||||
$this->assertEquals('foo', $input->getArgument('name'), '->__construct() takes a InputDefinition as an argument');
|
||||
}
|
||||
|
||||
public function testOptions()
|
||||
{
|
||||
$input = new ArrayInput(array('--name' => 'foo'), new InputDefinition(array(new InputOption('name'))));
|
||||
$input = new ArrayInput(['--name' => 'foo'], new InputDefinition([new InputOption('name')]));
|
||||
$this->assertEquals('foo', $input->getOption('name'), '->getOption() returns the value for the given option');
|
||||
|
||||
$input->setOption('name', 'bar');
|
||||
$this->assertEquals('bar', $input->getOption('name'), '->setOption() sets the value for a given option');
|
||||
$this->assertEquals(array('name' => 'bar'), $input->getOptions(), '->getOptions() returns all option values');
|
||||
$this->assertEquals(['name' => 'bar'], $input->getOptions(), '->getOptions() returns all option values');
|
||||
|
||||
$input = new ArrayInput(array('--name' => 'foo'), new InputDefinition(array(new InputOption('name'), new InputOption('bar', '', InputOption::VALUE_OPTIONAL, '', 'default'))));
|
||||
$input = new ArrayInput(['--name' => 'foo'], new InputDefinition([new InputOption('name'), new InputOption('bar', '', InputOption::VALUE_OPTIONAL, '', 'default')]));
|
||||
$this->assertEquals('default', $input->getOption('bar'), '->getOption() returns the default value for optional options');
|
||||
$this->assertEquals(array('name' => 'foo', 'bar' => 'default'), $input->getOptions(), '->getOptions() returns all option values, even optional ones');
|
||||
$this->assertEquals(['name' => 'foo', 'bar' => 'default'], $input->getOptions(), '->getOptions() returns all option values, even optional ones');
|
||||
|
||||
$input = new ArrayInput(array('--name' => 'foo', '--bar' => ''), new InputDefinition(array(new InputOption('name'), new InputOption('bar', '', InputOption::VALUE_OPTIONAL, '', 'default'))));
|
||||
$input = new ArrayInput(['--name' => 'foo', '--bar' => ''], new InputDefinition([new InputOption('name'), new InputOption('bar', '', InputOption::VALUE_OPTIONAL, '', 'default')]));
|
||||
$this->assertEquals('', $input->getOption('bar'), '->getOption() returns null for options explicitly passed without value (or an empty value)');
|
||||
$this->assertEquals(array('name' => 'foo', 'bar' => ''), $input->getOptions(), '->getOptions() returns all option values.');
|
||||
$this->assertEquals(['name' => 'foo', 'bar' => ''], $input->getOptions(), '->getOptions() returns all option values.');
|
||||
|
||||
$input = new ArrayInput(array('--name' => 'foo', '--bar' => null), new InputDefinition(array(new InputOption('name'), new InputOption('bar', '', InputOption::VALUE_OPTIONAL, '', 'default'))));
|
||||
$input = new ArrayInput(['--name' => 'foo', '--bar' => null], new InputDefinition([new InputOption('name'), new InputOption('bar', '', InputOption::VALUE_OPTIONAL, '', 'default')]));
|
||||
$this->assertNull($input->getOption('bar'), '->getOption() returns null for options explicitly passed without value (or an empty value)');
|
||||
$this->assertEquals(array('name' => 'foo', 'bar' => null), $input->getOptions(), '->getOptions() returns all option values');
|
||||
$this->assertEquals(['name' => 'foo', 'bar' => null], $input->getOptions(), '->getOptions() returns all option values');
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -53,7 +53,7 @@ class InputTest extends TestCase
|
||||
*/
|
||||
public function testSetInvalidOption()
|
||||
{
|
||||
$input = new ArrayInput(array('--name' => 'foo'), new InputDefinition(array(new InputOption('name'), new InputOption('bar', '', InputOption::VALUE_OPTIONAL, '', 'default'))));
|
||||
$input = new ArrayInput(['--name' => 'foo'], new InputDefinition([new InputOption('name'), new InputOption('bar', '', InputOption::VALUE_OPTIONAL, '', 'default')]));
|
||||
$input->setOption('foo', 'bar');
|
||||
}
|
||||
|
||||
@@ -63,22 +63,22 @@ class InputTest extends TestCase
|
||||
*/
|
||||
public function testGetInvalidOption()
|
||||
{
|
||||
$input = new ArrayInput(array('--name' => 'foo'), new InputDefinition(array(new InputOption('name'), new InputOption('bar', '', InputOption::VALUE_OPTIONAL, '', 'default'))));
|
||||
$input = new ArrayInput(['--name' => 'foo'], new InputDefinition([new InputOption('name'), new InputOption('bar', '', InputOption::VALUE_OPTIONAL, '', 'default')]));
|
||||
$input->getOption('foo');
|
||||
}
|
||||
|
||||
public function testArguments()
|
||||
{
|
||||
$input = new ArrayInput(array('name' => 'foo'), new InputDefinition(array(new InputArgument('name'))));
|
||||
$input = new ArrayInput(['name' => 'foo'], new InputDefinition([new InputArgument('name')]));
|
||||
$this->assertEquals('foo', $input->getArgument('name'), '->getArgument() returns the value for the given argument');
|
||||
|
||||
$input->setArgument('name', 'bar');
|
||||
$this->assertEquals('bar', $input->getArgument('name'), '->setArgument() sets the value for a given argument');
|
||||
$this->assertEquals(array('name' => 'bar'), $input->getArguments(), '->getArguments() returns all argument values');
|
||||
$this->assertEquals(['name' => 'bar'], $input->getArguments(), '->getArguments() returns all argument values');
|
||||
|
||||
$input = new ArrayInput(array('name' => 'foo'), new InputDefinition(array(new InputArgument('name'), new InputArgument('bar', InputArgument::OPTIONAL, '', 'default'))));
|
||||
$input = new ArrayInput(['name' => 'foo'], new InputDefinition([new InputArgument('name'), new InputArgument('bar', InputArgument::OPTIONAL, '', 'default')]));
|
||||
$this->assertEquals('default', $input->getArgument('bar'), '->getArgument() returns the default value for optional arguments');
|
||||
$this->assertEquals(array('name' => 'foo', 'bar' => 'default'), $input->getArguments(), '->getArguments() returns all argument values, even optional ones');
|
||||
$this->assertEquals(['name' => 'foo', 'bar' => 'default'], $input->getArguments(), '->getArguments() returns all argument values, even optional ones');
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -87,7 +87,7 @@ class InputTest extends TestCase
|
||||
*/
|
||||
public function testSetInvalidArgument()
|
||||
{
|
||||
$input = new ArrayInput(array('name' => 'foo'), new InputDefinition(array(new InputArgument('name'), new InputArgument('bar', InputArgument::OPTIONAL, '', 'default'))));
|
||||
$input = new ArrayInput(['name' => 'foo'], new InputDefinition([new InputArgument('name'), new InputArgument('bar', InputArgument::OPTIONAL, '', 'default')]));
|
||||
$input->setArgument('foo', 'bar');
|
||||
}
|
||||
|
||||
@@ -97,7 +97,7 @@ class InputTest extends TestCase
|
||||
*/
|
||||
public function testGetInvalidArgument()
|
||||
{
|
||||
$input = new ArrayInput(array('name' => 'foo'), new InputDefinition(array(new InputArgument('name'), new InputArgument('bar', InputArgument::OPTIONAL, '', 'default'))));
|
||||
$input = new ArrayInput(['name' => 'foo'], new InputDefinition([new InputArgument('name'), new InputArgument('bar', InputArgument::OPTIONAL, '', 'default')]));
|
||||
$input->getArgument('foo');
|
||||
}
|
||||
|
||||
@@ -107,8 +107,8 @@ class InputTest extends TestCase
|
||||
*/
|
||||
public function testValidateWithMissingArguments()
|
||||
{
|
||||
$input = new ArrayInput(array());
|
||||
$input->bind(new InputDefinition(array(new InputArgument('name', InputArgument::REQUIRED))));
|
||||
$input = new ArrayInput([]);
|
||||
$input->bind(new InputDefinition([new InputArgument('name', InputArgument::REQUIRED)]));
|
||||
$input->validate();
|
||||
}
|
||||
|
||||
@@ -118,22 +118,22 @@ class InputTest extends TestCase
|
||||
*/
|
||||
public function testValidateWithMissingRequiredArguments()
|
||||
{
|
||||
$input = new ArrayInput(array('bar' => 'baz'));
|
||||
$input->bind(new InputDefinition(array(new InputArgument('name', InputArgument::REQUIRED), new InputArgument('bar', InputArgument::OPTIONAL))));
|
||||
$input = new ArrayInput(['bar' => 'baz']);
|
||||
$input->bind(new InputDefinition([new InputArgument('name', InputArgument::REQUIRED), new InputArgument('bar', InputArgument::OPTIONAL)]));
|
||||
$input->validate();
|
||||
}
|
||||
|
||||
public function testValidate()
|
||||
{
|
||||
$input = new ArrayInput(array('name' => 'foo'));
|
||||
$input->bind(new InputDefinition(array(new InputArgument('name', InputArgument::REQUIRED))));
|
||||
$input = new ArrayInput(['name' => 'foo']);
|
||||
$input->bind(new InputDefinition([new InputArgument('name', InputArgument::REQUIRED)]));
|
||||
|
||||
$this->assertNull($input->validate());
|
||||
}
|
||||
|
||||
public function testSetGetInteractive()
|
||||
{
|
||||
$input = new ArrayInput(array());
|
||||
$input = new ArrayInput([]);
|
||||
$this->assertTrue($input->isInteractive(), '->isInteractive() returns whether the input should be interactive or not');
|
||||
$input->setInteractive(false);
|
||||
$this->assertFalse($input->isInteractive(), '->setInteractive() changes the interactive flag');
|
||||
@@ -141,7 +141,7 @@ class InputTest extends TestCase
|
||||
|
||||
public function testSetGetStream()
|
||||
{
|
||||
$input = new ArrayInput(array());
|
||||
$input = new ArrayInput([]);
|
||||
$stream = fopen('php://memory', 'r+', false);
|
||||
$input->setStream($stream);
|
||||
$this->assertSame($stream, $input->getStream());
|
||||
|
||||
@@ -33,7 +33,7 @@ class StringInputTest extends TestCase
|
||||
public function testInputOptionWithGivenString()
|
||||
{
|
||||
$definition = new InputDefinition(
|
||||
array(new InputOption('foo', null, InputOption::VALUE_REQUIRED))
|
||||
[new InputOption('foo', null, InputOption::VALUE_REQUIRED)]
|
||||
);
|
||||
|
||||
// call to bind
|
||||
@@ -44,33 +44,33 @@ class StringInputTest extends TestCase
|
||||
|
||||
public function getTokenizeData()
|
||||
{
|
||||
return array(
|
||||
array('', array(), '->tokenize() parses an empty string'),
|
||||
array('foo', array('foo'), '->tokenize() parses arguments'),
|
||||
array(' foo bar ', array('foo', 'bar'), '->tokenize() ignores whitespaces between arguments'),
|
||||
array('"quoted"', array('quoted'), '->tokenize() parses quoted arguments'),
|
||||
array("'quoted'", array('quoted'), '->tokenize() parses quoted arguments'),
|
||||
array("'a\rb\nc\td'", array("a\rb\nc\td"), '->tokenize() parses whitespace chars in strings'),
|
||||
array("'a'\r'b'\n'c'\t'd'", array('a', 'b', 'c', 'd'), '->tokenize() parses whitespace chars between args as spaces'),
|
||||
array('\"quoted\"', array('"quoted"'), '->tokenize() parses escaped-quoted arguments'),
|
||||
array("\'quoted\'", array('\'quoted\''), '->tokenize() parses escaped-quoted arguments'),
|
||||
array('-a', array('-a'), '->tokenize() parses short options'),
|
||||
array('-azc', array('-azc'), '->tokenize() parses aggregated short options'),
|
||||
array('-awithavalue', array('-awithavalue'), '->tokenize() parses short options with a value'),
|
||||
array('-a"foo bar"', array('-afoo bar'), '->tokenize() parses short options with a value'),
|
||||
array('-a"foo bar""foo bar"', array('-afoo barfoo bar'), '->tokenize() parses short options with a value'),
|
||||
array('-a\'foo bar\'', array('-afoo bar'), '->tokenize() parses short options with a value'),
|
||||
array('-a\'foo bar\'\'foo bar\'', array('-afoo barfoo bar'), '->tokenize() parses short options with a value'),
|
||||
array('-a\'foo bar\'"foo bar"', array('-afoo barfoo bar'), '->tokenize() parses short options with a value'),
|
||||
array('--long-option', array('--long-option'), '->tokenize() parses long options'),
|
||||
array('--long-option=foo', array('--long-option=foo'), '->tokenize() parses long options with a value'),
|
||||
array('--long-option="foo bar"', array('--long-option=foo bar'), '->tokenize() parses long options with a value'),
|
||||
array('--long-option="foo bar""another"', array('--long-option=foo baranother'), '->tokenize() parses long options with a value'),
|
||||
array('--long-option=\'foo bar\'', array('--long-option=foo bar'), '->tokenize() parses long options with a value'),
|
||||
array("--long-option='foo bar''another'", array('--long-option=foo baranother'), '->tokenize() parses long options with a value'),
|
||||
array("--long-option='foo bar'\"another\"", array('--long-option=foo baranother'), '->tokenize() parses long options with a value'),
|
||||
array('foo -a -ffoo --long bar', array('foo', '-a', '-ffoo', '--long', 'bar'), '->tokenize() parses when several arguments and options'),
|
||||
);
|
||||
return [
|
||||
['', [], '->tokenize() parses an empty string'],
|
||||
['foo', ['foo'], '->tokenize() parses arguments'],
|
||||
[' foo bar ', ['foo', 'bar'], '->tokenize() ignores whitespaces between arguments'],
|
||||
['"quoted"', ['quoted'], '->tokenize() parses quoted arguments'],
|
||||
["'quoted'", ['quoted'], '->tokenize() parses quoted arguments'],
|
||||
["'a\rb\nc\td'", ["a\rb\nc\td"], '->tokenize() parses whitespace chars in strings'],
|
||||
["'a'\r'b'\n'c'\t'd'", ['a', 'b', 'c', 'd'], '->tokenize() parses whitespace chars between args as spaces'],
|
||||
['\"quoted\"', ['"quoted"'], '->tokenize() parses escaped-quoted arguments'],
|
||||
["\'quoted\'", ['\'quoted\''], '->tokenize() parses escaped-quoted arguments'],
|
||||
['-a', ['-a'], '->tokenize() parses short options'],
|
||||
['-azc', ['-azc'], '->tokenize() parses aggregated short options'],
|
||||
['-awithavalue', ['-awithavalue'], '->tokenize() parses short options with a value'],
|
||||
['-a"foo bar"', ['-afoo bar'], '->tokenize() parses short options with a value'],
|
||||
['-a"foo bar""foo bar"', ['-afoo barfoo bar'], '->tokenize() parses short options with a value'],
|
||||
['-a\'foo bar\'', ['-afoo bar'], '->tokenize() parses short options with a value'],
|
||||
['-a\'foo bar\'\'foo bar\'', ['-afoo barfoo bar'], '->tokenize() parses short options with a value'],
|
||||
['-a\'foo bar\'"foo bar"', ['-afoo barfoo bar'], '->tokenize() parses short options with a value'],
|
||||
['--long-option', ['--long-option'], '->tokenize() parses long options'],
|
||||
['--long-option=foo', ['--long-option=foo'], '->tokenize() parses long options with a value'],
|
||||
['--long-option="foo bar"', ['--long-option=foo bar'], '->tokenize() parses long options with a value'],
|
||||
['--long-option="foo bar""another"', ['--long-option=foo baranother'], '->tokenize() parses long options with a value'],
|
||||
['--long-option=\'foo bar\'', ['--long-option=foo bar'], '->tokenize() parses long options with a value'],
|
||||
["--long-option='foo bar''another'", ['--long-option=foo baranother'], '->tokenize() parses long options with a value'],
|
||||
["--long-option='foo bar'\"another\"", ['--long-option=foo baranother'], '->tokenize() parses long options with a value'],
|
||||
['foo -a -ffoo --long bar', ['foo', '-a', '-ffoo', '--long', 'bar'], '->tokenize() parses when several arguments and options'],
|
||||
];
|
||||
}
|
||||
|
||||
public function testToString()
|
||||
|
||||
@@ -16,8 +16,8 @@ use Psr\Log\LoggerInterface;
|
||||
use Psr\Log\LogLevel;
|
||||
use Symfony\Component\Console\Logger\ConsoleLogger;
|
||||
use Symfony\Component\Console\Output\BufferedOutput;
|
||||
use Symfony\Component\Console\Tests\Fixtures\DummyOutput;
|
||||
use Symfony\Component\Console\Output\OutputInterface;
|
||||
use Symfony\Component\Console\Tests\Fixtures\DummyOutput;
|
||||
|
||||
/**
|
||||
* Console logger test.
|
||||
@@ -39,7 +39,7 @@ class ConsoleLoggerTest extends TestCase
|
||||
{
|
||||
$this->output = new DummyOutput(OutputInterface::VERBOSITY_VERBOSE);
|
||||
|
||||
return new ConsoleLogger($this->output, array(
|
||||
return new ConsoleLogger($this->output, [
|
||||
LogLevel::EMERGENCY => OutputInterface::VERBOSITY_NORMAL,
|
||||
LogLevel::ALERT => OutputInterface::VERBOSITY_NORMAL,
|
||||
LogLevel::CRITICAL => OutputInterface::VERBOSITY_NORMAL,
|
||||
@@ -48,7 +48,7 @@ class ConsoleLoggerTest extends TestCase
|
||||
LogLevel::NOTICE => OutputInterface::VERBOSITY_NORMAL,
|
||||
LogLevel::INFO => OutputInterface::VERBOSITY_NORMAL,
|
||||
LogLevel::DEBUG => OutputInterface::VERBOSITY_NORMAL,
|
||||
));
|
||||
]);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -64,7 +64,7 @@ class ConsoleLoggerTest extends TestCase
|
||||
/**
|
||||
* @dataProvider provideOutputMappingParams
|
||||
*/
|
||||
public function testOutputMapping($logLevel, $outputVerbosity, $isOutput, $addVerbosityLevelMap = array())
|
||||
public function testOutputMapping($logLevel, $outputVerbosity, $isOutput, $addVerbosityLevelMap = [])
|
||||
{
|
||||
$out = new BufferedOutput($outputVerbosity);
|
||||
$logger = new ConsoleLogger($out, $addVerbosityLevelMap);
|
||||
@@ -75,22 +75,22 @@ class ConsoleLoggerTest extends TestCase
|
||||
|
||||
public function provideOutputMappingParams()
|
||||
{
|
||||
$quietMap = array(LogLevel::EMERGENCY => OutputInterface::VERBOSITY_QUIET);
|
||||
$quietMap = [LogLevel::EMERGENCY => OutputInterface::VERBOSITY_QUIET];
|
||||
|
||||
return array(
|
||||
array(LogLevel::EMERGENCY, OutputInterface::VERBOSITY_NORMAL, true),
|
||||
array(LogLevel::WARNING, OutputInterface::VERBOSITY_NORMAL, true),
|
||||
array(LogLevel::INFO, OutputInterface::VERBOSITY_NORMAL, false),
|
||||
array(LogLevel::DEBUG, OutputInterface::VERBOSITY_NORMAL, false),
|
||||
array(LogLevel::INFO, OutputInterface::VERBOSITY_VERBOSE, false),
|
||||
array(LogLevel::INFO, OutputInterface::VERBOSITY_VERY_VERBOSE, true),
|
||||
array(LogLevel::DEBUG, OutputInterface::VERBOSITY_VERY_VERBOSE, false),
|
||||
array(LogLevel::DEBUG, OutputInterface::VERBOSITY_DEBUG, true),
|
||||
array(LogLevel::ALERT, OutputInterface::VERBOSITY_QUIET, false),
|
||||
array(LogLevel::EMERGENCY, OutputInterface::VERBOSITY_QUIET, false),
|
||||
array(LogLevel::ALERT, OutputInterface::VERBOSITY_QUIET, false, $quietMap),
|
||||
array(LogLevel::EMERGENCY, OutputInterface::VERBOSITY_QUIET, true, $quietMap),
|
||||
);
|
||||
return [
|
||||
[LogLevel::EMERGENCY, OutputInterface::VERBOSITY_NORMAL, true],
|
||||
[LogLevel::WARNING, OutputInterface::VERBOSITY_NORMAL, true],
|
||||
[LogLevel::INFO, OutputInterface::VERBOSITY_NORMAL, false],
|
||||
[LogLevel::DEBUG, OutputInterface::VERBOSITY_NORMAL, false],
|
||||
[LogLevel::INFO, OutputInterface::VERBOSITY_VERBOSE, false],
|
||||
[LogLevel::INFO, OutputInterface::VERBOSITY_VERY_VERBOSE, true],
|
||||
[LogLevel::DEBUG, OutputInterface::VERBOSITY_VERY_VERBOSE, false],
|
||||
[LogLevel::DEBUG, OutputInterface::VERBOSITY_DEBUG, true],
|
||||
[LogLevel::ALERT, OutputInterface::VERBOSITY_QUIET, false],
|
||||
[LogLevel::EMERGENCY, OutputInterface::VERBOSITY_QUIET, false],
|
||||
[LogLevel::ALERT, OutputInterface::VERBOSITY_QUIET, false, $quietMap],
|
||||
[LogLevel::EMERGENCY, OutputInterface::VERBOSITY_QUIET, true, $quietMap],
|
||||
];
|
||||
}
|
||||
|
||||
public function testHasErrored()
|
||||
@@ -117,28 +117,28 @@ class ConsoleLoggerTest extends TestCase
|
||||
public function testLogsAtAllLevels($level, $message)
|
||||
{
|
||||
$logger = $this->getLogger();
|
||||
$logger->{$level}($message, array('user' => 'Bob'));
|
||||
$logger->log($level, $message, array('user' => 'Bob'));
|
||||
$logger->{$level}($message, ['user' => 'Bob']);
|
||||
$logger->log($level, $message, ['user' => 'Bob']);
|
||||
|
||||
$expected = array(
|
||||
$expected = [
|
||||
$level.' message of level '.$level.' with context: Bob',
|
||||
$level.' message of level '.$level.' with context: Bob',
|
||||
);
|
||||
];
|
||||
$this->assertEquals($expected, $this->getLogs());
|
||||
}
|
||||
|
||||
public function provideLevelsAndMessages()
|
||||
{
|
||||
return array(
|
||||
LogLevel::EMERGENCY => array(LogLevel::EMERGENCY, 'message of level emergency with context: {user}'),
|
||||
LogLevel::ALERT => array(LogLevel::ALERT, 'message of level alert with context: {user}'),
|
||||
LogLevel::CRITICAL => array(LogLevel::CRITICAL, 'message of level critical with context: {user}'),
|
||||
LogLevel::ERROR => array(LogLevel::ERROR, 'message of level error with context: {user}'),
|
||||
LogLevel::WARNING => array(LogLevel::WARNING, 'message of level warning with context: {user}'),
|
||||
LogLevel::NOTICE => array(LogLevel::NOTICE, 'message of level notice with context: {user}'),
|
||||
LogLevel::INFO => array(LogLevel::INFO, 'message of level info with context: {user}'),
|
||||
LogLevel::DEBUG => array(LogLevel::DEBUG, 'message of level debug with context: {user}'),
|
||||
);
|
||||
return [
|
||||
LogLevel::EMERGENCY => [LogLevel::EMERGENCY, 'message of level emergency with context: {user}'],
|
||||
LogLevel::ALERT => [LogLevel::ALERT, 'message of level alert with context: {user}'],
|
||||
LogLevel::CRITICAL => [LogLevel::CRITICAL, 'message of level critical with context: {user}'],
|
||||
LogLevel::ERROR => [LogLevel::ERROR, 'message of level error with context: {user}'],
|
||||
LogLevel::WARNING => [LogLevel::WARNING, 'message of level warning with context: {user}'],
|
||||
LogLevel::NOTICE => [LogLevel::NOTICE, 'message of level notice with context: {user}'],
|
||||
LogLevel::INFO => [LogLevel::INFO, 'message of level info with context: {user}'],
|
||||
LogLevel::DEBUG => [LogLevel::DEBUG, 'message of level debug with context: {user}'],
|
||||
];
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -153,56 +153,56 @@ class ConsoleLoggerTest extends TestCase
|
||||
public function testContextReplacement()
|
||||
{
|
||||
$logger = $this->getLogger();
|
||||
$logger->info('{Message {nothing} {user} {foo.bar} a}', array('user' => 'Bob', 'foo.bar' => 'Bar'));
|
||||
$logger->info('{Message {nothing} {user} {foo.bar} a}', ['user' => 'Bob', 'foo.bar' => 'Bar']);
|
||||
|
||||
$expected = array('info {Message {nothing} Bob Bar a}');
|
||||
$expected = ['info {Message {nothing} Bob Bar a}'];
|
||||
$this->assertEquals($expected, $this->getLogs());
|
||||
}
|
||||
|
||||
public function testObjectCastToString()
|
||||
{
|
||||
if (method_exists($this, 'createPartialMock')) {
|
||||
$dummy = $this->createPartialMock('Symfony\Component\Console\Tests\Logger\DummyTest', array('__toString'));
|
||||
$dummy = $this->createPartialMock('Symfony\Component\Console\Tests\Logger\DummyTest', ['__toString']);
|
||||
} else {
|
||||
$dummy = $this->getMock('Symfony\Component\Console\Tests\Logger\DummyTest', array('__toString'));
|
||||
$dummy = $this->getMock('Symfony\Component\Console\Tests\Logger\DummyTest', ['__toString']);
|
||||
}
|
||||
$dummy->method('__toString')->will($this->returnValue('DUMMY'));
|
||||
$dummy->method('__toString')->willReturn('DUMMY');
|
||||
|
||||
$this->getLogger()->warning($dummy);
|
||||
|
||||
$expected = array('warning DUMMY');
|
||||
$expected = ['warning DUMMY'];
|
||||
$this->assertEquals($expected, $this->getLogs());
|
||||
}
|
||||
|
||||
public function testContextCanContainAnything()
|
||||
{
|
||||
$context = array(
|
||||
$context = [
|
||||
'bool' => true,
|
||||
'null' => null,
|
||||
'string' => 'Foo',
|
||||
'int' => 0,
|
||||
'float' => 0.5,
|
||||
'nested' => array('with object' => new DummyTest()),
|
||||
'nested' => ['with object' => new DummyTest()],
|
||||
'object' => new \DateTime(),
|
||||
'resource' => fopen('php://memory', 'r'),
|
||||
);
|
||||
];
|
||||
|
||||
$this->getLogger()->warning('Crazy context data', $context);
|
||||
|
||||
$expected = array('warning Crazy context data');
|
||||
$expected = ['warning Crazy context data'];
|
||||
$this->assertEquals($expected, $this->getLogs());
|
||||
}
|
||||
|
||||
public function testContextExceptionKeyCanBeExceptionOrOtherValues()
|
||||
{
|
||||
$logger = $this->getLogger();
|
||||
$logger->warning('Random message', array('exception' => 'oops'));
|
||||
$logger->critical('Uncaught Exception!', array('exception' => new \LogicException('Fail')));
|
||||
$logger->warning('Random message', ['exception' => 'oops']);
|
||||
$logger->critical('Uncaught Exception!', ['exception' => new \LogicException('Fail')]);
|
||||
|
||||
$expected = array(
|
||||
$expected = [
|
||||
'warning Random message',
|
||||
'critical Uncaught Exception!',
|
||||
);
|
||||
];
|
||||
$this->assertEquals($expected, $this->getLogs());
|
||||
}
|
||||
}
|
||||
|
||||
163
vendor/symfony/console/Tests/Output/ConsoleSectionOutputTest.php
vendored
Normal file
163
vendor/symfony/console/Tests/Output/ConsoleSectionOutputTest.php
vendored
Normal file
@@ -0,0 +1,163 @@
|
||||
<?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 Symfony\Component\Console\Tests\Output;
|
||||
|
||||
use PHPUnit\Framework\TestCase;
|
||||
use Symfony\Component\Console\Formatter\OutputFormatter;
|
||||
use Symfony\Component\Console\Helper\QuestionHelper;
|
||||
use Symfony\Component\Console\Input\StreamableInputInterface;
|
||||
use Symfony\Component\Console\Output\ConsoleSectionOutput;
|
||||
use Symfony\Component\Console\Output\OutputInterface;
|
||||
use Symfony\Component\Console\Output\StreamOutput;
|
||||
use Symfony\Component\Console\Question\Question;
|
||||
|
||||
class ConsoleSectionOutputTest extends TestCase
|
||||
{
|
||||
private $stream;
|
||||
|
||||
protected function setUp()
|
||||
{
|
||||
$this->stream = fopen('php://memory', 'r+b', false);
|
||||
}
|
||||
|
||||
protected function tearDown()
|
||||
{
|
||||
$this->stream = null;
|
||||
}
|
||||
|
||||
public function testClearAll()
|
||||
{
|
||||
$sections = [];
|
||||
$output = new ConsoleSectionOutput($this->stream, $sections, OutputInterface::VERBOSITY_NORMAL, true, new OutputFormatter());
|
||||
|
||||
$output->writeln('Foo'.PHP_EOL.'Bar');
|
||||
$output->clear();
|
||||
|
||||
rewind($output->getStream());
|
||||
$this->assertEquals('Foo'.PHP_EOL.'Bar'.PHP_EOL.sprintf("\x1b[%dA", 2)."\x1b[0J", stream_get_contents($output->getStream()));
|
||||
}
|
||||
|
||||
public function testClearNumberOfLines()
|
||||
{
|
||||
$sections = [];
|
||||
$output = new ConsoleSectionOutput($this->stream, $sections, OutputInterface::VERBOSITY_NORMAL, true, new OutputFormatter());
|
||||
|
||||
$output->writeln("Foo\nBar\nBaz\nFooBar");
|
||||
$output->clear(2);
|
||||
|
||||
rewind($output->getStream());
|
||||
$this->assertEquals("Foo\nBar\nBaz\nFooBar".PHP_EOL.sprintf("\x1b[%dA", 2)."\x1b[0J", stream_get_contents($output->getStream()));
|
||||
}
|
||||
|
||||
public function testClearNumberOfLinesWithMultipleSections()
|
||||
{
|
||||
$output = new StreamOutput($this->stream);
|
||||
$sections = [];
|
||||
$output1 = new ConsoleSectionOutput($output->getStream(), $sections, OutputInterface::VERBOSITY_NORMAL, true, new OutputFormatter());
|
||||
$output2 = new ConsoleSectionOutput($output->getStream(), $sections, OutputInterface::VERBOSITY_NORMAL, true, new OutputFormatter());
|
||||
|
||||
$output2->writeln('Foo');
|
||||
$output2->writeln('Bar');
|
||||
$output2->clear(1);
|
||||
$output1->writeln('Baz');
|
||||
|
||||
rewind($output->getStream());
|
||||
|
||||
$this->assertEquals('Foo'.PHP_EOL.'Bar'.PHP_EOL."\x1b[1A\x1b[0J\e[1A\e[0J".'Baz'.PHP_EOL.'Foo'.PHP_EOL, stream_get_contents($output->getStream()));
|
||||
}
|
||||
|
||||
public function testClearPreservingEmptyLines()
|
||||
{
|
||||
$output = new StreamOutput($this->stream);
|
||||
$sections = [];
|
||||
$output1 = new ConsoleSectionOutput($output->getStream(), $sections, OutputInterface::VERBOSITY_NORMAL, true, new OutputFormatter());
|
||||
$output2 = new ConsoleSectionOutput($output->getStream(), $sections, OutputInterface::VERBOSITY_NORMAL, true, new OutputFormatter());
|
||||
|
||||
$output2->writeln(PHP_EOL.'foo');
|
||||
$output2->clear(1);
|
||||
$output1->writeln('bar');
|
||||
|
||||
rewind($output->getStream());
|
||||
|
||||
$this->assertEquals(PHP_EOL.'foo'.PHP_EOL."\x1b[1A\x1b[0J\x1b[1A\x1b[0J".'bar'.PHP_EOL.PHP_EOL, stream_get_contents($output->getStream()));
|
||||
}
|
||||
|
||||
public function testOverwrite()
|
||||
{
|
||||
$sections = [];
|
||||
$output = new ConsoleSectionOutput($this->stream, $sections, OutputInterface::VERBOSITY_NORMAL, true, new OutputFormatter());
|
||||
|
||||
$output->writeln('Foo');
|
||||
$output->overwrite('Bar');
|
||||
|
||||
rewind($output->getStream());
|
||||
$this->assertEquals('Foo'.PHP_EOL."\x1b[1A\x1b[0JBar".PHP_EOL, stream_get_contents($output->getStream()));
|
||||
}
|
||||
|
||||
public function testOverwriteMultipleLines()
|
||||
{
|
||||
$sections = [];
|
||||
$output = new ConsoleSectionOutput($this->stream, $sections, OutputInterface::VERBOSITY_NORMAL, true, new OutputFormatter());
|
||||
|
||||
$output->writeln('Foo'.PHP_EOL.'Bar'.PHP_EOL.'Baz');
|
||||
$output->overwrite('Bar');
|
||||
|
||||
rewind($output->getStream());
|
||||
$this->assertEquals('Foo'.PHP_EOL.'Bar'.PHP_EOL.'Baz'.PHP_EOL.sprintf("\x1b[%dA", 3)."\x1b[0J".'Bar'.PHP_EOL, stream_get_contents($output->getStream()));
|
||||
}
|
||||
|
||||
public function testAddingMultipleSections()
|
||||
{
|
||||
$sections = [];
|
||||
$output1 = new ConsoleSectionOutput($this->stream, $sections, OutputInterface::VERBOSITY_NORMAL, true, new OutputFormatter());
|
||||
$output2 = new ConsoleSectionOutput($this->stream, $sections, OutputInterface::VERBOSITY_NORMAL, true, new OutputFormatter());
|
||||
|
||||
$this->assertCount(2, $sections);
|
||||
}
|
||||
|
||||
public function testMultipleSectionsOutput()
|
||||
{
|
||||
$output = new StreamOutput($this->stream);
|
||||
$sections = [];
|
||||
$output1 = new ConsoleSectionOutput($output->getStream(), $sections, OutputInterface::VERBOSITY_NORMAL, true, new OutputFormatter());
|
||||
$output2 = new ConsoleSectionOutput($output->getStream(), $sections, OutputInterface::VERBOSITY_NORMAL, true, new OutputFormatter());
|
||||
|
||||
$output1->writeln('Foo');
|
||||
$output2->writeln('Bar');
|
||||
|
||||
$output1->overwrite('Baz');
|
||||
$output2->overwrite('Foobar');
|
||||
|
||||
rewind($output->getStream());
|
||||
$this->assertEquals('Foo'.PHP_EOL.'Bar'.PHP_EOL."\x1b[2A\x1b[0JBar".PHP_EOL."\x1b[1A\x1b[0JBaz".PHP_EOL.'Bar'.PHP_EOL."\x1b[1A\x1b[0JFoobar".PHP_EOL, stream_get_contents($output->getStream()));
|
||||
}
|
||||
|
||||
public function testClearSectionContainingQuestion()
|
||||
{
|
||||
$inputStream = fopen('php://memory', 'r+b', false);
|
||||
fwrite($inputStream, "Batman & Robin\n");
|
||||
rewind($inputStream);
|
||||
|
||||
$input = $this->getMockBuilder(StreamableInputInterface::class)->getMock();
|
||||
$input->expects($this->once())->method('isInteractive')->willReturn(true);
|
||||
$input->expects($this->once())->method('getStream')->willReturn($inputStream);
|
||||
|
||||
$sections = [];
|
||||
$output = new ConsoleSectionOutput($this->stream, $sections, OutputInterface::VERBOSITY_NORMAL, true, new OutputFormatter());
|
||||
|
||||
(new QuestionHelper())->ask($input, $output, new Question('What\'s your favorite super hero?'));
|
||||
$output->clear();
|
||||
|
||||
rewind($output->getStream());
|
||||
$this->assertSame('What\'s your favorite super hero?'.PHP_EOL."\x1b[2A\x1b[0J", stream_get_contents($output->getStream()));
|
||||
}
|
||||
}
|
||||
@@ -12,8 +12,8 @@
|
||||
namespace Symfony\Component\Console\Tests\Output;
|
||||
|
||||
use PHPUnit\Framework\TestCase;
|
||||
use Symfony\Component\Console\Output\Output;
|
||||
use Symfony\Component\Console\Formatter\OutputFormatterStyle;
|
||||
use Symfony\Component\Console\Output\Output;
|
||||
|
||||
class OutputTest extends TestCase
|
||||
{
|
||||
@@ -77,10 +77,23 @@ class OutputTest extends TestCase
|
||||
public function testWriteAnArrayOfMessages()
|
||||
{
|
||||
$output = new TestOutput();
|
||||
$output->writeln(array('foo', 'bar'));
|
||||
$output->writeln(['foo', 'bar']);
|
||||
$this->assertEquals("foo\nbar\n", $output->output, '->writeln() can take an array of messages to output');
|
||||
}
|
||||
|
||||
public function testWriteAnIterableOfMessages()
|
||||
{
|
||||
$output = new TestOutput();
|
||||
$output->writeln($this->generateMessages());
|
||||
$this->assertEquals("foo\nbar\n", $output->output, '->writeln() can take an iterable of messages to output');
|
||||
}
|
||||
|
||||
private function generateMessages(): iterable
|
||||
{
|
||||
yield 'foo';
|
||||
yield 'bar';
|
||||
}
|
||||
|
||||
/**
|
||||
* @dataProvider provideWriteArguments
|
||||
*/
|
||||
@@ -93,10 +106,10 @@ class OutputTest extends TestCase
|
||||
|
||||
public function provideWriteArguments()
|
||||
{
|
||||
return array(
|
||||
array('<info>foo</info>', Output::OUTPUT_RAW, "<info>foo</info>\n"),
|
||||
array('<info>foo</info>', Output::OUTPUT_PLAIN, "foo\n"),
|
||||
);
|
||||
return [
|
||||
['<info>foo</info>', Output::OUTPUT_RAW, "<info>foo</info>\n"],
|
||||
['<info>foo</info>', Output::OUTPUT_PLAIN, "foo\n"],
|
||||
];
|
||||
}
|
||||
|
||||
public function testWriteWithDecorationTurnedOff()
|
||||
@@ -109,7 +122,7 @@ class OutputTest extends TestCase
|
||||
|
||||
public function testWriteDecoratedMessage()
|
||||
{
|
||||
$fooStyle = new OutputFormatterStyle('yellow', 'red', array('blink'));
|
||||
$fooStyle = new OutputFormatterStyle('yellow', 'red', ['blink']);
|
||||
$output = new TestOutput();
|
||||
$output->getFormatter()->setStyle('FOO', $fooStyle);
|
||||
$output->setDecorated(true);
|
||||
@@ -150,13 +163,13 @@ class OutputTest extends TestCase
|
||||
|
||||
public function verbosityProvider()
|
||||
{
|
||||
return array(
|
||||
array(Output::VERBOSITY_QUIET, '2', '->write() in QUIET mode only outputs when an explicit QUIET verbosity is passed'),
|
||||
array(Output::VERBOSITY_NORMAL, '123', '->write() in NORMAL mode outputs anything below an explicit VERBOSE verbosity'),
|
||||
array(Output::VERBOSITY_VERBOSE, '1234', '->write() in VERBOSE mode outputs anything below an explicit VERY_VERBOSE verbosity'),
|
||||
array(Output::VERBOSITY_VERY_VERBOSE, '12345', '->write() in VERY_VERBOSE mode outputs anything below an explicit DEBUG verbosity'),
|
||||
array(Output::VERBOSITY_DEBUG, '123456', '->write() in DEBUG mode outputs everything'),
|
||||
);
|
||||
return [
|
||||
[Output::VERBOSITY_QUIET, '2', '->write() in QUIET mode only outputs when an explicit QUIET verbosity is passed'],
|
||||
[Output::VERBOSITY_NORMAL, '123', '->write() in NORMAL mode outputs anything below an explicit VERBOSE verbosity'],
|
||||
[Output::VERBOSITY_VERBOSE, '1234', '->write() in VERBOSE mode outputs anything below an explicit VERY_VERBOSE verbosity'],
|
||||
[Output::VERBOSITY_VERY_VERBOSE, '12345', '->write() in VERY_VERBOSE mode outputs anything below an explicit DEBUG verbosity'],
|
||||
[Output::VERBOSITY_DEBUG, '123456', '->write() in DEBUG mode outputs everything'],
|
||||
];
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
64
vendor/symfony/console/Tests/Question/ChoiceQuestionTest.php
vendored
Normal file
64
vendor/symfony/console/Tests/Question/ChoiceQuestionTest.php
vendored
Normal file
@@ -0,0 +1,64 @@
|
||||
<?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 Symfony\Component\Console\Tests\Question;
|
||||
|
||||
use PHPUnit\Framework\TestCase;
|
||||
use Symfony\Component\Console\Question\ChoiceQuestion;
|
||||
|
||||
class ChoiceQuestionTest extends TestCase
|
||||
{
|
||||
/**
|
||||
* @dataProvider selectUseCases
|
||||
*/
|
||||
public function testSelectUseCases($multiSelect, $answers, $expected, $message)
|
||||
{
|
||||
$question = new ChoiceQuestion('A question', [
|
||||
'First response',
|
||||
'Second response',
|
||||
'Third response',
|
||||
'Fourth response',
|
||||
]);
|
||||
|
||||
$question->setMultiselect($multiSelect);
|
||||
|
||||
foreach ($answers as $answer) {
|
||||
$validator = $question->getValidator();
|
||||
$actual = $validator($answer);
|
||||
|
||||
$this->assertEquals($actual, $expected, $message);
|
||||
}
|
||||
}
|
||||
|
||||
public function selectUseCases()
|
||||
{
|
||||
return [
|
||||
[
|
||||
false,
|
||||
['First response', 'First response ', ' First response', ' First response '],
|
||||
'First response',
|
||||
'When passed single answer on singleSelect, the defaultValidator must return this answer as a string',
|
||||
],
|
||||
[
|
||||
true,
|
||||
['First response', 'First response ', ' First response', ' First response '],
|
||||
['First response'],
|
||||
'When passed single answer on MultiSelect, the defaultValidator must return this answer as an array',
|
||||
],
|
||||
[
|
||||
true,
|
||||
['First response,Second response', ' First response , Second response '],
|
||||
['First response', 'Second response'],
|
||||
'When passed multiple answers on MultiSelect, the defaultValidator must return these answers as an array',
|
||||
],
|
||||
];
|
||||
}
|
||||
}
|
||||
62
vendor/symfony/console/Tests/Question/ConfirmationQuestionTest.php
vendored
Normal file
62
vendor/symfony/console/Tests/Question/ConfirmationQuestionTest.php
vendored
Normal file
@@ -0,0 +1,62 @@
|
||||
<?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 Symfony\Component\Console\Tests\Question;
|
||||
|
||||
use PHPUnit\Framework\TestCase;
|
||||
use Symfony\Component\Console\Question\ConfirmationQuestion;
|
||||
|
||||
class ConfirmationQuestionTest extends TestCase
|
||||
{
|
||||
/**
|
||||
* @dataProvider normalizerUsecases
|
||||
*/
|
||||
public function testDefaultRegexUsecases($default, $answers, $expected, $message)
|
||||
{
|
||||
$sut = new ConfirmationQuestion('A question', $default);
|
||||
|
||||
foreach ($answers as $answer) {
|
||||
$normalizer = $sut->getNormalizer();
|
||||
$actual = $normalizer($answer);
|
||||
$this->assertEquals($expected, $actual, sprintf($message, $answer));
|
||||
}
|
||||
}
|
||||
|
||||
public function normalizerUsecases()
|
||||
{
|
||||
return [
|
||||
[
|
||||
true,
|
||||
['y', 'Y', 'yes', 'YES', 'yEs', ''],
|
||||
true,
|
||||
'When default is true, the normalizer must return true for "%s"',
|
||||
],
|
||||
[
|
||||
true,
|
||||
['n', 'N', 'no', 'NO', 'nO', 'foo', '1', '0'],
|
||||
false,
|
||||
'When default is true, the normalizer must return false for "%s"',
|
||||
],
|
||||
[
|
||||
false,
|
||||
['y', 'Y', 'yes', 'YES', 'yEs'],
|
||||
true,
|
||||
'When default is false, the normalizer must return true for "%s"',
|
||||
],
|
||||
[
|
||||
false,
|
||||
['n', 'N', 'no', 'NO', 'nO', 'foo', '1', '0', ''],
|
||||
false,
|
||||
'When default is false, the normalizer must return false for "%s"',
|
||||
],
|
||||
];
|
||||
}
|
||||
}
|
||||
@@ -13,12 +13,12 @@ namespace Symfony\Component\Console\Tests\Style;
|
||||
|
||||
use PHPUnit\Framework\TestCase;
|
||||
use Symfony\Component\Console\Command\Command;
|
||||
use Symfony\Component\Console\Tester\CommandTester;
|
||||
use Symfony\Component\Console\Formatter\OutputFormatter;
|
||||
use Symfony\Component\Console\Output\OutputInterface;
|
||||
use Symfony\Component\Console\Output\ConsoleOutputInterface;
|
||||
use Symfony\Component\Console\Input\InputInterface;
|
||||
use Symfony\Component\Console\Output\ConsoleOutputInterface;
|
||||
use Symfony\Component\Console\Output\OutputInterface;
|
||||
use Symfony\Component\Console\Style\SymfonyStyle;
|
||||
use Symfony\Component\Console\Tester\CommandTester;
|
||||
|
||||
class SymfonyStyleTest extends TestCase
|
||||
{
|
||||
@@ -26,9 +26,11 @@ class SymfonyStyleTest extends TestCase
|
||||
protected $command;
|
||||
/** @var CommandTester */
|
||||
protected $tester;
|
||||
private $colSize;
|
||||
|
||||
protected function setUp()
|
||||
{
|
||||
$this->colSize = getenv('COLUMNS');
|
||||
putenv('COLUMNS=121');
|
||||
$this->command = new Command('sfstyle');
|
||||
$this->tester = new CommandTester($this->command);
|
||||
@@ -36,7 +38,7 @@ class SymfonyStyleTest extends TestCase
|
||||
|
||||
protected function tearDown()
|
||||
{
|
||||
putenv('COLUMNS');
|
||||
putenv($this->colSize ? 'COLUMNS='.$this->colSize : 'COLUMNS');
|
||||
$this->command = null;
|
||||
$this->tester = null;
|
||||
}
|
||||
@@ -48,7 +50,7 @@ class SymfonyStyleTest extends TestCase
|
||||
{
|
||||
$code = require $inputCommandFilepath;
|
||||
$this->command->setCode($code);
|
||||
$this->tester->execute(array(), array('interactive' => false, 'decorated' => false));
|
||||
$this->tester->execute([], ['interactive' => false, 'decorated' => false]);
|
||||
$this->assertStringEqualsFile($outputFilepath, $this->tester->getDisplay(true));
|
||||
}
|
||||
|
||||
@@ -59,7 +61,7 @@ class SymfonyStyleTest extends TestCase
|
||||
{
|
||||
$code = require $inputCommandFilepath;
|
||||
$this->command->setCode($code);
|
||||
$this->tester->execute(array(), array('interactive' => true, 'decorated' => false));
|
||||
$this->tester->execute([], ['interactive' => true, 'decorated' => false]);
|
||||
$this->assertStringEqualsFile($outputFilepath, $this->tester->getDisplay(true));
|
||||
}
|
||||
|
||||
|
||||
15
vendor/symfony/console/Tests/TerminalTest.php
vendored
15
vendor/symfony/console/Tests/TerminalTest.php
vendored
@@ -16,6 +16,21 @@ use Symfony\Component\Console\Terminal;
|
||||
|
||||
class TerminalTest extends TestCase
|
||||
{
|
||||
private $colSize;
|
||||
private $lineSize;
|
||||
|
||||
protected function setUp()
|
||||
{
|
||||
$this->colSize = getenv('COLUMNS');
|
||||
$this->lineSize = getenv('LINES');
|
||||
}
|
||||
|
||||
protected function tearDown()
|
||||
{
|
||||
putenv($this->colSize ? 'COLUMNS='.$this->colSize : 'COLUMNS');
|
||||
putenv($this->lineSize ? 'LINES' : 'LINES='.$this->lineSize);
|
||||
}
|
||||
|
||||
public function test()
|
||||
{
|
||||
putenv('COLUMNS=100');
|
||||
|
||||
@@ -13,7 +13,9 @@ namespace Symfony\Component\Console\Tests\Tester;
|
||||
|
||||
use PHPUnit\Framework\TestCase;
|
||||
use Symfony\Component\Console\Application;
|
||||
use Symfony\Component\Console\Helper\QuestionHelper;
|
||||
use Symfony\Component\Console\Output\Output;
|
||||
use Symfony\Component\Console\Question\Question;
|
||||
use Symfony\Component\Console\Tester\ApplicationTester;
|
||||
|
||||
class ApplicationTesterTest extends TestCase
|
||||
@@ -27,11 +29,13 @@ class ApplicationTesterTest extends TestCase
|
||||
$this->application->setAutoExit(false);
|
||||
$this->application->register('foo')
|
||||
->addArgument('foo')
|
||||
->setCode(function ($input, $output) { $output->writeln('foo'); })
|
||||
->setCode(function ($input, $output) {
|
||||
$output->writeln('foo');
|
||||
})
|
||||
;
|
||||
|
||||
$this->tester = new ApplicationTester($this->application);
|
||||
$this->tester->run(array('command' => 'foo', 'foo' => 'bar'), array('interactive' => false, 'decorated' => false, 'verbosity' => Output::VERBOSITY_VERBOSE));
|
||||
$this->tester->run(['command' => 'foo', 'foo' => 'bar'], ['interactive' => false, 'decorated' => false, 'verbosity' => Output::VERBOSITY_VERBOSE]);
|
||||
}
|
||||
|
||||
protected function tearDown()
|
||||
@@ -63,8 +67,47 @@ class ApplicationTesterTest extends TestCase
|
||||
$this->assertEquals('foo'.PHP_EOL, $this->tester->getDisplay(), '->getDisplay() returns the display of the last execution');
|
||||
}
|
||||
|
||||
public function testSetInputs()
|
||||
{
|
||||
$application = new Application();
|
||||
$application->setAutoExit(false);
|
||||
$application->register('foo')->setCode(function ($input, $output) {
|
||||
$helper = new QuestionHelper();
|
||||
$helper->ask($input, $output, new Question('Q1'));
|
||||
$helper->ask($input, $output, new Question('Q2'));
|
||||
$helper->ask($input, $output, new Question('Q3'));
|
||||
});
|
||||
$tester = new ApplicationTester($application);
|
||||
|
||||
$tester->setInputs(['I1', 'I2', 'I3']);
|
||||
$tester->run(['command' => 'foo']);
|
||||
|
||||
$this->assertSame(0, $tester->getStatusCode());
|
||||
$this->assertEquals('Q1Q2Q3', $tester->getDisplay(true));
|
||||
}
|
||||
|
||||
public function testGetStatusCode()
|
||||
{
|
||||
$this->assertSame(0, $this->tester->getStatusCode(), '->getStatusCode() returns the status code');
|
||||
}
|
||||
|
||||
public function testErrorOutput()
|
||||
{
|
||||
$application = new Application();
|
||||
$application->setAutoExit(false);
|
||||
$application->register('foo')
|
||||
->addArgument('foo')
|
||||
->setCode(function ($input, $output) {
|
||||
$output->getErrorOutput()->write('foo');
|
||||
})
|
||||
;
|
||||
|
||||
$tester = new ApplicationTester($application);
|
||||
$tester->run(
|
||||
['command' => 'foo', 'foo' => 'bar'],
|
||||
['capture_stderr_separately' => true]
|
||||
);
|
||||
|
||||
$this->assertSame('foo', $tester->getErrorOutput());
|
||||
}
|
||||
}
|
||||
|
||||
@@ -14,12 +14,13 @@ namespace Symfony\Component\Console\Tests\Tester;
|
||||
use PHPUnit\Framework\TestCase;
|
||||
use Symfony\Component\Console\Application;
|
||||
use Symfony\Component\Console\Command\Command;
|
||||
use Symfony\Component\Console\Output\Output;
|
||||
use Symfony\Component\Console\Tester\CommandTester;
|
||||
use Symfony\Component\Console\Question\Question;
|
||||
use Symfony\Component\Console\Helper\HelperSet;
|
||||
use Symfony\Component\Console\Helper\QuestionHelper;
|
||||
use Symfony\Component\Console\Output\Output;
|
||||
use Symfony\Component\Console\Question\ChoiceQuestion;
|
||||
use Symfony\Component\Console\Question\Question;
|
||||
use Symfony\Component\Console\Style\SymfonyStyle;
|
||||
use Symfony\Component\Console\Tester\CommandTester;
|
||||
|
||||
class CommandTesterTest extends TestCase
|
||||
{
|
||||
@@ -34,7 +35,7 @@ class CommandTesterTest extends TestCase
|
||||
$this->command->setCode(function ($input, $output) { $output->writeln('foo'); });
|
||||
|
||||
$this->tester = new CommandTester($this->command);
|
||||
$this->tester->execute(array('foo' => 'bar'), array('interactive' => false, 'decorated' => false, 'verbosity' => Output::VERBOSITY_VERBOSE));
|
||||
$this->tester->execute(['foo' => 'bar'], ['interactive' => false, 'decorated' => false, 'verbosity' => Output::VERBOSITY_VERBOSE]);
|
||||
}
|
||||
|
||||
protected function tearDown()
|
||||
@@ -84,19 +85,19 @@ class CommandTesterTest extends TestCase
|
||||
$tester = new CommandTester($application->find('foo'));
|
||||
|
||||
// check that there is no need to pass the command name here
|
||||
$this->assertEquals(0, $tester->execute(array()));
|
||||
$this->assertEquals(0, $tester->execute([]));
|
||||
}
|
||||
|
||||
public function testCommandWithInputs()
|
||||
{
|
||||
$questions = array(
|
||||
$questions = [
|
||||
'What\'s your name?',
|
||||
'How are you?',
|
||||
'Where do you come from?',
|
||||
);
|
||||
];
|
||||
|
||||
$command = new Command('foo');
|
||||
$command->setHelperSet(new HelperSet(array(new QuestionHelper())));
|
||||
$command->setHelperSet(new HelperSet([new QuestionHelper()]));
|
||||
$command->setCode(function ($input, $output) use ($questions, $command) {
|
||||
$helper = $command->getHelper('question');
|
||||
$helper->ask($input, $output, new Question($questions[0]));
|
||||
@@ -105,8 +106,33 @@ class CommandTesterTest extends TestCase
|
||||
});
|
||||
|
||||
$tester = new CommandTester($command);
|
||||
$tester->setInputs(array('Bobby', 'Fine', 'France'));
|
||||
$tester->execute(array());
|
||||
$tester->setInputs(['Bobby', 'Fine', 'France']);
|
||||
$tester->execute([]);
|
||||
|
||||
$this->assertEquals(0, $tester->getStatusCode());
|
||||
$this->assertEquals(implode('', $questions), $tester->getDisplay(true));
|
||||
}
|
||||
|
||||
public function testCommandWithDefaultInputs()
|
||||
{
|
||||
$questions = [
|
||||
'What\'s your name?',
|
||||
'How are you?',
|
||||
'Where do you come from?',
|
||||
];
|
||||
|
||||
$command = new Command('foo');
|
||||
$command->setHelperSet(new HelperSet([new QuestionHelper()]));
|
||||
$command->setCode(function ($input, $output) use ($questions, $command) {
|
||||
$helper = $command->getHelper('question');
|
||||
$helper->ask($input, $output, new Question($questions[0], 'Bobby'));
|
||||
$helper->ask($input, $output, new Question($questions[1], 'Fine'));
|
||||
$helper->ask($input, $output, new Question($questions[2], 'France'));
|
||||
});
|
||||
|
||||
$tester = new CommandTester($command);
|
||||
$tester->setInputs(['', '', '']);
|
||||
$tester->execute([]);
|
||||
|
||||
$this->assertEquals(0, $tester->getStatusCode());
|
||||
$this->assertEquals(implode('', $questions), $tester->getDisplay(true));
|
||||
@@ -114,37 +140,64 @@ class CommandTesterTest extends TestCase
|
||||
|
||||
/**
|
||||
* @expectedException \RuntimeException
|
||||
* @expectedMessage Aborted
|
||||
* @expectedExceptionMessage Aborted.
|
||||
*/
|
||||
public function testCommandWithWrongInputsNumber()
|
||||
{
|
||||
$questions = array(
|
||||
$questions = [
|
||||
'What\'s your name?',
|
||||
'How are you?',
|
||||
'Where do you come from?',
|
||||
);
|
||||
];
|
||||
|
||||
$command = new Command('foo');
|
||||
$command->setHelperSet(new HelperSet(array(new QuestionHelper())));
|
||||
$command->setHelperSet(new HelperSet([new QuestionHelper()]));
|
||||
$command->setCode(function ($input, $output) use ($questions, $command) {
|
||||
$helper = $command->getHelper('question');
|
||||
$helper->ask($input, $output, new ChoiceQuestion('choice', ['a', 'b']));
|
||||
$helper->ask($input, $output, new Question($questions[0]));
|
||||
$helper->ask($input, $output, new Question($questions[1]));
|
||||
$helper->ask($input, $output, new Question($questions[2]));
|
||||
});
|
||||
|
||||
$tester = new CommandTester($command);
|
||||
$tester->setInputs(array('Bobby', 'Fine'));
|
||||
$tester->execute(array());
|
||||
$tester->setInputs(['a', 'Bobby', 'Fine']);
|
||||
$tester->execute([]);
|
||||
}
|
||||
|
||||
/**
|
||||
* @expectedException \RuntimeException
|
||||
* @expectedExceptionMessage Aborted.
|
||||
*/
|
||||
public function testCommandWithQuestionsButNoInputs()
|
||||
{
|
||||
$questions = [
|
||||
'What\'s your name?',
|
||||
'How are you?',
|
||||
'Where do you come from?',
|
||||
];
|
||||
|
||||
$command = new Command('foo');
|
||||
$command->setHelperSet(new HelperSet([new QuestionHelper()]));
|
||||
$command->setCode(function ($input, $output) use ($questions, $command) {
|
||||
$helper = $command->getHelper('question');
|
||||
$helper->ask($input, $output, new ChoiceQuestion('choice', ['a', 'b']));
|
||||
$helper->ask($input, $output, new Question($questions[0]));
|
||||
$helper->ask($input, $output, new Question($questions[1]));
|
||||
$helper->ask($input, $output, new Question($questions[2]));
|
||||
});
|
||||
|
||||
$tester = new CommandTester($command);
|
||||
$tester->execute([]);
|
||||
}
|
||||
|
||||
public function testSymfonyStyleCommandWithInputs()
|
||||
{
|
||||
$questions = array(
|
||||
$questions = [
|
||||
'What\'s your name?',
|
||||
'How are you?',
|
||||
'Where do you come from?',
|
||||
);
|
||||
];
|
||||
|
||||
$command = new Command('foo');
|
||||
$command->setCode(function ($input, $output) use ($questions, $command) {
|
||||
@@ -155,9 +208,28 @@ class CommandTesterTest extends TestCase
|
||||
});
|
||||
|
||||
$tester = new CommandTester($command);
|
||||
$tester->setInputs(array('Bobby', 'Fine', 'France'));
|
||||
$tester->execute(array());
|
||||
$tester->setInputs(['Bobby', 'Fine', 'France']);
|
||||
$tester->execute([]);
|
||||
|
||||
$this->assertEquals(0, $tester->getStatusCode());
|
||||
}
|
||||
|
||||
public function testErrorOutput()
|
||||
{
|
||||
$command = new Command('foo');
|
||||
$command->addArgument('command');
|
||||
$command->addArgument('foo');
|
||||
$command->setCode(function ($input, $output) {
|
||||
$output->getErrorOutput()->write('foo');
|
||||
}
|
||||
);
|
||||
|
||||
$tester = new CommandTester($command);
|
||||
$tester->execute(
|
||||
['foo' => 'bar'],
|
||||
['capture_stderr_separately' => true]
|
||||
);
|
||||
|
||||
$this->assertSame('foo', $tester->getErrorOutput());
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user