From cbd21058b9f35128977964168332ca5098ccb651 Mon Sep 17 00:00:00 2001 From: Norbert Orzechowicz Date: Fri, 25 Mar 2022 07:28:51 +0100 Subject: [PATCH 1/3] Added missing error in Array Matcher --- src/Matcher/ArrayMatcher.php | 2 ++ tests/Matcher/JsonMatcherTest.php | 9 +++++++++ 2 files changed, 11 insertions(+) diff --git a/src/Matcher/ArrayMatcher.php b/src/Matcher/ArrayMatcher.php index f33e61a7..8c9ba8da 100644 --- a/src/Matcher/ArrayMatcher.php +++ b/src/Matcher/ArrayMatcher.php @@ -154,6 +154,8 @@ private function iterateMatch(array $values, array $patterns, string $parentPath } if (!\is_array($value) || !$this->canMatch($pattern)) { + $this->addValuePatternDifference($value, $parentPath, $this->formatFullPath($parentPath, $path)); + return false; } diff --git a/tests/Matcher/JsonMatcherTest.php b/tests/Matcher/JsonMatcherTest.php index b9f015ff..ef4e8703 100644 --- a/tests/Matcher/JsonMatcherTest.php +++ b/tests/Matcher/JsonMatcherTest.php @@ -321,4 +321,13 @@ public function test_error_when_json_value_is_invalid() : void $this->assertEquals('Invalid given JSON of value. Syntax error, malformed JSON', $this->matcher->getError()); } + + public function test_comparing_value_against_pattern_without_any_patterns() : void + { + $value = '{"availableLocales": ["en"]}'; + $pattern = '{"availableLocales": null}'; + + $this->assertFalse($this->matcher->match($value, $pattern)); + $this->assertEquals("Value \"Array(1)\" does not match pattern \"\" at path: \"[availableLocales]\"", $this->matcher->getError()); + } } From 4d0ccb3d13e84b2d143c17e55bbfb946708e9781 Mon Sep 17 00:00:00 2001 From: Norbert Orzechowicz Date: Fri, 25 Mar 2022 07:32:03 +0100 Subject: [PATCH 2/3] Style change --- tests/Matcher/JsonMatcherTest.php | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/tests/Matcher/JsonMatcherTest.php b/tests/Matcher/JsonMatcherTest.php index ef4e8703..7101c275 100644 --- a/tests/Matcher/JsonMatcherTest.php +++ b/tests/Matcher/JsonMatcherTest.php @@ -328,6 +328,9 @@ public function test_comparing_value_against_pattern_without_any_patterns() : vo $pattern = '{"availableLocales": null}'; $this->assertFalse($this->matcher->match($value, $pattern)); - $this->assertEquals("Value \"Array(1)\" does not match pattern \"\" at path: \"[availableLocales]\"", $this->matcher->getError()); + $this->assertEquals( + 'Value "Array(1)" does not match pattern "" at path: "[availableLocales]"', + $this->matcher->getError() + ); } } From 1b1f0aecd878dde4400d221cbcea810342604f77 Mon Sep 17 00:00:00 2001 From: Norbert Orzechowicz Date: Fri, 25 Mar 2022 07:41:33 +0100 Subject: [PATCH 3/3] Split invalid value from can't match in ArrayMatcher --- src/Matcher/ArrayMatcher.php | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/Matcher/ArrayMatcher.php b/src/Matcher/ArrayMatcher.php index 8c9ba8da..9538fb32 100644 --- a/src/Matcher/ArrayMatcher.php +++ b/src/Matcher/ArrayMatcher.php @@ -153,7 +153,11 @@ private function iterateMatch(array $values, array $patterns, string $parentPath continue; } - if (!\is_array($value) || !$this->canMatch($pattern)) { + if (!\is_array($value)) { + return false; + } + + if (!$this->canMatch($pattern)) { $this->addValuePatternDifference($value, $parentPath, $this->formatFullPath($parentPath, $path)); return false;