Skip to content

Commit ddda992

Browse files
authored
feat(validation): ArrayList rule (#745)
1 parent fd59089 commit ddda992

File tree

2 files changed

+47
-0
lines changed

2 files changed

+47
-0
lines changed
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
<?php
2+
3+
declare(strict_types=1);
4+
5+
namespace Tempest\Validation\Rules;
6+
7+
use Attribute;
8+
use Tempest\Validation\Rule;
9+
10+
#[Attribute]
11+
final readonly class ArrayList implements Rule
12+
{
13+
public function isValid(mixed $value): bool
14+
{
15+
return is_array($value) && array_is_list($value);
16+
}
17+
18+
public function message(): string
19+
{
20+
return 'Value must be a list';
21+
}
22+
}
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
<?php
2+
3+
declare(strict_types=1);
4+
5+
namespace Tempest\Validation\Tests\Rules;
6+
7+
use PHPUnit\Framework\TestCase;
8+
use Tempest\Validation\Rules\ArrayList;
9+
10+
/**
11+
* @internal
12+
*/
13+
final class ArrayListTest extends TestCase
14+
{
15+
public function test_array_list(): void
16+
{
17+
$rule = new ArrayList();
18+
19+
$this->assertFalse($rule->isValid(['foo' => 'bar']));
20+
$this->assertTrue($rule->isValid([]));
21+
$this->assertTrue($rule->isValid(['a', 'b', 'c']));
22+
$this->assertFalse($rule->isValid([0 => 'a', 1 => 'b', 3 => 'c']));
23+
$this->assertSame('Value must be a list', $rule->message());
24+
}
25+
}

0 commit comments

Comments
 (0)