Skip to content

Commit b9940ef

Browse files
committed
+ enumeration validator
* restored InvalidValueException for external use
1 parent 3b1556f commit b9940ef

16 files changed

+205
-212
lines changed

phpunit.xml

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
1+
<!--suppress XmlUnboundNsPrefix -->
12
<phpunit
23
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
3-
xsi:noNamespaceSchemaLocation="http://schema.phpunit.de/5.1/phpunit.xsd"
4+
xsi:noNamespaceSchemaLocation="http://schema.phpunit.de/5.7/phpunit.xsd"
45
bootstrap="ut/bootstrap.php"
56
>
67
<testsuites>
@@ -19,6 +20,7 @@
1920
<file>ut/EmailValidatorTest.php</file>
2021
<file>ut/UrlValidatorTest.php</file>
2122
<file>ut/RegexValidatorTest.php</file>
23+
<file>ut/EnumerationValidatorTest.php</file>
2224
<file>ut/ChainedValidatorTest.php</file>
2325
</testsuite>
2426
</testsuites>

src/DataProviderTypeParserTrait.php

Lines changed: 0 additions & 125 deletions
This file was deleted.

src/Exceptions/InvalidValueException.php

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,8 +13,7 @@
1313
*
1414
* @package Oasis\Mlib\Utils\Exceptions
1515
*
16-
* @internal
1716
*/
18-
class InvalidValueException extends \RuntimeException
17+
class InvalidValueException extends DataValidationException
1918
{
2019
}
Lines changed: 60 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,60 @@
1+
<?php
2+
/**
3+
* Created by PhpStorm.
4+
* User: minhao
5+
* Date: 2017-06-12
6+
* Time: 11:26
7+
*/
8+
9+
namespace Oasis\Mlib\Utils\Validators;
10+
11+
use Oasis\Mlib\Utils\Exceptions\InvalidValueException;
12+
13+
class EnumerationValidator implements ValidatorInterface
14+
{
15+
/**
16+
* @var array
17+
*/
18+
private $values;
19+
/**
20+
* @var bool
21+
*/
22+
private $strictType;
23+
/**
24+
* @var bool
25+
*/
26+
private $caseSensitive;
27+
28+
public function __construct(array $values, $strictType = false, $caseSensitive = true)
29+
{
30+
if ($caseSensitive) {
31+
$this->values = $values;
32+
}
33+
else {
34+
$this->values = \array_map(
35+
function ($v) {
36+
return \is_string($v) ? \strtolower($v) : $v;
37+
},
38+
$values
39+
);
40+
}
41+
$this->strictType = $strictType;
42+
$this->caseSensitive = $caseSensitive;
43+
44+
}
45+
46+
public function validate($target)
47+
{
48+
$origTarget = $target;
49+
if (!$this->caseSensitive && \is_string($target)) {
50+
$target = \strtolower($target);
51+
}
52+
if (!\in_array($target, $this->values, $this->strictType)) {
53+
throw new InvalidValueException(
54+
\sprintf("Value %s is not in the enumeration list!", \print_r($target, true))
55+
);
56+
}
57+
58+
return $origTarget;
59+
}
60+
}

test.php

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,5 @@
77
* Time: 21:09
88
*/
99

10-
use Oasis\Mlib\Utils\Validators\IntegerValidator;
11-
1210
require_once "vendor/autoload.php";
1311

ut/ArrayValidatorTest.php

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -22,8 +22,8 @@ public function testAllowNullInvalidInput($target)
2222
{
2323
$validator = new ArrayValidator(true);
2424

25-
self::setExpectedException(InvalidDataTypeException::class);
26-
self::assertTrue(is_array($validator->validate($target)));
25+
$this->expectException(InvalidDataTypeException::class);
26+
$this->assertTrue(is_array($validator->validate($target)));
2727
}
2828

2929
/**
@@ -35,7 +35,7 @@ public function testAllowNullValid($target)
3535
{
3636
$validator = new ArrayValidator(true);
3737

38-
self::assertTrue(is_array($validator->validate($target)));
38+
$this->assertTrue(is_array($validator->validate($target)));
3939
}
4040

4141
/**
@@ -47,8 +47,8 @@ public function testNotAllowNullInvalidInput($target)
4747
{
4848
$validator = new ArrayValidator(false);
4949

50-
self::setExpectedException(InvalidDataTypeException::class);
51-
self::assertTrue(is_array($validator->validate($target)));
50+
$this->expectException(InvalidDataTypeException::class);
51+
$this->assertTrue(is_array($validator->validate($target)));
5252
}
5353

5454
/**
@@ -60,7 +60,7 @@ public function testNotAllowNullValid($target)
6060
{
6161
$validator = new ArrayValidator(false);
6262

63-
self::assertTrue(is_array($validator->validate($target)));
63+
$this->assertTrue(is_array($validator->validate($target)));
6464
}
6565

6666
/**
@@ -71,7 +71,7 @@ public function testNotAllowNullValid($target)
7171
*/
7272
public function testSpecificValidatorWithValidInput($target, $validator)
7373
{
74-
self::assertTrue(is_array($validator->validate($target)));
74+
$this->assertTrue(is_array($validator->validate($target)));
7575
}
7676

7777
public function getValidInputForSpecificValidator()
@@ -91,8 +91,8 @@ public function getValidInputForSpecificValidator()
9191
*/
9292
public function testSpecificValidatorWithInvalidInput($target, $validator)
9393
{
94-
self::setExpectedException(InvalidDataTypeException::class);
95-
self::assertTrue(is_array($validator->validate($target)));
94+
$this->expectException(InvalidDataTypeException::class);
95+
$this->assertTrue(is_array($validator->validate($target)));
9696
}
9797

9898
public function getInvalidInputForSpecificValidator()

ut/BooleanValidatorTest.php

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -19,8 +19,8 @@ public function testStrictModeInvalidInput($target)
1919
{
2020
$validator = new BooleanValidator(true);
2121

22-
self::setExpectedException(InvalidDataTypeException::class);
23-
self::assertTrue(is_bool($validator->validate($target)));
22+
$this->expectException(InvalidDataTypeException::class);
23+
$this->assertTrue(is_bool($validator->validate($target)));
2424
}
2525

2626
/**
@@ -32,7 +32,7 @@ public function testStrictModeValid($target)
3232
{
3333
$validator = new BooleanValidator(true);
3434

35-
self::assertTrue(is_bool($validator->validate($target)));
35+
$this->assertTrue(is_bool($validator->validate($target)));
3636
}
3737

3838
/**
@@ -44,8 +44,8 @@ public function testNonStrictModeInvalidInput($target)
4444
{
4545
$validator = new BooleanValidator(false);
4646

47-
self::setExpectedException(InvalidDataTypeException::class);
48-
self::assertTrue(is_bool($validator->validate($target)));
47+
$this->expectException(InvalidDataTypeException::class);
48+
$this->assertTrue(is_bool($validator->validate($target)));
4949
}
5050

5151
/**
@@ -57,7 +57,7 @@ public function testNonStrictModeValid($target)
5757
{
5858
$validator = new BooleanValidator(false);
5959

60-
self::assertTrue(is_bool($validator->validate($target)));
60+
$this->assertTrue(is_bool($validator->validate($target)));
6161
}
6262

6363
public function getInvalidInputInStrictMode()

ut/EmailValidatorTest.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ public function testValidEmails($target)
2828
public function testInvalidEmails($target)
2929
{
3030
$validator = new EmailValidator();
31-
self::setExpectedException(InvalidDataTypeException::class);
31+
$this->expectException(InvalidDataTypeException::class);
3232
$validator->validate($target);
3333
}
3434

ut/EnumerationValidatorTest.php

Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,59 @@
1+
<?php
2+
use Oasis\Mlib\Utils\Exceptions\InvalidValueException;
3+
use Oasis\Mlib\Utils\Validators\EnumerationValidator;
4+
5+
/**
6+
* Created by PhpStorm.
7+
* User: minhao
8+
* Date: 2016-09-02
9+
* Time: 22:16
10+
*/
11+
class EnumerationValidatorTest extends PHPUnit_Framework_TestCase
12+
{
13+
/**
14+
* @dataProvider getValidEnumerations
15+
*
16+
* @param $target
17+
* @param $enumerations
18+
* @param $strict
19+
* @param $caseSensitive
20+
*/
21+
public function testValidStrings($target, $enumerations, $strict, $caseSensitive)
22+
{
23+
$validator = new EnumerationValidator($enumerations, $strict, $caseSensitive);
24+
$validator->validate($target);
25+
}
26+
27+
/**
28+
* @dataProvider getInvalidEnumerations
29+
*
30+
* @param $target
31+
* @param $enumerations
32+
* @param $strict
33+
* @param $caseSensitive
34+
*/
35+
public function testInvalidStrings($target, $enumerations, $strict, $caseSensitive)
36+
{
37+
$validator = new EnumerationValidator($enumerations, $strict, $caseSensitive);
38+
$this->expectException(InvalidValueException::class);
39+
$validator->validate($target);
40+
}
41+
42+
public function getValidEnumerations()
43+
{
44+
return [
45+
['web', ['web', 'cli'], true, true],
46+
['web', ['Web', 'cli'], true, false],
47+
['123', [123, 'cli'], false, false],
48+
];
49+
}
50+
51+
public function getInvalidEnumerations()
52+
{
53+
return [
54+
['web', ['web2', 'cli'], true, true],
55+
['web', ['Web', 'cli'], true, true],
56+
['123', [123, 'cli'], true, true],
57+
];
58+
}
59+
}

0 commit comments

Comments
 (0)