123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505 |
- <?php
- /**
- * HelpFormatterTest file
- *
- * PHP 5
- *
- * CakePHP(tm) Tests <http://book.cakephp.org/2.0/en/development/testing.html>
- * Copyright 2005-2012, Cake Software Foundation, Inc.
- *
- * Licensed under The MIT License
- * Redistributions of files must retain the above copyright notice
- *
- * @copyright Copyright 2005-2012, Cake Software Foundation, Inc.
- * @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 MIT License (http://www.opensource.org/licenses/mit-license.php)
- */
- App::uses('ConsoleOptionParser', 'Console');
- App::uses('HelpFormatter', '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 = <<<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->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 = <<<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->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 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->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);
- }
- }
|