author | Kim Alvefur <zash@zash.se> |
Sun, 23 Apr 2023 10:26:43 +0200 | |
changeset 13091 | 5d3e8a226840 |
parent 13087 | 962a746842a0 |
child 13092 | 0fbb2b3fd4c0 |
permissions | -rw-r--r-- |
12583
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 |
|
12948
05ec70a9f755
util.jsonschema: Disable some further new failing tests
Kim Alvefur <zash@zash.se>
parents:
12947
diff
changeset
|
5 |
-- https://github.com/json-schema-org/JSON-Schema-Test-Suite.git 2.0.0-724-g19947ea |
12583
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:2"] = "deepcompare", |
ca6a43fe0231
util.jsonschema: Fix validation to not assume presence of "type" field
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
17 |
["const.json:8"] = "deepcompare", |
ca6a43fe0231
util.jsonschema: Fix validation to not assume presence of "type" field
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
18 |
["const.json:9"] = "deepcompare", |
ca6a43fe0231
util.jsonschema: Fix validation to not assume presence of "type" field
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
19 |
["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
|
20 |
["defs.json"] = "need built-in meta-schema", |
12993
dee080c2441e
util.jsonschema: Implement 'dependentSchemas'
Kim Alvefur <zash@zash.se>
parents:
12992
diff
changeset
|
21 |
["dependentSchemas.json:2:2"] = "NYI", -- minProperties |
12583
ca6a43fe0231
util.jsonschema: Fix validation to not assume presence of "type" field
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
22 |
["dynamicRef.json"] = "NYI", |
ca6a43fe0231
util.jsonschema: Fix validation to not assume presence of "type" field
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
23 |
["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
|
24 |
["id.json"] = "NYI", |
ca6a43fe0231
util.jsonschema: Fix validation to not assume presence of "type" field
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
25 |
["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
|
26 |
["maxProperties.json"] = "NYI", |
ca6a43fe0231
util.jsonschema: Fix validation to not assume presence of "type" field
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
27 |
["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
|
28 |
["minProperties.json"] = "NYI", |
ca6a43fe0231
util.jsonschema: Fix validation to not assume presence of "type" field
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
29 |
["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
|
30 |
["multipleOf.json:2"] = "multiples of IEEE 754 fractions", |
12948
05ec70a9f755
util.jsonschema: Disable some further new failing tests
Kim Alvefur <zash@zash.se>
parents:
12947
diff
changeset
|
31 |
["multipleOf.json:4"] = "multiples of IEEE 754 fractions", |
12583
ca6a43fe0231
util.jsonschema: Fix validation to not assume presence of "type" field
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
32 |
["pattern.json"] = "NYI", |
ca6a43fe0231
util.jsonschema: Fix validation to not assume presence of "type" field
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
33 |
["patternProperties.json"] = "NYI", |
ca6a43fe0231
util.jsonschema: Fix validation to not assume presence of "type" field
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
34 |
["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
|
35 |
["properties.json:1:3"] = "NYI", |
13087
962a746842a0
util.jsonschema: Tweak description of disabled test
Kim Alvefur <zash@zash.se>
parents:
13086
diff
changeset
|
36 |
["ref.json:0:3"] = "util.jsonpointer recursive issue?", |
12760
cd7da871ce10
util.jsonschema: Sort test cases to skip
Kim Alvefur <zash@zash.se>
parents:
12583
diff
changeset
|
37 |
["ref.json:11"] = "NYI", |
cd7da871ce10
util.jsonschema: Sort test cases to skip
Kim Alvefur <zash@zash.se>
parents:
12583
diff
changeset
|
38 |
["ref.json:12:1"] = "FIXME", |
cd7da871ce10
util.jsonschema: Sort test cases to skip
Kim Alvefur <zash@zash.se>
parents:
12583
diff
changeset
|
39 |
["ref.json:13"] = "NYI", |
12583
ca6a43fe0231
util.jsonschema: Fix validation to not assume presence of "type" field
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
40 |
["ref.json:14"] = "NYI", |
ca6a43fe0231
util.jsonschema: Fix validation to not assume presence of "type" field
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
41 |
["ref.json:15"] = "NYI", |
ca6a43fe0231
util.jsonschema: Fix validation to not assume presence of "type" field
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
42 |
["ref.json:16"] = "NYI", |
ca6a43fe0231
util.jsonschema: Fix validation to not assume presence of "type" field
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
43 |
["ref.json:17"] = "NYI", |
ca6a43fe0231
util.jsonschema: Fix validation to not assume presence of "type" field
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
44 |
["ref.json:18"] = "NYI", |
ca6a43fe0231
util.jsonschema: Fix validation to not assume presence of "type" field
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
45 |
["ref.json:19"] = "NYI", |
12761
edbc888b1e05
util.jsonschema: Ignore some further test cases for URI references
Kim Alvefur <zash@zash.se>
parents:
12760
diff
changeset
|
46 |
["ref.json:26"] = "NYI", |
edbc888b1e05
util.jsonschema: Ignore some further test cases for URI references
Kim Alvefur <zash@zash.se>
parents:
12760
diff
changeset
|
47 |
["ref.json:27"] = "NYI", |
edbc888b1e05
util.jsonschema: Ignore some further test cases for URI references
Kim Alvefur <zash@zash.se>
parents:
12760
diff
changeset
|
48 |
["ref.json:28"] = "NYI", |
12760
cd7da871ce10
util.jsonschema: Sort test cases to skip
Kim Alvefur <zash@zash.se>
parents:
12583
diff
changeset
|
49 |
["ref.json:3:2"] = "FIXME investigate, util.jsonpath issue?", |
12762
7929c0ffbe14
util.jsonschema: Ignore test case for JavaScript specific detail
Kim Alvefur <zash@zash.se>
parents:
12761
diff
changeset
|
50 |
["required.json:4"] = "JavaScript specific and distinguishing objects from arrays", |
12760
cd7da871ce10
util.jsonschema: Sort test cases to skip
Kim Alvefur <zash@zash.se>
parents:
12583
diff
changeset
|
51 |
["ref.json:6:1"] = "NYI", |
12761
edbc888b1e05
util.jsonschema: Ignore some further test cases for URI references
Kim Alvefur <zash@zash.se>
parents:
12760
diff
changeset
|
52 |
["ref.json:20"] = "NYI", |
edbc888b1e05
util.jsonschema: Ignore some further test cases for URI references
Kim Alvefur <zash@zash.se>
parents:
12760
diff
changeset
|
53 |
["ref.json:25"] = "NYI", |
12947
297b4cfcc3d9
util.jsonschema: Ignore some new tests in test suite
Kim Alvefur <zash@zash.se>
parents:
12762
diff
changeset
|
54 |
["ref.json:29"] = "NYI", |
297b4cfcc3d9
util.jsonschema: Ignore some new tests in test suite
Kim Alvefur <zash@zash.se>
parents:
12762
diff
changeset
|
55 |
["ref.json:30"] = "NYI", |
297b4cfcc3d9
util.jsonschema: Ignore some new tests in test suite
Kim Alvefur <zash@zash.se>
parents:
12762
diff
changeset
|
56 |
["ref.json:31"] = "NYI", |
12948
05ec70a9f755
util.jsonschema: Disable some further new failing tests
Kim Alvefur <zash@zash.se>
parents:
12947
diff
changeset
|
57 |
["ref.json:32"] = "NYI", |
05ec70a9f755
util.jsonschema: Disable some further new failing tests
Kim Alvefur <zash@zash.se>
parents:
12947
diff
changeset
|
58 |
["not.json:6"] = "NYI", |
12583
ca6a43fe0231
util.jsonschema: Fix validation to not assume presence of "type" field
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
59 |
["refRemote.json"] = "DEFINITELY NYI", |
12760
cd7da871ce10
util.jsonschema: Sort test cases to skip
Kim Alvefur <zash@zash.se>
parents:
12583
diff
changeset
|
60 |
["required.json:0:2"] = "distinguishing objects from arrays", |
12583
ca6a43fe0231
util.jsonschema: Fix validation to not assume presence of "type" field
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
61 |
["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
|
62 |
["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
|
63 |
["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
|
64 |
["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
|
65 |
["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
|
66 |
["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
|
67 |
["unevaluatedItems.json"] = "NYI", |
ca6a43fe0231
util.jsonschema: Fix validation to not assume presence of "type" field
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
68 |
["unevaluatedProperties.json"] = "NYI", |
ca6a43fe0231
util.jsonschema: Fix validation to not assume presence of "type" field
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
69 |
["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
|
70 |
["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
|
71 |
["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
|
72 |
["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
|
73 |
["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
|
74 |
["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
|
75 |
["unknownKeyword.json"] = "NYI", |
ca6a43fe0231
util.jsonschema: Fix validation to not assume presence of "type" field
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
76 |
["vocabulary.json"] = "NYI", |
ca6a43fe0231
util.jsonschema: Fix validation to not assume presence of "type" field
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
77 |
}; |
ca6a43fe0231
util.jsonschema: Fix validation to not assume presence of "type" field
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
78 |
|
ca6a43fe0231
util.jsonschema: Fix validation to not assume presence of "type" field
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
79 |
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
|
80 |
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
|
81 |
end |
ca6a43fe0231
util.jsonschema: Fix validation to not assume presence of "type" field
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
82 |
|
ca6a43fe0231
util.jsonschema: Fix validation to not assume presence of "type" field
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
83 |
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
|
84 |
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
|
85 |
-- 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
|
86 |
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
|
87 |
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
|
88 |
local test_cases; |
ca6a43fe0231
util.jsonschema: Fix validation to not assume presence of "type" field
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
89 |
setup(function() |
ca6a43fe0231
util.jsonschema: Fix validation to not assume presence of "type" field
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
90 |
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
|
91 |
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
|
92 |
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
|
93 |
end) |
ca6a43fe0231
util.jsonschema: Fix validation to not assume presence of "type" field
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
94 |
describe("tests", function() |
ca6a43fe0231
util.jsonschema: Fix validation to not assume presence of "type" field
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
95 |
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
|
96 |
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
|
97 |
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
|
98 |
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
|
99 |
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
|
100 |
((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
|
101 |
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
|
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 |
ca6a43fe0231
util.jsonschema: Fix validation to not assume presence of "type" field
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
109 |
end |
ca6a43fe0231
util.jsonschema: Fix validation to not assume presence of "type" field
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
110 |
end); |