diff --git a/.php-cs-fixer.php b/.php-cs-fixer.php index ea3fffd9..3407d643 100644 --- a/.php-cs-fixer.php +++ b/.php-cs-fixer.php @@ -10,10 +10,11 @@ $config = new PhpCsFixer\Config(); return $config + ->setParallelConfig(PhpCsFixer\Runner\Parallel\ParallelConfigFactory::detect()) ->setRiskyAllowed(true) ->setRules(array( '@PSR2' => true, - '@PHP70Migration:risky' => true, + '@PHP7x0Migration:risky' => true, 'binary_operator_spaces' => array( 'default' => 'align_single_space_minimal', 'operators' => array('||' => null, '&&' => null) @@ -26,5 +27,5 @@ 'psr_autoloading' => false, )) ->setUsingCache(true) - ->setFinder($finder); + ->setFinder($finder) ; diff --git a/composer.json b/composer.json index a5d09e2c..290297c8 100644 --- a/composer.json +++ b/composer.json @@ -43,7 +43,7 @@ }, "require-dev": { "phpunit/php-code-coverage": "^9.1.10", - "friendsofphp/php-cs-fixer": "^3.75.0", + "friendsofphp/php-cs-fixer": "^3.88.0", "phpstan/phpstan": "2.1.17", "vimeo/psalm": "6.11.0" }, diff --git a/lib/Doctrine/Validator.php b/lib/Doctrine/Validator.php index 638f3cb3..fefa29de 100644 --- a/lib/Doctrine/Validator.php +++ b/lib/Doctrine/Validator.php @@ -171,6 +171,9 @@ public static function isValidType($var, $type) return true; } elseif ($var === null) { return true; + } elseif ($type === 'json') { + // JSON type can be object, array, string, number, boolean, or null (null handled above) + return is_object($var) || is_array($var) || is_string($var) || is_numeric($var) || is_bool($var); } elseif (is_object($var)) { return $type == 'object'; } elseif (is_array($var)) { @@ -195,8 +198,6 @@ public static function isValidType($var, $type) return is_array($var); case 'object': return is_object($var); - case 'json': - return is_object($var) || is_array($var); case 'boolean': return is_bool($var) || (is_numeric($var) && ($var == 0 || $var == 1)); case 'timestamp': diff --git a/phpstan-baseline.php b/phpstan-baseline.php index 521e7f27..a30dedf4 100644 --- a/phpstan-baseline.php +++ b/phpstan-baseline.php @@ -1222,7 +1222,7 @@ $ignoreErrors[] = array( 'message' => '#^Call to function is_array\\(\\) with mixed will always evaluate to false\\.$#', 'identifier' => 'function.impossibleType', - 'count' => 3, + 'count' => 2, 'path' => __DIR__ . '/lib/Doctrine/Validator.php', ); $ignoreErrors[] = array( diff --git a/tests/ValidatorTestCase.php b/tests/ValidatorTestCase.php index af3b0b13..8a6aea0d 100644 --- a/tests/ValidatorTestCase.php +++ b/tests/ValidatorTestCase.php @@ -113,6 +113,30 @@ public function testIsValidType() $this->assertFalse(Doctrine_Validator::isValidType($var, 'float')); $this->assertFalse(Doctrine_Validator::isValidType($var, 'array')); $this->assertTrue(Doctrine_Validator::isValidType($var, 'object')); + + // Test JSON type validation + $var = array('key' => 'value'); + $this->assertTrue(Doctrine_Validator::isValidType($var, 'json')); + $this->assertTrue(Doctrine_Validator::isValidType($var, 'array')); + $this->assertFalse(Doctrine_Validator::isValidType($var, 'object')); + + $var = new stdClass(); + $var->property = 'value'; + $this->assertTrue(Doctrine_Validator::isValidType($var, 'json')); + $this->assertFalse(Doctrine_Validator::isValidType($var, 'array')); + $this->assertTrue(Doctrine_Validator::isValidType($var, 'object')); + + $var = 'string'; + $this->assertTrue(Doctrine_Validator::isValidType($var, 'json')); + + $var = 123; + $this->assertTrue(Doctrine_Validator::isValidType($var, 'json')); + + $var = null; + $this->assertTrue(Doctrine_Validator::isValidType($var, 'json')); + + $var = true; + $this->assertTrue(Doctrine_Validator::isValidType($var, 'json')); } public function testValidate2()