Skip to content

Commit

Permalink
bug #16123 Command list ordering fix (spdionis, fabpot)
Browse files Browse the repository at this point in the history
This PR was merged into the 2.3 branch.

Discussion
----------

Command list ordering fix

| Q             | A
| ------------- | ---
| Bug fix?      | yes
| New feature?  | no
| BC breaks?    | no
| Deprecations? | no
| Tests pass?   | yes
| Fixed tickets | n/a
| License       | MIT

Makes sure that global commands are always first.

Commits
-------

2984f8e fixed previous commit
70f2b3e global commands are always first in command list
  • Loading branch information
fabpot committed Oct 5, 2015
2 parents 416d6eb + 2984f8e commit 136722c
Show file tree
Hide file tree
Showing 3 changed files with 65 additions and 3 deletions.
Expand Up @@ -134,15 +134,17 @@ private function inspectApplication()
private function sortCommands(array $commands)
{
$namespacedCommands = array();
$globalCommands = array();
foreach ($commands as $name => $command) {
$key = $this->application->extractNamespace($name, 1);
if (!$key) {
$key = '_global';
$globalCommands['_global'][$name] = $command;
} else {
$namespacedCommands[$key][$name] = $command;
}

$namespacedCommands[$key][$name] = $command;
}
ksort($namespacedCommands);
$namespacedCommands = array_merge($globalCommands, $namespacedCommands);

foreach ($namespacedCommands as &$commandsSet) {
ksort($commandsSet);
Expand Down
48 changes: 48 additions & 0 deletions src/Symfony/Component/Console/Tests/Command/ListCommandTest.php
Expand Up @@ -61,4 +61,52 @@ public function testExecuteListsCommandsWithNamespaceArgument()

$this->assertEquals($output, $commandTester->getDisplay(true));
}

public function testExecuteListsCommandsOrder()
{
require_once realpath(__DIR__.'/../Fixtures/Foo6Command.php');
$application = new Application();
$application->add(new \Foo6Command());
$commandTester = new CommandTester($command = $application->get('list'));
$commandTester->execute(array('command' => $command->getName()), array('decorated' => false));
$output = <<<EOF
Console Tool
Usage:
command [options] [arguments]
Options:
--help -h Display this help message
--quiet -q Do not output any message
--verbose -v|vv|vvv Increase the verbosity of messages: 1 for normal output, 2 for more verbose output and 3 for debug
--version -V Display this application version
--ansi Force ANSI output
--no-ansi Disable ANSI output
--no-interaction -n Do not ask any interactive question
Available commands:
help Displays help for a command
list Lists commands
0foo
0foo:bar 0foo:bar command
EOF;

$this->assertEquals($output, trim($commandTester->getDisplay(true)));
}

public function testExecuteListsCommandsOrderRaw()
{
require_once realpath(__DIR__.'/../Fixtures/Foo6Command.php');
$application = new Application();
$application->add(new \Foo6Command());
$commandTester = new CommandTester($command = $application->get('list'));
$commandTester->execute(array('command' => $command->getName(), '--raw' => true));
$output = <<<EOF
help Displays help for a command
list Lists commands
0foo:bar 0foo:bar command
EOF;

$this->assertEquals($output, trim($commandTester->getDisplay(true)));
}
}
12 changes: 12 additions & 0 deletions src/Symfony/Component/Console/Tests/Fixtures/Foo6Command.php
@@ -0,0 +1,12 @@
<?php


use Symfony\Component\Console\Command\Command;

class Foo6Command extends Command
{
protected function configure()
{
$this->setName('0foo:bar')->setDescription('0foo:bar command');
}
}

0 comments on commit 136722c

Please sign in to comment.