min(10); Assert::same(10, (new Processor)->process($schema, 10)); checkValidationErrors(function () use ($schema) { (new Processor)->process($schema, 9); }, ['The item expects to be in range 10.., 9 given.']); }); test('int & max', function () { $schema = Expect::int()->max(20); Assert::same(20, (new Processor)->process($schema, 20)); checkValidationErrors(function () use ($schema) { (new Processor)->process($schema, 21); }, ['The item expects to be in range ..20, 21 given.']); }); test('int & min & max', function () { $schema = Expect::int()->min(10)->max(20); Assert::same(10, (new Processor)->process($schema, 10)); Assert::same(20, (new Processor)->process($schema, 20)); checkValidationErrors(function () use ($schema) { (new Processor)->process($schema, 9); }, ['The item expects to be in range 10..20, 9 given.']); checkValidationErrors(function () use ($schema) { (new Processor)->process($schema, 21); }, ['The item expects to be in range 10..20, 21 given.']); }); test('nullable int & min & max', function () { $schema = Expect::int()->min(10)->max(20)->nullable(); Assert::same(null, (new Processor)->process($schema, null)); Assert::same(15, (new Processor)->process($schema, 15)); checkValidationErrors(function () use ($schema) { (new Processor)->process($schema, 9); }, ['The item expects to be in range 10..20, 9 given.']); }); test('string', function () { $schema = Expect::string()->min(1)->max(5); Assert::same('hello', (new Processor)->process($schema, 'hello')); Assert::same('x', (new Processor)->process($schema, 'x')); checkValidationErrors(function () use ($schema) { (new Processor)->process($schema, ''); }, ['The length of item expects to be in range 1..5, 0 bytes given.']); checkValidationErrors(function () use ($schema) { (new Processor)->process($schema, 'foobar'); }, ['The length of item expects to be in range 1..5, 6 bytes given.']); }); test('unicode', function () { $schema = Expect::unicode()->min(2)->max(4); Assert::same('žšáé', (new Processor)->process($schema, 'žšáé')); Assert::same('žš', (new Processor)->process($schema, 'žš')); checkValidationErrors(function () use ($schema) { (new Processor)->process($schema, 'ž'); }, ['The length of item expects to be in range 2..4, 1 characters given.']); checkValidationErrors(function () use ($schema) { (new Processor)->process($schema, 'žšáéx'); }, ['The length of item expects to be in range 2..4, 5 characters given.']); }); test('array', function () { $schema = Expect::array()->min(1)->max(3); Assert::same([1], (new Processor)->process($schema, [1])); Assert::same([1, 2, 3], (new Processor)->process($schema, [1, 2, 3])); checkValidationErrors(function () use ($schema) { (new Processor)->process($schema, []); }, ['The length of item expects to be in range 1..3, 0 items given.']); checkValidationErrors(function () use ($schema) { (new Processor)->process($schema, [1, 2, 3, 4]); }, ['The length of item expects to be in range 1..3, 4 items given.']); }); test('structure', function () { $schema = Expect::structure([])->otherItems('int')->min(1)->max(3); Assert::equal((object) [1], (new Processor)->process($schema, [1])); Assert::equal((object) [1, 2, 3], (new Processor)->process($schema, [1, 2, 3])); checkValidationErrors(function () use ($schema) { (new Processor)->process($schema, []); }, ['The length of item expects to be in range 1..3, 0 items given.']); checkValidationErrors(function () use ($schema) { (new Processor)->process($schema, [1, 2, 3, 4]); }, ['The length of item expects to be in range 1..3, 4 items given.']); });