diff --git a/src/JsonSchema/Constraints/NumberConstraint.php b/src/JsonSchema/Constraints/NumberConstraint.php index c1b15f94..812c01b6 100644 --- a/src/JsonSchema/Constraints/NumberConstraint.php +++ b/src/JsonSchema/Constraints/NumberConstraint.php @@ -26,7 +26,8 @@ class NumberConstraint extends Constraint public function check(&$element, $schema = null, JsonPointer $path = null, $i = null) { // Verify minimum - if (isset($schema->exclusiveMinimum)) { + if (isset($schema->exclusiveMinimum) && filter_var($schema->exclusiveMinimum, FILTER_VALIDATE_BOOLEAN)) { + // Draft 4 schema if (isset($schema->minimum)) { if ($schema->exclusiveMinimum && $element <= $schema->minimum) { $this->addError(ConstraintError::EXCLUSIVE_MINIMUM(), $path, array('minimum' => $schema->minimum)); @@ -36,12 +37,18 @@ public function check(&$element, $schema = null, JsonPointer $path = null, $i = } else { $this->addError(ConstraintError::MISSING_MINIMUM(), $path); } + } elseif (isset($schema->exclusiveMinimum) && filter_var($schema->exclusiveMinimum, FILTER_VALIDATE_INT)) { + // Draft 6 schema + if ($element <= $schema->exclusiveMinimum) { + $this->addError(ConstraintError::EXCLUSIVE_MINIMUM(), $path, array('exclusiveMinimum' => $schema->exclusiveMinimum)); + } } elseif (isset($schema->minimum) && $element < $schema->minimum) { $this->addError(ConstraintError::MINIMUM(), $path, array('minimum' => $schema->minimum)); } // Verify maximum - if (isset($schema->exclusiveMaximum)) { + if (isset($schema->exclusiveMaximum) && filter_var($schema->exclusiveMaximum, FILTER_VALIDATE_INT)) { + // Draft 4 schema if (isset($schema->maximum)) { if ($schema->exclusiveMaximum && $element >= $schema->maximum) { $this->addError(ConstraintError::EXCLUSIVE_MAXIMUM(), $path, array('maximum' => $schema->maximum)); @@ -51,6 +58,11 @@ public function check(&$element, $schema = null, JsonPointer $path = null, $i = } else { $this->addError(ConstraintError::MISSING_MAXIMUM(), $path); } + } elseif (isset($schema->exclusiveMaximum) && filter_var($schema->exclusiveMaximum, FILTER_VALIDATE_INT)) { + // Draft 6 schema + if ($element >= $schema->exclusiveMaximum) { + $this->addError(ConstraintError::EXCLUSIVE_MAXIMUM(), $path, array('exclusiveMaximum' => $schema->exclusiveMaximum)); + } } elseif (isset($schema->maximum) && $element > $schema->maximum) { $this->addError(ConstraintError::MAXIMUM(), $path, array('maximum' => $schema->maximum)); } diff --git a/tests/Constraints/MinimumMaximumTest.php b/tests/Constraints/MinimumMaximumTest.php index 508c0253..33caa650 100644 --- a/tests/Constraints/MinimumMaximumTest.php +++ b/tests/Constraints/MinimumMaximumTest.php @@ -28,12 +28,25 @@ public function getInvalidTests() }' ), array( - '{"value": 3}', '{ - "type": "object", - "properties": { - "value": {"type": "integer", "minimum": 3, "exclusiveMinimum": true} - } + "value":16 + }', + '{ + "type":"object", + "properties":{ + "value":{"type":"integer","maximum":8} + } + }' + ), + array( + '{ + "value":2 + }', + '{ + "type":"object", + "properties":{ + "value":{"type":"integer","exclusiveMinimum":2} + } }' ), array( @@ -43,10 +56,19 @@ public function getInvalidTests() '{ "type":"object", "properties":{ - "value":{"type":"integer","maximum":8} + "value":{"type":"integer","exclusiveMaximum":16} } }' ), + array( + '{"value": 3}', + '{ + "type": "object", + "properties": { + "value": {"type": "integer", "minimum": 3, "exclusiveMinimum": true} + } + }' + ), array( '{"value": 8}', '{