Prechádzať zdrojové kódy

(fix): Bug Fix #377

Antione LUCAS 11 rokov pred
rodič
commit
4613a810a1

+ 27 - 0
library/Zend/Console/Getopt.php

@@ -730,6 +730,33 @@ class Zend_Console_Getopt
         $this->_parsed = true;
         return $this;
     }
+    
+    public function checkRequiredArguments(){
+        
+        
+        foreach($this->_rules as $name=>$rule){
+            
+            if($rule['param'] === 'required'){
+                
+                $defined = false;
+                
+                foreach($rule['alias'] as $alias){
+                    
+                    $defined = $defined === true ? true : array_key_exists($alias, $this->_options);
+                    
+                }
+                if($defined === false){
+                    
+                    require_once 'Zend/Console/Getopt/Exception.php';
+                    throw new Zend_Console_Getopt_Exception(
+                        "Option \"$alias\" requires a parameter.",
+                            $this->getUsageMessage());
+                    
+                }
+            }            
+        }
+        
+    }
 
     /**
      * Parse command-line arguments for a single long option.

+ 44 - 0
tests/Zend/Console/GetoptTest.php

@@ -268,6 +268,50 @@ class Zend_Console_GetoptTest extends PHPUnit_Framework_TestCase
         unset($opts->a);
         $this->assertFalse(isset($opts->a));
     }
+    
+    public function testVerifyRequiredArgument(){
+        $opts = new Zend_Console_Getopt(array(
+            'apple|a=s' =>"First required argument"
+        ));
+        try {   
+            $opts->parse();
+            $opts->checkRequiredArguments();
+            $this->fail('Expected to catch a Zend_Console_Getopt_Exception');
+        }
+        catch (Exception $e){
+            $this->assertTrue($e instanceof Zend_Console_Getopt_Exception,
+                'Expected Zend_Console_Getopt_Exception, got '. get_class($e));
+            
+            $this->assertEquals( 'Option "a" requires a parameter.' , $e->getMessage() );
+        }        
+    }
+    
+    public function testEmptyRequiredOption(){
+        
+        $opts = new Zend_Console_Getopt(array(
+            'apple|a=s' =>"First required argument",
+            'banana|b=i'  =>"Second required argument"
+        ));
+        
+        $opts->addArguments(array(
+                "-a",
+                "-b",
+                "123"
+        ));
+            
+        try {   
+            $opts->parse();
+            $opts->checkRequiredArguments();
+            $this->fail('Expected to catch a Zend_Console_Getopt_Exception');
+             
+         } catch (Exception $e) {             
+             
+            $this->assertTrue($e instanceof Zend_Console_Getopt_Exception,
+                'Expected Zend_Console_Getopt_Exception, got '. get_class($e));
+            
+            $this->assertEquals( 'Option "a" requires a parameter.' , $e->getMessage() );
+         }
+    }
 
     /**
      * @group ZF-5948