class IsJson
@no-named-arguments Parameter names are not covered by the backward compatibility promise for PHPUnit
Hierarchy
- class \PHPUnit\Framework\Constraint\Constraint implements \Countable, \PHPUnit\Framework\SelfDescribing
- class \PHPUnit\Framework\Constraint\IsJson extends \PHPUnit\Framework\Constraint\Constraint
Expanded class hierarchy of IsJson
2 files declare their use of IsJson
- Assert.php in vendor/
phpunit/ phpunit/ src/ Framework/ Assert.php - Functions.php in vendor/
phpunit/ phpunit/ src/ Framework/ Assert/ Functions.php
File
-
vendor/
phpunit/ phpunit/ src/ Framework/ Constraint/ String/ IsJson.php, line 26
Namespace
PHPUnit\Framework\ConstraintView source
final class IsJson extends Constraint {
/**
* Returns a string representation of the constraint.
*/
public function toString() : string {
return 'is valid JSON';
}
/**
* Evaluates the constraint for parameter $other. Returns true if the
* constraint is met, false otherwise.
*/
protected function matches(mixed $other) : bool {
if (!is_string($other) || $other === '') {
return false;
}
json_decode($other);
if (json_last_error()) {
return false;
}
return true;
}
/**
* Returns the description of the failure.
*
* The beginning of failure messages is "Failed asserting that" in most
* cases. This method should return the second part of that sentence.
*/
protected function failureDescription(mixed $other) : string {
if (!is_string($other)) {
return $this->valueToTypeStringFragment($other) . 'is valid JSON';
}
if ($other === '') {
return 'an empty string is valid JSON';
}
return sprintf('a string is valid JSON (%s)', $this->determineJsonError($other));
}
private function determineJsonError(string $json) : string {
json_decode($json);
return match (json_last_error()) { JSON_ERROR_NONE => '',
JSON_ERROR_DEPTH => 'Maximum stack depth exceeded',
JSON_ERROR_STATE_MISMATCH => 'Underflow or the modes mismatch',
JSON_ERROR_CTRL_CHAR => 'Unexpected control character found',
JSON_ERROR_SYNTAX => 'Syntax error, malformed JSON',
JSON_ERROR_UTF8 => 'Malformed UTF-8 characters, possibly incorrectly encoded',
default => 'Unknown error',
};
}
}
Members
Title Sort descending | Modifiers | Object type | Summary | Overriden Title | Overrides |
---|---|---|---|---|---|
Constraint::additionalFailureDescription | protected | function | Return additional failure description where needed. | 7 | |
Constraint::count | public | function | Counts the number of constraint elements. | 3 | |
Constraint::evaluate | public | function | Evaluates the constraint for parameter $other. | 7 | |
Constraint::exporter | protected | function | |||
Constraint::fail | protected | function | Throws an exception for the given compared value and test description. | 1 | |
Constraint::failureDescriptionInContext | protected | function | Returns the description of the failure when this constraint appears in context of an $operator expression. |
||
Constraint::reduce | protected | function | Reduces the sub-expression starting at $this by skipping degenerate sub-expression and returns first descendant constraint that starts a non-reducible sub-expression. |
2 | |
Constraint::toStringInContext | protected | function | Returns a custom string representation of the constraint object when it appears in context of an $operator expression. |
||
Constraint::valueToTypeStringFragment | protected | function | @psalm-return non-empty-string | ||
IsJson::determineJsonError | private | function | |||
IsJson::failureDescription | protected | function | Returns the description of the failure. | Overrides Constraint::failureDescription | |
IsJson::matches | protected | function | Evaluates the constraint for parameter $other. Returns true if the constraint is met, false otherwise. |
Overrides Constraint::matches | |
IsJson::toString | public | function | Returns a string representation of the constraint. | Overrides SelfDescribing::toString |