From 587c7071b4448fab8f185110993e035b5a6c38a3 Mon Sep 17 00:00:00 2001 From: mark_story Date: Tue, 20 Nov 2012 22:42:44 -0500 Subject: [PATCH] Fix incorrect order of arguments when added out of sequence. Fixes #3385 --- lib/Cake/Console/ConsoleOptionParser.php | 1 + .../Case/Console/ConsoleOptionParserTest.php | 21 ++++++++++++++++++- 2 files changed, 21 insertions(+), 1 deletion(-) diff --git a/lib/Cake/Console/ConsoleOptionParser.php b/lib/Cake/Console/ConsoleOptionParser.php index 1983e22ce9f..16371165a99 100644 --- a/lib/Cake/Console/ConsoleOptionParser.php +++ b/lib/Cake/Console/ConsoleOptionParser.php @@ -345,6 +345,7 @@ public function addArgument($name, $params = array()) { $arg = new ConsoleInputArgument($options); } $this->_args[$index] = $arg; + ksort($this->_args); return $this; } diff --git a/lib/Cake/Test/Case/Console/ConsoleOptionParserTest.php b/lib/Cake/Test/Case/Console/ConsoleOptionParserTest.php index 0677b09c4a0..2cf2659953e 100644 --- a/lib/Cake/Test/Case/Console/ConsoleOptionParserTest.php +++ b/lib/Cake/Test/Case/Console/ConsoleOptionParserTest.php @@ -314,10 +314,29 @@ public function testAddArgumentObject() { $parser = new ConsoleOptionParser('test', false); $parser->addArgument(new ConsoleInputArgument('test')); $result = $parser->arguments(); - $this->assertEquals(1, count($result)); + $this->assertCount(1, $result); $this->assertEquals('test', $result[0]->name()); } +/** + * Test adding arguments out of order. + * + * @return void + */ + public function testAddArgumentOutOfOrder() { + $parser = new ConsoleOptionParser('test', false); + $parser->addArgument('name', array('index' => 1, 'help' => 'first argument')) + ->addArgument('bag', array('index' => 2, 'help' => 'second argument')) + ->addArgument('other', array('index' => 0, 'help' => 'Zeroth argument')); + + $result = $parser->arguments(); + $this->assertCount(3, $result); + $this->assertEquals('other', $result[0]->name()); + $this->assertEquals('name', $result[1]->name()); + $this->assertEquals('bag', $result[2]->name()); + $this->assertSame(array(0, 1, 2), array_keys($result)); + } + /** * test overwriting positional arguments. *