1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57
|
<?php
declare(strict_types=1);
use Nette\Schema\Elements\Structure;
use Nette\Schema\Expect;
use Nette\Schema\Processor;
use Tester\Assert;
require __DIR__ . '/../bootstrap.php';
Assert::with(Structure::class, function () {
$schema = Expect::from($obj = new class {
public string $dsn = 'mysql';
public ?string $user;
public ?string $password = null;
public array|int $options = [];
public bool $debugger = true;
public mixed $mixed;
public array $arr = [1];
});
Assert::type(Structure::class, $schema);
Assert::equal([
'dsn' => Expect::string('mysql'),
'user' => Expect::type('?string')->required(),
'password' => Expect::type('?string'),
'options' => Expect::type('array|int')->default([]),
'debugger' => Expect::bool(true),
'mixed' => Expect::mixed()->required(),
'arr' => Expect::type('array')->default([1]),
], $schema->items);
Assert::type($obj, (new Processor)->process($schema, ['user' => '', 'mixed' => '']));
});
Assert::with(Structure::class, function () { // constructor injection
$schema = Expect::from($obj = new class ('') {
public function __construct(
public ?string $user,
public ?string $password = null,
) {
}
});
Assert::type(Structure::class, $schema);
Assert::equal([
'user' => Expect::type('?string')->required(),
'password' => Expect::type('?string'),
], $schema->items);
Assert::equal(
new $obj('foo', 'bar'),
(new Processor)->process($schema, ['user' => 'foo', 'password' => 'bar']),
);
});
|