Annotate

spec/util_jsonschema_spec.lua @ 12763:d26eefe98d09

util.dbuffer: Add efficient shortcuts for discard() in certain cases If the buffer is already empty, nothing to do. If we're throwing away the whole buffer, we can just empty it and avoid read_chunk() (which in turn may collapse()). These shortcuts are much more efficient.
author Matthew Wild <mwild1@gmail.com>
date Tue, 11 Oct 2022 11:37:55 +0100
parent 12758:7929c0ffbe14
child 12943:297b4cfcc3d9
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
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);