summaryrefslogtreecommitdiffstats
path: root/libtests
diff options
context:
space:
mode:
authorJay Berkenbilt <ejb@ql.org>2022-07-24 22:44:51 +0200
committerJay Berkenbilt <ejb@ql.org>2022-07-24 22:44:51 +0200
commit4674c04cb80e0a50cde1b97464642e2778f9522f (patch)
tree9a79072f17c0053e576d754fb7d22ac046b4f4b4 /libtests
parentf8d1ab946205440ed3c44511ef42e5ad13fb9e5e (diff)
downloadqpdf-4674c04cb80e0a50cde1b97464642e2778f9522f.tar.zst
JSON schema: support multi-element array validation
Diffstat (limited to 'libtests')
-rw-r--r--libtests/json.cc29
-rw-r--r--libtests/libtests.testcov2
-rw-r--r--libtests/qtest/json/json.out11
3 files changed, 29 insertions, 13 deletions
diff --git a/libtests/json.cc b/libtests/json.cc
index a509c2be..ef9188c5 100644
--- a/libtests/json.cc
+++ b/libtests/json.cc
@@ -179,7 +179,11 @@ test_schema()
"z": "ebra",
"o": "ptional"
}
- }
+ },
+ "four": [
+ { "first": "first element" },
+ { "second": "second element" }
+ ]
}
)");
@@ -227,17 +231,28 @@ test_schema()
"else": {
"z": "okay"
}
- }
+ },
+ "four": [
+ {"first": "missing second"}
+ ]
}
)");
check_schema(b, schema, 0, false, "missing items");
- check_schema(a, a, 0, false, "top-level schema array error");
- check_schema(b, b, 0, false, "lower-level schema array error");
JSON bad_schema = JSON::parse(R"({"a": true, "b": "potato?"})");
check_schema(bad_schema, bad_schema, 0, false, "bad schema field type");
+ JSON c = JSON::parse(R"(
+{
+ "four": [
+ { "first": 1 },
+ { "oops": [2] }
+ ]
+}
+)");
+ check_schema(c, schema, JSON::f_optional, false, "array element mismatch");
+
// "two" exercises the case of the JSON containing a single
// element where the schema has an array.
JSON good = JSON::parse(R"(
@@ -262,7 +277,11 @@ test_schema()
"<objid>": {
"z": "ebra"
}
- }
+ },
+ "four": [
+ { "first": 1 },
+ { "second": [2] }
+ ]
}
)");
check_schema(good, schema, 0, false, "not optional");
diff --git a/libtests/libtests.testcov b/libtests/libtests.testcov
index 7f71d8e0..2ceef541 100644
--- a/libtests/libtests.testcov
+++ b/libtests/libtests.testcov
@@ -36,7 +36,6 @@ Pl_PNGFilter decodePaeth 0
Pl_TIFFPredictor processRow 1
JSON wanted dictionary 0
JSON key missing in object 0
-JSON schema array error 0
JSON key extra in object 0
QPDFArgParser read args from stdin 0
QPDFArgParser read args from file 0
@@ -93,3 +92,4 @@ JSON 16 low not after high 0
JSON 16 dangling high 0
JSON parse duplicate key 0
JSON schema array for single item 0
+JSON schema array length mismatch 0
diff --git a/libtests/qtest/json/json.out b/libtests/qtest/json/json.out
index 811f8aed..f346daa6 100644
--- a/libtests/qtest/json/json.out
+++ b/libtests/qtest/json/json.out
@@ -2,6 +2,7 @@
top-level object is supposed to be a dictionary
---
--- missing items
+json key ".four" is supposed to be an array of length 2
json key ".one.a": key "q" is present in schema but missing in object
json key ".one.a.r" is supposed to be a dictionary
json key ".one.a.s": key "ss" is present in schema but missing in object
@@ -15,16 +16,12 @@ json key ".two.1": key "flarp" is not present in schema but appears in object
json key ".two.2" is supposed to be a dictionary
json key ".two.3" is supposed to be a dictionary
---
---- top-level schema array error
-top-level object schema array contains other than one item
----
---- lower-level schema array error
-json key ".one.a.r" schema array contains other than one item
-json key ".two" schema array contains other than one item
----
--- bad schema field type
json key ".a" schema value is not dictionary, array, or string
---
+--- array element mismatch
+json key ".four.1": key "oops" is not present in schema but appears in object
+---
--- not optional
json key ".three.<objid>": key "o" is present in schema but missing in object
---