Software /
code /
prosody
Annotate
spec/util_jsonschema_spec.lua @ 12860:38b3cd292ee5
Merge 0.12->trunk
author | Kim Alvefur <zash@zash.se> |
---|---|
date | Sat, 21 Jan 2023 17:18:16 +0100 |
parent | 12758:7929c0ffbe14 |
child | 12943:297b4cfcc3d9 |
rev | line source |
---|---|
12579
ca6a43fe0231
util.jsonschema: Fix validation to not assume presence of "type" field
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
1 local js = require "util.jsonschema"; |
ca6a43fe0231
util.jsonschema: Fix validation to not assume presence of "type" field
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
2 local json = require "util.json"; |
ca6a43fe0231
util.jsonschema: Fix validation to not assume presence of "type" field
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
3 local lfs = require "lfs"; |
ca6a43fe0231
util.jsonschema: Fix validation to not assume presence of "type" field
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
4 |
ca6a43fe0231
util.jsonschema: Fix validation to not assume presence of "type" field
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
5 -- https://github.com/json-schema-org/JSON-Schema-Test-Suite.git 2.0.0-550-g88d6948 |
ca6a43fe0231
util.jsonschema: Fix validation to not assume presence of "type" field
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
6 local test_suite_dir = "spec/JSON-Schema-Test-Suite/tests/draft2020-12" |
ca6a43fe0231
util.jsonschema: Fix validation to not assume presence of "type" field
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
7 if lfs.attributes(test_suite_dir, "mode") ~= "directory" then return end |
ca6a43fe0231
util.jsonschema: Fix validation to not assume presence of "type" field
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
8 |
ca6a43fe0231
util.jsonschema: Fix validation to not assume presence of "type" field
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
9 -- Tests to skip and short reason why (NYI = not yet implemented) |
ca6a43fe0231
util.jsonschema: Fix validation to not assume presence of "type" field
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
10 local skip = { |
ca6a43fe0231
util.jsonschema: Fix validation to not assume presence of "type" field
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
11 ["additionalProperties.json:0:2"] = "distinguishing objects from arrays", |
ca6a43fe0231
util.jsonschema: Fix validation to not assume presence of "type" field
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
12 ["additionalProperties.json:0:5"] = "NYI", |
ca6a43fe0231
util.jsonschema: Fix validation to not assume presence of "type" field
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
13 ["additionalProperties.json:1:0"] = "NYI", |
ca6a43fe0231
util.jsonschema: Fix validation to not assume presence of "type" field
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
14 ["anchor.json"] = "$anchor NYI", |
ca6a43fe0231
util.jsonschema: Fix validation to not assume presence of "type" field
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
15 ["const.json:1"] = "deepcompare", |
ca6a43fe0231
util.jsonschema: Fix validation to not assume presence of "type" field
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
16 ["const.json:13:2"] = "IEEE 754 equality", |
ca6a43fe0231
util.jsonschema: Fix validation to not assume presence of "type" field
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
17 ["const.json:2"] = "deepcompare", |
ca6a43fe0231
util.jsonschema: Fix validation to not assume presence of "type" field
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
18 ["const.json:8"] = "deepcompare", |
ca6a43fe0231
util.jsonschema: Fix validation to not assume presence of "type" field
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
19 ["const.json:9"] = "deepcompare", |
ca6a43fe0231
util.jsonschema: Fix validation to not assume presence of "type" field
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
20 ["contains.json:0:5"] = "distinguishing objects from arrays", |
ca6a43fe0231
util.jsonschema: Fix validation to not assume presence of "type" field
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
21 ["defs.json"] = "need built-in meta-schema", |
ca6a43fe0231
util.jsonschema: Fix validation to not assume presence of "type" field
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
22 ["dependentRequired.json"] = "NYI", |
ca6a43fe0231
util.jsonschema: Fix validation to not assume presence of "type" field
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
23 ["dependentSchemas.json"] = "NYI", |
ca6a43fe0231
util.jsonschema: Fix validation to not assume presence of "type" field
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
24 ["dynamicRef.json"] = "NYI", |
ca6a43fe0231
util.jsonschema: Fix validation to not assume presence of "type" field
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
25 ["enum.json:1:3"] = "deepcompare", |
ca6a43fe0231
util.jsonschema: Fix validation to not assume presence of "type" field
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
26 ["id.json"] = "NYI", |
ca6a43fe0231
util.jsonschema: Fix validation to not assume presence of "type" field
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
27 ["maxContains.json"] = "NYI", |
ca6a43fe0231
util.jsonschema: Fix validation to not assume presence of "type" field
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
28 ["maxLength.json:0:4"] = "UTF-16", |
ca6a43fe0231
util.jsonschema: Fix validation to not assume presence of "type" field
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
29 ["maxProperties.json"] = "NYI", |
ca6a43fe0231
util.jsonschema: Fix validation to not assume presence of "type" field
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
30 ["minContains.json"] = "NYI", |
ca6a43fe0231
util.jsonschema: Fix validation to not assume presence of "type" field
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
31 ["minLength.json:0:4"] = "UTF-16", |
ca6a43fe0231
util.jsonschema: Fix validation to not assume presence of "type" field
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
32 ["minProperties.json"] = "NYI", |
ca6a43fe0231
util.jsonschema: Fix validation to not assume presence of "type" field
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
33 ["multipleOf.json:1"] = "multiples of IEEE 754 fractions", |
ca6a43fe0231
util.jsonschema: Fix validation to not assume presence of "type" field
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
34 ["multipleOf.json:2"] = "multiples of IEEE 754 fractions", |
ca6a43fe0231
util.jsonschema: Fix validation to not assume presence of "type" field
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
35 ["pattern.json"] = "NYI", |
ca6a43fe0231
util.jsonschema: Fix validation to not assume presence of "type" field
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
36 ["patternProperties.json"] = "NYI", |
ca6a43fe0231
util.jsonschema: Fix validation to not assume presence of "type" field
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
37 ["properties.json:1:2"] = "NYI", |
ca6a43fe0231
util.jsonschema: Fix validation to not assume presence of "type" field
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
38 ["properties.json:1:3"] = "NYI", |
12756
cd7da871ce10
util.jsonschema: Sort test cases to skip
Kim Alvefur <zash@zash.se>
parents:
12579
diff
changeset
|
39 ["ref.json:0:3"] = "NYI additionalProperties", |
cd7da871ce10
util.jsonschema: Sort test cases to skip
Kim Alvefur <zash@zash.se>
parents:
12579
diff
changeset
|
40 ["ref.json:11"] = "NYI", |
cd7da871ce10
util.jsonschema: Sort test cases to skip
Kim Alvefur <zash@zash.se>
parents:
12579
diff
changeset
|
41 ["ref.json:12:1"] = "FIXME", |
cd7da871ce10
util.jsonschema: Sort test cases to skip
Kim Alvefur <zash@zash.se>
parents:
12579
diff
changeset
|
42 ["ref.json:13"] = "NYI", |
12579
ca6a43fe0231
util.jsonschema: Fix validation to not assume presence of "type" field
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
43 ["ref.json:14"] = "NYI", |
ca6a43fe0231
util.jsonschema: Fix validation to not assume presence of "type" field
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
44 ["ref.json:15"] = "NYI", |
ca6a43fe0231
util.jsonschema: Fix validation to not assume presence of "type" field
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
45 ["ref.json:16"] = "NYI", |
ca6a43fe0231
util.jsonschema: Fix validation to not assume presence of "type" field
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
46 ["ref.json:17"] = "NYI", |
ca6a43fe0231
util.jsonschema: Fix validation to not assume presence of "type" field
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
47 ["ref.json:18"] = "NYI", |
ca6a43fe0231
util.jsonschema: Fix validation to not assume presence of "type" field
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
48 ["ref.json:19"] = "NYI", |
12757
edbc888b1e05
util.jsonschema: Ignore some further test cases for URI references
Kim Alvefur <zash@zash.se>
parents:
12756
diff
changeset
|
49 ["ref.json:26"] = "NYI", |
edbc888b1e05
util.jsonschema: Ignore some further test cases for URI references
Kim Alvefur <zash@zash.se>
parents:
12756
diff
changeset
|
50 ["ref.json:27"] = "NYI", |
edbc888b1e05
util.jsonschema: Ignore some further test cases for URI references
Kim Alvefur <zash@zash.se>
parents:
12756
diff
changeset
|
51 ["ref.json:28"] = "NYI", |
12756
cd7da871ce10
util.jsonschema: Sort test cases to skip
Kim Alvefur <zash@zash.se>
parents:
12579
diff
changeset
|
52 ["ref.json:3:2"] = "FIXME investigate, util.jsonpath issue?", |
12758
7929c0ffbe14
util.jsonschema: Ignore test case for JavaScript specific detail
Kim Alvefur <zash@zash.se>
parents:
12757
diff
changeset
|
53 ["required.json:4"] = "JavaScript specific and distinguishing objects from arrays", |
12756
cd7da871ce10
util.jsonschema: Sort test cases to skip
Kim Alvefur <zash@zash.se>
parents:
12579
diff
changeset
|
54 ["ref.json:6:1"] = "NYI", |
12757
edbc888b1e05
util.jsonschema: Ignore some further test cases for URI references
Kim Alvefur <zash@zash.se>
parents:
12756
diff
changeset
|
55 ["ref.json:20"] = "NYI", |
edbc888b1e05
util.jsonschema: Ignore some further test cases for URI references
Kim Alvefur <zash@zash.se>
parents:
12756
diff
changeset
|
56 ["ref.json:25"] = "NYI", |
12579
ca6a43fe0231
util.jsonschema: Fix validation to not assume presence of "type" field
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
57 ["refRemote.json"] = "DEFINITELY NYI", |
12756
cd7da871ce10
util.jsonschema: Sort test cases to skip
Kim Alvefur <zash@zash.se>
parents:
12579
diff
changeset
|
58 ["required.json:0:2"] = "distinguishing objects from arrays", |
12579
ca6a43fe0231
util.jsonschema: Fix validation to not assume presence of "type" field
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
59 ["type.json:3:4"] = "distinguishing objects from arrays", |
ca6a43fe0231
util.jsonschema: Fix validation to not assume presence of "type" field
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
60 ["type.json:3:6"] = "null is weird", |
ca6a43fe0231
util.jsonschema: Fix validation to not assume presence of "type" field
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
61 ["type.json:4:3"] = "distinguishing objects from arrays", |
ca6a43fe0231
util.jsonschema: Fix validation to not assume presence of "type" field
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
62 ["type.json:4:6"] = "null is weird", |
ca6a43fe0231
util.jsonschema: Fix validation to not assume presence of "type" field
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
63 ["type.json:9:4"] = "null is weird", |
ca6a43fe0231
util.jsonschema: Fix validation to not assume presence of "type" field
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
64 ["type.json:9:6"] = "null is weird", |
ca6a43fe0231
util.jsonschema: Fix validation to not assume presence of "type" field
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
65 ["unevaluatedItems.json"] = "NYI", |
ca6a43fe0231
util.jsonschema: Fix validation to not assume presence of "type" field
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
66 ["unevaluatedProperties.json"] = "NYI", |
ca6a43fe0231
util.jsonschema: Fix validation to not assume presence of "type" field
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
67 ["uniqueItems.json:0:11"] = "deepcompare", |
ca6a43fe0231
util.jsonschema: Fix validation to not assume presence of "type" field
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
68 ["uniqueItems.json:0:13"] = "deepcompare", |
ca6a43fe0231
util.jsonschema: Fix validation to not assume presence of "type" field
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
69 ["uniqueItems.json:0:14"] = "deepcompare", |
ca6a43fe0231
util.jsonschema: Fix validation to not assume presence of "type" field
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
70 ["uniqueItems.json:0:22"] = "deepcompare", |
ca6a43fe0231
util.jsonschema: Fix validation to not assume presence of "type" field
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
71 ["uniqueItems.json:0:24"] = "deepcompare", |
ca6a43fe0231
util.jsonschema: Fix validation to not assume presence of "type" field
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
72 ["uniqueItems.json:0:9"] = "deepcompare", |
ca6a43fe0231
util.jsonschema: Fix validation to not assume presence of "type" field
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
73 ["unknownKeyword.json"] = "NYI", |
ca6a43fe0231
util.jsonschema: Fix validation to not assume presence of "type" field
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
74 ["vocabulary.json"] = "NYI", |
ca6a43fe0231
util.jsonschema: Fix validation to not assume presence of "type" field
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
75 }; |
ca6a43fe0231
util.jsonschema: Fix validation to not assume presence of "type" field
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
76 |
ca6a43fe0231
util.jsonschema: Fix validation to not assume presence of "type" field
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
77 local function label(s, i) |
ca6a43fe0231
util.jsonschema: Fix validation to not assume presence of "type" field
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
78 return string.format("%s:%d", s, i-1); |
ca6a43fe0231
util.jsonschema: Fix validation to not assume presence of "type" field
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
79 end |
ca6a43fe0231
util.jsonschema: Fix validation to not assume presence of "type" field
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
80 |
ca6a43fe0231
util.jsonschema: Fix validation to not assume presence of "type" field
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
81 describe("util.jsonschema.validate", function() |
ca6a43fe0231
util.jsonschema: Fix validation to not assume presence of "type" field
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
82 for test_case_file in lfs.dir(test_suite_dir) do |
ca6a43fe0231
util.jsonschema: Fix validation to not assume presence of "type" field
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
83 -- print(skip[test_case_file] and "do " or "skip", test_case_file) |
ca6a43fe0231
util.jsonschema: Fix validation to not assume presence of "type" field
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
84 if test_case_file:sub(-5) == ".json" and not skip[test_case_file] then |
ca6a43fe0231
util.jsonschema: Fix validation to not assume presence of "type" field
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
85 describe(test_case_file, function() |
ca6a43fe0231
util.jsonschema: Fix validation to not assume presence of "type" field
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
86 local test_cases; |
ca6a43fe0231
util.jsonschema: Fix validation to not assume presence of "type" field
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
87 setup(function() |
ca6a43fe0231
util.jsonschema: Fix validation to not assume presence of "type" field
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
88 local f = assert(io.open(test_suite_dir .. "/" .. test_case_file)); |
ca6a43fe0231
util.jsonschema: Fix validation to not assume presence of "type" field
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
89 local rawdata = assert(f:read("*a"), "failed to read " .. test_case_file) |
ca6a43fe0231
util.jsonschema: Fix validation to not assume presence of "type" field
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
90 test_cases = assert(json.decode(rawdata), "failed to parse " .. test_case_file) |
ca6a43fe0231
util.jsonschema: Fix validation to not assume presence of "type" field
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
91 end) |
ca6a43fe0231
util.jsonschema: Fix validation to not assume presence of "type" field
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
92 describe("tests", function() |
ca6a43fe0231
util.jsonschema: Fix validation to not assume presence of "type" field
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
93 for i, schema_test in ipairs(test_cases) do |
ca6a43fe0231
util.jsonschema: Fix validation to not assume presence of "type" field
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
94 local generic_label = label(test_case_file, i); |
ca6a43fe0231
util.jsonschema: Fix validation to not assume presence of "type" field
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
95 describe(schema_test.description or generic_label, function() |
ca6a43fe0231
util.jsonschema: Fix validation to not assume presence of "type" field
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
96 for j, test in ipairs(schema_test.tests) do |
ca6a43fe0231
util.jsonschema: Fix validation to not assume presence of "type" field
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
97 local specific_label = label(generic_label, j); |
ca6a43fe0231
util.jsonschema: Fix validation to not assume presence of "type" field
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
98 ((skip[generic_label] or skip[specific_label]) and pending or it)(test.description, function() |
ca6a43fe0231
util.jsonschema: Fix validation to not assume presence of "type" field
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
99 assert.equal(test.valid, js.validate(schema_test.schema, test.data), specific_label .. " " .. test.description); |
ca6a43fe0231
util.jsonschema: Fix validation to not assume presence of "type" field
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
100 end) |
ca6a43fe0231
util.jsonschema: Fix validation to not assume presence of "type" field
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
101 end |
ca6a43fe0231
util.jsonschema: Fix validation to not assume presence of "type" field
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
102 end) |
ca6a43fe0231
util.jsonschema: Fix validation to not assume presence of "type" field
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
103 end |
ca6a43fe0231
util.jsonschema: Fix validation to not assume presence of "type" field
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
104 end) |
ca6a43fe0231
util.jsonschema: Fix validation to not assume presence of "type" field
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
105 end) |
ca6a43fe0231
util.jsonschema: Fix validation to not assume presence of "type" field
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
106 end |
ca6a43fe0231
util.jsonschema: Fix validation to not assume presence of "type" field
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
107 end |
ca6a43fe0231
util.jsonschema: Fix validation to not assume presence of "type" field
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
108 end); |