diff options
author | toasted-nutbread <toasted-nutbread@users.noreply.github.com> | 2020-08-09 14:18:59 -0400 |
---|---|---|
committer | GitHub <noreply@github.com> | 2020-08-09 14:18:59 -0400 |
commit | 486d44f7197a2dedc5ea487345e598c668d47638 (patch) | |
tree | 2620a0ed45ebebe786722739c8ce1816cc08d952 /test | |
parent | fbe575c577b9e6c8279aaa064cf62732c643240a (diff) |
Json schema improvements (#722)
* Add support for regex pattern testing
* Add tests
* Separate JsonSchemaProxyHandler statics into JsonSchemaValidator
* Use this instead of JsonSchemaValidator
* Make JsonSchemaValidator non-static
* Use cache map for regex
Diffstat (limited to 'test')
-rw-r--r-- | test/dictionary-validate.js | 1 | ||||
-rw-r--r-- | test/schema-validate.js | 1 | ||||
-rw-r--r-- | test/test-database.js | 1 | ||||
-rw-r--r-- | test/test-schema.js | 120 |
4 files changed, 123 insertions, 0 deletions
diff --git a/test/dictionary-validate.js b/test/dictionary-validate.js index 446de38d..716e8df4 100644 --- a/test/dictionary-validate.js +++ b/test/dictionary-validate.js @@ -23,6 +23,7 @@ const {VM} = require('./yomichan-vm'); const vm = new VM(); vm.execute([ 'mixed/js/core.js', + 'mixed/js/cache-map.js', 'bg/js/json-schema.js' ]); const JsonSchema = vm.get('JsonSchema'); diff --git a/test/schema-validate.js b/test/schema-validate.js index 4c01fa70..aa9450dd 100644 --- a/test/schema-validate.js +++ b/test/schema-validate.js @@ -21,6 +21,7 @@ const {VM} = require('./yomichan-vm'); const vm = new VM(); vm.execute([ 'mixed/js/core.js', + 'mixed/js/cache-map.js', 'bg/js/json-schema.js' ]); const JsonSchema = vm.get('JsonSchema'); diff --git a/test/test-database.js b/test/test-database.js index 6d0aae07..e8fb07b3 100644 --- a/test/test-database.js +++ b/test/test-database.js @@ -113,6 +113,7 @@ vm.context.window = vm.context; vm.execute([ 'mixed/js/core.js', + 'mixed/js/cache-map.js', 'bg/js/json-schema.js', 'bg/js/dictionary.js', 'bg/js/media-utility.js', diff --git a/test/test-schema.js b/test/test-schema.js index f0a99c3b..b976d81f 100644 --- a/test/test-schema.js +++ b/test/test-schema.js @@ -21,6 +21,7 @@ const {VM} = require('./yomichan-vm'); const vm = new VM(); vm.execute([ 'mixed/js/core.js', + 'mixed/js/cache-map.js', 'bg/js/json-schema.js' ]); const JsonSchema = vm.get('JsonSchema'); @@ -86,6 +87,124 @@ function testValidate1() { } } +function testValidate2() { + const data = [ + // String tests + { + schema: { + type: 'string' + }, + inputs: [ + {expected: false, value: null}, + {expected: false, value: void 0}, + {expected: false, value: 0}, + {expected: false, value: {}}, + {expected: false, value: []}, + {expected: true, value: ''} + ] + }, + { + schema: { + type: 'string', + minLength: 2 + }, + inputs: [ + {expected: false, value: ''}, + {expected: false, value: '1'}, + {expected: true, value: '12'}, + {expected: true, value: '123'} + ] + }, + { + schema: { + type: 'string', + maxLength: 2 + }, + inputs: [ + {expected: true, value: ''}, + {expected: true, value: '1'}, + {expected: true, value: '12'}, + {expected: false, value: '123'} + ] + }, + { + schema: { + type: 'string', + pattern: 'test' + }, + inputs: [ + {expected: false, value: ''}, + {expected: true, value: 'test'}, + {expected: false, value: 'TEST'}, + {expected: true, value: 'ABCtestDEF'}, + {expected: false, value: 'ABCTESTDEF'} + ] + }, + { + schema: { + type: 'string', + pattern: '^test$' + }, + inputs: [ + {expected: false, value: ''}, + {expected: true, value: 'test'}, + {expected: false, value: 'TEST'}, + {expected: false, value: 'ABCtestDEF'}, + {expected: false, value: 'ABCTESTDEF'} + ] + }, + { + schema: { + type: 'string', + pattern: '^test$', + patternFlags: 'i' + }, + inputs: [ + {expected: false, value: ''}, + {expected: true, value: 'test'}, + {expected: true, value: 'TEST'}, + {expected: false, value: 'ABCtestDEF'}, + {expected: false, value: 'ABCTESTDEF'} + ] + }, + { + schema: { + type: 'string', + pattern: '*' + }, + inputs: [ + {expected: false, value: ''} + ] + }, + { + schema: { + type: 'string', + pattern: '.', + patternFlags: '?' + }, + inputs: [ + {expected: false, value: ''} + ] + } + ]; + + const schemaValidate = (value, schema) => { + try { + JsonSchema.validate(value, schema); + return true; + } catch (e) { + return false; + } + }; + + for (const {schema, inputs} of data) { + for (const {expected, value} of inputs) { + const actual = schemaValidate(value, schema); + assert.strictEqual(actual, expected); + } + } +} + function testGetValidValueOrDefault1() { // Test value defaulting on objects with additionalProperties=false @@ -246,6 +365,7 @@ function testGetValidValueOrDefault3() { function main() { testValidate1(); + testValidate2(); testGetValidValueOrDefault1(); testGetValidValueOrDefault2(); testGetValidValueOrDefault3(); |