spec/util_jsonschema_spec.lua
author Matthew Wild <mwild1@gmail.com>
Sun, 17 Mar 2024 10:10:24 +0000
changeset 13464 a688947fab1e
parent 13389 72d7830505f0
permissions -rw-r--r--
mod_bosh: Set base_type on session This fixes a traceback with mod_saslauth. Ideally we move this to util.session at some point, though.
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
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
13110
8c762a30eae0 util.jsonschema: Update test suite ignore rules
Kim Alvefur <zash@zash.se>
parents: 13092
diff changeset
     5
-- https://github.com/json-schema-org/JSON-Schema-Test-Suite.git 2.0.0-755-g7950d9e
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
	["maxProperties.json"] = "NYI",
ca6a43fe0231 util.jsonschema: Fix validation to not assume presence of "type" field
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    26
	["minProperties.json"] = "NYI",
ca6a43fe0231 util.jsonschema: Fix validation to not assume presence of "type" field
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    27
	["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
    28
	["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
    29
	["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
    30
	["pattern.json"] = "NYI",
ca6a43fe0231 util.jsonschema: Fix validation to not assume presence of "type" field
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    31
	["patternProperties.json"] = "NYI",
ca6a43fe0231 util.jsonschema: Fix validation to not assume presence of "type" field
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    32
	["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
    33
	["properties.json:1:3"] = "NYI",
13087
962a746842a0 util.jsonschema: Tweak description of disabled test
Kim Alvefur <zash@zash.se>
parents: 13086
diff changeset
    34
	["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
    35
	["ref.json:11"] = "NYI",
cd7da871ce10 util.jsonschema: Sort test cases to skip
Kim Alvefur <zash@zash.se>
parents: 12583
diff changeset
    36
	["ref.json:12:1"] = "FIXME",
cd7da871ce10 util.jsonschema: Sort test cases to skip
Kim Alvefur <zash@zash.se>
parents: 12583
diff changeset
    37
	["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
    38
	["ref.json:14"] = "NYI",
ca6a43fe0231 util.jsonschema: Fix validation to not assume presence of "type" field
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    39
	["ref.json:15"] = "NYI",
ca6a43fe0231 util.jsonschema: Fix validation to not assume presence of "type" field
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    40
	["ref.json:16"] = "NYI",
ca6a43fe0231 util.jsonschema: Fix validation to not assume presence of "type" field
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    41
	["ref.json:17"] = "NYI",
ca6a43fe0231 util.jsonschema: Fix validation to not assume presence of "type" field
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    42
	["ref.json:18"] = "NYI",
ca6a43fe0231 util.jsonschema: Fix validation to not assume presence of "type" field
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    43
	["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
    44
	["ref.json:26"] = "NYI",
edbc888b1e05 util.jsonschema: Ignore some further test cases for URI references
Kim Alvefur <zash@zash.se>
parents: 12760
diff changeset
    45
	["ref.json:27"] = "NYI",
edbc888b1e05 util.jsonschema: Ignore some further test cases for URI references
Kim Alvefur <zash@zash.se>
parents: 12760
diff changeset
    46
	["ref.json:28"] = "NYI",
12760
cd7da871ce10 util.jsonschema: Sort test cases to skip
Kim Alvefur <zash@zash.se>
parents: 12583
diff changeset
    47
	["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
    48
	["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
    49
	["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
    50
	["ref.json:20"] = "NYI",
edbc888b1e05 util.jsonschema: Ignore some further test cases for URI references
Kim Alvefur <zash@zash.se>
parents: 12760
diff changeset
    51
	["ref.json:25"] = "NYI",
12947
297b4cfcc3d9 util.jsonschema: Ignore some new tests in test suite
Kim Alvefur <zash@zash.se>
parents: 12762
diff changeset
    52
	["ref.json:29"] = "NYI",
297b4cfcc3d9 util.jsonschema: Ignore some new tests in test suite
Kim Alvefur <zash@zash.se>
parents: 12762
diff changeset
    53
	["ref.json:30"] = "NYI",
297b4cfcc3d9 util.jsonschema: Ignore some new tests in test suite
Kim Alvefur <zash@zash.se>
parents: 12762
diff changeset
    54
	["ref.json:31"] = "NYI",
12948
05ec70a9f755 util.jsonschema: Disable some further new failing tests
Kim Alvefur <zash@zash.se>
parents: 12947
diff changeset
    55
	["ref.json:32"] = "NYI",
05ec70a9f755 util.jsonschema: Disable some further new failing tests
Kim Alvefur <zash@zash.se>
parents: 12947
diff changeset
    56
	["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
    57
	["refRemote.json"] = "DEFINITELY NYI",
12760
cd7da871ce10 util.jsonschema: Sort test cases to skip
Kim Alvefur <zash@zash.se>
parents: 12583
diff changeset
    58
	["required.json:0:2"] = "distinguishing objects from arrays",
13389
72d7830505f0 util.jsonschema: Return basic structured validation response
Kim Alvefur <zash@zash.se>
parents: 13110
diff changeset
    59
	["type.json:0:1"] = "1.0 is not an integer!",
12583
ca6a43fe0231 util.jsonschema: Fix validation to not assume presence of "type" field
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    60
	["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
    61
	["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
    62
	["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
    63
	["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
    64
	["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
    65
	["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
    66
	["unevaluatedItems.json"] = "NYI",
ca6a43fe0231 util.jsonschema: Fix validation to not assume presence of "type" field
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    67
	["unevaluatedProperties.json"] = "NYI",
13110
8c762a30eae0 util.jsonschema: Update test suite ignore rules
Kim Alvefur <zash@zash.se>
parents: 13092
diff changeset
    68
	["uniqueItems.json:0:10"] = "deepcompare",
8c762a30eae0 util.jsonschema: Update test suite ignore rules
Kim Alvefur <zash@zash.se>
parents: 13092
diff changeset
    69
	["uniqueItems.json:0:12"] = "deepcompare",
12583
ca6a43fe0231 util.jsonschema: Fix validation to not assume presence of "type" field
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    70
	["uniqueItems.json:0:14"] = "deepcompare",
13110
8c762a30eae0 util.jsonschema: Update test suite ignore rules
Kim Alvefur <zash@zash.se>
parents: 13092
diff changeset
    71
	["uniqueItems.json:0:15"] = "deepcompare",
8c762a30eae0 util.jsonschema: Update test suite ignore rules
Kim Alvefur <zash@zash.se>
parents: 13092
diff changeset
    72
	["uniqueItems.json:0:23"] = "deepcompare",
8c762a30eae0 util.jsonschema: Update test suite ignore rules
Kim Alvefur <zash@zash.se>
parents: 13092
diff changeset
    73
	["uniqueItems.json:0:25"] = "deepcompare",
12583
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);