summaryrefslogtreecommitdiff
path: root/json
diff options
context:
space:
mode:
authorJulian Berman <Julian@GrayVines.com>2019-03-24 10:15:04 -0400
committerJulian Berman <Julian@GrayVines.com>2019-03-24 10:15:04 -0400
commit4b2d27602a9fd0c13fd3f3b1fe89a8a297b144fd (patch)
tree0468713da8646a2cb84674fe28b5798d46a3bba0 /json
parent470888a403544adf081fd00a3a83e7c9e2e6b3ec (diff)
parenta1ade0ac5e44e4314cf5dd35f6d9af3d44f34acd (diff)
downloadjsonschema-4b2d27602a9fd0c13fd3f3b1fe89a8a297b144fd.tar.gz
Merge commit 'a1ade0ac5e44e4314cf5dd35f6d9af3d44f34acd'
* commit 'a1ade0ac5e44e4314cf5dd35f6d9af3d44f34acd': Squashed 'json/' changes from 8982b0b..3c3881a
Diffstat (limited to 'json')
-rw-r--r--json/tests/draft4/allOf.json73
-rw-r--r--json/tests/draft4/anyOf.json21
-rw-r--r--json/tests/draft4/items.json117
-rw-r--r--json/tests/draft4/oneOf.json53
-rw-r--r--json/tests/draft4/type.json123
-rw-r--r--json/tests/draft6/allOf.json73
-rw-r--r--json/tests/draft6/anyOf.json21
-rw-r--r--json/tests/draft6/dependencies.json25
-rw-r--r--json/tests/draft6/items.json117
-rw-r--r--json/tests/draft6/oneOf.json53
-rw-r--r--json/tests/draft6/type.json123
-rw-r--r--json/tests/draft7/allOf.json73
-rw-r--r--json/tests/draft7/anyOf.json21
-rw-r--r--json/tests/draft7/dependencies.json25
-rw-r--r--json/tests/draft7/items.json117
-rw-r--r--json/tests/draft7/oneOf.json53
-rw-r--r--json/tests/draft7/type.json123
17 files changed, 1205 insertions, 6 deletions
diff --git a/json/tests/draft4/allOf.json b/json/tests/draft4/allOf.json
index bbb5f89..ce9fdd4 100644
--- a/json/tests/draft4/allOf.json
+++ b/json/tests/draft4/allOf.json
@@ -108,5 +108,78 @@
"valid": false
}
]
+ },
+ {
+ "description": "allOf with one empty schema",
+ "schema": {
+ "allOf": [
+ {}
+ ]
+ },
+ "tests": [
+ {
+ "description": "any data is valid",
+ "data": 1,
+ "valid": true
+ }
+ ]
+ },
+ {
+ "description": "allOf with two empty schemas",
+ "schema": {
+ "allOf": [
+ {},
+ {}
+ ]
+ },
+ "tests": [
+ {
+ "description": "any data is valid",
+ "data": 1,
+ "valid": true
+ }
+ ]
+ },
+ {
+ "description": "allOf with the first empty schema",
+ "schema": {
+ "allOf": [
+ {},
+ { "type": "number" }
+ ]
+ },
+ "tests": [
+ {
+ "description": "number is valid",
+ "data": 1,
+ "valid": true
+ },
+ {
+ "description": "string is invalid",
+ "data": "foo",
+ "valid": false
+ }
+ ]
+ },
+ {
+ "description": "allOf with the last empty schema",
+ "schema": {
+ "allOf": [
+ { "type": "number" },
+ {}
+ ]
+ },
+ "tests": [
+ {
+ "description": "number is valid",
+ "data": 1,
+ "valid": true
+ },
+ {
+ "description": "string is invalid",
+ "data": "foo",
+ "valid": false
+ }
+ ]
}
]
diff --git a/json/tests/draft4/anyOf.json b/json/tests/draft4/anyOf.json
index 6c8b251..769adcf 100644
--- a/json/tests/draft4/anyOf.json
+++ b/json/tests/draft4/anyOf.json
@@ -105,5 +105,26 @@
"valid": false
}
]
+ },
+ {
+ "description": "anyOf with one empty schema",
+ "schema": {
+ "anyOf": [
+ { "type": "number" },
+ {}
+ ]
+ },
+ "tests": [
+ {
+ "description": "string is valid",
+ "data": "foo",
+ "valid": true
+ },
+ {
+ "description": "number is valid",
+ "data": 123,
+ "valid": true
+ }
+ ]
}
]
diff --git a/json/tests/draft4/items.json b/json/tests/draft4/items.json
index 6a4e648..7bf9f02 100644
--- a/json/tests/draft4/items.json
+++ b/json/tests/draft4/items.json
@@ -74,5 +74,122 @@
"valid": true
}
]
+ },
+ {
+ "description": "items and subitems",
+ "schema": {
+ "definitions": {
+ "item": {
+ "type": "array",
+ "additionalItems": false,
+ "items": [
+ { "$ref": "#/definitions/sub-item" },
+ { "$ref": "#/definitions/sub-item" }
+ ]
+ },
+ "sub-item": {
+ "type": "object",
+ "required": ["foo"]
+ }
+ },
+ "type": "array",
+ "additionalItems": false,
+ "items": [
+ { "$ref": "#/definitions/item" },
+ { "$ref": "#/definitions/item" },
+ { "$ref": "#/definitions/item" }
+ ]
+ },
+ "tests": [
+ {
+ "description": "valid items",
+ "data": [
+ [ {"foo": null}, {"foo": null} ],
+ [ {"foo": null}, {"foo": null} ],
+ [ {"foo": null}, {"foo": null} ]
+ ],
+ "valid": true
+ },
+ {
+ "description": "too many items",
+ "data": [
+ [ {"foo": null}, {"foo": null} ],
+ [ {"foo": null}, {"foo": null} ],
+ [ {"foo": null}, {"foo": null} ],
+ [ {"foo": null}, {"foo": null} ]
+ ],
+ "valid": false
+ },
+ {
+ "description": "too many sub-items",
+ "data": [
+ [ {"foo": null}, {"foo": null}, {"foo": null} ],
+ [ {"foo": null}, {"foo": null} ],
+ [ {"foo": null}, {"foo": null} ]
+ ],
+ "valid": false
+ },
+ {
+ "description": "wrong item",
+ "data": [
+ {"foo": null},
+ [ {"foo": null}, {"foo": null} ],
+ [ {"foo": null}, {"foo": null} ]
+ ],
+ "valid": false
+ },
+ {
+ "description": "wrong sub-item",
+ "data": [
+ [ {}, {"foo": null} ],
+ [ {"foo": null}, {"foo": null} ],
+ [ {"foo": null}, {"foo": null} ]
+ ],
+ "valid": false
+ },
+ {
+ "description": "fewer items is valid",
+ "data": [
+ [ {"foo": null} ],
+ [ {"foo": null} ]
+ ],
+ "valid": true
+ }
+ ]
+ },
+ {
+ "description": "nested items",
+ "schema": {
+ "type": "array",
+ "items": {
+ "type": "array",
+ "items": {
+ "type": "array",
+ "items": {
+ "type": "array",
+ "items": {
+ "type": "number"
+ }
+ }
+ }
+ }
+ },
+ "tests": [
+ {
+ "description": "valid nested array",
+ "data": [[[[1]], [[2],[3]]], [[[4], [5], [6]]]],
+ "valid": true
+ },
+ {
+ "description": "nested array with invalid type",
+ "data": [[[["1"]], [[2],[3]]], [[[4], [5], [6]]]],
+ "valid": false
+ },
+ {
+ "description": "not deep enough",
+ "data": [[[1], [2],[3]], [[4], [5], [6]]],
+ "valid": false
+ }
+ ]
}
]
diff --git a/json/tests/draft4/oneOf.json b/json/tests/draft4/oneOf.json
index 3a03ded..9dfffe1 100644
--- a/json/tests/draft4/oneOf.json
+++ b/json/tests/draft4/oneOf.json
@@ -105,5 +105,58 @@
"valid": false
}
]
+ },
+ {
+ "description": "oneOf with empty schema",
+ "schema": {
+ "oneOf": [
+ { "type": "number" },
+ {}
+ ]
+ },
+ "tests": [
+ {
+ "description": "one valid - valid",
+ "data": "foo",
+ "valid": true
+ },
+ {
+ "description": "both valid - invalid",
+ "data": 123,
+ "valid": false
+ }
+ ]
+ },
+ {
+ "description": "oneOf with required",
+ "schema": {
+ "type": "object",
+ "oneOf": [
+ { "required": ["foo", "bar"] },
+ { "required": ["foo", "baz"] }
+ ]
+ },
+ "tests": [
+ {
+ "description": "both invalid - invalid",
+ "data": {"bar": 2},
+ "valid": false
+ },
+ {
+ "description": "first valid - valid",
+ "data": {"foo": 1, "bar": 2},
+ "valid": true
+ },
+ {
+ "description": "second valid - valid",
+ "data": {"foo": 1, "baz": 3},
+ "valid": true
+ },
+ {
+ "description": "both valid - invalid",
+ "data": {"foo": 1, "bar": 2, "baz" : 3},
+ "valid": false
+ }
+ ]
}
]
diff --git a/json/tests/draft4/type.json b/json/tests/draft4/type.json
index 6129374..ea33b18 100644
--- a/json/tests/draft4/type.json
+++ b/json/tests/draft4/type.json
@@ -116,6 +116,11 @@
"valid": true
},
{
+ "description": "an empty string is still a string",
+ "data": "",
+ "valid": true
+ },
+ {
"description": "an object is not a string",
"data": {},
"valid": false
@@ -229,6 +234,11 @@
"valid": false
},
{
+ "description": "zero is not a boolean",
+ "data": 0,
+ "valid": false
+ },
+ {
"description": "a float is not a boolean",
"data": 1.1,
"valid": false
@@ -239,6 +249,11 @@
"valid": false
},
{
+ "description": "an empty string is not a boolean",
+ "data": "",
+ "valid": false
+ },
+ {
"description": "an object is not a boolean",
"data": {},
"valid": false
@@ -249,11 +264,16 @@
"valid": false
},
{
- "description": "a boolean is a boolean",
+ "description": "true is a boolean",
"data": true,
"valid": true
},
{
+ "description": "false is a boolean",
+ "data": false,
+ "valid": true
+ },
+ {
"description": "null is not a boolean",
"data": null,
"valid": false
@@ -275,11 +295,21 @@
"valid": false
},
{
+ "description": "zero is not null",
+ "data": 0,
+ "valid": false
+ },
+ {
"description": "a string is not null",
"data": "foo",
"valid": false
},
{
+ "description": "an empty string is not null",
+ "data": "",
+ "valid": false
+ },
+ {
"description": "an object is not null",
"data": {},
"valid": false
@@ -290,11 +320,16 @@
"valid": false
},
{
- "description": "a boolean is not null",
+ "description": "true is not null",
"data": true,
"valid": false
},
{
+ "description": "false is not null",
+ "data": false,
+ "valid": false
+ },
+ {
"description": "null is null",
"data": null,
"valid": true
@@ -341,5 +376,89 @@
"valid": false
}
]
+ },
+ {
+ "description": "type as array with one item",
+ "schema": {
+ "type": ["string"]
+ },
+ "tests": [
+ {
+ "description": "string is valid",
+ "data": "foo",
+ "valid": true
+ },
+ {
+ "description": "number is invalid",
+ "data": 123,
+ "valid": false
+ }
+ ]
+ },
+ {
+ "description": "type: array or object",
+ "schema": {
+ "type": ["array", "object"]
+ },
+ "tests": [
+ {
+ "description": "array is valid",
+ "data": [1,2,3],
+ "valid": true
+ },
+ {
+ "description": "object is valid",
+ "data": {"foo": 123},
+ "valid": true
+ },
+ {
+ "description": "number is invalid",
+ "data": 123,
+ "valid": false
+ },
+ {
+ "description": "string is invalid",
+ "data": "foo",
+ "valid": false
+ },
+ {
+ "description": "null is invalid",
+ "data": null,
+ "valid": false
+ }
+ ]
+ },
+ {
+ "description": "type: array, object or null",
+ "schema": {
+ "type": ["array", "object", "null"]
+ },
+ "tests": [
+ {
+ "description": "array is valid",
+ "data": [1,2,3],
+ "valid": true
+ },
+ {
+ "description": "object is valid",
+ "data": {"foo": 123},
+ "valid": true
+ },
+ {
+ "description": "null is valid",
+ "data": null,
+ "valid": true
+ },
+ {
+ "description": "number is invalid",
+ "data": 123,
+ "valid": false
+ },
+ {
+ "description": "string is invalid",
+ "data": "foo",
+ "valid": false
+ }
+ ]
}
]
diff --git a/json/tests/draft6/allOf.json b/json/tests/draft6/allOf.json
index 00c016c..eb61209 100644
--- a/json/tests/draft6/allOf.json
+++ b/json/tests/draft6/allOf.json
@@ -141,5 +141,78 @@
"valid": false
}
]
+ },
+ {
+ "description": "allOf with one empty schema",
+ "schema": {
+ "allOf": [
+ {}
+ ]
+ },
+ "tests": [
+ {
+ "description": "any data is valid",
+ "data": 1,
+ "valid": true
+ }
+ ]
+ },
+ {
+ "description": "allOf with two empty schemas",
+ "schema": {
+ "allOf": [
+ {},
+ {}
+ ]
+ },
+ "tests": [
+ {
+ "description": "any data is valid",
+ "data": 1,
+ "valid": true
+ }
+ ]
+ },
+ {
+ "description": "allOf with the first empty schema",
+ "schema": {
+ "allOf": [
+ {},
+ { "type": "number" }
+ ]
+ },
+ "tests": [
+ {
+ "description": "number is valid",
+ "data": 1,
+ "valid": true
+ },
+ {
+ "description": "string is invalid",
+ "data": "foo",
+ "valid": false
+ }
+ ]
+ },
+ {
+ "description": "allOf with the last empty schema",
+ "schema": {
+ "allOf": [
+ { "type": "number" },
+ {}
+ ]
+ },
+ "tests": [
+ {
+ "description": "number is valid",
+ "data": 1,
+ "valid": true
+ },
+ {
+ "description": "string is invalid",
+ "data": "foo",
+ "valid": false
+ }
+ ]
}
]
diff --git a/json/tests/draft6/anyOf.json b/json/tests/draft6/anyOf.json
index 4d05a9e..bad3e77 100644
--- a/json/tests/draft6/anyOf.json
+++ b/json/tests/draft6/anyOf.json
@@ -138,5 +138,26 @@
"valid": false
}
]
+ },
+ {
+ "description": "anyOf with one empty schema",
+ "schema": {
+ "anyOf": [
+ { "type": "number" },
+ {}
+ ]
+ },
+ "tests": [
+ {
+ "description": "string is valid",
+ "data": "foo",
+ "valid": true
+ },
+ {
+ "description": "number is valid",
+ "data": 123,
+ "valid": true
+ }
+ ]
}
]
diff --git a/json/tests/draft6/dependencies.json b/json/tests/draft6/dependencies.json
index 80e552f..5af1894 100644
--- a/json/tests/draft6/dependencies.json
+++ b/json/tests/draft6/dependencies.json
@@ -168,5 +168,30 @@
"valid": true
}
]
+ },
+ {
+ "description": "empty array of dependencies",
+ "schema": {
+ "dependencies": {
+ "foo": []
+ }
+ },
+ "tests": [
+ {
+ "description": "object with property is valid",
+ "data": { "foo": 1 },
+ "valid": true
+ },
+ {
+ "description": "empty object is valid",
+ "data": {},
+ "valid": true
+ },
+ {
+ "description": "non-object is valid",
+ "data": 1,
+ "valid": true
+ }
+ ]
}
]
diff --git a/json/tests/draft6/items.json b/json/tests/draft6/items.json
index 13a6a11..67f1184 100644
--- a/json/tests/draft6/items.json
+++ b/json/tests/draft6/items.json
@@ -129,5 +129,122 @@
"valid": true
}
]
+ },
+ {
+ "description": "items and subitems",
+ "schema": {
+ "definitions": {
+ "item": {
+ "type": "array",
+ "additionalItems": false,
+ "items": [
+ { "$ref": "#/definitions/sub-item" },
+ { "$ref": "#/definitions/sub-item" }
+ ]
+ },
+ "sub-item": {
+ "type": "object",
+ "required": ["foo"]
+ }
+ },
+ "type": "array",
+ "additionalItems": false,
+ "items": [
+ { "$ref": "#/definitions/item" },
+ { "$ref": "#/definitions/item" },
+ { "$ref": "#/definitions/item" }
+ ]
+ },
+ "tests": [
+ {
+ "description": "valid items",
+ "data": [
+ [ {"foo": null}, {"foo": null} ],
+ [ {"foo": null}, {"foo": null} ],
+ [ {"foo": null}, {"foo": null} ]
+ ],
+ "valid": true
+ },
+ {
+ "description": "too many items",
+ "data": [
+ [ {"foo": null}, {"foo": null} ],
+ [ {"foo": null}, {"foo": null} ],
+ [ {"foo": null}, {"foo": null} ],
+ [ {"foo": null}, {"foo": null} ]
+ ],
+ "valid": false
+ },
+ {
+ "description": "too many sub-items",
+ "data": [
+ [ {"foo": null}, {"foo": null}, {"foo": null} ],
+ [ {"foo": null}, {"foo": null} ],
+ [ {"foo": null}, {"foo": null} ]
+ ],
+ "valid": false
+ },
+ {
+ "description": "wrong item",
+ "data": [
+ {"foo": null},
+ [ {"foo": null}, {"foo": null} ],
+ [ {"foo": null}, {"foo": null} ]
+ ],
+ "valid": false
+ },
+ {
+ "description": "wrong sub-item",
+ "data": [
+ [ {}, {"foo": null} ],
+ [ {"foo": null}, {"foo": null} ],
+ [ {"foo": null}, {"foo": null} ]
+ ],
+ "valid": false
+ },
+ {
+ "description": "fewer items is valid",
+ "data": [
+ [ {"foo": null} ],
+ [ {"foo": null} ]
+ ],
+ "valid": true
+ }
+ ]
+ },
+ {
+ "description": "nested items",
+ "schema": {
+ "type": "array",
+ "items": {
+ "type": "array",
+ "items": {
+ "type": "array",
+ "items": {
+ "type": "array",
+ "items": {
+ "type": "number"
+ }
+ }
+ }
+ }
+ },
+ "tests": [
+ {
+ "description": "valid nested array",
+ "data": [[[[1]], [[2],[3]]], [[[4], [5], [6]]]],
+ "valid": true
+ },
+ {
+ "description": "nested array with invalid type",
+ "data": [[[["1"]], [[2],[3]]], [[[4], [5], [6]]]],
+ "valid": false
+ },
+ {
+ "description": "not deep enough",
+ "data": [[[1], [2],[3]], [[4], [5], [6]]],
+ "valid": false
+ }
+ ]
}
]
diff --git a/json/tests/draft6/oneOf.json b/json/tests/draft6/oneOf.json
index bc4295c..57640b7 100644
--- a/json/tests/draft6/oneOf.json
+++ b/json/tests/draft6/oneOf.json
@@ -149,5 +149,58 @@
"valid": false
}
]
+ },
+ {
+ "description": "oneOf with empty schema",
+ "schema": {
+ "oneOf": [
+ { "type": "number" },
+ {}
+ ]
+ },
+ "tests": [
+ {
+ "description": "one valid - valid",
+ "data": "foo",
+ "valid": true
+ },
+ {
+ "description": "both valid - invalid",
+ "data": 123,
+ "valid": false
+ }
+ ]
+ },
+ {
+ "description": "oneOf with required",
+ "schema": {
+ "type": "object",
+ "oneOf": [
+ { "required": ["foo", "bar"] },
+ { "required": ["foo", "baz"] }
+ ]
+ },
+ "tests": [
+ {
+ "description": "both invalid - invalid",
+ "data": {"bar": 2},
+ "valid": false
+ },
+ {
+ "description": "first valid - valid",
+ "data": {"foo": 1, "bar": 2},
+ "valid": true
+ },
+ {
+ "description": "second valid - valid",
+ "data": {"foo": 1, "baz": 3},
+ "valid": true
+ },
+ {
+ "description": "both valid - invalid",
+ "data": {"foo": 1, "bar": 2, "baz" : 3},
+ "valid": false
+ }
+ ]
}
]
diff --git a/json/tests/draft6/type.json b/json/tests/draft6/type.json
index 6129374..ea33b18 100644
--- a/json/tests/draft6/type.json
+++ b/json/tests/draft6/type.json
@@ -116,6 +116,11 @@
"valid": true
},
{
+ "description": "an empty string is still a string",
+ "data": "",
+ "valid": true
+ },
+ {
"description": "an object is not a string",
"data": {},
"valid": false
@@ -229,6 +234,11 @@
"valid": false
},
{
+ "description": "zero is not a boolean",
+ "data": 0,
+ "valid": false
+ },
+ {
"description": "a float is not a boolean",
"data": 1.1,
"valid": false
@@ -239,6 +249,11 @@
"valid": false
},
{
+ "description": "an empty string is not a boolean",
+ "data": "",
+ "valid": false
+ },
+ {
"description": "an object is not a boolean",
"data": {},
"valid": false
@@ -249,11 +264,16 @@
"valid": false
},
{
- "description": "a boolean is a boolean",
+ "description": "true is a boolean",
"data": true,
"valid": true
},
{
+ "description": "false is a boolean",
+ "data": false,
+ "valid": true
+ },
+ {
"description": "null is not a boolean",
"data": null,
"valid": false
@@ -275,11 +295,21 @@
"valid": false
},
{
+ "description": "zero is not null",
+ "data": 0,
+ "valid": false
+ },
+ {
"description": "a string is not null",
"data": "foo",
"valid": false
},
{
+ "description": "an empty string is not null",
+ "data": "",
+ "valid": false
+ },
+ {
"description": "an object is not null",
"data": {},
"valid": false
@@ -290,11 +320,16 @@
"valid": false
},
{
- "description": "a boolean is not null",
+ "description": "true is not null",
"data": true,
"valid": false
},
{
+ "description": "false is not null",
+ "data": false,
+ "valid": false
+ },
+ {
"description": "null is null",
"data": null,
"valid": true
@@ -341,5 +376,89 @@
"valid": false
}
]
+ },
+ {
+ "description": "type as array with one item",
+ "schema": {
+ "type": ["string"]
+ },
+ "tests": [
+ {
+ "description": "string is valid",
+ "data": "foo",
+ "valid": true
+ },
+ {
+ "description": "number is invalid",
+ "data": 123,
+ "valid": false
+ }
+ ]
+ },
+ {
+ "description": "type: array or object",
+ "schema": {
+ "type": ["array", "object"]
+ },
+ "tests": [
+ {
+ "description": "array is valid",
+ "data": [1,2,3],
+ "valid": true
+ },
+ {
+ "description": "object is valid",
+ "data": {"foo": 123},
+ "valid": true
+ },
+ {
+ "description": "number is invalid",
+ "data": 123,
+ "valid": false
+ },
+ {
+ "description": "string is invalid",
+ "data": "foo",
+ "valid": false
+ },
+ {
+ "description": "null is invalid",
+ "data": null,
+ "valid": false
+ }
+ ]
+ },
+ {
+ "description": "type: array, object or null",
+ "schema": {
+ "type": ["array", "object", "null"]
+ },
+ "tests": [
+ {
+ "description": "array is valid",
+ "data": [1,2,3],
+ "valid": true
+ },
+ {
+ "description": "object is valid",
+ "data": {"foo": 123},
+ "valid": true
+ },
+ {
+ "description": "null is valid",
+ "data": null,
+ "valid": true
+ },
+ {
+ "description": "number is invalid",
+ "data": 123,
+ "valid": false
+ },
+ {
+ "description": "string is invalid",
+ "data": "foo",
+ "valid": false
+ }
+ ]
}
]
diff --git a/json/tests/draft7/allOf.json b/json/tests/draft7/allOf.json
index 00c016c..eb61209 100644
--- a/json/tests/draft7/allOf.json
+++ b/json/tests/draft7/allOf.json
@@ -141,5 +141,78 @@
"valid": false
}
]
+ },
+ {
+ "description": "allOf with one empty schema",
+ "schema": {
+ "allOf": [
+ {}
+ ]
+ },
+ "tests": [
+ {
+ "description": "any data is valid",
+ "data": 1,
+ "valid": true
+ }
+ ]
+ },
+ {
+ "description": "allOf with two empty schemas",
+ "schema": {
+ "allOf": [
+ {},
+ {}
+ ]
+ },
+ "tests": [
+ {
+ "description": "any data is valid",
+ "data": 1,
+ "valid": true
+ }
+ ]
+ },
+ {
+ "description": "allOf with the first empty schema",
+ "schema": {
+ "allOf": [
+ {},
+ { "type": "number" }
+ ]
+ },
+ "tests": [
+ {
+ "description": "number is valid",
+ "data": 1,
+ "valid": true
+ },
+ {
+ "description": "string is invalid",
+ "data": "foo",
+ "valid": false
+ }
+ ]
+ },
+ {
+ "description": "allOf with the last empty schema",
+ "schema": {
+ "allOf": [
+ { "type": "number" },
+ {}
+ ]
+ },
+ "tests": [
+ {
+ "description": "number is valid",
+ "data": 1,
+ "valid": true
+ },
+ {
+ "description": "string is invalid",
+ "data": "foo",
+ "valid": false
+ }
+ ]
}
]
diff --git a/json/tests/draft7/anyOf.json b/json/tests/draft7/anyOf.json
index 4d05a9e..bad3e77 100644
--- a/json/tests/draft7/anyOf.json
+++ b/json/tests/draft7/anyOf.json
@@ -138,5 +138,26 @@
"valid": false
}
]
+ },
+ {
+ "description": "anyOf with one empty schema",
+ "schema": {
+ "anyOf": [
+ { "type": "number" },
+ {}
+ ]
+ },
+ "tests": [
+ {
+ "description": "string is valid",
+ "data": "foo",
+ "valid": true
+ },
+ {
+ "description": "number is valid",
+ "data": 123,
+ "valid": true
+ }
+ ]
}
]
diff --git a/json/tests/draft7/dependencies.json b/json/tests/draft7/dependencies.json
index 80e552f..5af1894 100644
--- a/json/tests/draft7/dependencies.json
+++ b/json/tests/draft7/dependencies.json
@@ -168,5 +168,30 @@
"valid": true
}
]
+ },
+ {
+ "description": "empty array of dependencies",
+ "schema": {
+ "dependencies": {
+ "foo": []
+ }
+ },
+ "tests": [
+ {
+ "description": "object with property is valid",
+ "data": { "foo": 1 },
+ "valid": true
+ },
+ {
+ "description": "empty object is valid",
+ "data": {},
+ "valid": true
+ },
+ {
+ "description": "non-object is valid",
+ "data": 1,
+ "valid": true
+ }
+ ]
}
]
diff --git a/json/tests/draft7/items.json b/json/tests/draft7/items.json
index 13a6a11..67f1184 100644
--- a/json/tests/draft7/items.json
+++ b/json/tests/draft7/items.json
@@ -129,5 +129,122 @@
"valid": true
}
]
+ },
+ {
+ "description": "items and subitems",
+ "schema": {
+ "definitions": {
+ "item": {
+ "type": "array",
+ "additionalItems": false,
+ "items": [
+ { "$ref": "#/definitions/sub-item" },
+ { "$ref": "#/definitions/sub-item" }
+ ]
+ },
+ "sub-item": {
+ "type": "object",
+ "required": ["foo"]
+ }
+ },
+ "type": "array",
+ "additionalItems": false,
+ "items": [
+ { "$ref": "#/definitions/item" },
+ { "$ref": "#/definitions/item" },
+ { "$ref": "#/definitions/item" }
+ ]
+ },
+ "tests": [
+ {
+ "description": "valid items",
+ "data": [
+ [ {"foo": null}, {"foo": null} ],
+ [ {"foo": null}, {"foo": null} ],
+ [ {"foo": null}, {"foo": null} ]
+ ],
+ "valid": true
+ },
+ {
+ "description": "too many items",
+ "data": [
+ [ {"foo": null}, {"foo": null} ],
+ [ {"foo": null}, {"foo": null} ],
+ [ {"foo": null}, {"foo": null} ],
+ [ {"foo": null}, {"foo": null} ]
+ ],
+ "valid": false
+ },
+ {
+ "description": "too many sub-items",
+ "data": [
+ [ {"foo": null}, {"foo": null}, {"foo": null} ],
+ [ {"foo": null}, {"foo": null} ],
+ [ {"foo": null}, {"foo": null} ]
+ ],
+ "valid": false
+ },
+ {
+ "description": "wrong item",
+ "data": [
+ {"foo": null},
+ [ {"foo": null}, {"foo": null} ],
+ [ {"foo": null}, {"foo": null} ]
+ ],
+ "valid": false
+ },
+ {
+ "description": "wrong sub-item",
+ "data": [
+ [ {}, {"foo": null} ],
+ [ {"foo": null}, {"foo": null} ],
+ [ {"foo": null}, {"foo": null} ]
+ ],
+ "valid": false
+ },
+ {
+ "description": "fewer items is valid",
+ "data": [
+ [ {"foo": null} ],
+ [ {"foo": null} ]
+ ],
+ "valid": true
+ }
+ ]
+ },
+ {
+ "description": "nested items",
+ "schema": {
+ "type": "array",
+ "items": {
+ "type": "array",
+ "items": {
+ "type": "array",
+ "items": {
+ "type": "array",
+ "items": {
+ "type": "number"
+ }
+ }
+ }
+ }
+ },
+ "tests": [
+ {
+ "description": "valid nested array",
+ "data": [[[[1]], [[2],[3]]], [[[4], [5], [6]]]],
+ "valid": true
+ },
+ {
+ "description": "nested array with invalid type",
+ "data": [[[["1"]], [[2],[3]]], [[[4], [5], [6]]]],
+ "valid": false
+ },
+ {
+ "description": "not deep enough",
+ "data": [[[1], [2],[3]], [[4], [5], [6]]],
+ "valid": false
+ }
+ ]
}
]
diff --git a/json/tests/draft7/oneOf.json b/json/tests/draft7/oneOf.json
index bc4295c..57640b7 100644
--- a/json/tests/draft7/oneOf.json
+++ b/json/tests/draft7/oneOf.json
@@ -149,5 +149,58 @@
"valid": false
}
]
+ },
+ {
+ "description": "oneOf with empty schema",
+ "schema": {
+ "oneOf": [
+ { "type": "number" },
+ {}
+ ]
+ },
+ "tests": [
+ {
+ "description": "one valid - valid",
+ "data": "foo",
+ "valid": true
+ },
+ {
+ "description": "both valid - invalid",
+ "data": 123,
+ "valid": false
+ }
+ ]
+ },
+ {
+ "description": "oneOf with required",
+ "schema": {
+ "type": "object",
+ "oneOf": [
+ { "required": ["foo", "bar"] },
+ { "required": ["foo", "baz"] }
+ ]
+ },
+ "tests": [
+ {
+ "description": "both invalid - invalid",
+ "data": {"bar": 2},
+ "valid": false
+ },
+ {
+ "description": "first valid - valid",
+ "data": {"foo": 1, "bar": 2},
+ "valid": true
+ },
+ {
+ "description": "second valid - valid",
+ "data": {"foo": 1, "baz": 3},
+ "valid": true
+ },
+ {
+ "description": "both valid - invalid",
+ "data": {"foo": 1, "bar": 2, "baz" : 3},
+ "valid": false
+ }
+ ]
}
]
diff --git a/json/tests/draft7/type.json b/json/tests/draft7/type.json
index 6129374..ea33b18 100644
--- a/json/tests/draft7/type.json
+++ b/json/tests/draft7/type.json
@@ -116,6 +116,11 @@
"valid": true
},
{
+ "description": "an empty string is still a string",
+ "data": "",
+ "valid": true
+ },
+ {
"description": "an object is not a string",
"data": {},
"valid": false
@@ -229,6 +234,11 @@
"valid": false
},
{
+ "description": "zero is not a boolean",
+ "data": 0,
+ "valid": false
+ },
+ {
"description": "a float is not a boolean",
"data": 1.1,
"valid": false
@@ -239,6 +249,11 @@
"valid": false
},
{
+ "description": "an empty string is not a boolean",
+ "data": "",
+ "valid": false
+ },
+ {
"description": "an object is not a boolean",
"data": {},
"valid": false
@@ -249,11 +264,16 @@
"valid": false
},
{
- "description": "a boolean is a boolean",
+ "description": "true is a boolean",
"data": true,
"valid": true
},
{
+ "description": "false is a boolean",
+ "data": false,
+ "valid": true
+ },
+ {
"description": "null is not a boolean",
"data": null,
"valid": false
@@ -275,11 +295,21 @@
"valid": false
},
{
+ "description": "zero is not null",
+ "data": 0,
+ "valid": false
+ },
+ {
"description": "a string is not null",
"data": "foo",
"valid": false
},
{
+ "description": "an empty string is not null",
+ "data": "",
+ "valid": false
+ },
+ {
"description": "an object is not null",
"data": {},
"valid": false
@@ -290,11 +320,16 @@
"valid": false
},
{
- "description": "a boolean is not null",
+ "description": "true is not null",
"data": true,
"valid": false
},
{
+ "description": "false is not null",
+ "data": false,
+ "valid": false
+ },
+ {
"description": "null is null",
"data": null,
"valid": true
@@ -341,5 +376,89 @@
"valid": false
}
]
+ },
+ {
+ "description": "type as array with one item",
+ "schema": {
+ "type": ["string"]
+ },
+ "tests": [
+ {
+ "description": "string is valid",
+ "data": "foo",
+ "valid": true
+ },
+ {
+ "description": "number is invalid",
+ "data": 123,
+ "valid": false
+ }
+ ]
+ },
+ {
+ "description": "type: array or object",
+ "schema": {
+ "type": ["array", "object"]
+ },
+ "tests": [
+ {
+ "description": "array is valid",
+ "data": [1,2,3],
+ "valid": true
+ },
+ {
+ "description": "object is valid",
+ "data": {"foo": 123},
+ "valid": true
+ },
+ {
+ "description": "number is invalid",
+ "data": 123,
+ "valid": false
+ },
+ {
+ "description": "string is invalid",
+ "data": "foo",
+ "valid": false
+ },
+ {
+ "description": "null is invalid",
+ "data": null,
+ "valid": false
+ }
+ ]
+ },
+ {
+ "description": "type: array, object or null",
+ "schema": {
+ "type": ["array", "object", "null"]
+ },
+ "tests": [
+ {
+ "description": "array is valid",
+ "data": [1,2,3],
+ "valid": true
+ },
+ {
+ "description": "object is valid",
+ "data": {"foo": 123},
+ "valid": true
+ },
+ {
+ "description": "null is valid",
+ "data": null,
+ "valid": true
+ },
+ {
+ "description": "number is invalid",
+ "data": 123,
+ "valid": false
+ },
+ {
+ "description": "string is invalid",
+ "data": "foo",
+ "valid": false
+ }
+ ]
}
]