Skip to content

Commit 4fe85e7

Browse files
author
Marin Binzari
committed
OptionalExpander for :
- BooleanMatcher - NullMatcher - NumberMatcher - UuidMatcher
1 parent b30a2e4 commit 4fe85e7

18 files changed

+138
-65
lines changed

src/Factory/SimpleFactory.php

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -62,15 +62,15 @@ protected function buildScalarMatchers() : Matcher\ChainMatcher
6262
return new Matcher\ChainMatcher([
6363
new Matcher\CallbackMatcher(),
6464
new Matcher\ExpressionMatcher(),
65-
new Matcher\NullMatcher(),
65+
new Matcher\NullMatcher($parser),
6666
new Matcher\StringMatcher($parser),
6767
new Matcher\IntegerMatcher($parser),
68-
new Matcher\BooleanMatcher(),
68+
new Matcher\BooleanMatcher($parser),
6969
new Matcher\DoubleMatcher($parser),
70-
new Matcher\NumberMatcher(),
70+
new Matcher\NumberMatcher($parser),
7171
new Matcher\ScalarMatcher(),
7272
new Matcher\WildcardMatcher(),
73-
new Matcher\UuidMatcher(),
73+
new Matcher\UuidMatcher($parser),
7474
]);
7575
}
7676

src/Matcher/ArrayMatcher.php

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313

1414
final class ArrayMatcher extends Matcher
1515
{
16+
const PATTERN = 'array';
1617
const UNBOUNDED_PATTERN = '@...@';
1718

1819
private $propertyMatcher;
@@ -60,7 +61,7 @@ private function isArrayPattern($pattern) : bool
6061
return false;
6162
}
6263

63-
return $this->parser->hasValidSyntax($pattern) && $this->parser->parse($pattern)->is('array');
64+
return $this->parser->hasValidSyntax($pattern) && $this->parser->parse($pattern)->is(self::PATTERN);
6465
}
6566

6667
private function iterateMatch(array $values, array $patterns, string $parentPath = "") : bool

src/Matcher/BooleanMatcher.php

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,11 +4,19 @@
44

55
namespace Coduo\PHPMatcher\Matcher;
66

7+
use Coduo\PHPMatcher\Parser;
78
use Coduo\ToString\StringConverter;
89

910
final class BooleanMatcher extends Matcher
1011
{
11-
const BOOLEAN_PATTERN = '/^@boolean@$/';
12+
const PATTERN = 'boolean';
13+
14+
private $parser;
15+
16+
public function __construct(Parser $parser)
17+
{
18+
$this->parser = $parser;
19+
}
1220

1321
public function match($value, $pattern) : bool
1422
{
@@ -22,6 +30,10 @@ public function match($value, $pattern) : bool
2230

2331
public function canMatch($pattern) : bool
2432
{
25-
return is_string($pattern) && 0 !== preg_match(self::BOOLEAN_PATTERN, $pattern);
33+
if (!is_string($pattern)) {
34+
return false;
35+
}
36+
37+
return $this->parser->hasValidSyntax($pattern) && $this->parser->parse($pattern)->is(self::PATTERN);
2638
}
2739
}

src/Matcher/DoubleMatcher.php

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,8 @@
99

1010
final class DoubleMatcher extends Matcher
1111
{
12+
const PATTERN = 'double';
13+
1214
private $parser;
1315

1416
public function __construct(Parser $parser)
@@ -38,6 +40,6 @@ public function canMatch($pattern) : bool
3840
return false;
3941
}
4042

41-
return $this->parser->hasValidSyntax($pattern) && $this->parser->parse($pattern)->is('double');
43+
return $this->parser->hasValidSyntax($pattern) && $this->parser->parse($pattern)->is(self::PATTERN);
4244
}
4345
}

src/Matcher/IntegerMatcher.php

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,8 @@
99

1010
final class IntegerMatcher extends Matcher
1111
{
12+
const PATTERN = 'integer';
13+
1214
private $parser;
1315

1416
public function __construct(Parser $parser)
@@ -38,6 +40,6 @@ public function canMatch($pattern) : bool
3840
return false;
3941
}
4042

41-
return $this->parser->hasValidSyntax($pattern) && $this->parser->parse($pattern)->is('integer');
43+
return $this->parser->hasValidSyntax($pattern) && $this->parser->parse($pattern)->is(self::PATTERN);
4244
}
4345
}

src/Matcher/Matcher.php

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,11 +8,17 @@ abstract class Matcher implements ValueMatcher
88
{
99
protected $error;
1010

11+
/**
12+
* @inheritdoc
13+
*/
1114
public function getError()
1215
{
1316
return $this->error;
1417
}
1518

19+
/**
20+
* @inheritdoc
21+
*/
1622
public function match($value, $pattern) : bool
1723
{
1824
if ($value === $pattern) {

src/Matcher/NumberMatcher.php

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,11 +4,19 @@
44

55
namespace Coduo\PHPMatcher\Matcher;
66

7+
use Coduo\PHPMatcher\Parser;
78
use Coduo\ToString\StringConverter;
89

910
final class NumberMatcher extends Matcher
1011
{
11-
const NUMBER_PATTERN = '/^@number@$/';
12+
const PATTERN = 'number';
13+
14+
private $parser;
15+
16+
public function __construct(Parser $parser)
17+
{
18+
$this->parser = $parser;
19+
}
1220

1321
public function match($value, $pattern) : bool
1422
{
@@ -22,6 +30,10 @@ public function match($value, $pattern) : bool
2230

2331
public function canMatch($pattern) : bool
2432
{
25-
return is_string($pattern) && 0 !== preg_match(self::NUMBER_PATTERN, $pattern);
33+
if (!is_string($pattern)) {
34+
return false;
35+
}
36+
37+
return $this->parser->hasValidSyntax($pattern) && $this->parser->parse($pattern)->is(self::PATTERN);
2638
}
2739
}

src/Matcher/StringMatcher.php

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,8 @@
99

1010
final class StringMatcher extends Matcher
1111
{
12+
const PATTERN = 'string';
13+
1214
private $parser;
1315

1416
public function __construct(Parser $parser)
@@ -38,6 +40,6 @@ public function canMatch($pattern) : bool
3840
return false;
3941
}
4042

41-
return $this->parser->hasValidSyntax($pattern) && $this->parser->parse($pattern)->is('string');
43+
return $this->parser->hasValidSyntax($pattern) && $this->parser->parse($pattern)->is(self::PATTERN);
4244
}
4345
}

src/Matcher/UuidMatcher.php

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,13 +4,21 @@
44

55
namespace Coduo\PHPMatcher\Matcher;
66

7+
use Coduo\PHPMatcher\Parser;
78
use Coduo\ToString\StringConverter;
89

910
final class UuidMatcher extends Matcher
1011
{
11-
const UUID_PATTERN = '/^@uuid@$/';
12+
const PATTERN = 'uuid';
1213
const UUID_FORMAT_PATTERN = '|^[\da-f]{8}-[\da-f]{4}-[1-5][\da-f]{3}-[89ab][\da-f]{3}-[\da-f]{12}$|';
1314

15+
private $parser;
16+
17+
public function __construct(Parser $parser)
18+
{
19+
$this->parser = $parser;
20+
}
21+
1422
public function match($value, $pattern) : bool
1523
{
1624
if (!is_string($value)) {
@@ -36,6 +44,10 @@ public function match($value, $pattern) : bool
3644

3745
public function canMatch($pattern) : bool
3846
{
39-
return is_string($pattern) && 0 !== preg_match(self::UUID_PATTERN, $pattern);
47+
if (!is_string($pattern)) {
48+
return false;
49+
}
50+
51+
return $this->parser->hasValidSyntax($pattern) && $this->parser->parse($pattern)->is(self::PATTERN);
4052
}
4153
}

tests/Matcher/ArrayMatcherTest.php

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -23,12 +23,12 @@ public function setUp()
2323
new Matcher\ChainMatcher([
2424
new Matcher\CallbackMatcher(),
2525
new Matcher\ExpressionMatcher(),
26-
new Matcher\NullMatcher(),
26+
new Matcher\NullMatcher($parser),
2727
new Matcher\StringMatcher($parser),
2828
new Matcher\IntegerMatcher($parser),
29-
new Matcher\BooleanMatcher(),
29+
new Matcher\BooleanMatcher($parser),
3030
new Matcher\DoubleMatcher($parser),
31-
new Matcher\NumberMatcher(),
31+
new Matcher\NumberMatcher($parser),
3232
new Matcher\ScalarMatcher(),
3333
new Matcher\WildcardMatcher(),
3434
]),

tests/Matcher/BooleanMatcherTest.php

Lines changed: 18 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -4,55 +4,62 @@
44

55
namespace Coduo\PHPMatcher\Tests\Matcher;
66

7+
use Coduo\PHPMatcher\Lexer;
8+
use Coduo\PHPMatcher\Parser;
79
use Coduo\PHPMatcher\Matcher\BooleanMatcher;
810
use PHPUnit\Framework\TestCase;
911

1012
class BooleanMatcherTest extends TestCase
1113
{
14+
/**
15+
* @var BooleanMatcher
16+
*/
17+
private $matcher;
18+
19+
public function setUp()
20+
{
21+
$this->matcher = new BooleanMatcher(new Parser(new Lexer(), new Parser\ExpanderInitializer()));
22+
}
23+
1224
/**
1325
* @dataProvider positiveCanMatchData
1426
*/
1527
public function test_positive_can_matches($pattern)
1628
{
17-
$matcher = new BooleanMatcher();
18-
$this->assertTrue($matcher->canMatch($pattern));
29+
$this->assertTrue($this->matcher->canMatch($pattern));
1930
}
2031

2132
/**
2233
* @dataProvider negativeCanMatchData
2334
*/
2435
public function test_negative_can_matches($pattern)
2536
{
26-
$matcher = new BooleanMatcher();
27-
$this->assertFalse($matcher->canMatch($pattern));
37+
$this->assertFalse($this->matcher->canMatch($pattern));
2838
}
2939

3040
/**
3141
* @dataProvider positiveMatchData
3242
*/
3343
public function test_positive_match($value, $pattern)
3444
{
35-
$matcher = new BooleanMatcher();
36-
$this->assertTrue($matcher->match($value, $pattern));
45+
$this->assertTrue($this->matcher->match($value, $pattern));
3746
}
3847

3948
/**
4049
* @dataProvider negativeMatchData
4150
*/
4251
public function test_negative_match($value, $pattern)
4352
{
44-
$matcher = new BooleanMatcher();
45-
$this->assertFalse($matcher->match($value, $pattern));
53+
$this->assertFalse($this->matcher->match($value, $pattern));
4654
}
4755

4856
/**
4957
* @dataProvider negativeMatchDescription
5058
*/
5159
public function test_negative_match_description($value, $pattern, $error)
5260
{
53-
$matcher = new BooleanMatcher();
54-
$matcher->match($value, $pattern);
55-
$this->assertEquals($error, $matcher->getError());
61+
$this->matcher->match($value, $pattern);
62+
$this->assertEquals($error, $this->matcher->getError());
5663
}
5764

5865
public static function positiveCanMatchData()

tests/Matcher/JsonMatcherTest.php

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -22,12 +22,12 @@ public function setUp()
2222
$scalarMatchers = new Matcher\ChainMatcher([
2323
new Matcher\CallbackMatcher(),
2424
new Matcher\ExpressionMatcher(),
25-
new Matcher\NullMatcher(),
25+
new Matcher\NullMatcher($parser),
2626
new Matcher\StringMatcher($parser),
2727
new Matcher\IntegerMatcher($parser),
28-
new Matcher\BooleanMatcher(),
28+
new Matcher\BooleanMatcher($parser),
2929
new Matcher\DoubleMatcher($parser),
30-
new Matcher\NumberMatcher(),
30+
new Matcher\NumberMatcher($parser),
3131
new Matcher\ScalarMatcher(),
3232
new Matcher\WildcardMatcher(),
3333
]);

0 commit comments

Comments
 (0)