Author: ts
Date: Mon Jan  7 17:11:06 2008
New Revision: 7091

Log:
- Fixed issue #11435: ConsoleInput does not reset $option->value;. The newly
  added reset() method can in addtion be used to manually reset all option and
  argument values.

Modified:
    trunk/ConsoleTools/ChangeLog
    trunk/ConsoleTools/src/input.php
    trunk/ConsoleTools/tests/input_test.php

Modified: trunk/ConsoleTools/ChangeLog
==============================================================================
--- trunk/ConsoleTools/ChangeLog [iso-8859-1] (original)
+++ trunk/ConsoleTools/ChangeLog [iso-8859-1] Mon Jan  7 17:11:06 2008
@@ -6,6 +6,13 @@
   (ezcConsoleQuestionMappingValidator) was introduced for this, which extends
   ezcConsoleQuestionCollectionValidator and is now used for the
   yes-no-question.
+
+1.3.2 - [RELEASEDATE]
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+- Fixed issue #11435: ConsoleInput does not reset $option->value;. The newly
+  added reset() method can in addtion be used to manually reset all option and
+  argument values.
 
 1.3.1 - Wednesday 28 November 2007
 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

Modified: trunk/ConsoleTools/src/input.php
==============================================================================
--- trunk/ConsoleTools/src/input.php [iso-8859-1] (original)
+++ trunk/ConsoleTools/src/input.php [iso-8859-1] Mon Jan  7 17:11:06 2008
@@ -165,6 +165,12 @@
      */
     private $arguments = array();
 
+    /**
+     * Wether the process() method has already been called.
+     * 
+     * @var bool
+     */
+    private $processed = false;
 
     /**
      * Indicates if an option was submitted, that has the isHelpOption flag 
set.
@@ -476,6 +482,12 @@
      */ 
     public function process( array $args = null )
     {
+        if ( $this->processed )
+        {
+            $this->reset();
+        }
+        $this->processed = true;
+
         if ( !isset( $args ) )
         {
             $args = isset( $argv ) ? $argv : isset( $_SERVER['argv'] ) ? 
$_SERVER['argv'] : array();
@@ -514,6 +526,30 @@
         }
         $this->processArguments( $args, $i );
         $this->checkRules();
+    }
+
+    /**
+     * Resets all option and argument values.
+     *
+     * This method is called automatically by [EMAIL PROTECTED] process()}, if 
this method
+     * is called twice or more, and may also be used to manually reset the
+     * values of all registered [EMAIL PROTECTED] and [EMAIL PROTECTED]
+     * ezcConsoleArgument} objects.
+     */
+    public function reset()
+    {
+        foreach ( $this->options as $option )
+        {
+            $option->value = false;
+        }
+        if ( $this->argumentDefinition !== null )
+        {
+            foreach ( $this->argumentDefinition as $argument )
+            {
+                $argument->value = null;
+            }
+        }
+        $this->arguments = array();
     }
 
     /**

Modified: trunk/ConsoleTools/tests/input_test.php
==============================================================================
--- trunk/ConsoleTools/tests/input_test.php [iso-8859-1] (original)
+++ trunk/ConsoleTools/tests/input_test.php [iso-8859-1] Mon Jan  7 17:11:06 
2008
@@ -1468,6 +1468,78 @@
         $this->commonProcessTestFailure( $args, 
"ezcConsoleOptionArgumentsViolationException" );
     }
 
+    public function testReset()
+    {
+        $this->input->argumentDefinition = new ezcConsoleArguments();
+        $this->input->argumentDefinition[0] = new ezcConsoleArgument( "number" 
);
+        $this->input->argumentDefinition[0]->type = ezcConsoleInput::TYPE_INT;
+        $this->input->argumentDefinition[1] = new ezcConsoleArgument( "string" 
);
+        $this->input->argumentDefinition[2] = new ezcConsoleArgument( "array" 
);
+        $this->input->argumentDefinition[2]->multiple = true;
+
+        $args = array( "foo.php", "-o", "'test file'", "-b", "23", "42", 
"'test string'", "val1", "val2" );
+
+        $res = array( 
+            'o' => "test file",
+            'b' => 23,
+        );
+        $this->commonProcessTestSuccess( $args, $res );
+
+        $this->assertEquals( 42, 
$this->input->argumentDefinition["number"]->value );
+        $this->assertEquals( "test string", 
$this->input->argumentDefinition["string"]->value );
+        $this->assertEquals( array( "val1", "val2" ), 
$this->input->argumentDefinition["array"]->value );
+        
+        // Old handling
+        $this->assertEquals( array( 42, "test string", "val1", "val2"), 
$this->input->getArguments() );
+
+        $this->input->reset();
+
+        $this->assertEquals( array(), $this->input->getOptionValues() );
+        foreach ( $this->input->argumentDefinition as $argument )
+        {
+            $this->assertNull( $argument->value );
+        }
+        $this->assertEquals( array(), $this->input->getArguments() );
+    }
+
+    public function testProcessTwice()
+    {
+        $this->input->argumentDefinition = new ezcConsoleArguments();
+        $this->input->argumentDefinition[0] = new ezcConsoleArgument( "number" 
);
+        $this->input->argumentDefinition[0]->type = ezcConsoleInput::TYPE_INT;
+        $this->input->argumentDefinition[1] = new ezcConsoleArgument( "string" 
);
+        $this->input->argumentDefinition[1]->mandatory = false;
+
+        $args = array( "foo.php", "-o", "'test file'", "-b", "23", "42", 
"'test string'" );
+
+        $res = array( 
+            'o' => "test file",
+            'b' => 23,
+        );
+        $this->commonProcessTestSuccess( $args, $res );
+
+        $this->assertEquals( 42, 
$this->input->argumentDefinition["number"]->value );
+        $this->assertEquals( "test string", 
$this->input->argumentDefinition["string"]->value );
+        
+        // Old handling
+        $this->assertEquals( array( 42, "test string" ), 
$this->input->getArguments() );
+
+        // Second run
+
+        $args = array( "foo.php", "-t", '23' );
+
+        $res = array( 
+            't' => true
+        );
+        $this->commonProcessTestSuccess( $args, $res );
+
+        $this->assertEquals( 23, 
$this->input->argumentDefinition["number"]->value );
+        $this->assertEquals( null, 
$this->input->argumentDefinition["string"]->value );
+        
+        // Old handling
+        $this->assertEquals( array( '23' ), $this->input->getArguments() );
+    }
+
     public function testProcessFailureNewArgumentsComplexType()
     {
         $this->input->argumentDefinition = new ezcConsoleArguments();


-- 
svn-components mailing list
svn-components@lists.ez.no
http://lists.ez.no/mailman/listinfo/svn-components

Reply via email to