Apply contribution guidelines to "LanguageCode" rule

Co-authored-by: Henrique Moody <henriquemoody@gmail.com>
This commit is contained in:
Danilo Benevides 2018-10-06 17:58:42 -03:00 committed by Henrique Moody
parent d6699a3daf
commit 9595b3fd6c
No known key found for this signature in database
GPG key ID: 221E9281655813A6
7 changed files with 610 additions and 613 deletions

View file

@ -1,8 +1,9 @@
# LanguageCode
- `LanguageCode()`
- `LanguageCode(string $set)`
Validates a language code based on ISO 639:
Validates whether the input is language code based on ISO 639.
```php
v::languageCode()->validate('pt'); // true
@ -12,7 +13,7 @@ v::languageCode('alpha-3')->validate('ita'); // true
v::languageCode('alpha-3')->validate('eng'); // true
```
You can choose between alpha-2 and alpha-3, alpha-2 is set by default.
You can choose between `alpha-2` and `alpha-3`; `alpha-2` is set by default set.
## Changelog

View file

@ -13,14 +13,22 @@ declare(strict_types=1);
namespace Respect\Validation\Exceptions;
class LanguageCodeException extends ValidationException
/**
* @author Danilo Benevides <danilobenevides01@gmail.com>
* @author Emmerson Siqueira <emmersonsiqueira@gmail.com>
* @author Henrique Moody <henriquemoody@gmail.com>
*/
final class LanguageCodeException extends ValidationException
{
/**
* {@inheritdoc}
*/
public static $defaultTemplates = [
self::MODE_DEFAULT => [
self::STANDARD => '{{name}} must be a valid language',
self::STANDARD => '{{name}} must be a valid ISO 639 {{set}} language code',
],
self::MODE_NEGATIVE => [
self::STANDARD => '{{name}} must not be a valid language',
self::STANDARD => '{{name}} must not be a valid ISO 639 {{set}} language code',
],
];
}

File diff suppressed because it is too large Load diff

View file

@ -0,0 +1,38 @@
--FILE--
<?php
require 'vendor/autoload.php';
use Respect\Validation\Exceptions\LanguageCodeException;
use Respect\Validation\Exceptions\NestedValidationException;
use Respect\Validation\Validator as v;
try {
v::languageCode()->check(null);
} catch (LanguageCodeException $exception) {
echo $exception->getMessage().PHP_EOL;
}
try {
v::not(v::languageCode())->check('pt');
} catch (LanguageCodeException $exception) {
echo $exception->getMessage().PHP_EOL;
}
try {
v::languageCode()->assert('por');
} catch (NestedValidationException $exception) {
echo $exception->getFullMessage().PHP_EOL;
}
try {
v::not(v::languageCode())->assert('en');
} catch (NestedValidationException $exception) {
echo $exception->getFullMessage().PHP_EOL;
}
?>
--EXPECT--
`NULL` must be a valid ISO 639 "alpha-2" language code
"pt" must not be a valid ISO 639 "alpha-2" language code
- "por" must be a valid ISO 639 "alpha-2" language code
- "en" must not be a valid ISO 639 "alpha-2" language code

View file

@ -1,24 +0,0 @@
--FILE--
<?php
require 'vendor/autoload.php';
use Respect\Validation\Rules\LanguageCode;
use Respect\Validation\Validator as v;
v::languageCode()->assert('pt');
v::languageCode()->assert('en');
v::languageCode()->assert('it');
v::languageCode()->check('pt');
v::languageCode()->check('en');
v::languageCode()->check('it');
v::languageCode('alpha-3')->assert('por');
v::languageCode('alpha-3')->assert('eng');
v::languageCode('alpha-3')->assert('ita');
v::languageCode('alpha-3')->check('por');
v::languageCode('alpha-3')->check('eng');
v::languageCode('alpha-3')->check('ita');
?>
--EXPECTF--

View file

@ -1,38 +0,0 @@
--FILE--
<?php
require 'vendor/autoload.php';
use Respect\Validation\Exceptions\AllOfException;
use Respect\Validation\Exceptions\LanguageCodeException;
use Respect\Validation\Validator as v;
try {
v::languageCode('alpha-3')->check('pt');
} catch (LanguageCodeException $e) {
echo $e->getMessage().PHP_EOL;
}
try {
v::languageCode()->assert('eng');
} catch (AllOfException $e) {
echo $e->getFullMessage().PHP_EOL;
}
try {
v::not(v::languageCode())->assert('en');
} catch (AllOfException $e) {
echo $e->getFullMessage().PHP_EOL;
}
try {
v::not(v::languageCode())->check('pt');
} catch (LanguageCodeException $e) {
echo $e->getMessage().PHP_EOL;
}
?>
--EXPECTF--
"pt" must be a valid language
- "eng" must be a valid language
- "en" must not be a valid language
"pt" must not be a valid language

View file

@ -13,43 +13,69 @@ declare(strict_types=1);
namespace Respect\Validation\Rules;
use Respect\Validation\Exceptions\ComponentException;
use Respect\Validation\Test\RuleTestCase;
/**
* @group rule
* @group rule
*
* @covers \Respect\Validation\Rules\LanguageCode
*
* @author Danilo Benevides <danilobenevides01@gmail.com>
* @author Emmerson Siqueira <emmersonsiqueira@gmail.com>
* @author Henrique Moody <henriquemoody@gmail.com>
*/
class LanguageCodeTest extends RuleTestCase
final class LanguageCodeTest extends RuleTestCase
{
/**
* {@inheritdoc}
*/
public function providerForValidInput(): array
{
$ruleAlpha2 = new LanguageCode();
$ruleAlpha3 = new LanguageCode('alpha-3');
$sutAlpha2 = new LanguageCode(LanguageCode::ALPHA2);
$sutAlpha3 = new LanguageCode(LanguageCode::ALPHA3);
return [
[$ruleAlpha2, 'pt'],
[$ruleAlpha3, 'por'],
[$ruleAlpha2, 'en'],
[$ruleAlpha3, 'eng'],
[$ruleAlpha2, 'it'],
[$ruleAlpha3, 'ita'],
[$ruleAlpha2, 'la'],
[$ruleAlpha3, 'lat'],
'alpha-2: en' => [$sutAlpha2, 'en'],
'alpha-2: it' => [$sutAlpha2, 'it'],
'alpha-2: la' => [$sutAlpha2, 'la'],
'alpha-2: pt' => [$sutAlpha2, 'pt'],
'alpha-3: eng' => [$sutAlpha3, 'eng'],
'alpha-3: ita' => [$sutAlpha3, 'ita'],
'alpha-3: lat' => [$sutAlpha3, 'lat'],
'alpha-3: por' => [$sutAlpha3, 'por'],
];
}
/**
* {@inheritdoc}
*/
public function providerForInvalidInput(): array
{
$ruleAlpha2 = new LanguageCode();
$ruleAlpha3 = new LanguageCode('alpha-3');
$sutAlpha2 = new LanguageCode(LanguageCode::ALPHA2);
$sutAlpha3 = new LanguageCode(LanguageCode::ALPHA3);
return [
[$ruleAlpha2, 'por'],
[$ruleAlpha2, ''],
[$ruleAlpha2, null],
[$ruleAlpha2, false],
[$ruleAlpha2, []],
[$ruleAlpha3, 'pt'],
'alpha-2: alpha-3 code' => [$sutAlpha2, 'por'],
'alpha-2: boolean' => [$sutAlpha2, false],
'alpha-2: empty array' => [$sutAlpha2, []],
'alpha-2: empty' => [$sutAlpha2, ''],
'alpha-2: null' => [$sutAlpha2, null],
'alpha-3: alpha-2 code' => [$sutAlpha3, 'pt'],
'alpha-3: boolean' => [$sutAlpha3, true],
'alpha-3: empty array' => [$sutAlpha3, []],
'alpha-3: empty' => [$sutAlpha3, ''],
'alpha-3: null' => [$sutAlpha3, ''],
];
}
/**
* @test
*/
public function itShouldThrowAnExceptionWhenSetIsInvalid(): void
{
$this->expectExceptionObject(new ComponentException('"foo" is not a valid language set for ISO 639'));
new LanguageCode('foo');
}
}