summaryrefslogtreecommitdiff
path: root/vendor/phpunit/phpunit/src/Framework/Constraint/JsonMatches.php
diff options
context:
space:
mode:
Diffstat (limited to 'vendor/phpunit/phpunit/src/Framework/Constraint/JsonMatches.php')
-rw-r--r--vendor/phpunit/phpunit/src/Framework/Constraint/JsonMatches.php109
1 files changed, 109 insertions, 0 deletions
diff --git a/vendor/phpunit/phpunit/src/Framework/Constraint/JsonMatches.php b/vendor/phpunit/phpunit/src/Framework/Constraint/JsonMatches.php
new file mode 100644
index 000000000..23a4de7e9
--- /dev/null
+++ b/vendor/phpunit/phpunit/src/Framework/Constraint/JsonMatches.php
@@ -0,0 +1,109 @@
+<?php declare(strict_types=1);
+/*
+ * This file is part of PHPUnit.
+ *
+ * (c) Sebastian Bergmann <[email protected]>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+namespace PHPUnit\Framework\Constraint;
+
+use function json_decode;
+use function sprintf;
+use PHPUnit\Framework\ExpectationFailedException;
+use PHPUnit\Util\Json;
+use SebastianBergmann\Comparator\ComparisonFailure;
+
+/**
+ * @no-named-arguments Parameter names are not covered by the backward compatibility promise for PHPUnit
+ */
+final class JsonMatches extends Constraint
+{
+ /**
+ * @var string
+ */
+ private $value;
+
+ public function __construct(string $value)
+ {
+ $this->value = $value;
+ }
+
+ /**
+ * Returns a string representation of the object.
+ */
+ public function toString(): string
+ {
+ return sprintf(
+ 'matches JSON string "%s"',
+ $this->value
+ );
+ }
+
+ /**
+ * Evaluates the constraint for parameter $other. Returns true if the
+ * constraint is met, false otherwise.
+ *
+ * This method can be overridden to implement the evaluation algorithm.
+ *
+ * @param mixed $other value or object to evaluate
+ */
+ protected function matches($other): bool
+ {
+ [$error, $recodedOther] = Json::canonicalize($other);
+
+ if ($error) {
+ return false;
+ }
+
+ [$error, $recodedValue] = Json::canonicalize($this->value);
+
+ if ($error) {
+ return false;
+ }
+
+ return $recodedOther == $recodedValue;
+ }
+
+ /**
+ * Throws an exception for the given compared value and test description.
+ *
+ * @param mixed $other evaluated value or object
+ * @param string $description Additional information about the test
+ * @param ComparisonFailure $comparisonFailure
+ *
+ * @throws \PHPUnit\Framework\Exception
+ * @throws \SebastianBergmann\RecursionContext\InvalidArgumentException
+ * @throws ExpectationFailedException
+ *
+ * @psalm-return never-return
+ */
+ protected function fail($other, $description, ComparisonFailure $comparisonFailure = null): void
+ {
+ if ($comparisonFailure === null) {
+ [$error, $recodedOther] = Json::canonicalize($other);
+
+ if ($error) {
+ parent::fail($other, $description);
+ }
+
+ [$error, $recodedValue] = Json::canonicalize($this->value);
+
+ if ($error) {
+ parent::fail($other, $description);
+ }
+
+ $comparisonFailure = new ComparisonFailure(
+ json_decode($this->value),
+ json_decode($other),
+ Json::prettify($recodedValue),
+ Json::prettify($recodedOther),
+ false,
+ 'Failed asserting that two json values are equal.'
+ );
+ }
+
+ parent::fail($other, $description, $comparisonFailure);
+ }
+}