Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Moving tests around and starting to build out HelpFormatter for gener…
…ating both text and xml help. Xml help in consoles is great for IDE consumption.
- Loading branch information
Showing
2 changed files
with
283 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,48 @@ | ||
<?php | ||
/** | ||
* A class to format help for console shells. Can format to either | ||
* text or XML formats | ||
* | ||
* PHP 5 | ||
* | ||
* CakePHP(tm) : Rapid Development Framework (http://cakephp.org) | ||
* Copyright 2005-2010, Cake Software Foundation, Inc. (http://cakefoundation.org) | ||
* | ||
* Licensed under The MIT License | ||
* Redistributions of files must retain the above copyright notice. | ||
* | ||
* @copyright Copyright 2005-2010, Cake Software Foundation, Inc. (http://cakefoundation.org) | ||
* @link http://cakephp.org CakePHP(tm) Project | ||
* @package cake | ||
* @subpackage cake.cake.console | ||
* @since CakePHP(tm) v 2.0 | ||
* @license MIT License (http://www.opensource.org/licenses/mit-license.php) | ||
*/ | ||
class HelpFormatter { | ||
/** | ||
* Build the help formatter for a an OptionParser | ||
* | ||
* @return void | ||
*/ | ||
public function __construct(ConsoleOptionParser $parser) { | ||
$this->_parser = $parser; | ||
} | ||
|
||
/** | ||
* Get the help as text. | ||
* | ||
* @return string | ||
*/ | ||
public function text() { | ||
|
||
} | ||
|
||
/** | ||
* Get the help as an xml string. | ||
* | ||
* @return string | ||
*/ | ||
public function xml() { | ||
|
||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,235 @@ | ||
<?php | ||
|
||
require_once CONSOLE_LIBS . 'console_option_parser.php'; | ||
require_once CONSOLE_LIBS . 'help_formatter.php'; | ||
|
||
class HelpFormatterTest extends CakeTestCase { | ||
|
||
/** | ||
* test that the console max width is respected when generating help. | ||
* | ||
* @return void | ||
*/ | ||
function testWidthFormatting() { | ||
$parser = new ConsoleOptionParser('test', false); | ||
$parser->description(__('This is fifteen This is fifteen This is fifteen')) | ||
->addOption('four', array('help' => 'this is help text this is help text')) | ||
->addArgument('four', array('help' => 'this is help text this is help text')) | ||
->addSubcommand('four', array('help' => 'this is help text this is help text')); | ||
$result = $parser->help(null, 30); | ||
$expected = <<<TEXT | ||
This is fifteen This is | ||
fifteen This is fifteen | ||
<info>Usage:</info> | ||
cake test [subcommand] [-h] [--four] [<four>] | ||
<info>Subcommands:</info> | ||
four this is help text this | ||
is help text | ||
To see help on a subcommand use <info>`cake test [subcommand] --help`</info> | ||
<info>Options:</info> | ||
--help, -h Display this help. | ||
--four this is help text | ||
this is help text | ||
<info>Arguments:</info> | ||
four this is help text this | ||
is help text | ||
<comment>(optional)</comment> | ||
TEXT; | ||
$this->assertEquals($expected, $result, 'Generated help is too wide'); | ||
} | ||
|
||
/** | ||
* test help() with options and arguments that have choices. | ||
* | ||
* @return void | ||
*/ | ||
function testHelpWithChoices() { | ||
$parser = new ConsoleOptionParser('mycommand', false); | ||
$parser->addOption('test', array('help' => 'A test option.', 'choices' => array('one', 'two'))) | ||
->addArgument('type', array( | ||
'help' => 'Resource type.', | ||
'choices' => array('aco', 'aro'), | ||
'required' => true | ||
)) | ||
->addArgument('other_longer', array('help' => 'Another argument.')); | ||
|
||
$result = $parser->help(); | ||
$expected = <<<TEXT | ||
<info>Usage:</info> | ||
cake mycommand [-h] [--test one|two] <aco|aro> [<other_longer>] | ||
<info>Options:</info> | ||
--help, -h Display this help. | ||
--test A test option. <comment>(choices: one|two)</comment> | ||
<info>Arguments:</info> | ||
type Resource type. <comment>(choices: aco|aro)</comment> | ||
other_longer Another argument. <comment>(optional)</comment> | ||
TEXT; | ||
$this->assertEquals($expected, $result, 'Help does not match'); | ||
} | ||
|
||
/** | ||
* test description and epilog in the help | ||
* | ||
* @return void | ||
*/ | ||
function testHelpDescriptionAndEpilog() { | ||
$parser = new ConsoleOptionParser('mycommand', false); | ||
$parser->description('Description text') | ||
->epilog('epilog text') | ||
->addOption('test', array('help' => 'A test option.')) | ||
->addArgument('model', array('help' => 'The model to make.', 'required' => true)); | ||
|
||
$result = $parser->help(); | ||
$expected = <<<TEXT | ||
Description text | ||
<info>Usage:</info> | ||
cake mycommand [-h] [--test] <model> | ||
<info>Options:</info> | ||
--help, -h Display this help. | ||
--test A test option. | ||
<info>Arguments:</info> | ||
model The model to make. | ||
epilog text | ||
TEXT; | ||
$this->assertEquals($expected, $result, 'Help is wrong.'); | ||
} | ||
|
||
/** | ||
* test that help() outputs subcommands. | ||
* | ||
* @return void | ||
*/ | ||
function testHelpSubcommand() { | ||
$parser = new ConsoleOptionParser('mycommand', false); | ||
$parser->addSubcommand('method', array('help' => 'This is another command')) | ||
->addOption('test', array('help' => 'A test option.')); | ||
|
||
$result = $parser->help(); | ||
$expected = <<<TEXT | ||
<info>Usage:</info> | ||
cake mycommand [subcommand] [-h] [--test] | ||
<info>Subcommands:</info> | ||
method This is another command | ||
To see help on a subcommand use <info>`cake mycommand [subcommand] --help`</info> | ||
<info>Options:</info> | ||
--help, -h Display this help. | ||
--test A test option. | ||
TEXT; | ||
$this->assertEquals($expected, $result, 'Help is not correct.'); | ||
} | ||
|
||
/** | ||
* test that help() with a command param shows the help for a subcommand | ||
* | ||
* @return void | ||
*/ | ||
function testHelpSubcommandHelp() { | ||
$subParser = new ConsoleOptionParser('method', false); | ||
$subParser->addOption('connection', array('help' => 'Db connection.')); | ||
|
||
$parser = new ConsoleOptionParser('mycommand', false); | ||
$parser->addSubcommand('method', array( | ||
'help' => 'This is another command', | ||
'parser' => $subParser | ||
)) | ||
->addOption('test', array('help' => 'A test option.')); | ||
|
||
$result = $parser->help('method'); | ||
$expected = <<<TEXT | ||
<info>Usage:</info> | ||
cake mycommand method [-h] [--connection] | ||
<info>Options:</info> | ||
--help, -h Display this help. | ||
--connection Db connection. | ||
TEXT; | ||
$this->assertEquals($expected, $result, 'Help is not correct.'); | ||
} | ||
|
||
/** | ||
* test getting help with defined options. | ||
* | ||
* @return void | ||
*/ | ||
function testHelpWithOptions() { | ||
$parser = new ConsoleOptionParser('mycommand', false); | ||
$parser->addOption('test', array('help' => 'A test option.')) | ||
->addOption('connection', array( | ||
'short' => 'c', 'help' => 'The connection to use.', 'default' => 'default' | ||
)); | ||
|
||
$result = $parser->help(); | ||
$expected = <<<TEXT | ||
<info>Usage:</info> | ||
cake mycommand [-h] [--test] [-c default] | ||
<info>Options:</info> | ||
--help, -h Display this help. | ||
--test A test option. | ||
--connection, -c The connection to use. <comment>(default: | ||
default)</comment> | ||
TEXT; | ||
$this->assertEquals($expected, $result, 'Help does not match'); | ||
} | ||
|
||
/** | ||
* test getting help with defined options. | ||
* | ||
* @return void | ||
*/ | ||
function testHelpWithOptionsAndArguments() { | ||
$parser = new ConsoleOptionParser('mycommand', false); | ||
$parser->addOption('test', array('help' => 'A test option.')) | ||
->addArgument('model', array('help' => 'The model to make.', 'required' => true)) | ||
->addArgument('other_longer', array('help' => 'Another argument.')); | ||
|
||
$result = $parser->help(); | ||
$expected = <<<TEXT | ||
<info>Usage:</info> | ||
cake mycommand [-h] [--test] <model> [<other_longer>] | ||
<info>Options:</info> | ||
--help, -h Display this help. | ||
--test A test option. | ||
<info>Arguments:</info> | ||
model The model to make. | ||
other_longer Another argument. <comment>(optional)</comment> | ||
TEXT; | ||
$this->assertEquals($expected, $result, 'Help does not match'); | ||
} | ||
} |