diff options
Diffstat (limited to 'test/json-schema.test.js')
-rw-r--r-- | test/json-schema.test.js | 52 |
1 files changed, 34 insertions, 18 deletions
diff --git a/test/json-schema.test.js b/test/json-schema.test.js index 0c1a483b..4773e898 100644 --- a/test/json-schema.test.js +++ b/test/json-schema.test.js @@ -18,7 +18,7 @@ /* eslint-disable no-multi-spaces */ -import {expect, test} from 'vitest'; +import {describe, expect, test} from 'vitest'; import {parseJson} from '../dev/json.js'; import {JsonSchema} from '../ext/js/data/json-schema.js'; @@ -61,7 +61,7 @@ function clone(value) { /** */ function testValidate1() { - test('Validate1', () => { + describe('Validate1', () => { /** @type {import('ext/json-schema').Schema} */ const schema = { allOf: [ @@ -112,17 +112,19 @@ function testValidate1() { ); }; - for (let i = -111; i <= 111; i++) { - const actual = schemaValidate(schema, i); - const expected = jsValidate(i); - expect(actual).toStrictEqual(expected); - } + test('works as expected', () => { + for (let i = -111; i <= 111; i++) { + const actual = schemaValidate(schema, i); + const expected = jsValidate(i); + expect(actual).toStrictEqual(expected); + } + }); }); } /** */ function testValidate2() { - test('Validate2', () => { + describe('Validate2', () => { /** @type {{schema: import('ext/json-schema').Schema, inputs: {expected: boolean, value: unknown}[]}[]} */ const data = [ // String tests @@ -517,19 +519,19 @@ function testValidate2() { } ]; - for (const {schema, inputs} of data) { - for (const {expected, value} of inputs) { + describe.each(data)('Schema %#', ({schema, inputs}) => { + test.each(inputs)(`schemaValidate(${schema}, $value) -> $expected`, ({expected, value}) => { const actual = schemaValidate(schema, value); expect(actual).toStrictEqual(expected); - } - } + }); + }); }); } /** */ function testGetValidValueOrDefault1() { - test('GetValidValueOrDefault1', () => { + describe('GetValidValueOrDefault1', () => { /** @type {{schema: import('ext/json-schema').Schema, inputs: [value: unknown, expected: unknown][]}[]} */ const data = [ // Test value defaulting on objects with additionalProperties=false @@ -875,19 +877,19 @@ function testGetValidValueOrDefault1() { } ]; - for (const {schema, inputs} of data) { - for (const [value, expected] of inputs) { + describe.each(data)('Schema %#', ({schema, inputs}) => { + test.each(inputs)(`getValidValueOrDefault(${schema}, %o) -> %o`, (value, expected) => { const actual = getValidValueOrDefault(schema, value); expect(actual).toStrictEqual(expected); - } - } + }); + }); }); } /** */ function testProxy1() { - test('Proxy1', () => { + describe('Proxy1', () => { /** @type {{schema: import('ext/json-schema').Schema, tests: {error: boolean, value?: import('ext/json-schema').Value, action: (value: import('core').SafeAny) => void}[]}[]} */ const data = [ // Object tests @@ -1018,6 +1020,20 @@ function testProxy1() { } ]; + describe.each(data)('Schema %#', ({schema, tests}) => { + test.each(tests)('proxy %#', ({error, value, action}) => { + if (typeof value === 'undefined') { value = getValidValueOrDefault(schema, void 0); } + value = clone(value); + expect(schemaValidate(schema, value)).toBe(true); + const valueProxy = createProxy(schema, value); + if (error) { + expect(() => action(valueProxy)).toThrow(); + } else { + expect(() => action(valueProxy)).not.toThrow(); + } + }); + }); + for (const {schema, tests} of data) { for (let {error, value, action} of tests) { if (typeof value === 'undefined') { value = getValidValueOrDefault(schema, void 0); } |