summaryrefslogtreecommitdiff
path: root/json/tests/draft6
diff options
context:
space:
mode:
authorJulian Berman <Julian@GrayVines.com>2020-06-09 19:00:09 -0400
committerJulian Berman <Julian@GrayVines.com>2020-06-09 19:00:09 -0400
commit3f58e36754b3e2872a256874c1ffdd30c677f709 (patch)
tree157cf84b5880faee6fab531f6e90d36e326b99e7 /json/tests/draft6
parent3b85db9769390b4dc713fbf09ab76a760e48fea3 (diff)
parent4a4930a09fa25251ad0f02395f3c6aa0fd7e3a82 (diff)
downloadjsonschema-3f58e36754b3e2872a256874c1ffdd30c677f709.tar.gz
Merge commit '4a4930a09fa25251ad0f02395f3c6aa0fd7e3a82'
* commit '4a4930a09fa25251ad0f02395f3c6aa0fd7e3a82': Squashed 'json/' changes from 9d0e0eb..817b724
Diffstat (limited to 'json/tests/draft6')
-rw-r--r--json/tests/draft6/additionalItems.json12
-rw-r--r--json/tests/draft6/allOf.json50
-rw-r--r--json/tests/draft6/const.json16
-rw-r--r--json/tests/draft6/contains.json29
-rw-r--r--json/tests/draft6/enum.json16
-rw-r--r--json/tests/draft6/maxProperties.json16
-rw-r--r--json/tests/draft6/optional/format.json491
-rw-r--r--json/tests/draft6/optional/format/date-time.json58
-rw-r--r--json/tests/draft6/optional/format/email.json18
-rw-r--r--json/tests/draft6/optional/format/hostname.json63
-rw-r--r--json/tests/draft6/optional/format/ipv4.json33
-rw-r--r--json/tests/draft6/optional/format/ipv6.json28
-rw-r--r--json/tests/draft6/optional/format/json-pointer.json168
-rw-r--r--json/tests/draft6/optional/format/uri-reference.json43
-rw-r--r--json/tests/draft6/optional/format/uri-template.json28
-rw-r--r--json/tests/draft6/optional/format/uri.json103
-rw-r--r--json/tests/draft6/ref.json12
-rw-r--r--json/tests/draft6/uniqueItems.json32
18 files changed, 717 insertions, 499 deletions
diff --git a/json/tests/draft6/additionalItems.json b/json/tests/draft6/additionalItems.json
index abecc57..69ea5e3 100644
--- a/json/tests/draft6/additionalItems.json
+++ b/json/tests/draft6/additionalItems.json
@@ -40,7 +40,17 @@
},
"tests": [
{
- "description": "fewer number of items present",
+ "description": "empty array",
+ "data": [ ],
+ "valid": true
+ },
+ {
+ "description": "fewer number of items present (1)",
+ "data": [ 1 ],
+ "valid": true
+ },
+ {
+ "description": "fewer number of items present (2)",
"data": [ 1, 2 ],
"valid": true
},
diff --git a/json/tests/draft6/allOf.json b/json/tests/draft6/allOf.json
index cff8251..ec9319e 100644
--- a/json/tests/draft6/allOf.json
+++ b/json/tests/draft6/allOf.json
@@ -240,5 +240,55 @@
"valid": false
}
]
+ },
+ {
+ "description": "allOf combined with anyOf, oneOf",
+ "schema": {
+ "allOf": [ { "multipleOf": 2 } ],
+ "anyOf": [ { "multipleOf": 3 } ],
+ "oneOf": [ { "multipleOf": 5 } ]
+ },
+ "tests": [
+ {
+ "description": "allOf: false, anyOf: false, oneOf: false",
+ "data": 1,
+ "valid": false
+ },
+ {
+ "description": "allOf: false, anyOf: false, oneOf: true",
+ "data": 5,
+ "valid": false
+ },
+ {
+ "description": "allOf: false, anyOf: true, oneOf: false",
+ "data": 3,
+ "valid": false
+ },
+ {
+ "description": "allOf: false, anyOf: true, oneOf: true",
+ "data": 15,
+ "valid": false
+ },
+ {
+ "description": "allOf: true, anyOf: false, oneOf: false",
+ "data": 2,
+ "valid": false
+ },
+ {
+ "description": "allOf: true, anyOf: false, oneOf: true",
+ "data": 10,
+ "valid": false
+ },
+ {
+ "description": "allOf: true, anyOf: true, oneOf: false",
+ "data": 6,
+ "valid": false
+ },
+ {
+ "description": "allOf: true, anyOf: true, oneOf: true",
+ "data": 30,
+ "valid": true
+ }
+ ]
}
]
diff --git a/json/tests/draft6/const.json b/json/tests/draft6/const.json
index 1a55235..c53d04d 100644
--- a/json/tests/draft6/const.json
+++ b/json/tests/draft6/const.json
@@ -238,5 +238,21 @@
"valid": false
}
]
+ },
+ {
+ "description": "nul characters in strings",
+ "schema": { "const": "hello\u0000there" },
+ "tests": [
+ {
+ "description": "match string with nul",
+ "data": "hello\u0000there",
+ "valid": true
+ },
+ {
+ "description": "do not match string lacking nul",
+ "data": "hellothere",
+ "valid": false
+ }
+ ]
}
]
diff --git a/json/tests/draft6/contains.json b/json/tests/draft6/contains.json
index 67ecbd9..c5471cc 100644
--- a/json/tests/draft6/contains.json
+++ b/json/tests/draft6/contains.json
@@ -96,5 +96,34 @@
"valid": true
}
]
+ },
+ {
+ "description": "items + contains",
+ "schema": {
+ "items": { "multipleOf": 2 },
+ "contains": { "multipleOf": 3 }
+ },
+ "tests": [
+ {
+ "description": "matches items, does not match contains",
+ "data": [ 2, 4, 8 ],
+ "valid": false
+ },
+ {
+ "description": "does not match items, matches contains",
+ "data": [ 3, 6, 9 ],
+ "valid": false
+ },
+ {
+ "description": "matches both items and contains",
+ "data": [ 6, 12 ],
+ "valid": true
+ },
+ {
+ "description": "matches neither items nor contains",
+ "data": [ 1, 5 ],
+ "valid": false
+ }
+ ]
}
]
diff --git a/json/tests/draft6/enum.json b/json/tests/draft6/enum.json
index 0191b55..6844578 100644
--- a/json/tests/draft6/enum.json
+++ b/json/tests/draft6/enum.json
@@ -206,5 +206,21 @@
"valid": true
}
]
+ },
+ {
+ "description": "nul characters in strings",
+ "schema": { "enum": [ "hello\u0000there" ] },
+ "tests": [
+ {
+ "description": "match string with nul",
+ "data": "hello\u0000there",
+ "valid": true
+ },
+ {
+ "description": "do not match string lacking nul",
+ "data": "hellothere",
+ "valid": false
+ }
+ ]
}
]
diff --git a/json/tests/draft6/maxProperties.json b/json/tests/draft6/maxProperties.json
index 513731e..aa7209f 100644
--- a/json/tests/draft6/maxProperties.json
+++ b/json/tests/draft6/maxProperties.json
@@ -34,5 +34,21 @@
"valid": true
}
]
+ },
+ {
+ "description": "maxProperties = 0 means the object is empty",
+ "schema": { "maxProperties": 0 },
+ "tests": [
+ {
+ "description": "no properties is valid",
+ "data": {},
+ "valid": true
+ },
+ {
+ "description": "one property is invalid",
+ "data": { "foo": 1 },
+ "valid": false
+ }
+ ]
}
]
diff --git a/json/tests/draft6/optional/format.json b/json/tests/draft6/optional/format.json
deleted file mode 100644
index 3dd265f..0000000
--- a/json/tests/draft6/optional/format.json
+++ /dev/null
@@ -1,491 +0,0 @@
-[
- {
- "description": "validation of date-time strings",
- "schema": {"format": "date-time"},
- "tests": [
- {
- "description": "a valid date-time string",
- "data": "1963-06-19T08:30:06.283185Z",
- "valid": true
- },
- {
- "description": "a valid date-time string without second fraction",
- "data": "1963-06-19T08:30:06Z",
- "valid": true
- },
- {
- "description": "a valid date-time string with plus offset",
- "data": "1937-01-01T12:00:27.87+00:20",
- "valid": true
- },
- {
- "description": "a valid date-time string with minus offset",
- "data": "1990-12-31T15:59:50.123-08:00",
- "valid": true
- },
- {
- "description": "a invalid day in date-time string",
- "data": "1990-02-31T15:59:60.123-08:00",
- "valid": false
- },
- {
- "description": "an invalid offset in date-time string",
- "data": "1990-12-31T15:59:60-24:00",
- "valid": false
- },
- {
- "description": "an invalid closing Z after time-zone offset",
- "data": "1963-06-19T08:30:06.28123+01:00Z",
- "valid": false
- },
- {
- "description": "an invalid date-time string",
- "data": "06/19/1963 08:30:06 PST",
- "valid": false
- },
- {
- "description": "case-insensitive T and Z",
- "data": "1963-06-19t08:30:06.283185z",
- "valid": true
- },
- {
- "description": "only RFC3339 not all of ISO 8601 are valid",
- "data": "2013-350T01:01:01",
- "valid": false
- }
- ]
- },
- {
- "description": "validation of URIs",
- "schema": {"format": "uri"},
- "tests": [
- {
- "description": "a valid URL with anchor tag",
- "data": "http://foo.bar/?baz=qux#quux",
- "valid": true
- },
- {
- "description": "a valid URL with anchor tag and parantheses",
- "data": "http://foo.com/blah_(wikipedia)_blah#cite-1",
- "valid": true
- },
- {
- "description": "a valid URL with URL-encoded stuff",
- "data": "http://foo.bar/?q=Test%20URL-encoded%20stuff",
- "valid": true
- },
- {
- "description": "a valid puny-coded URL ",
- "data": "http://xn--nw2a.xn--j6w193g/",
- "valid": true
- },
- {
- "description": "a valid URL with many special characters",
- "data": "http://-.~_!$&'()*+,;=:%40:80%2f::::::@example.com",
- "valid": true
- },
- {
- "description": "a valid URL based on IPv4",
- "data": "http://223.255.255.254",
- "valid": true
- },
- {
- "description": "a valid URL with ftp scheme",
- "data": "ftp://ftp.is.co.za/rfc/rfc1808.txt",
- "valid": true
- },
- {
- "description": "a valid URL for a simple text file",
- "data": "http://www.ietf.org/rfc/rfc2396.txt",
- "valid": true
- },
- {
- "description": "a valid URL ",
- "data": "ldap://[2001:db8::7]/c=GB?objectClass?one",
- "valid": true
- },
- {
- "description": "a valid mailto URI",
- "data": "mailto:John.Doe@example.com",
- "valid": true
- },
- {
- "description": "a valid newsgroup URI",
- "data": "news:comp.infosystems.www.servers.unix",
- "valid": true
- },
- {
- "description": "a valid tel URI",
- "data": "tel:+1-816-555-1212",
- "valid": true
- },
- {
- "description": "a valid URN",
- "data": "urn:oasis:names:specification:docbook:dtd:xml:4.1.2",
- "valid": true
- },
- {
- "description": "an invalid protocol-relative URI Reference",
- "data": "//foo.bar/?baz=qux#quux",
- "valid": false
- },
- {
- "description": "an invalid relative URI Reference",
- "data": "/abc",
- "valid": false
- },
- {
- "description": "an invalid URI",
- "data": "\\\\WINDOWS\\fileshare",
- "valid": false
- },
- {
- "description": "an invalid URI though valid URI reference",
- "data": "abc",
- "valid": false
- },
- {
- "description": "an invalid URI with spaces",
- "data": "http:// shouldfail.com",
- "valid": false
- },
- {
- "description": "an invalid URI with spaces and missing scheme",
- "data": ":// should fail",
- "valid": false
- }
- ]
- },
- {
- "description": "validation of URI References",
- "schema": {"format": "uri-reference"},
- "tests": [
- {
- "description": "a valid URI",
- "data": "http://foo.bar/?baz=qux#quux",
- "valid": true
- },
- {
- "description": "a valid protocol-relative URI Reference",
- "data": "//foo.bar/?baz=qux#quux",
- "valid": true
- },
- {
- "description": "a valid relative URI Reference",
- "data": "/abc",
- "valid": true
- },
- {
- "description": "an invalid URI Reference",
- "data": "\\\\WINDOWS\\fileshare",
- "valid": false
- },
- {
- "description": "a valid URI Reference",
- "data": "abc",
- "valid": true
- },
- {
- "description": "a valid URI fragment",
- "data": "#fragment",
- "valid": true
- },
- {
- "description": "an invalid URI fragment",
- "data": "#frag\\ment",
- "valid": false
- }
- ]
- },
- {
- "description": "format: uri-template",
- "schema": {"format": "uri-template"},
- "tests": [
- {
- "description": "a valid uri-template",
- "data": "http://example.com/dictionary/{term:1}/{term}",
- "valid": true
- },
- {
- "description": "an invalid uri-template",
- "data": "http://example.com/dictionary/{term:1}/{term",
- "valid": false
- },
- {
- "description": "a valid uri-template without variables",
- "data": "http://example.com/dictionary",
- "valid": true
- },
- {
- "description": "a valid relative uri-template",
- "data": "dictionary/{term:1}/{term}",
- "valid": true
- }
- ]
- },
- {
- "description": "validation of e-mail addresses",
- "schema": {"format": "email"},
- "tests": [
- {
- "description": "a valid e-mail address",
- "data": "joe.bloggs@example.com",
- "valid": true
- },
- {
- "description": "an invalid e-mail address",
- "data": "2962",
- "valid": false
- }
- ]
- },
- {
- "description": "validation of IP addresses",
- "schema": {"format": "ipv4"},
- "tests": [
- {
- "description": "a valid IP address",
- "data": "192.168.0.1",
- "valid": true
- },
- {
- "description": "an IP address with too many components",
- "data": "127.0.0.0.1",
- "valid": false
- },
- {
- "description": "an IP address with out-of-range values",
- "data": "256.256.256.256",
- "valid": false
- },
- {
- "description": "an IP address without 4 components",
- "data": "127.0",
- "valid": false
- },
- {
- "description": "an IP address as an integer",
- "data": "0x7f000001",
- "valid": false
- }
- ]
- },
- {
- "description": "validation of IPv6 addresses",
- "schema": {"format": "ipv6"},
- "tests": [
- {
- "description": "a valid IPv6 address",
- "data": "::1",
- "valid": true
- },
- {
- "description": "an IPv6 address with out-of-range values",
- "data": "12345::",
- "valid": false
- },
- {
- "description": "an IPv6 address with too many components",
- "data": "1:1:1:1:1:1:1:1:1:1:1:1:1:1:1:1",
- "valid": false
- },
- {
- "description": "an IPv6 address containing illegal characters",
- "data": "::laptop",
- "valid": false
- }
- ]
- },
- {
- "description": "validation of host names",
- "schema": {"format": "hostname"},
- "tests": [
- {
- "description": "a valid host name",
- "data": "www.example.com",
- "valid": true
- },
- {
- "description": "a host name starting with an illegal character",
- "data": "-a-host-name-that-starts-with--",
- "valid": false
- },
- {
- "description": "a host name containing illegal characters",
- "data": "not_a_valid_host_name",
- "valid": false
- },
- {
- "description": "a host name with a component too long",
- "data": "a-vvvvvvvvvvvvvvvveeeeeeeeeeeeeeeerrrrrrrrrrrrrrrryyyyyyyyyyyyyyyy-long-host-name-component",
- "valid": false
- }
- ]
- },
- {
- "description": "validation of JSON-pointers (JSON String Representation)",
- "schema": {"format": "json-pointer"},
- "tests": [
- {
- "description": "a valid JSON-pointer",
- "data": "/foo/bar~0/baz~1/%a",
- "valid": true
- },
- {
- "description": "not a valid JSON-pointer (~ not escaped)",
- "data": "/foo/bar~",
- "valid": false
- },
- {
- "description": "valid JSON-pointer with empty segment",
- "data": "/foo//bar",
- "valid": true
- },
- {
- "description": "valid JSON-pointer with the last empty segment",
- "data": "/foo/bar/",
- "valid": true
- },
- {
- "description": "valid JSON-pointer as stated in RFC 6901 #1",
- "data": "",
- "valid": true
- },
- {
- "description": "valid JSON-pointer as stated in RFC 6901 #2",
- "data": "/foo",
- "valid": true
- },
- {
- "description": "valid JSON-pointer as stated in RFC 6901 #3",
- "data": "/foo/0",
- "valid": true
- },
- {
- "description": "valid JSON-pointer as stated in RFC 6901 #4",
- "data": "/",
- "valid": true
- },
- {
- "description": "valid JSON-pointer as stated in RFC 6901 #5",
- "data": "/a~1b",
- "valid": true
- },
- {
- "description": "valid JSON-pointer as stated in RFC 6901 #6",
- "data": "/c%d",
- "valid": true
- },
- {
- "description": "valid JSON-pointer as stated in RFC 6901 #7",
- "data": "/e^f",
- "valid": true
- },
- {
- "description": "valid JSON-pointer as stated in RFC 6901 #8",
- "data": "/g|h",
- "valid": true
- },
- {
- "description": "valid JSON-pointer as stated in RFC 6901 #9",
- "data": "/i\\j",
- "valid": true
- },
- {
- "description": "valid JSON-pointer as stated in RFC 6901 #10",
- "data": "/k\"l",
- "valid": true
- },
- {
- "description": "valid JSON-pointer as stated in RFC 6901 #11",
- "data": "/ ",
- "valid": true
- },
- {
- "description": "valid JSON-pointer as stated in RFC 6901 #12",
- "data": "/m~0n",
- "valid": true
- },
- {
- "description": "valid JSON-pointer used adding to the last array position",
- "data": "/foo/-",
- "valid": true
- },
- {
- "description": "valid JSON-pointer (- used as object member name)",
- "data": "/foo/-/bar",
- "valid": true
- },
- {
- "description": "valid JSON-pointer (multiple escaped characters)",
- "data": "/~1~0~0~1~1",
- "valid": true
- },
- {
- "description": "valid JSON-pointer (escaped with fraction part) #1",
- "data": "/~1.1",
- "valid": true
- },
- {
- "description": "valid JSON-pointer (escaped with fraction part) #2",
- "data": "/~0.1",
- "valid": true
- },
- {
- "description": "not a valid JSON-pointer (URI Fragment Identifier) #1",
- "data": "#",
- "valid": false
- },
- {
- "description": "not a valid JSON-pointer (URI Fragment Identifier) #2",
- "data": "#/",
- "valid": false
- },
- {
- "description": "not a valid JSON-pointer (URI Fragment Identifier) #3",
- "data": "#a",
- "valid": false
- },
- {
- "description": "not a valid JSON-pointer (some escaped, but not all) #1",
- "data": "/~0~",
- "valid": false
- },
- {
- "description": "not a valid JSON-pointer (some escaped, but not all) #2",
- "data": "/~0/~",
- "valid": false
- },
- {
- "description": "not a valid JSON-pointer (wrong escape character) #1",
- "data": "/~2",
- "valid": false
- },
- {
- "description": "not a valid JSON-pointer (wrong escape character) #2",
- "data": "/~-1",
- "valid": false
- },
- {
- "description": "not a valid JSON-pointer (multiple characters not escaped)",
- "data": "/~~",
- "valid": false
- },
- {
- "description": "not a valid JSON-pointer (isn't empty nor starts with /) #1",
- "data": "a",
- "valid": false
- },
- {
- "description": "not a valid JSON-pointer (isn't empty nor starts with /) #2",
- "data": "0",
- "valid": false
- },
- {
- "description": "not a valid JSON-pointer (isn't empty nor starts with /) #3",
- "data": "a/a",
- "valid": false
- }
- ]
- }
-]
diff --git a/json/tests/draft6/optional/format/date-time.json b/json/tests/draft6/optional/format/date-time.json
new file mode 100644
index 0000000..fc949e9
--- /dev/null
+++ b/json/tests/draft6/optional/format/date-time.json
@@ -0,0 +1,58 @@
+[
+ {
+ "description": "validation of date-time strings",
+ "schema": {"format": "date-time"},
+ "tests": [
+ {
+ "description": "a valid date-time string",
+ "data": "1963-06-19T08:30:06.283185Z",
+ "valid": true
+ },
+ {
+ "description": "a valid date-time string without second fraction",
+ "data": "1963-06-19T08:30:06Z",
+ "valid": true
+ },
+ {
+ "description": "a valid date-time string with plus offset",
+ "data": "1937-01-01T12:00:27.87+00:20",
+ "valid": true
+ },
+ {
+ "description": "a valid date-time string with minus offset",
+ "data": "1990-12-31T15:59:50.123-08:00",
+ "valid": true
+ },
+ {
+ "description": "a invalid day in date-time string",
+ "data": "1990-02-31T15:59:60.123-08:00",
+ "valid": false
+ },
+ {
+ "description": "an invalid offset in date-time string",
+ "data": "1990-12-31T15:59:60-24:00",
+ "valid": false
+ },
+ {
+ "description": "an invalid closing Z after time-zone offset",
+ "data": "1963-06-19T08:30:06.28123+01:00Z",
+ "valid": false
+ },
+ {
+ "description": "an invalid date-time string",
+ "data": "06/19/1963 08:30:06 PST",
+ "valid": false
+ },
+ {
+ "description": "case-insensitive T and Z",
+ "data": "1963-06-19t08:30:06.283185z",
+ "valid": true
+ },
+ {
+ "description": "only RFC3339 not all of ISO 8601 are valid",
+ "data": "2013-350T01:01:01",
+ "valid": false
+ }
+ ]
+ }
+]
diff --git a/json/tests/draft6/optional/format/email.json b/json/tests/draft6/optional/format/email.json
new file mode 100644
index 0000000..c837c84
--- /dev/null
+++ b/json/tests/draft6/optional/format/email.json
@@ -0,0 +1,18 @@
+[
+ {
+ "description": "validation of e-mail addresses",
+ "schema": {"format": "email"},
+ "tests": [
+ {
+ "description": "a valid e-mail address",
+ "data": "joe.bloggs@example.com",
+ "valid": true
+ },
+ {
+ "description": "an invalid e-mail address",
+ "data": "2962",
+ "valid": false
+ }
+ ]
+ }
+]
diff --git a/json/tests/draft6/optional/format/hostname.json b/json/tests/draft6/optional/format/hostname.json
new file mode 100644
index 0000000..d7654e0
--- /dev/null
+++ b/json/tests/draft6/optional/format/hostname.json
@@ -0,0 +1,63 @@
+[
+ {
+ "description": "validation of host names",
+ "schema": {"format": "hostname"},
+ "tests": [
+ {
+ "description": "a valid host name",
+ "data": "www.example.com",
+ "valid": true
+ },
+ {
+ "description": "a host name starting with an illegal character",
+ "data": "-a-host-name-that-starts-with--",
+ "valid": false
+ },
+ {
+ "description": "a host name containing illegal characters",
+ "data": "not_a_valid_host_name",
+ "valid": false
+ },
+ {
+ "description": "a host name with a component too long",
+ "data": "a-vvvvvvvvvvvvvvvveeeeeeeeeeeeeeeerrrrrrrrrrrrrrrryyyyyyyyyyyyyyyy-long-host-name-component",
+ "valid": false
+ },
+ {
+ "description": "starts with hyphen",
+ "data": "-hostname",
+ "valid": false
+ },
+ {
+ "description": "ends with hyphen",
+ "data": "hostname-",
+ "valid": false
+ },
+ {
+ "description": "starts with underscore",
+ "data": "_hostname",
+ "valid": false
+ },
+ {
+ "description": "ends with underscore",
+ "data": "hostname_",
+ "valid": false
+ },
+ {
+ "description": "contains underscore",
+ "data": "host_name",
+ "valid": false
+ },
+ {
+ "description": "maximum label length",
+ "data": "abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijk.com",
+ "valid": true
+ },
+ {
+ "description": "exceeds maximum label length",
+ "data": "abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijkl.com",
+ "valid": false
+ }
+ ]
+ }
+]
diff --git a/json/tests/draft6/optional/format/ipv4.json b/json/tests/draft6/optional/format/ipv4.json
new file mode 100644
index 0000000..661148a
--- /dev/null
+++ b/json/tests/draft6/optional/format/ipv4.json
@@ -0,0 +1,33 @@
+[
+ {
+ "description": "validation of IP addresses",
+ "schema": {"format": "ipv4"},
+ "tests": [
+ {
+ "description": "a valid IP address",
+ "data": "192.168.0.1",
+ "valid": true
+ },
+ {
+ "description": "an IP address with too many components",
+ "data": "127.0.0.0.1",
+ "valid": false
+ },
+ {
+ "description": "an IP address with out-of-range values",
+ "data": "256.256.256.256",
+ "valid": false
+ },
+ {
+ "description": "an IP address without 4 components",
+ "data": "127.0",
+ "valid": false
+ },
+ {
+ "description": "an IP address as an integer",
+ "data": "0x7f000001",
+ "valid": false
+ }
+ ]
+ }
+]
diff --git a/json/tests/draft6/optional/format/ipv6.json b/json/tests/draft6/optional/format/ipv6.json
new file mode 100644
index 0000000..f67559b
--- /dev/null
+++ b/json/tests/draft6/optional/format/ipv6.json
@@ -0,0 +1,28 @@
+[
+ {
+ "description": "validation of IPv6 addresses",
+ "schema": {"format": "ipv6"},
+ "tests": [
+ {
+ "description": "a valid IPv6 address",
+ "data": "::1",
+ "valid": true
+ },
+ {
+ "description": "an IPv6 address with out-of-range values",
+ "data": "12345::",
+ "valid": false
+ },
+ {
+ "description": "an IPv6 address with too many components",
+ "data": "1:1:1:1:1:1:1:1:1:1:1:1:1:1:1:1",
+ "valid": false
+ },
+ {
+ "description": "an IPv6 address containing illegal characters",
+ "data": "::laptop",
+ "valid": false
+ }
+ ]
+ }
+]
diff --git a/json/tests/draft6/optional/format/json-pointer.json b/json/tests/draft6/optional/format/json-pointer.json
new file mode 100644
index 0000000..65c2f06
--- /dev/null
+++ b/json/tests/draft6/optional/format/json-pointer.json
@@ -0,0 +1,168 @@
+[
+ {
+ "description": "validation of JSON-pointers (JSON String Representation)",
+ "schema": {"format": "json-pointer"},
+ "tests": [
+ {
+ "description": "a valid JSON-pointer",
+ "data": "/foo/bar~0/baz~1/%a",
+ "valid": true
+ },
+ {
+ "description": "not a valid JSON-pointer (~ not escaped)",
+ "data": "/foo/bar~",
+ "valid": false
+ },
+ {
+ "description": "valid JSON-pointer with empty segment",
+ "data": "/foo//bar",
+ "valid": true
+ },
+ {
+ "description": "valid JSON-pointer with the last empty segment",
+ "data": "/foo/bar/",
+ "valid": true
+ },
+ {
+ "description": "valid JSON-pointer as stated in RFC 6901 #1",
+ "data": "",
+ "valid": true
+ },
+ {
+ "description": "valid JSON-pointer as stated in RFC 6901 #2",
+ "data": "/foo",
+ "valid": true
+ },
+ {
+ "description": "valid JSON-pointer as stated in RFC 6901 #3",
+ "data": "/foo/0",
+ "valid": true
+ },
+ {
+ "description": "valid JSON-pointer as stated in RFC 6901 #4",
+ "data": "/",
+ "valid": true
+ },
+ {
+ "description": "valid JSON-pointer as stated in RFC 6901 #5",
+ "data": "/a~1b",
+ "valid": true
+ },
+ {
+ "description": "valid JSON-pointer as stated in RFC 6901 #6",
+ "data": "/c%d",
+ "valid": true
+ },
+ {
+ "description": "valid JSON-pointer as stated in RFC 6901 #7",
+ "data": "/e^f",
+ "valid": true
+ },
+ {
+ "description": "valid JSON-pointer as stated in RFC 6901 #8",
+ "data": "/g|h",
+ "valid": true
+ },
+ {
+ "description": "valid JSON-pointer as stated in RFC 6901 #9",
+ "data": "/i\\j",
+ "valid": true
+ },
+ {
+ "description": "valid JSON-pointer as stated in RFC 6901 #10",
+ "data": "/k\"l",
+ "valid": true
+ },
+ {
+ "description": "valid JSON-pointer as stated in RFC 6901 #11",
+ "data": "/ ",
+ "valid": true
+ },
+ {
+ "description": "valid JSON-pointer as stated in RFC 6901 #12",
+ "data": "/m~0n",
+ "valid": true
+ },
+ {
+ "description": "valid JSON-pointer used adding to the last array position",
+ "data": "/foo/-",
+ "valid": true
+ },
+ {
+ "description": "valid JSON-pointer (- used as object member name)",
+ "data": "/foo/-/bar",
+ "valid": true
+ },
+ {
+ "description": "valid JSON-pointer (multiple escaped characters)",
+ "data": "/~1~0~0~1~1",
+ "valid": true
+ },
+ {
+ "description": "valid JSON-pointer (escaped with fraction part) #1",
+ "data": "/~1.1",
+ "valid": true
+ },
+ {
+ "description": "valid JSON-pointer (escaped with fraction part) #2",
+ "data": "/~0.1",
+ "valid": true
+ },
+ {
+ "description": "not a valid JSON-pointer (URI Fragment Identifier) #1",
+ "data": "#",
+ "valid": false
+ },
+ {
+ "description": "not a valid JSON-pointer (URI Fragment Identifier) #2",
+ "data": "#/",
+ "valid": false
+ },
+ {
+ "description": "not a valid JSON-pointer (URI Fragment Identifier) #3",
+ "data": "#a",
+ "valid": false
+ },
+ {
+ "description": "not a valid JSON-pointer (some escaped, but not all) #1",
+ "data": "/~0~",
+ "valid": false
+ },
+ {
+ "description": "not a valid JSON-pointer (some escaped, but not all) #2",
+ "data": "/~0/~",
+ "valid": false
+ },
+ {
+ "description": "not a valid JSON-pointer (wrong escape character) #1",
+ "data": "/~2",
+ "valid": false
+ },
+ {
+ "description": "not a valid JSON-pointer (wrong escape character) #2",
+ "data": "/~-1",
+ "valid": false
+ },
+ {
+ "description": "not a valid JSON-pointer (multiple characters not escaped)",
+ "data": "/~~",
+ "valid": false
+ },
+ {
+ "description": "not a valid JSON-pointer (isn't empty nor starts with /) #1",
+ "data": "a",
+ "valid": false
+ },
+ {
+ "description": "not a valid JSON-pointer (isn't empty nor starts with /) #2",
+ "data": "0",
+ "valid": false
+ },
+ {
+ "description": "not a valid JSON-pointer (isn't empty nor starts with /) #3",
+ "data": "a/a",
+ "valid": false
+ }
+ ]
+ }
+]
diff --git a/json/tests/draft6/optional/format/uri-reference.json b/json/tests/draft6/optional/format/uri-reference.json
new file mode 100644
index 0000000..e4c9eef
--- /dev/null
+++ b/json/tests/draft6/optional/format/uri-reference.json
@@ -0,0 +1,43 @@
+[
+ {
+ "description": "validation of URI References",
+ "schema": {"format": "uri-reference"},
+ "tests": [
+ {
+ "description": "a valid URI",
+ "data": "http://foo.bar/?baz=qux#quux",
+ "valid": true
+ },
+ {
+ "description": "a valid protocol-relative URI Reference",
+ "data": "//foo.bar/?baz=qux#quux",
+ "valid": true
+ },
+ {
+ "description": "a valid relative URI Reference",
+ "data": "/abc",
+ "valid": true
+ },
+ {
+ "description": "an invalid URI Reference",
+ "data": "\\\\WINDOWS\\fileshare",
+ "valid": false
+ },
+ {
+ "description": "a valid URI Reference",
+ "data": "abc",
+ "valid": true
+ },
+ {
+ "description": "a valid URI fragment",
+ "data": "#fragment",
+ "valid": true
+ },
+ {
+ "description": "an invalid URI fragment",
+ "data": "#frag\\ment",
+ "valid": false
+ }
+ ]
+ }
+]
diff --git a/json/tests/draft6/optional/format/uri-template.json b/json/tests/draft6/optional/format/uri-template.json
new file mode 100644
index 0000000..33ab76e
--- /dev/null
+++ b/json/tests/draft6/optional/format/uri-template.json
@@ -0,0 +1,28 @@
+[
+ {
+ "description": "format: uri-template",
+ "schema": {"format": "uri-template"},
+ "tests": [
+ {
+ "description": "a valid uri-template",
+ "data": "http://example.com/dictionary/{term:1}/{term}",
+ "valid": true
+ },
+ {
+ "description": "an invalid uri-template",
+ "data": "http://example.com/dictionary/{term:1}/{term",
+ "valid": false
+ },
+ {
+ "description": "a valid uri-template without variables",
+ "data": "http://example.com/dictionary",
+ "valid": true
+ },
+ {
+ "description": "a valid relative uri-template",
+ "data": "dictionary/{term:1}/{term}",
+ "valid": true
+ }
+ ]
+ }
+]
diff --git a/json/tests/draft6/optional/format/uri.json b/json/tests/draft6/optional/format/uri.json
new file mode 100644
index 0000000..25cc40c
--- /dev/null
+++ b/json/tests/draft6/optional/format/uri.json
@@ -0,0 +1,103 @@
+[
+ {
+ "description": "validation of URIs",
+ "schema": {"format": "uri"},
+ "tests": [
+ {
+ "description": "a valid URL with anchor tag",
+ "data": "http://foo.bar/?baz=qux#quux",
+ "valid": true
+ },
+ {
+ "description": "a valid URL with anchor tag and parantheses",
+ "data": "http://foo.com/blah_(wikipedia)_blah#cite-1",
+ "valid": true
+ },
+ {
+ "description": "a valid URL with URL-encoded stuff",
+ "data": "http://foo.bar/?q=Test%20URL-encoded%20stuff",
+ "valid": true
+ },
+ {
+ "description": "a valid puny-coded URL ",
+ "data": "http://xn--nw2a.xn--j6w193g/",
+ "valid": true
+ },
+ {
+ "description": "a valid URL with many special characters",
+ "data": "http://-.~_!$&'()*+,;=:%40:80%2f::::::@example.com",
+ "valid": true
+ },
+ {
+ "description": "a valid URL based on IPv4",
+ "data": "http://223.255.255.254",
+ "valid": true
+ },
+ {
+ "description": "a valid URL with ftp scheme",
+ "data": "ftp://ftp.is.co.za/rfc/rfc1808.txt",
+ "valid": true
+ },
+ {
+ "description": "a valid URL for a simple text file",
+ "data": "http://www.ietf.org/rfc/rfc2396.txt",
+ "valid": true
+ },
+ {
+ "description": "a valid URL ",
+ "data": "ldap://[2001:db8::7]/c=GB?objectClass?one",
+ "valid": true
+ },
+ {
+ "description": "a valid mailto URI",
+ "data": "mailto:John.Doe@example.com",
+ "valid": true
+ },
+ {
+ "description": "a valid newsgroup URI",
+ "data": "news:comp.infosystems.www.servers.unix",
+ "valid": true
+ },
+ {
+ "description": "a valid tel URI",
+ "data": "tel:+1-816-555-1212",
+ "valid": true
+ },
+ {
+ "description": "a valid URN",
+ "data": "urn:oasis:names:specification:docbook:dtd:xml:4.1.2",
+ "valid": true
+ },
+ {
+ "description": "an invalid protocol-relative URI Reference",
+ "data": "//foo.bar/?baz=qux#quux",
+ "valid": false
+ },
+ {
+ "description": "an invalid relative URI Reference",
+ "data": "/abc",
+ "valid": false
+ },
+ {
+ "description": "an invalid URI",
+ "data": "\\\\WINDOWS\\fileshare",
+ "valid": false
+ },
+ {
+ "description": "an invalid URI though valid URI reference",
+ "data": "abc",
+ "valid": false
+ },
+ {
+ "description": "an invalid URI with spaces",
+ "data": "http:// shouldfail.com",
+ "valid": false
+ },
+ {
+ "description": "an invalid URI with spaces and missing scheme",
+ "data": ":// should fail",
+ "valid": false
+ }
+ ]
+ }
+]
diff --git a/json/tests/draft6/ref.json b/json/tests/draft6/ref.json
index 53f3a9e..6c29f22 100644
--- a/json/tests/draft6/ref.json
+++ b/json/tests/draft6/ref.json
@@ -75,11 +75,11 @@
{
"description": "escaped pointer ref",
"schema": {
- "tilda~field": {"type": "integer"},
+ "tilde~field": {"type": "integer"},
"slash/field": {"type": "integer"},
"percent%field": {"type": "integer"},
"properties": {
- "tilda": {"$ref": "#/tilda~0field"},
+ "tilde": {"$ref": "#/tilde~0field"},
"slash": {"$ref": "#/slash~1field"},
"percent": {"$ref": "#/percent%25field"}
}
@@ -91,8 +91,8 @@
"valid": false
},
{
- "description": "tilda invalid",
- "data": {"tilda": "aoeu"},
+ "description": "tilde invalid",
+ "data": {"tilde": "aoeu"},
"valid": false
},
{
@@ -106,8 +106,8 @@
"valid": true
},
{
- "description": "tilda valid",
- "data": {"tilda": 123},
+ "description": "tilde valid",
+ "data": {"tilde": 123},
"valid": true
},
{
diff --git a/json/tests/draft6/uniqueItems.json b/json/tests/draft6/uniqueItems.json
index ea256a0..fb1ddb5 100644
--- a/json/tests/draft6/uniqueItems.json
+++ b/json/tests/draft6/uniqueItems.json
@@ -75,14 +75,44 @@
"valid": true
},
{
+ "description": "[1] and [true] are unique",
+ "data": [[1], [true]],
+ "valid": true
+ },
+ {
+ "description": "[0] and [false] are unique",
+ "data": [[0], [false]],
+ "valid": true
+ },
+ {
+ "description": "nested [1] and [true] are unique",
+ "data": [[[1], "foo"], [[true], "foo"]],
+ "valid": true
+ },
+ {
+ "description": "nested [0] and [false] are unique",
+ "data": [[[0], "foo"], [[false], "foo"]],
+ "valid": true
+ },
+ {
"description": "unique heterogeneous types are valid",
- "data": [{}, [1], true, null, 1],
+ "data": [{}, [1], true, null, 1, "{}"],
"valid": true
},
{
"description": "non-unique heterogeneous types are invalid",
"data": [{}, [1], true, null, {}, 1],
"valid": false
+ },
+ {
+ "description": "different objects are unique",
+ "data": [{"a": 1, "b": 2}, {"a": 2, "b": 1}],
+ "valid": true
+ },
+ {
+ "description": "objects are non-unique despite key order",
+ "data": [{"a": 1, "b": 2}, {"b": 2, "a": 1}],
+ "valid": false
}
]
},