2016-12-04 10:06:32 +01:00
|
|
|
<?php
|
|
|
|
|
|
|
|
/*
|
|
|
|
* This file is part of Respect/Validation.
|
|
|
|
*
|
|
|
|
* (c) Alexandre Gomes Gaigalas <alexandre@gaigalas.net>
|
|
|
|
*
|
2019-05-23 16:21:34 +02:00
|
|
|
* For the full copyright and license information, please view the LICENSE file
|
|
|
|
* that was distributed with this source code.
|
2016-12-04 10:06:32 +01:00
|
|
|
*/
|
|
|
|
|
2017-11-19 19:01:31 +01:00
|
|
|
declare(strict_types=1);
|
|
|
|
|
2016-12-04 10:06:32 +01:00
|
|
|
namespace Respect\Validation\Rules;
|
|
|
|
|
2020-08-26 09:47:59 +02:00
|
|
|
use Respect\Validation\Exceptions\CallbackException;
|
|
|
|
use Respect\Validation\Exceptions\OneOfException;
|
|
|
|
use Respect\Validation\Exceptions\XdigitException;
|
2018-12-05 08:36:38 +01:00
|
|
|
use Respect\Validation\Test\TestCase;
|
2017-11-04 11:21:40 +01:00
|
|
|
|
2016-12-04 10:06:32 +01:00
|
|
|
/**
|
|
|
|
* @group rule
|
|
|
|
* @covers \Respect\Validation\Exceptions\OneOfException
|
2018-07-23 20:35:14 +02:00
|
|
|
* @covers \Respect\Validation\Rules\OneOf
|
2018-11-25 17:56:04 +01:00
|
|
|
*
|
|
|
|
* @author Bradyn Poulsen <bradyn@bradynpoulsen.com>
|
|
|
|
* @author Gabriel Caruso <carusogabriel34@gmail.com>
|
|
|
|
* @author Henrique Moody <henriquemoody@gmail.com>
|
2016-12-04 10:06:32 +01:00
|
|
|
*/
|
2019-02-09 14:31:56 +01:00
|
|
|
final class OneOfTest extends TestCase
|
2016-12-04 10:06:32 +01:00
|
|
|
{
|
2018-07-23 20:35:14 +02:00
|
|
|
/**
|
|
|
|
* @test
|
|
|
|
*/
|
|
|
|
public function valid(): void
|
2016-12-04 10:06:32 +01:00
|
|
|
{
|
2019-02-09 12:31:09 +01:00
|
|
|
$valid1 = new Callback(static function () {
|
2016-12-04 10:06:32 +01:00
|
|
|
return false;
|
|
|
|
});
|
2019-02-09 12:31:09 +01:00
|
|
|
$valid2 = new Callback(static function () {
|
2016-12-04 10:06:32 +01:00
|
|
|
return true;
|
|
|
|
});
|
2019-02-09 12:31:09 +01:00
|
|
|
$valid3 = new Callback(static function () {
|
2016-12-04 10:06:32 +01:00
|
|
|
return false;
|
|
|
|
});
|
|
|
|
|
|
|
|
$rule = new OneOf($valid1, $valid2, $valid3);
|
|
|
|
|
2017-11-12 14:33:39 +01:00
|
|
|
self::assertTrue($rule->validate('any'));
|
2018-01-28 17:16:53 +01:00
|
|
|
$rule->assert('any');
|
2018-01-28 16:14:00 +01:00
|
|
|
$rule->check('any');
|
2016-12-04 10:06:32 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
2018-07-23 20:35:14 +02:00
|
|
|
* @test
|
2016-12-04 10:06:32 +01:00
|
|
|
*/
|
2018-07-23 20:35:14 +02:00
|
|
|
public function emptyChain(): void
|
2016-12-04 10:06:32 +01:00
|
|
|
{
|
|
|
|
$rule = new OneOf();
|
|
|
|
|
2017-11-12 14:33:39 +01:00
|
|
|
self::assertFalse($rule->validate('any'));
|
2020-08-26 09:47:59 +02:00
|
|
|
|
|
|
|
$this->expectException(OneOfException::class);
|
|
|
|
|
2018-01-28 16:14:00 +01:00
|
|
|
$rule->check('any');
|
2016-12-04 10:06:32 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
2018-07-23 20:35:14 +02:00
|
|
|
* @test
|
2016-12-04 10:06:32 +01:00
|
|
|
*/
|
2018-07-23 20:35:14 +02:00
|
|
|
public function invalid(): void
|
2016-12-04 10:06:32 +01:00
|
|
|
{
|
2019-02-09 12:31:09 +01:00
|
|
|
$valid1 = new Callback(static function () {
|
2016-12-04 10:06:32 +01:00
|
|
|
return false;
|
|
|
|
});
|
2019-02-09 12:31:09 +01:00
|
|
|
$valid2 = new Callback(static function () {
|
2016-12-04 10:06:32 +01:00
|
|
|
return false;
|
|
|
|
});
|
2019-02-09 12:31:09 +01:00
|
|
|
$valid3 = new Callback(static function () {
|
2016-12-04 10:06:32 +01:00
|
|
|
return false;
|
|
|
|
});
|
|
|
|
$rule = new OneOf($valid1, $valid2, $valid3);
|
2017-11-12 14:33:39 +01:00
|
|
|
self::assertFalse($rule->validate('any'));
|
2020-08-26 09:47:59 +02:00
|
|
|
|
|
|
|
$this->expectException(OneOfException::class);
|
2018-01-28 17:16:53 +01:00
|
|
|
$rule->assert('any');
|
2016-12-04 10:06:32 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
2018-07-23 20:35:14 +02:00
|
|
|
* @test
|
2016-12-04 10:06:32 +01:00
|
|
|
*/
|
2018-07-23 20:35:14 +02:00
|
|
|
public function invalidMultipleAssert(): void
|
2016-12-04 10:06:32 +01:00
|
|
|
{
|
2019-02-09 12:31:09 +01:00
|
|
|
$valid1 = new Callback(static function () {
|
2016-12-04 10:06:32 +01:00
|
|
|
return true;
|
|
|
|
});
|
2019-02-09 12:31:09 +01:00
|
|
|
$valid2 = new Callback(static function () {
|
2016-12-04 10:06:32 +01:00
|
|
|
return true;
|
|
|
|
});
|
2019-02-09 12:31:09 +01:00
|
|
|
$valid3 = new Callback(static function () {
|
2016-12-04 10:06:32 +01:00
|
|
|
return false;
|
|
|
|
});
|
|
|
|
$rule = new OneOf($valid1, $valid2, $valid3);
|
2017-11-12 14:33:39 +01:00
|
|
|
self::assertFalse($rule->validate('any'));
|
2016-12-04 10:06:32 +01:00
|
|
|
|
2020-08-26 09:47:59 +02:00
|
|
|
$this->expectException(OneOfException::class);
|
2016-12-04 10:06:32 +01:00
|
|
|
$rule->assert('any');
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
2018-07-23 20:35:14 +02:00
|
|
|
* @test
|
2016-12-04 10:06:32 +01:00
|
|
|
*/
|
2018-07-23 20:35:14 +02:00
|
|
|
public function invalidMultipleCheck(): void
|
2016-12-04 10:06:32 +01:00
|
|
|
{
|
2019-02-09 12:31:09 +01:00
|
|
|
$valid1 = new Callback(static function () {
|
2016-12-04 10:06:32 +01:00
|
|
|
return true;
|
|
|
|
});
|
2019-02-09 12:31:09 +01:00
|
|
|
$valid2 = new Callback(static function () {
|
2016-12-04 10:06:32 +01:00
|
|
|
return true;
|
|
|
|
});
|
2019-02-09 12:31:09 +01:00
|
|
|
$valid3 = new Callback(static function () {
|
2016-12-04 10:06:32 +01:00
|
|
|
return false;
|
|
|
|
});
|
|
|
|
|
|
|
|
$rule = new OneOf($valid1, $valid2, $valid3);
|
2017-11-12 14:33:39 +01:00
|
|
|
self::assertFalse($rule->validate('any'));
|
2016-12-04 10:06:32 +01:00
|
|
|
|
2020-08-26 09:47:59 +02:00
|
|
|
$this->expectException(CallbackException::class);
|
2016-12-04 10:06:32 +01:00
|
|
|
$rule->check('any');
|
|
|
|
}
|
2017-11-19 19:01:31 +01:00
|
|
|
|
2016-12-04 10:06:32 +01:00
|
|
|
/**
|
2018-07-23 20:35:14 +02:00
|
|
|
* @test
|
2016-12-04 10:06:32 +01:00
|
|
|
*/
|
2018-07-23 20:35:14 +02:00
|
|
|
public function invalidMultipleCheckAllValid(): void
|
2016-12-04 10:06:32 +01:00
|
|
|
{
|
2019-02-09 12:31:09 +01:00
|
|
|
$valid1 = new Callback(static function () {
|
2016-12-04 10:06:32 +01:00
|
|
|
return true;
|
|
|
|
});
|
2019-02-09 12:31:09 +01:00
|
|
|
$valid2 = new Callback(static function () {
|
2016-12-04 10:06:32 +01:00
|
|
|
return true;
|
|
|
|
});
|
2019-02-09 12:31:09 +01:00
|
|
|
$valid3 = new Callback(static function () {
|
2016-12-04 10:06:32 +01:00
|
|
|
return true;
|
|
|
|
});
|
|
|
|
|
|
|
|
$rule = new OneOf($valid1, $valid2, $valid3);
|
2017-11-12 14:33:39 +01:00
|
|
|
self::assertFalse($rule->validate('any'));
|
2016-12-04 10:06:32 +01:00
|
|
|
|
2020-08-26 09:47:59 +02:00
|
|
|
$this->expectException(OneOfException::class);
|
2016-12-04 10:06:32 +01:00
|
|
|
$rule->check('any');
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
2018-07-23 20:35:14 +02:00
|
|
|
* @test
|
2016-12-04 10:06:32 +01:00
|
|
|
*/
|
2018-07-23 20:35:14 +02:00
|
|
|
public function invalidCheck(): void
|
2016-12-04 10:06:32 +01:00
|
|
|
{
|
|
|
|
$rule = new OneOf(new Xdigit(), new Alnum());
|
2017-11-12 14:33:39 +01:00
|
|
|
self::assertFalse($rule->validate(-10));
|
2016-12-04 10:06:32 +01:00
|
|
|
|
2020-08-26 09:47:59 +02:00
|
|
|
$this->expectException(XdigitException::class);
|
2016-12-04 10:06:32 +01:00
|
|
|
$rule->check(-10);
|
|
|
|
}
|
|
|
|
}
|