瀏覽代碼

ZF-6708: Integer zero should be considered non-empty

git-svn-id: http://framework.zend.com/svn/framework/standard/trunk@18185 44c647ce-9c0f-0410-b52a-842ac1e357ba
matthew 16 年之前
父節點
當前提交
d0d7c98eb4

+ 1 - 1
library/Zend/Filter/Input.php

@@ -1025,4 +1025,4 @@ class Zend_Filter_Input
         return $object;
     }
 
-}
+}

+ 2 - 0
library/Zend/Validate/NotEmpty.php

@@ -66,6 +66,8 @@ class Zend_Validate_NotEmpty extends Zend_Validate_Abstract
         ) {
             $this->_error(self::IS_EMPTY);
             return false;
+        } elseif (is_int($value) && (0 === $value)) {
+            return true;
         } elseif (!is_string($value) && empty($value)) {
             $this->_error(self::IS_EMPTY);
             return false;

+ 29 - 0
tests/Zend/Filter/InputTest.php

@@ -545,6 +545,10 @@ class Zend_Filter_InputTest extends PHPUnit_Framework_TestCase
         $this->assertEquals("You must give a non-empty value for field 'field1'", current($messages['field1']));
     }
 
+    /**
+     * @group ZF-6708
+     * @group ZF-1912
+     */
     public function testValidatorAllowEmptyWithOtherValidatersProcessing()
     {
         $data = array(
@@ -569,6 +573,31 @@ class Zend_Filter_InputTest extends PHPUnit_Framework_TestCase
         $this->assertEquals("You must give a non-empty value for field 'field1'", current($messages['field1']));
     }
 
+    /**
+     * @group ZF-6708
+     */
+    public function testValidatorShouldNotProcessZeroAsEmpty()
+    {
+        $validation = array(
+            'offset' => array (
+                'digits',
+                'presence' => 'required'
+            )
+        );
+        $data = array(
+            'offset' => 0,
+        );
+
+        $input = new Zend_Filter_Input(null, $validation, $data);
+        $this->assertFalse($input->hasMissing(), 'Expected hasMissing() to return false');
+        $this->assertFalse($input->hasInvalid(), 'Expected hasInvalid() to return false');
+        $this->assertFalse($input->hasUnknown(), 'Expected hasUnknown() to return false');
+        $this->assertTrue($input->hasValid(), 'Expected hasValid() to return true');
+
+        $messages = $input->getMessages();
+        $this->assertEquals(array(), array_keys($messages));
+    }
+
     public function testValidatorAllowEmptyNoValidatorChain()
     {
         Zend_Loader::loadClass('Zend_Filter_StringTrim');

+ 6 - 1
tests/Zend/Validate/NotEmptyTest.php

@@ -77,6 +77,10 @@ class Zend_Validate_NotEmptyTest extends PHPUnit_Framework_TestCase
     /**
      * Ensures that the validator follows expected behavior
      *
+     * ZF-6708 introduces a change for validating integer 0; it is a valid 
+     * integer value. '0' is also valid.
+     *
+     * @group ZF-6708
      * @return void
      */
     public function testBasic()
@@ -86,8 +90,9 @@ class Zend_Validate_NotEmptyTest extends PHPUnit_Framework_TestCase
             array('', false),
             array('    ', false),
             array('  word  ', true),
+            array('0', true),
             array(1, true),
-            array(0, false),
+            array(0, true),
             array(true, true),
             array(false, false),
             array(null, false),