Skip to content

Commit

Permalink
[Console] Added the possibility to set a different default command
Browse files Browse the repository at this point in the history
  • Loading branch information
dcsg authored and fabpot committed Jan 7, 2014
1 parent f499094 commit 418de05
Show file tree
Hide file tree
Showing 3 changed files with 52 additions and 2 deletions.
16 changes: 14 additions & 2 deletions src/Symfony/Component/Console/Application.php
Expand Up @@ -67,6 +67,7 @@ class Application
private $helperSet;
private $dispatcher;
private $terminalDimensions;
private $defaultCommand;

/**
* Constructor.
Expand All @@ -80,6 +81,7 @@ public function __construct($name = 'UNKNOWN', $version = 'UNKNOWN')
{
$this->name = $name;
$this->version = $version;
$this->defaultCommand = 'list';
$this->helperSet = $this->getDefaultHelperSet();
$this->definition = $this->getDefaultInputDefinition();

Expand Down Expand Up @@ -179,8 +181,8 @@ public function doRun(InputInterface $input, OutputInterface $output)
}

if (!$name) {
$name = 'list';
$input = new ArrayInput(array('command' => 'list'));
$name = $this->defaultCommand;
$input = new ArrayInput(array('command' => $this->defaultCommand));
}

// the command name MUST be the first element of the input
Expand Down Expand Up @@ -1086,4 +1088,14 @@ private function findAlternatives($name, $collection)

return array_keys($alternatives);
}

/**
* Sets the default Command name.
*
* @param string $commandName The Command name
*/
public function setDefaultCommand($commandName)
{
$this->defaultCommand = $commandName;
}
}
1 change: 1 addition & 0 deletions src/Symfony/Component/Console/CHANGELOG.md
Expand Up @@ -4,6 +4,7 @@ CHANGELOG
2.5.0
-----

* added a way to set a default command instead of `ListCommand`
* added a way to set the process name of a command

2.4.0
Expand Down
37 changes: 37 additions & 0 deletions src/Symfony/Component/Console/Tests/ApplicationTest.php
Expand Up @@ -881,6 +881,28 @@ protected function getDispatcher()

return $dispatcher;
}

public function testSetRunCustomDefaultCommand()
{
$command = new \FooCommand();

$application = new Application();
$application->setAutoExit(false);
$application->add($command);
$application->setDefaultCommand($command->getName());

$tester = new ApplicationTester($application);
$tester->run(array());
$this->assertEquals('interact called'.PHP_EOL.'called'.PHP_EOL, $tester->getDisplay(), 'Application runs the default set command if different from \'list\' command');

$application = new CustomDefaultCommandApplication();
$application->setAutoExit(false);

$tester = new ApplicationTester($application);
$tester->run(array());

$this->assertEquals('interact called'.PHP_EOL.'called'.PHP_EOL, $tester->getDisplay(), 'Application runs the default set command if different from \'list\' command');
}
}

class CustomApplication extends Application
Expand All @@ -905,3 +927,18 @@ protected function getDefaultHelperSet()
return new HelperSet(array(new FormatterHelper()));
}
}

class CustomDefaultCommandApplication extends Application
{
/**
* Overwrites the constructor in order to set a different default command.
*/
public function __construct()
{
parent::__construct();

$command = new \FooCommand();
$this->add($command);
$this->setDefaultCommand($command->getName());
}
}

0 comments on commit 418de05

Please sign in to comment.