From 29c7d35db6ed72ef60ddba7f6676485ef6766f8a Mon Sep 17 00:00:00 2001 From: USAMI Kenta Date: Fri, 20 Nov 2015 16:05:49 +0900 Subject: [PATCH 1/3] Add test code for Validator::error() --- tests/Valitron/ValidateTest.php | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) diff --git a/tests/Valitron/ValidateTest.php b/tests/Valitron/ValidateTest.php index 52a244f..2852796 100644 --- a/tests/Valitron/ValidateTest.php +++ b/tests/Valitron/ValidateTest.php @@ -1025,6 +1025,34 @@ class ValidateTest extends BaseTestCase $this->assertFalse($v->validate()); } + /** + * @dataProvider dataProviderFor_testError + */ + public function testError($expected, $input, $test, $message) + { + $v = new Validator(array('test' => $input)); + $v->error('test', $message, $test); + + $this->assertEquals(array('test' => array($expected)), $v->errors()); + } + + public function dataProviderFor_testError() + { + return array( + array( + 'expected' => 'Test must be at least 140 long', + 'input' => 'tweeet', + 'test' => array(140), + 'message' => '{field} must be at least %d long', + ), + array( + 'expected' => 'Test must be between 1 and 140 characters', + 'input' => array(1, 2, 3), + 'test' => array(1, 140), + 'message' => 'Test must be between %d and %d characters', + ), + ); + } } function sampleFunctionCallback($field, $value, array $params) { From 28254e76c298c157de7fde4c1e81886e5f8ee9de Mon Sep 17 00:00:00 2001 From: USAMI Kenta Date: Fri, 20 Nov 2015 16:18:42 +0900 Subject: [PATCH 2/3] Add type check for stringLength Return 0 if $value is not string --- src/Valitron/Validator.php | 18 ++++++++++++------ tests/Valitron/ValidateTest.php | 16 ++++++++++++++++ 2 files changed, 28 insertions(+), 6 deletions(-) diff --git a/src/Valitron/Validator.php b/src/Valitron/Validator.php index d161b8e..2cfac28 100644 --- a/src/Valitron/Validator.php +++ b/src/Valitron/Validator.php @@ -244,7 +244,7 @@ class Validator return $length >= $params[0] && $length <= $params[1]; } // Length same - return $length == $params[0]; + return ($length !== false) && $length == $params[0]; } /** @@ -259,7 +259,7 @@ class Validator { $length = $this->stringLength($value); - return $length >= $params[0] && $length <= $params[1]; + return ($length !== false) && $length >= $params[0] && $length <= $params[1]; } /** @@ -273,7 +273,9 @@ class Validator */ protected function validateLengthMin($field, $value, $params) { - return $this->stringLength($value) >= $params[0]; + $length = $this->stringLength($value); + + return ($length !== false) && $length >= $params[0]; } /** @@ -287,18 +289,22 @@ class Validator */ protected function validateLengthMax($field, $value, $params) { - return $this->stringLength($value) <= $params[0]; + $length = $this->stringLength($value); + + return ($length !== false) && $length <= $params[0]; } /** * Get the length of a string * * @param string $value - * @return int + * @return int|false */ protected function stringLength($value) { - if (function_exists('mb_strlen')) { + if (!is_string($value)) { + return false; + } elseif (function_exists('mb_strlen')) { return mb_strlen($value); } diff --git a/tests/Valitron/ValidateTest.php b/tests/Valitron/ValidateTest.php index 2852796..042f740 100644 --- a/tests/Valitron/ValidateTest.php +++ b/tests/Valitron/ValidateTest.php @@ -131,6 +131,14 @@ class ValidateTest extends BaseTestCase $v = new Validator(array('str' => 'sad')); $v->rule('length', 'str', 6); $this->assertFalse($v->validate()); + + $v = new Validator(array('test' => array())); + $v->rule('length', 'test', 1); + $this->assertFalse($v->validate()); + + $v = new Validator(array('test' => new stdClass)); + $v->rule('length', 'test', 1); + $this->assertFalse($v->validate()); } public function testLengthBetweenValid() @@ -145,6 +153,14 @@ class ValidateTest extends BaseTestCase $v = new Validator(array('str' => 'sad')); $v->rule('lengthBetween', 'str', 4, 10); $this->assertFalse($v->validate()); + + $v = new Validator(array('test' => array())); + $v->rule('lengthBetween', 'test', 50, 60); + $this->assertFalse($v->validate()); + + $v = new Validator(array('test' => new stdClass)); + $v->rule('lengthBetween', 'test', 99, 100); + $this->assertFalse($v->validate()); } public function testLengthMinValid() From 96221ea4d3c22f893bec69631b90e050243ee906 Mon Sep 17 00:00:00 2001 From: USAMI Kenta Date: Fri, 20 Nov 2015 16:57:15 +0900 Subject: [PATCH 3/3] Add type check for between comparison Return 0 if $value is not numeric value --- src/Valitron/Validator.php | 8 ++++++-- tests/Valitron/ValidateTest.php | 16 ++++++++++++++++ 2 files changed, 22 insertions(+), 2 deletions(-) diff --git a/src/Valitron/Validator.php b/src/Valitron/Validator.php index 2cfac28..7322357 100644 --- a/src/Valitron/Validator.php +++ b/src/Valitron/Validator.php @@ -322,7 +322,9 @@ class Validator */ protected function validateMin($field, $value, $params) { - if (function_exists('bccomp')) { + if (!is_numeric($value)) { + return false; + } elseif (function_exists('bccomp')) { return !(bccomp($params[0], $value, 14) == 1); } else { return $params[0] <= $value; @@ -340,7 +342,9 @@ class Validator */ protected function validateMax($field, $value, $params) { - if (function_exists('bccomp')) { + if (!is_numeric($value)) { + return false; + } elseif (function_exists('bccomp')) { return !(bccomp($value, $params[0], 14) == 1); } else { return $params[0] >= $value; diff --git a/tests/Valitron/ValidateTest.php b/tests/Valitron/ValidateTest.php index 042f740..9834d2e 100644 --- a/tests/Valitron/ValidateTest.php +++ b/tests/Valitron/ValidateTest.php @@ -222,6 +222,14 @@ class ValidateTest extends BaseTestCase $v = new Validator(array('num' => 5)); $v->rule('min', 'num', 6); $this->assertFalse($v->validate()); + + $v = new Validator(array('test' => array())); + $v->rule('min', 'test', 1); + $this->assertFalse($v->validate()); + + $v = new Validator(array('test' => new stdClass)); + $v->rule('min', 'test', 1); + $this->assertFalse($v->validate()); } public function testMinInvalidFloat() @@ -262,6 +270,14 @@ class ValidateTest extends BaseTestCase $v = new Validator(array('num' => 5)); $v->rule('max', 'num', 4); $this->assertFalse($v->validate()); + + $v = new Validator(array('test' => array())); + $v->rule('min', 'test', 1); + $this->assertFalse($v->validate()); + + $v = new Validator(array('test' => new stdClass)); + $v->rule('min', 'test', 1); + $this->assertFalse($v->validate()); } public function testMaxInvalidFloat()