Browse Source

ConsoleOptionParser addSubcommand Sorting - #11838

Implemented an optional sort parameter to \Cake\Console\ConsoleOptionParser::addSubcommand
Added unit test for the new parameter.
Ronald Chaplin 8 years ago
parent
commit
99221975b1

+ 5 - 2
src/Console/ConsoleOptionParser.php

@@ -576,9 +576,10 @@ class ConsoleOptionParser
      *
      * @param \Cake\Console\ConsoleInputSubcommand|string $name Name of the subcommand. Will also accept an instance of ConsoleInputSubcommand
      * @param array $options Array of params, see above.
+     * @param boolean $sort
      * @return $this
      */
-    public function addSubcommand($name, array $options = [])
+    public function addSubcommand($name, array $options = [], $sort = true)
     {
         if ($name instanceof ConsoleInputSubcommand) {
             $command = $name;
@@ -595,7 +596,9 @@ class ConsoleOptionParser
             $command = new ConsoleInputSubcommand($options);
         }
         $this->_subcommands[$name] = $command;
-        asort($this->_subcommands);
+        if ($sort) {
+            asort($this->_subcommands);
+        }
 
         return $this;
     }

+ 14 - 0
tests/TestCase/Console/ConsoleOptionParserTest.php

@@ -652,6 +652,20 @@ class ConsoleOptionParserTest extends TestCase
     }
 
     /**
+     * test addSubcommand without sorting applied.
+     */
+    public function testAddSubcommandSort()
+    {
+        $parser = new ConsoleOptionParser('test', false);
+        $parser->addSubcommand(new ConsoleInputSubcommand('betaTest'), [], false);
+        $parser->addSubcommand(new ConsoleInputSubcommand('alphaTest'), [], false);
+        $result = $parser->subcommands();
+        $this->assertCount(2, $result);
+        $firstResult = key($result);
+        $this->assertEquals('betaTest', $firstResult);
+    }
+
+    /**
      * test removeSubcommand with an object.
      *
      * @return void