/** * Finds and registers Commands. * * @param Application $application An Application instance */ public function registerCommands(Application $application) { if (!($dir = realpath($this->getPath() . '/Command'))) { return; } $finder = new Finder(); $finder->files()->name('*Command.php')->in($dir); $prefix = $this->namespacePrefix . '\\' . $this->name . '\\Command'; foreach ($finder as $file) { $r = new \ReflectionClass($prefix . strtr($file->getPath(), array($dir => '', '/' => '\\')) . '\\' . basename($file, '.php')); if ($r->isSubclassOf('Symfony\\Component\\Console\\Command\\Command') && !$r->isAbstract()) { $application->addCommand($r->newInstance()); } } }
public function testRun() { $application = new Application(); $application->setAutoExit(false); $application->setCatchExceptions(false); $application->addCommand($command = new \Foo1Command()); $_SERVER['argv'] = array('cli.php', 'foo:bar1'); ob_start(); $application->run(); ob_end_clean(); $this->assertEquals('Symfony\\Component\\Console\\Input\\ArgvInput', get_class($command->input), '->run() creates an ArgvInput by default if none is given'); $this->assertEquals('Symfony\\Component\\Console\\Output\\ConsoleOutput', get_class($command->output), '->run() creates a ConsoleOutput by default if none is given'); $application = new Application(); $application->setAutoExit(false); $application->setCatchExceptions(false); $tester = new ApplicationTester($application); $tester->run(array()); $this->assertStringEqualsFile(self::$fixturesPath . '/application_run1.txt', $tester->getDisplay(), '->run() runs the list command if no argument is passed'); $tester->run(array('--help' => true)); $this->assertStringEqualsFile(self::$fixturesPath . '/application_run2.txt', $tester->getDisplay(), '->run() runs the help command if --help is passed'); $tester->run(array('-h' => true)); $this->assertStringEqualsFile(self::$fixturesPath . '/application_run2.txt', $tester->getDisplay(), '->run() runs the help command if -h is passed'); $application = new Application(); $application->setAutoExit(false); $application->setCatchExceptions(false); $tester = new ApplicationTester($application); $tester->run(array('command' => 'list', '--help' => true)); $this->assertStringEqualsFile(self::$fixturesPath . '/application_run3.txt', $tester->getDisplay(), '->run() displays the help if --help is passed'); $tester->run(array('command' => 'list', '-h' => true)); $this->assertStringEqualsFile(self::$fixturesPath . '/application_run3.txt', $tester->getDisplay(), '->run() displays the help if -h is passed'); $application = new Application(); $application->setAutoExit(false); $application->setCatchExceptions(false); $tester = new ApplicationTester($application); $tester->run(array('--ansi' => true)); $this->assertTrue($tester->getOutput()->isDecorated(), '->run() forces color output if --ansi is passed'); $tester->run(array('-a' => true)); $this->assertTrue($tester->getOutput()->isDecorated(), '->run() forces color output if -a is passed'); $application = new Application(); $application->setAutoExit(false); $application->setCatchExceptions(false); $tester = new ApplicationTester($application); $tester->run(array('--version' => true)); $this->assertStringEqualsFile(self::$fixturesPath . '/application_run4.txt', $tester->getDisplay(), '->run() displays the program version if --version is passed'); $tester->run(array('-V' => true)); $this->assertStringEqualsFile(self::$fixturesPath . '/application_run4.txt', $tester->getDisplay(), '->run() displays the program version if -v is passed'); $application = new Application(); $application->setAutoExit(false); $application->setCatchExceptions(false); $tester = new ApplicationTester($application); $tester->run(array('command' => 'list', '--quiet' => true)); $this->assertEquals('', $tester->getDisplay(), '->run() removes all output if --quiet is passed'); $tester->run(array('command' => 'list', '-q' => true)); $this->assertEquals('', $tester->getDisplay(), '->run() removes all output if -q is passed'); $application = new Application(); $application->setAutoExit(false); $application->setCatchExceptions(false); $tester = new ApplicationTester($application); $tester->run(array('command' => 'list', '--verbose' => true)); $this->assertEquals(Output::VERBOSITY_VERBOSE, $tester->getOutput()->getVerbosity(), '->run() sets the output to verbose is --verbose is passed'); $tester->run(array('command' => 'list', '-v' => true)); $this->assertEquals(Output::VERBOSITY_VERBOSE, $tester->getOutput()->getVerbosity(), '->run() sets the output to verbose is -v is passed'); $application = new Application(); $application->setAutoExit(false); $application->setCatchExceptions(false); $application->addCommand(new \FooCommand()); $tester = new ApplicationTester($application); $tester->run(array('command' => 'foo:bar', '--no-interaction' => true)); $this->assertEquals("called\n", $tester->getDisplay(), '->run() does not called interact() if --no-interaction is passed'); $tester->run(array('command' => 'foo:bar', '-n' => true)); $this->assertEquals("called\n", $tester->getDisplay(), '->run() does not called interact() if -n is passed'); }