| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334 |
- <?php
- declare(strict_types=1);
- use Nette\Schema\Expect;
- use Nette\Schema\Helpers;
- use Nette\Schema\Processor;
- use Tester\Assert;
- require __DIR__ . '/../bootstrap.php';
- test('without default value', function () {
- $schema = Expect::array();
- Assert::same([], (new Processor)->process($schema, []));
- Assert::same([1, 2, 3], (new Processor)->process($schema, [1, 2, 3]));
- Assert::same(['key' => 'val'], (new Processor)->process($schema, ['key' => 'val']));
- checkValidationErrors(function () use ($schema) {
- (new Processor)->process($schema, 'one');
- }, ["The item expects to be array, 'one' given."]);
- checkValidationErrors(function () use ($schema) {
- (new Processor)->process($schema, true);
- }, ['The item expects to be array, true given.']);
- checkValidationErrors(function () use ($schema) {
- (new Processor)->process($schema, 123);
- }, ['The item expects to be array, 123 given.']);
- Assert::same([], (new Processor)->process($schema, null));
- });
- test('not merging', function () {
- $schema = Expect::array([
- 'key1' => 'val1',
- 'key2' => 'val2',
- 'val3',
- 'arr' => ['item'],
- ])->mergeDefaults(false);
- Assert::same([], (new Processor)->process($schema, []));
- Assert::same(
- [1, 2, 3],
- (new Processor)->process($schema, [1, 2, 3])
- );
- });
- test('merging', function () {
- $schema = Expect::array([
- 'key1' => 'val1',
- 'key2' => 'val2',
- 'val3',
- 'arr' => ['item'],
- ]);
- Assert::same([
- 'key1' => 'val1',
- 'key2' => 'val2',
- 'val3',
- 'arr' => ['item'],
- ], (new Processor)->process($schema, []));
- Assert::same(
- [
- 'key1' => 'val1',
- 'key2' => 'val2',
- 'val3',
- 'arr' => ['item'],
- 1, 2, 3,
- ],
- (new Processor)->process($schema, [1, 2, 3])
- );
- Assert::same(
- [
- 'key1' => 'newval',
- 'key2' => 'val2',
- 'val3',
- 'arr' => ['item', 'newitem'],
- 'key3' => 'newval',
- 'newval3',
- ],
- (new Processor)->process($schema, [
- 'key1' => 'newval',
- 'key3' => 'newval',
- 'newval3',
- 'arr' => ['newitem'],
- ])
- );
- Assert::same(
- [
- 'key1' => 'newval',
- 'key3' => 'newval',
- 'newval3',
- 'arr' => ['newitem'],
- ],
- (new Processor)->process($schema, [
- Helpers::PreventMerging => true,
- 'key1' => 'newval',
- 'key3' => 'newval',
- 'newval3',
- 'arr' => ['newitem'],
- ])
- );
- Assert::same(
- [
- 'key1' => 'newval',
- 'key2' => 'val2',
- 'val3',
- 'arr' => ['newitem'],
- 'key3' => 'newval',
- 'newval3',
- ],
- (new Processor)->process($schema, [
- 'key1' => 'newval',
- 'key3' => 'newval',
- 'newval3',
- 'arr' => [Helpers::PreventMerging => true, 'newitem'],
- ])
- );
- });
- test('merging & other items validation', function () {
- $schema = Expect::array([
- 'key1' => 'val1',
- 'key2' => 'val2',
- 'val3',
- ])->items('string');
- Assert::same([
- 'key1' => 'val1',
- 'key2' => 'val2',
- 'val3',
- ], (new Processor)->process($schema, []));
- checkValidationErrors(function () use ($schema) {
- (new Processor)->process($schema, [1, 2, 3]);
- }, [
- "The item '0' expects to be string, 1 given.",
- "The item '1' expects to be string, 2 given.",
- "The item '2' expects to be string, 3 given.",
- ]);
- Assert::same(
- [
- 'key1' => 'newval',
- 'key2' => 'val2',
- 'val3',
- 'key3' => 'newval',
- 'newval3',
- ],
- (new Processor)->process($schema, [
- 'key1' => 'newval',
- 'key3' => 'newval',
- 'newval3',
- ])
- );
- });
- test('merging & other items validation', function () {
- $schema = Expect::array()->items('string');
- Assert::same([
- 'key1' => 'val1',
- 'key2' => 'val2',
- 'val3',
- ], $schema->merge([
- 'key1' => 'val1',
- 'key2' => 'val2',
- 'val3',
- ], null));
- Assert::same(
- [
- 'key1' => 'newval',
- 'key2' => 'val2',
- 'val3',
- 'key3' => 'newval',
- 'newval3',
- ],
- $schema->merge([
- 'key1' => 'newval',
- 'key3' => 'newval',
- 'newval3',
- ], [
- 'key1' => 'val1',
- 'key2' => 'val2',
- 'val3',
- ])
- );
- });
- test('items() & scalar', function () {
- $schema = Expect::array([
- 'a' => 'defval',
- ])->items('string');
- Assert::same(['a' => 'defval'], (new Processor)->process($schema, []));
- checkValidationErrors(function () use ($schema) {
- (new Processor)->process($schema, [1, 2, 3]);
- }, [
- "The item '0' expects to be string, 1 given.",
- "The item '1' expects to be string, 2 given.",
- "The item '2' expects to be string, 3 given.",
- ]);
- Assert::same(['a' => 'val'], (new Processor)->process($schema, ['a' => 'val']));
- checkValidationErrors(function () use ($schema) {
- (new Processor)->process($schema, ['a' => null]);
- }, ["The item 'a' expects to be string, null given."]);
- checkValidationErrors(function () use ($schema) {
- (new Processor)->process($schema, ['b' => 123]);
- }, ["The item 'b' expects to be string, 123 given."]);
- checkValidationErrors(function () use ($schema) {
- (new Processor)->process($schema, ['b' => null]);
- }, ["The item 'b' expects to be string, null given."]);
- Assert::same(['a' => 'defval', 'b' => 'val'], (new Processor)->process($schema, ['b' => 'val']));
- });
- test('items() & structure', function () {
- $schema = Expect::array([
- 'a' => 'defval',
- ])->items(Expect::structure(['k' => Expect::string()]));
- Assert::same(['a' => 'defval'], (new Processor)->process($schema, []));
- checkValidationErrors(function () use ($schema) {
- (new Processor)->process($schema, ['a' => 'val']);
- }, ["The item 'a' expects to be array, 'val' given."]);
- checkValidationErrors(function () use ($schema) {
- (new Processor)->process($schema, [1, 2, 3]);
- }, [
- "The item '0' expects to be array, 1 given.",
- "The item '1' expects to be array, 2 given.",
- "The item '2' expects to be array, 3 given.",
- ]);
- checkValidationErrors(function () use ($schema) {
- (new Processor)->process($schema, ['b' => 'val']);
- }, ["The item 'b' expects to be array, 'val' given."]);
- checkValidationErrors(function () use ($schema) {
- (new Processor)->process($schema, ['b' => ['a' => 'val']]);
- }, ["Unexpected item 'b\u{a0}›\u{a0}a', did you mean 'k'?"]);
- Assert::equal(
- ['a' => 'defval', 'b' => (object) ['k' => 'val']],
- (new Processor)->process($schema, ['b' => ['k' => 'val']])
- );
- });
- test('arrayOf() & scalar', function () {
- $schema = Expect::arrayOf('string|int');
- Assert::same([], (new Processor)->process($schema, []));
- Assert::same([1, 2, 3], (new Processor)->process($schema, [1, 2, 3]));
- Assert::same([10 => 20], (new Processor)->process($schema, [10 => 20]));
- checkValidationErrors(function () use ($schema) {
- (new Processor)->process($schema, [1, 2, false]);
- }, ["The item '2' expects to be string or int, false given."]);
- Assert::same(['key' => 'val'], (new Processor)->process($schema, ['key' => 'val']));
- });
- test('arrayOf() & keys', function () {
- $schema = Expect::arrayOf('string|int', Expect::string()->pattern('\w+'));
- Assert::same([], (new Processor)->process($schema, []));
- checkValidationErrors(function () use ($schema) {
- (new Processor)->process($schema, [1, '#' => 2]);
- }, [
- "The key of item '0' expects to be string, 0 given.",
- "The key of item '#' expects to match pattern '\\w+', '#' given.",
- ]);
- Assert::same(['key' => 'val'], (new Processor)->process($schema, ['key' => 'val']));
- });
- test('arrayOf() & keys II.', function () {
- $schema = Expect::arrayOf('string|int', Expect::string()->before('strrev'));
- Assert::same(['yek' => 'val'], (new Processor)->process($schema, ['key' => 'val']));
- });
- test('arrayOf() error', function () {
- Assert::exception(function () {
- Expect::arrayOf(['a' => Expect::string()]);
- }, TypeError::class);
- });
- test('type[]', function () {
- $schema = Expect::type('int[]');
- Assert::same([], (new Processor)->process($schema, null));
- Assert::same([], (new Processor)->process($schema, []));
- Assert::same([1, 2, 3], (new Processor)->process($schema, [1, 2, 3]));
- checkValidationErrors(function () use ($schema) {
- (new Processor)->process($schema, [1, 2, false]);
- }, ['The item expects to be int[], array given.']);
- Assert::same(['key' => 1], (new Processor)->process($schema, ['key' => 1]));
- });
|