Blame | Last modification | View Log | RSS feed
<?php/*** HelpFormatterTest file** CakePHP(tm) Tests <http://book.cakephp.org/2.0/en/development/testing.html>* Copyright (c) Cake Software Foundation, Inc. (http://cakefoundation.org)** Licensed under The MIT License* For full copyright and license information, please see the LICENSE.txt* Redistributions of files must retain the above copyright notice** @copyright Copyright (c) Cake Software Foundation, Inc. (http://cakefoundation.org)* @link http://book.cakephp.org/2.0/en/development/testing.html CakePHP(tm) Tests* @package Cake.Test.Case.Console* @since CakePHP(tm) v 2.0* @license http://www.opensource.org/licenses/mit-license.php MIT License*/App::uses('ConsoleOptionParser', 'Console');App::uses('HelpFormatter', 'Console');/*** Class HelpFormatterTest** @package Cake.Test.Case.Console*/class HelpFormatterTest extends CakeTestCase {/*** test that the console max width is respected when generating help.** @return void*/public 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'));$formatter = new HelpFormatter($parser);$result = $formatter->text(30);$expected = <<<TEXTThis is fifteen This isfifteen This is fifteen<info>Usage:</info>cake test [subcommand] [-h] [--four] [<four>]<info>Subcommands:</info>four this is help text thisis help textTo see help on a subcommand use <info>`cake test [subcommand] --help`</info><info>Options:</info>--help, -h Display this help.--four this is help textthis is help text<info>Arguments:</info>four this is help text thisis help text<comment>(optional)</comment>TEXT;$this->assertTextEquals($expected, $result, 'Generated help is too wide');}/*** test help() with options and arguments that have choices.** @return void*/public 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.'));$formatter = new HelpFormatter($parser);$result = $formatter->text();$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->assertTextEquals($expected, $result, 'Help does not match');}/*** test description and epilog in the help** @return void*/public 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));$formatter = new HelpFormatter($parser);$result = $formatter->text();$expected = <<<TEXTDescription 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 textTEXT;$this->assertTextEquals($expected, $result, 'Help is wrong.');}/*** test that help() outputs subcommands.** @return void*/public function testHelpSubcommand() {$parser = new ConsoleOptionParser('mycommand', false);$parser->addSubcommand('method', array('help' => 'This is another command'))->addOption('test', array('help' => 'A test option.'));$formatter = new HelpFormatter($parser);$result = $formatter->text();$expected = <<<TEXT<info>Usage:</info>cake mycommand [subcommand] [-h] [--test]<info>Subcommands:</info>method This is another commandTo 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->assertTextEquals($expected, $result, 'Help is not correct.');}/*** test getting help with defined options.** @return void*/public 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'));$formatter = new HelpFormatter($parser);$result = $formatter->text();$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->assertTextEquals($expected, $result, 'Help does not match');}/*** test getting help with defined options.** @return void*/public 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.'));$formatter = new HelpFormatter($parser);$result = $formatter->text();$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->assertTextEquals($expected, $result, 'Help does not match');}/*** Test that a long set of options doesn't make useless output.** @return void*/public function testHelpWithLotsOfOptions() {$parser = new ConsoleOptionParser('mycommand', false);$parser->addOption('test', array('help' => 'A test option.'))->addOption('test2', array('help' => 'A test option.'))->addOption('test3', array('help' => 'A test option.'))->addOption('test4', array('help' => 'A test option.'))->addOption('test5', array('help' => 'A test option.'))->addOption('test6', array('help' => 'A test option.'))->addOption('test7', array('help' => 'A test option.'))->addArgument('model', array('help' => 'The model to make.', 'required' => true))->addArgument('other_longer', array('help' => 'Another argument.'));$formatter = new HelpFormatter($parser);$result = $formatter->text();$expected = 'cake mycommand [options] <model> [<other_longer>]';$this->assertContains($expected, $result);}/*** Test that a long set of arguments doesn't make useless output.** @return void*/public function testHelpWithLotsOfArguments() {$parser = new ConsoleOptionParser('mycommand', false);$parser->addArgument('test', array('help' => 'A test option.'))->addArgument('test2', array('help' => 'A test option.'))->addArgument('test3', array('help' => 'A test option.'))->addArgument('test4', array('help' => 'A test option.'))->addArgument('test5', array('help' => 'A test option.'))->addArgument('test6', array('help' => 'A test option.'))->addArgument('test7', array('help' => 'A test option.'))->addArgument('model', array('help' => 'The model to make.', 'required' => true))->addArgument('other_longer', array('help' => 'Another argument.'));$formatter = new HelpFormatter($parser);$result = $formatter->text();$expected = 'cake mycommand [-h] [arguments]';$this->assertContains($expected, $result);}/*** test help() with options and arguments that have choices.** @return void*/public function testXmlHelpWithChoices() {$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.'));$formatter = new HelpFormatter($parser);$result = $formatter->xml();$expected = <<<TEXT<?xml version="1.0"?><shell><name>mycommand</name><description>Description text</description><subcommands /><options><option name="--help" short="-h" help="Display this help." boolean="1"><default></default><choices></choices></option><option name="--test" short="" help="A test option." boolean="0"><default></default><choices><choice>one</choice><choice>two</choice></choices></option></options><arguments><argument name="type" help="Resource type." required="1"><choices><choice>aco</choice><choice>aro</choice></choices></argument></arguments><epilog>epilog text</epilog></shell>TEXT;$this->assertEquals(new DomDocument($expected), new DomDocument($result), 'Help does not match');}/*** test description and epilog in the help** @return void*/public function testXmlHelpDescriptionAndEpilog() {$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));$formatter = new HelpFormatter($parser);$result = $formatter->xml();$expected = <<<TEXT<?xml version="1.0"?><shell><name>mycommand</name><description>Description text</description><subcommands /><options><option name="--help" short="-h" help="Display this help." boolean="1"><default></default><choices></choices></option><option name="--test" short="" help="A test option." boolean="0"><default></default><choices></choices></option></options><arguments><argument name="model" help="The model to make." required="1"><choices></choices></argument></arguments><epilog>epilog text</epilog></shell>TEXT;$this->assertEquals(new DomDocument($expected), new DomDocument($result), 'Help does not match');}/*** test that help() outputs subcommands.** @return void*/public function testXmlHelpSubcommand() {$parser = new ConsoleOptionParser('mycommand', false);$parser->addSubcommand('method', array('help' => 'This is another command'))->addOption('test', array('help' => 'A test option.'));$formatter = new HelpFormatter($parser);$result = $formatter->xml();$expected = <<<TEXT<?xml version="1.0"?><shell><name>mycommand</name><description/><subcommands><command name="method" help="This is another command" /></subcommands><options><option name="--help" short="-h" help="Display this help." boolean="1"><default></default><choices></choices></option><option name="--test" short="" help="A test option." boolean="0"><default></default><choices></choices></option></options><arguments/><epilog/></shell>TEXT;$this->assertEquals(new DomDocument($expected), new DomDocument($result), 'Help does not match');}/*** test getting help with defined options.** @return void*/public function testXmlHelpWithOptions() {$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'));$formatter = new HelpFormatter($parser);$result = $formatter->xml();$expected = <<<TEXT<?xml version="1.0"?><shell><name>mycommand</name><description/><subcommands/><options><option name="--help" short="-h" help="Display this help." boolean="1"><default></default><choices></choices></option><option name="--test" short="" help="A test option." boolean="0"><default></default><choices></choices></option><option name="--connection" short="-c" help="The connection to use." boolean="0"><default>default</default><choices></choices></option></options><arguments/><epilog/></shell>TEXT;$this->assertEquals(new DomDocument($expected), new DomDocument($result), 'Help does not match');}/*** test getting help with defined options.** @return void*/public function testXmlHelpWithOptionsAndArguments() {$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.'));$formatter = new HelpFormatter($parser);$result = $formatter->xml();$expected = <<<TEXT<?xml version="1.0"?><shell><name>mycommand</name><description/><subcommands/><options><option name="--help" short="-h" help="Display this help." boolean="1"><default></default><choices></choices></option><option name="--test" short="" help="A test option." boolean="0"><default></default><choices></choices></option></options><arguments><argument name="model" help="The model to make." required="1"><choices></choices></argument><argument name="other_longer" help="Another argument." required="0"><choices></choices></argument></arguments><epilog/></shell>TEXT;$this->assertEquals(new DomDocument($expected), new DomDocument($result), 'Help does not match');}/*** Test xml help as object** @return void*/public function testXmlHelpAsObject() {$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.'));$formatter = new HelpFormatter($parser);$result = $formatter->xml(false);$this->assertInstanceOf('SimpleXmlElement', $result);}}