diff --git a/src/Factory/MatcherFactory.php b/src/Factory/MatcherFactory.php index 07f213ef..e768449e 100644 --- a/src/Factory/MatcherFactory.php +++ b/src/Factory/MatcherFactory.php @@ -37,7 +37,7 @@ private function buildMatchers(Parser $parser, Backtrace $backtrace) : Matcher\C } $matchers[] = $arrayMatcher; - $matchers[] = new Matcher\OrMatcher($backtrace, $scalarMatchers); + $matchers[] = $this->buildOrMatcher($backtrace, $matchers); $matchers[] = new Matcher\TextMatcher($scalarMatchers, $backtrace, $parser); return new Matcher\ChainMatcher( @@ -88,6 +88,18 @@ private function buildScalarMatchers(Parser $parser, Backtrace $backtrace) : Mat ); } + private function buildOrMatcher(Backtrace $backtrace, array $orMatchers) : Matcher\OrMatcher + { + return new Matcher\OrMatcher( + $backtrace, + new Matcher\ChainMatcher( + 'or', + $backtrace, + $orMatchers + ) + ); + } + private function buildParser(Backtrace $backtrace) : Parser { return new Parser(new Lexer(), new Parser\ExpanderInitializer($backtrace)); diff --git a/tests/OrMatcherTest.php b/tests/OrMatcherTest.php index 7377ae8c..9d62a8ea 100644 --- a/tests/OrMatcherTest.php +++ b/tests/OrMatcherTest.php @@ -21,10 +21,16 @@ public static function orExamples() ['ipsum lorem', '@string@.startsWith("lorem")||@string@.contains("lorem")', true], ['norbert@coduo.pl', '@string@.isEmail()||@null@', true], [null, '@string@.isEmail()||@null@', true], - [null, '@string@.isEmail()||@null@', true], ['2014-08-19', '@string@.isDateTime()||@integer@', true], [null, '@integer@||@string@', false], [1, '@integer@.greaterThan(10)||@string@.contains("10")', false], + [[], '@array@||@null@', true], + [[1, 2, 3], '@array@.count(3)||@null@', true], + [null, '@array@||@null@', true], + [null, '@array@.count(3)||@null@', true], + ['ipsum', '@array@||@string@', true], + ['ipsum', '@array@||@null@', false], + [1, '@array@||@null@', false], ]; }