From 1a210228f3e1f252740fc12ee935e5bc30ad0410 Mon Sep 17 00:00:00 2001 From: Norbert Orzechowicz Date: Wed, 16 Apr 2014 12:25:10 +0200 Subject: [PATCH] Matcher test --- src/JsonMatcher/Matcher/ChainMatcher.php | 8 ++- src/JsonMatcher/Matcher/TypeMatcher.php | 2 +- tests/JsonMatcher/MatcherTest.php | 79 +++++++++++++++++++++++- tests/JsonMatcher/TypeMatcherTest.php | 1 + 4 files changed, 84 insertions(+), 6 deletions(-) diff --git a/src/JsonMatcher/Matcher/ChainMatcher.php b/src/JsonMatcher/Matcher/ChainMatcher.php index a2741279..991b6ca7 100644 --- a/src/JsonMatcher/Matcher/ChainMatcher.php +++ b/src/JsonMatcher/Matcher/ChainMatcher.php @@ -22,12 +22,14 @@ public function addMatcher(PropertyMatcher $matcher) public function match($value, $pattern) { foreach ($this->matchers as $propertyMatcher) { - if (false === $propertyMatcher->match($value, $pattern)) { - return false; + if ($propertyMatcher->canMatch($pattern)) { + if (true === $propertyMatcher->match($value, $pattern)) { + return true; + } } } - return true; + return false; } public function canMatch($pattern) diff --git a/src/JsonMatcher/Matcher/TypeMatcher.php b/src/JsonMatcher/Matcher/TypeMatcher.php index bdb2e5d1..a68b57ab 100644 --- a/src/JsonMatcher/Matcher/TypeMatcher.php +++ b/src/JsonMatcher/Matcher/TypeMatcher.php @@ -15,7 +15,7 @@ public function match($value, $pattern) public function canMatch($pattern) { - return 0 !== preg_match("/^@(string|integer|boolean|double)@$/", $pattern); + return is_string($pattern) && 0 !== preg_match("/^@(string|integer|boolean|double)@$/", $pattern); } private function extractType($pattern) diff --git a/tests/JsonMatcher/MatcherTest.php b/tests/JsonMatcher/MatcherTest.php index da613c11..ab9f061a 100644 --- a/tests/JsonMatcher/MatcherTest.php +++ b/tests/JsonMatcher/MatcherTest.php @@ -1,10 +1,85 @@ matcher = new Matcher(new ChainMatcher(array( + $scalarMatchers, + new ArrayMatcher($scalarMatchers) + ))); + + $this->arrayValue = array( + 'users' => array( + array( + 'id' => 1, + 'firstName' => 'Norbert', + 'lastName' => 'Orzechowicz', + 'enabled' => true + ), + array( + 'id' => 2, + 'firstName' => 'Michał', + 'lastName' => 'Dąbrowski', + 'enabled' => true, + ) + ), + 'readyToUse' => true, + 'data' => new \stdClass(), + ); + } + + public function test_matcher_with_array_value() + { + $this->assertTrue($this->matcher->match( + $this->arrayValue, + array( + 'users' => array( + array( + 'id' => '@integer@', + 'firstName' => '@string@', + 'lastName' => 'Orzechowicz', + 'enabled' => '@boolean@' + ), + array( + 'id' => '@integer@', + 'firstName' => '@string@', + 'lastName' => 'Dąbrowski', + 'enabled' => '@boolean@', + ) + ), + 'readyToUse' => true, + 'data' => '*', + ) + )); + } + + public function test_matcher_with_scalar_values() { - $this->assertTrue(true); + $this->assertTrue($this->matcher->match( + 'Norbert Orzechowicz', + '@string@' + )); + $this->assertTrue($this->matcher->match( + 6.66, + '@double@' + )); } } diff --git a/tests/JsonMatcher/TypeMatcherTest.php b/tests/JsonMatcher/TypeMatcherTest.php index 4d82e3ad..8c0295bb 100644 --- a/tests/JsonMatcher/TypeMatcherTest.php +++ b/tests/JsonMatcher/TypeMatcherTest.php @@ -15,6 +15,7 @@ public function test_can_match() $this->assertFalse($matcher->canMatch("qweqwe")); $this->assertFalse($matcher->canMatch(1)); $this->assertFalse($matcher->canMatch("@string")); + $this->assertFalse($matcher->canMatch(new \stdClass())); } public function test_type_match()