diff -pruN 3.0.2-4/CHANGELOG.rst 3.2.0-5/CHANGELOG.rst
--- 3.0.2-4/CHANGELOG.rst	2019-08-02 00:53:34.000000000 +0000
+++ 3.2.0-5/CHANGELOG.rst	2019-11-18 12:36:14.000000000 +0000
@@ -1,3 +1,21 @@
+v3.2.0
+------
+
+* Added a ``format_nongpl`` setuptools extra, which installs only ``format``
+  dependencies that are non-GPL (#619).
+
+v3.1.1
+------
+
+* Temporarily revert the switch to ``js-regex`` until #611 and #612 are
+  resolved.
+
+v3.1.0
+------
+
+* Regular expressions throughout schemas now respect the ECMA 262 dialect, as
+  recommended by the specification (#609).
+
 v3.0.2
 ------
 
diff -pruN 3.0.2-4/.coveragerc 3.2.0-5/.coveragerc
--- 3.0.2-4/.coveragerc	2019-08-02 00:53:34.000000000 +0000
+++ 3.2.0-5/.coveragerc	2019-11-18 12:36:14.000000000 +0000
@@ -2,4 +2,4 @@
 [run]
 branch = True
 source = jsonschema
-omit = */jsonschema/_reflect.py,*/jsonschema/__main__.py
+omit = */jsonschema/_reflect.py,*/jsonschema/__main__.py,*/jsonschema/benchmarks/*
diff -pruN 3.0.2-4/debian/changelog 3.2.0-5/debian/changelog
--- 3.0.2-4/debian/changelog	2019-12-09 10:31:53.000000000 +0000
+++ 3.2.0-5/debian/changelog	2021-12-30 09:22:42.000000000 +0000
@@ -1,3 +1,41 @@
+python-jsonschema (3.2.0-5) unstable; urgency=medium
+
+  * Fixed description (Closes: #970616).
+
+ -- Thomas Goirand <zigo@debian.org>  Thu, 30 Dec 2021 10:22:42 +0100
+
+python-jsonschema (3.2.0-4) unstable; urgency=medium
+
+  * Do not (build-)depends on python3-importlib-metadata (Closes: #966643).
+
+ -- Thomas Goirand <zigo@debian.org>  Tue, 28 Dec 2021 19:16:23 +0100
+
+python-jsonschema (3.2.0-3) unstable; urgency=medium
+
+  * Uploading to unstable.
+
+ -- Thomas Goirand <zigo@debian.org>  Fri, 08 May 2020 11:04:26 +0200
+
+python-jsonschema (3.2.0-2) experimental; urgency=medium
+
+  * d/control: Add {build}dependency python3-importlib-metadata
+
+ -- Michal Arbet <michal.arbet@ultimum.io>  Tue, 05 May 2020 11:43:45 +0200
+
+python-jsonschema (3.2.0-1) experimental; urgency=medium
+
+  * New upstream version
+  * d/copyright: Add me to copyright
+  * d/control:
+    - Add me to uploaders
+    - Bump standards to 4.5.0
+    - Breaks: python3-json-pointer (<< 1.14) (Closes: #949723)
+  * d/patches:
+    - Remove remove-TestBuiltinFormats-hack.patch
+    - Add fix-lintian-privacy-breach.patch
+
+ -- Michal Arbet <michal.arbet@ultimum.io>  Tue, 05 May 2020 09:21:24 +0200
+
 python-jsonschema (3.0.2-4) unstable; urgency=medium
 
   * Add missing dependencies for autopkgtests.
diff -pruN 3.0.2-4/debian/control 3.2.0-5/debian/control
--- 3.0.2-4/debian/control	2019-12-09 10:31:53.000000000 +0000
+++ 3.2.0-5/debian/control	2021-12-30 09:22:42.000000000 +0000
@@ -4,6 +4,7 @@ Priority: optional
 Maintainer: Debian OpenStack <team+openstack@tracker.debian.org>
 Uploaders:
  Thomas Goirand <zigo@debian.org>,
+ Michal Arbet <michal.arbet@ultimum.io>,
 Build-Depends:
  autopkgtest,
  debhelper-compat (= 12),
@@ -23,7 +24,7 @@ Build-Depends-Indep:
  python3-pytest,
  python3-six,
  python3-twisted,
-Standards-Version: 4.4.1
+Standards-Version: 4.5.0
 Vcs-Git: https://salsa.debian.org/openstack-team/third-party/python-jsonschema.git
 Vcs-Browser: https://salsa.debian.org/openstack-team/third-party/python-jsonschema
 Homepage: https://github.com/Julian/jsonschema
@@ -34,7 +35,7 @@ Architecture: all
 Depends:
  ${misc:Depends},
  ${sphinxdoc:Depends},
-Description: An(other) implementation of JSON Schema (Draft 3 and 4) - doc
+Description: An(other) implementation of JSON Schema (Draft 3, 4, 6, 7) - doc
  JSON Schema is a specification for a JSON-based format for defining
  the structure of JSON data. JSON Schema provides a contract for what
  JSON data is required for a given application and how it can be
@@ -55,12 +56,12 @@ Depends:
  ${python3:Depends},
 Suggests:
  python-jsonschema-doc,
-Description: An(other) implementation of JSON Schema (Draft 3 and 4) - Python 3.x
+Breaks:
+ python3-json-pointer (<< 1.14),
+Description: An(other) implementation of JSON Schema (Draft 3, 4, 6, 7)
  JSON Schema is a specification for a JSON-based format for defining
  the structure of JSON data. JSON Schema provides a contract for what
  JSON data is required for a given application and how it can be
  modified, much like what XML Schema provides for XML. JSON Schema is
  intended to provide validation, documentation, and interaction control
  of JSON data.
- .
- This package contains the Python 3.x module.
diff -pruN 3.0.2-4/debian/copyright 3.2.0-5/debian/copyright
--- 3.0.2-4/debian/copyright	2019-12-09 10:31:53.000000000 +0000
+++ 3.2.0-5/debian/copyright	2021-12-30 09:22:42.000000000 +0000
@@ -27,6 +27,7 @@ Files: debian/*
 Copyright: 2012 Chuck Short <zulcss@ubuntu.com>
 	2012, Ghe Rivero <ghe@debian.org>
 	2013, Thomas Goirand <zigo@debian.org>
+	2020, Michal Arbet <michal.arbet@ultimum.io>
 License: GPL-2+
  This package is free software; you can redistribute it and/or modify
  it under the terms of the GNU General Public License as published by
diff -pruN 3.0.2-4/debian/patches/fix-lintian-privacy-breach.patch 3.2.0-5/debian/patches/fix-lintian-privacy-breach.patch
--- 3.0.2-4/debian/patches/fix-lintian-privacy-breach.patch	1970-01-01 00:00:00.000000000 +0000
+++ 3.2.0-5/debian/patches/fix-lintian-privacy-breach.patch	2021-12-30 09:22:42.000000000 +0000
@@ -0,0 +1,62 @@
+Description: Remove external sources from doc.
+Author: Michal Arbet <michal.arbet@ultimum.io>
+Forwarded: not-needed
+Last-Update: 2020-05-05
+
+diff --git a/README.rst b/README.rst
+index ccfb55d..3f7d111 100644
+--- a/README.rst
++++ b/README.rst
+@@ -4,31 +4,6 @@ jsonschema
+ 
+ |PyPI| |Pythons| |Travis| |AppVeyor| |Codecov| |ReadTheDocs|
+ 
+-.. |PyPI| image:: https://img.shields.io/pypi/v/jsonschema.svg
+-   :alt: PyPI version
+-   :target: https://pypi.org/project/jsonschema/
+-
+-.. |Pythons| image:: https://img.shields.io/pypi/pyversions/jsonschema.svg
+-   :alt: Supported Python versions
+-   :target: https://pypi.org/project/jsonschema/
+-
+-.. |Travis| image:: https://travis-ci.com/Julian/jsonschema.svg?branch=master
+-   :alt: Travis build status
+-   :target: https://travis-ci.com/Julian/jsonschema
+-
+-.. |AppVeyor| image:: https://ci.appveyor.com/api/projects/status/adtt0aiaihy6muyn/branch/master?svg=true
+-   :alt: AppVeyor build status
+-   :target: https://ci.appveyor.com/project/Julian/jsonschema
+-
+-.. |Codecov| image:: https://codecov.io/gh/Julian/jsonschema/branch/master/graph/badge.svg
+-   :alt: Codecov Code coverage
+-   :target: https://codecov.io/gh/Julian/jsonschema
+-
+-.. |ReadTheDocs| image:: https://readthedocs.org/projects/python-jsonschema/badge/?version=stable&style=flat
+-   :alt: ReadTheDocs status
+-   :target: https://python-jsonschema.readthedocs.io/en/stable/
+-
+-
+ ``jsonschema`` is an implementation of `JSON Schema <https://json-schema.org>`_
+ for Python (supporting 2.7+ including Python 3).
+ 
+@@ -91,19 +66,7 @@ Installation
+ Demo
+ ----
+ 
+-Try ``jsonschema`` interactively in this online demo:
+-
+-.. image:: https://user-images.githubusercontent.com/1155573/56745335-8b158a00-6750-11e9-8776-83fa675939c4.png
+-    :target: https://notebooks.ai/demo/gh/Julian/jsonschema
+-    :alt: Open Live Demo
+-
+-
+-Online demo Notebook will look similar to this:
+-
+-
+-.. image:: https://user-images.githubusercontent.com/1155573/56820861-5c1c1880-6823-11e9-802a-ce01c5ec574f.gif
+-    :alt: Open Live Demo
+-    :width: 480 px
++Try ``jsonschema`` interactively in this online `demo <https://notebooks.ai/demo/gh/Julian/jsonschema>`_.
+ 
+ 
+ Release Notes
diff -pruN 3.0.2-4/debian/patches/remove-TestBuiltinFormats-hack.patch 3.2.0-5/debian/patches/remove-TestBuiltinFormats-hack.patch
--- 3.0.2-4/debian/patches/remove-TestBuiltinFormats-hack.patch	2019-12-09 10:31:53.000000000 +0000
+++ 3.2.0-5/debian/patches/remove-TestBuiltinFormats-hack.patch	1970-01-01 00:00:00.000000000 +0000
@@ -1,45 +0,0 @@
-Description: Remove TestBuiltinFormats hack
- What upstream does is a hack that has all the chances to fail. Let's remove
- this test.
-Author: Thomas Goirand <zigo@debian.org>
-Forwarded: no
-Last-Update: 2019-09-24
-
---- python-jsonschema-3.0.2.orig/jsonschema/tests/test_validators.py
-+++ python-jsonschema-3.0.2/jsonschema/tests/test_validators.py
-@@ -1348,35 +1348,6 @@ class TestDraft7Validator(ValidatorTestM
-     invalid = {"type": "integer"}, "foo"
- 
- 
--class TestBuiltinFormats(TestCase):
--    """
--    The built-in (specification-defined) formats do not raise type errors.
--
--    If an instance or value is not a string, it should be ignored.
--    """
--
--    # These tests belong upstream.
--    # See https://github.com/json-schema-org/JSON-Schema-Test-Suite/issues/246
--
--
--for Validator, checker in (
--    (validators.Draft3Validator, jsonschema.draft3_format_checker),
--    (validators.Draft4Validator, jsonschema.draft4_format_checker),
--    (validators.Draft6Validator, jsonschema.draft6_format_checker),
--    (validators.Draft7Validator, jsonschema.draft7_format_checker),
--):
--    for format in checker.checkers:
--        def test(self, checker=checker, format=format):
--            validator = Validator({"format": format}, format_checker=checker)
--            validator.validate(123)
--
--        name = "test_{}_{}_ignores_non_strings".format(
--            Validator.__name__, format,
--        )
--        test.__name__ = name
--        setattr(TestBuiltinFormats, name, test)
--
--
- class TestValidatorFor(SynchronousTestCase):
-     def test_draft_3(self):
-         schema = {"$schema": "http://json-schema.org/draft-03/schema"}
diff -pruN 3.0.2-4/debian/patches/series 3.2.0-5/debian/patches/series
--- 3.0.2-4/debian/patches/series	2019-12-09 10:31:53.000000000 +0000
+++ 3.2.0-5/debian/patches/series	2021-12-30 09:22:42.000000000 +0000
@@ -1,2 +1,2 @@
-remove-TestBuiltinFormats-hack.patch
 remove-sphinxcontrib.spelling-from-doc-conf.py.patch
+fix-lintian-privacy-breach.patch
diff -pruN 3.0.2-4/DEMO.ipynb 3.2.0-5/DEMO.ipynb
--- 3.0.2-4/DEMO.ipynb	2019-08-02 00:53:34.000000000 +0000
+++ 3.2.0-5/DEMO.ipynb	2019-11-18 12:36:14.000000000 +0000
@@ -54,17 +54,31 @@
    "outputs": [],
    "source": [
     "# If no exception is raised by validate(), the instance is valid.\n",
-    "validate({\"name\" : \"Eggs\", \"price\" : 34.99}, schema)"
+    "validate(instance={\"name\" : \"Eggs\", \"price\" : 34.99}, schema=schema)"
    ]
   },
   {
    "cell_type": "code",
    "execution_count": null,
    "metadata": {},
-   "outputs": [],
+   "outputs": [
+    {
+     "ename": "ValidationError",
+     "evalue": "'Invalid' is not of type 'number'\n\nFailed validating 'type' in schema['properties']['price']:\n    {'type': 'number'}\n\nOn instance['price']:\n    'Invalid'",
+     "output_type": "error",
+     "traceback": [
+      "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m",
+      "\u001b[0;31mValidationError\u001b[0m                           Traceback (most recent call last)",
+      "\u001b[0;32m<ipython-input-5-e1e543273d1f>\u001b[0m in \u001b[0;36m<module>\u001b[0;34m\u001b[0m\n\u001b[1;32m      1\u001b[0m validate(\n\u001b[1;32m      2\u001b[0m     \u001b[0minstance\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;34m{\u001b[0m\u001b[0;34m\"name\"\u001b[0m \u001b[0;34m:\u001b[0m \u001b[0;34m\"Eggs\"\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m\"price\"\u001b[0m \u001b[0;34m:\u001b[0m \u001b[0;34m\"Invalid\"\u001b[0m\u001b[0;34m}\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m----> 3\u001b[0;31m     \u001b[0mschema\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mschema\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m      4\u001b[0m )\n",
+      "\u001b[0;32m~/Development/jsonschema/jsonschema/validators.py\u001b[0m in \u001b[0;36mvalidate\u001b[0;34m(instance, schema, cls, *args, **kwargs)\u001b[0m\n\u001b[1;32m    899\u001b[0m     \u001b[0merror\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mexceptions\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mbest_match\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mvalidator\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0miter_errors\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0minstance\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m    900\u001b[0m     \u001b[0;32mif\u001b[0m \u001b[0merror\u001b[0m \u001b[0;32mis\u001b[0m \u001b[0;32mnot\u001b[0m \u001b[0;32mNone\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 901\u001b[0;31m         \u001b[0;32mraise\u001b[0m \u001b[0merror\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m    902\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m    903\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n",
+      "\u001b[0;31mValidationError\u001b[0m: 'Invalid' is not of type 'number'\n\nFailed validating 'type' in schema['properties']['price']:\n    {'type': 'number'}\n\nOn instance['price']:\n    'Invalid'"
+     ]
+    }
+   ],
    "source": [
     "validate(\n",
-    "    {\"name\" : \"Eggs\", \"price\" : \"Invalid\"}, schema\n",
+    "    instance={\"name\" : \"Eggs\", \"price\" : \"Invalid\"},\n",
+    "    schema=schema,\n",
     ")"
    ]
   },
@@ -145,9 +159,9 @@
    "name": "python",
    "nbconvert_exporter": "python",
    "pygments_lexer": "ipython3",
-   "version": "3.6.5"
+   "version": "3.7.4"
   }
  },
  "nbformat": 4,
- "nbformat_minor": 2
+ "nbformat_minor": 4
 }
diff -pruN 3.0.2-4/docs/conf.py 3.2.0-5/docs/conf.py
--- 3.0.2-4/docs/conf.py	2019-08-02 00:53:34.000000000 +0000
+++ 3.2.0-5/docs/conf.py	2019-11-18 12:36:14.000000000 +0000
@@ -4,6 +4,7 @@
 
 from textwrap import dedent
 import os
+import re
 import sys
 
 import jsonschema
@@ -238,6 +239,15 @@ texinfo_documents = [
 # How to display URL addresses: "footnote", "no", or "inline".
 # texinfo_show_urls = "footnote"
 
+# -- Options for the linkcheck builder ------------------------------------
+
+
+def entire_domain(host):
+    return r"http.?://" + re.escape(host) + r"($|/.*)"
+
+
+linkcheck_ignore = [entire_domain("codecov.io")]
+
 # -- Options for sphinxcontrib-spelling -----------------------------------
 
 spelling_word_list_filename = "spelling-wordlist.txt"
diff -pruN 3.0.2-4/docs/errors.rst 3.2.0-5/docs/errors.rst
--- 3.0.2-4/docs/errors.rst	2019-08-02 00:53:34.000000000 +0000
+++ 3.2.0-5/docs/errors.rst	2019-11-18 12:36:14.000000000 +0000
@@ -9,8 +9,6 @@ raised or returned, depending on which m
 
 .. autoexception:: ValidationError
 
-    The instance didn't properly validate under the provided schema.
-
     The information carried by an error roughly breaks down into:
 
     ===============  =================  ========================
@@ -119,8 +117,6 @@ raised.
 
 .. autoexception:: SchemaError
 
-    The provided schema is malformed.
-
     The same attributes are present as for `ValidationError`\s.
 
 
@@ -360,37 +356,6 @@ to guess the most relevant error in a gi
 
 .. autofunction:: best_match
 
-    Try to find an error that appears to be the best match among given errors.
-
-    In general, errors that are higher up in the instance (i.e. for which
-    `ValidationError.path` is shorter) are considered better matches,
-    since they indicate "more" is wrong with the instance.
-
-    If the resulting match is either :validator:`oneOf` or :validator:`anyOf`,
-    the *opposite* assumption is made -- i.e. the deepest error is picked,
-    since these validators only need to match once, and any other errors may
-    not be relevant.
-
-    :argument collections.Iterable errors: the errors to select from. Do not
-        provide a mixture of errors from different validation attempts
-        (i.e. from different instances or schemas), since it won't
-        produce sensical output.
-    :argument callable key: the key to use when sorting errors. See
-        `relevance` and transitively `by_relevance` for more
-        details (the default is to sort with the defaults of that function).
-        Changing the default is only useful if you want to change the function
-        that rates errors but still want the error context descent done by
-        this function.
-
-    Returns:
-
-        the best matching error, or ``None`` if the iterable was empty
-
-    .. note::
-
-        This function is a heuristic. Its return value may change for a given
-        set of inputs from version to version if better heuristics are added.
-
 
 .. function:: relevance(validation_error)
 
@@ -432,14 +397,3 @@ to guess the most relevant error in a gi
 
 
 .. autofunction:: by_relevance
-
-    Create a key function that can be used to sort errors by relevance.
-
-    :argument set weak: a collection of validator names to consider to
-        be "weak". If there are two errors at the same level of the
-        instance and one is in the set of weak validator names, the
-        other error will take priority. By default, :validator:`anyOf`
-        and :validator:`oneOf` are considered weak validators and will
-        be superseded by other same-level validation errors.
-    :argument set strong: a collection of validator names to consider to
-        be "strong"
diff -pruN 3.0.2-4/docs/faq.rst 3.2.0-5/docs/faq.rst
--- 3.0.2-4/docs/faq.rst	2019-08-02 00:53:34.000000000 +0000
+++ 3.2.0-5/docs/faq.rst	2019-11-18 12:36:14.000000000 +0000
@@ -9,19 +9,21 @@ Why doesn't my schema's default property
 The basic answer is that the specification does not require that
 :validator:`default` actually do anything.
 
-For an inkling as to *why* it doesn't actually do anything, consider that none
-of the other validators modify the instance either. More importantly, having
-:validator:`default` modify the instance can produce quite peculiar things.
-It's perfectly valid (and perhaps even useful) to have a default that is not
-valid under the schema it lives in! So an instance modified by the default
-would pass validation the first time, but fail the second!
-
-Still, filling in defaults is a thing that is useful. `jsonschema` allows
-you to `define your own validator classes and callables <creating>`, so you can
-easily create an `jsonschema.IValidator` that does do default setting. Here's
-some code to get you started. (In this code, we add the default properties to
-each object *before* the properties are validated, so the default values
-themselves will need to be valid under the schema.)
+For an inkling as to *why* it doesn't actually do anything, consider
+that none of the other validators modify the instance either. More
+importantly, having :validator:`default` modify the instance can produce
+quite peculiar things. It's perfectly valid (and perhaps even useful)
+to have a default that is not valid under the schema it lives in! So an
+instance modified by the default would pass validation the first time,
+but fail the second!
+
+Still, filling in defaults is a thing that is useful. `jsonschema`
+allows you to `define your own validator classes and callables
+<creating>`, so you can easily create an `jsonschema.IValidator` that
+does do default setting. Here's some code to get you started. (In
+this code, we add the default properties to each object *before* the
+properties are validated, so the default values themselves will need to
+be valid under the schema.)
 
     .. code-block:: python
 
@@ -59,8 +61,8 @@ themselves will need to be valid under t
 
 
 See the above-linked document for more info on how this works, but
-basically, it just extends the :validator:`properties` validator on a
-`jsonschema.Draft7Validator` to then go ahead and update all the
+basically, it just extends the :validator:`properties` validator on
+a `jsonschema.Draft7Validator` to then go ahead and update all the
 defaults.
 
 .. note::
@@ -100,8 +102,9 @@ defaults.
         DefaultValidatingDraft7Validator(schema).validate(obj)
         assert obj == {'outer-object': {'inner-object': 'INNER-DEFAULT'}}
 
-    ...but if you don't provide a default value for your object,
-    then it won't be instantiated at all, much less populated with default properties.
+    ...but if you don't provide a default value for your object, then
+    it won't be instantiated at all, much less populated with default
+    properties.
 
     .. code-block:: python
 
@@ -114,37 +117,45 @@ defaults.
 How do jsonschema version numbers work?
 ---------------------------------------
 
-``jsonschema`` tries to follow the `Semantic Versioning <https://semver.org/>`_
-specification.
+``jsonschema`` tries to follow the `Semantic Versioning
+<https://semver.org/>`_ specification.
 
-This means broadly that no backwards-incompatible changes should be made in
-minor releases (and certainly not in dot releases).
+This means broadly that no backwards-incompatible changes should be made
+in minor releases (and certainly not in dot releases).
 
-The full picture requires defining what constitutes a backwards-incompatible
-change.
+The full picture requires defining what constitutes a
+backwards-incompatible change.
 
-The following are simple examples of things considered public API, and
-therefore should *not* be changed without bumping a major version number:
+The following are simple examples of things considered public API,
+and therefore should *not* be changed without bumping a major version
+number:
 
-    * module names and contents, when not marked private by Python convention
-      (a single leading underscore)
+    * module names and contents, when not marked private by Python
+      convention (a single leading underscore)
 
     * function and object signature (parameter order and name)
 
-The following are *not* considered public API and may change without notice:
+The following are *not* considered public API and may change without
+notice:
 
     * the exact wording and contents of error messages; typical
       reasons to do this seem to involve unit tests. API users are
       encouraged to use the extensive introspection provided in
-      `jsonschema.exceptions.ValidationError`\s instead to make
-      meaningful assertions about what failed.
+      `jsonschema.exceptions.ValidationError`\s instead to make meaningful
+      assertions about what failed.
 
     * the order in which validation errors are returned or raised
 
-    * the ``compat.py`` module, which is for internal compatibility use
+    * the contents of the ``jsonschema.tests`` package
+
+    * the contents of the ``jsonschema.benchmarks`` package
+
+    * the ``jsonschema.compat`` module, which is for internal
+      compatibility use
 
     * anything marked private
 
-With the exception of the last two of those, flippant changes are avoided, but
-changes can and will be made if there is improvement to be had. Feel free to
-open an issue ticket if there is a specific issue or question worth raising.
+With the exception of the last two of those, flippant changes are
+avoided, but changes can and will be made if there is improvement to be
+had. Feel free to open an issue ticket if there is a specific issue or
+question worth raising.
diff -pruN 3.0.2-4/docs/index.rst 3.2.0-5/docs/index.rst
--- 3.0.2-4/docs/index.rst	2019-08-02 00:53:34.000000000 +0000
+++ 3.2.0-5/docs/index.rst	2019-11-18 12:36:14.000000000 +0000
@@ -1,43 +1,9 @@
-==========
-jsonschema
-==========
-
-
 .. module:: jsonschema
+.. include:: ../README.rst
 
 
-``jsonschema`` is an implementation of `JSON Schema <https://json-schema.org>`_
-for Python (supporting 2.7+ including Python 3).
-
-.. code-block:: python
-
-    >>> from jsonschema import validate
-
-    >>> # A sample schema, like what we'd get from json.load()
-    >>> schema = {
-    ...     "type" : "object",
-    ...     "properties" : {
-    ...         "price" : {"type" : "number"},
-    ...         "name" : {"type" : "string"},
-    ...     },
-    ... }
-
-    >>> # If no exception is raised by validate(), the instance is valid.
-    >>> validate(instance={"name" : "Eggs", "price" : 34.99}, schema=schema)
-
-    >>> validate(
-    ...     instance={"name" : "Eggs", "price" : "Invalid"}, schema=schema,
-    ... )                                   # doctest: +IGNORE_EXCEPTION_DETAIL
-    Traceback (most recent call last):
-        ...
-    ValidationError: 'Invalid' is not of type 'number'
-
-
-You can find further information (installation instructions, mailing list)
-as well as the source code and issue tracker on our
-`GitHub page <https://github.com/Julian/jsonschema/>`__.
-
-Contents:
+Contents
+--------
 
 .. toctree::
     :maxdepth: 2
diff -pruN 3.0.2-4/docs/jsonschema_role.py 3.2.0-5/docs/jsonschema_role.py
--- 3.0.2-4/docs/jsonschema_role.py	2019-08-02 00:53:34.000000000 +0000
+++ 3.2.0-5/docs/jsonschema_role.py	2019-11-18 12:36:14.000000000 +0000
@@ -12,7 +12,8 @@ import certifi
 from lxml import html
 
 
-VALIDATION_SPEC = "https://json-schema.org/draft-04/json-schema-validation.html"
+__version__ = "1.0.0"
+VALIDATION_SPEC = "https://json-schema.org/draft-07/json-schema-validation.html"
 
 
 def setup(app):
@@ -24,7 +25,6 @@ def setup(app):
         app (sphinx.application.Sphinx):
 
             the Sphinx application context
-
     """
 
     app.add_config_value("cache_path", "_cache", "")
@@ -39,6 +39,8 @@ def setup(app):
     spec = fetch_or_load(path)
     app.add_role("validator", docutils_sucks(spec))
 
+    return dict(version=__version__, parallel_read_safe=True)
+
 
 def fetch_or_load(spec_path):
     """
@@ -49,7 +51,6 @@ def fetch_or_load(spec_path):
         cache_path:
 
             the path to a cached specification
-
     """
 
     headers = {}
@@ -81,12 +82,11 @@ def docutils_sucks(spec):
 
     It doesn't allow using a class because it does stupid stuff like try to set
     attributes on the callable object rather than just keeping a dict.
-
     """
 
     base_url = VALIDATION_SPEC
-    ref_url = "https://json-schema.org/draft-04/json-schema-core.html#rfc.section.4.1"
-    schema_url = "https://json-schema.org/draft-04/json-schema-core.html#rfc.section.6"
+    ref_url = "https://json-schema.org/draft-07/json-schema-core.html#rfc.section.8.3"
+    schema_url = "https://json-schema.org/draft-07/json-schema-core.html#rfc.section.7"
 
     def validator(name, raw_text, text, lineno, inliner):
         """
@@ -120,7 +120,6 @@ def docutils_sucks(spec):
 
                 a 2-tuple of nodes to insert into the document and an
                 iterable of system messages, both possibly empty
-
         """
 
         if text == "$ref":
diff -pruN 3.0.2-4/docs/requirements.in 3.2.0-5/docs/requirements.in
--- 3.0.2-4/docs/requirements.in	1970-01-01 00:00:00.000000000 +0000
+++ 3.2.0-5/docs/requirements.in	2019-11-18 12:36:14.000000000 +0000
@@ -0,0 +1,3 @@
+lxml
+sphinx
+sphinxcontrib-spelling
diff -pruN 3.0.2-4/docs/requirements.txt 3.2.0-5/docs/requirements.txt
--- 3.0.2-4/docs/requirements.txt	2019-08-02 00:53:34.000000000 +0000
+++ 3.2.0-5/docs/requirements.txt	2019-11-18 12:36:14.000000000 +0000
@@ -1,4 +1,36 @@
-certifi
-lxml
-sphinx==1.6.7
-sphinxcontrib-spelling
+#
+# This file is autogenerated by pip-compile
+# To update, run:
+#
+#    pip-compile requirements.in
+#
+alabaster==0.7.12         # via sphinx
+babel==2.7.0              # via sphinx
+certifi==2019.9.11        # via requests
+chardet==3.0.4            # via requests
+docutils==0.15.2          # via sphinx
+idna==2.8                 # via requests
+imagesize==1.1.0          # via sphinx
+jinja2==2.10.3            # via sphinx
+lxml==4.4.1
+markupsafe==1.1.1         # via jinja2
+packaging==19.2           # via sphinx
+pyenchant==2.0.0          # via sphinxcontrib-spelling
+pygments==2.4.2           # via sphinx
+pyparsing==2.4.4          # via packaging
+pytz==2019.3              # via babel
+requests==2.22.0          # via sphinx
+six==1.13.0               # via packaging, sphinxcontrib-spelling
+snowballstemmer==2.0.0    # via sphinx
+sphinx==2.2.1
+sphinxcontrib-applehelp==1.0.1  # via sphinx
+sphinxcontrib-devhelp==1.0.1  # via sphinx
+sphinxcontrib-htmlhelp==1.0.2  # via sphinx
+sphinxcontrib-jsmath==1.0.1  # via sphinx
+sphinxcontrib-qthelp==1.0.2  # via sphinx
+sphinxcontrib-serializinghtml==1.1.3  # via sphinx
+sphinxcontrib-spelling==4.3.0
+urllib3==1.25.6           # via requests
+
+# The following packages are considered to be unsafe in a requirements file:
+# setuptools==41.6.0        # via sphinx
diff -pruN 3.0.2-4/docs/spelling-wordlist.txt 3.2.0-5/docs/spelling-wordlist.txt
--- 3.0.2-4/docs/spelling-wordlist.txt	2019-08-02 00:53:34.000000000 +0000
+++ 3.2.0-5/docs/spelling-wordlist.txt	2019-11-18 12:36:14.000000000 +0000
@@ -8,13 +8,18 @@ ValidationError
 th
 callables
 deque
+dereferences
 hostname
 implementers
 indices
 # ipv4/6, sigh...
 ipv
 iterable
+iteratively
 jsonschema
+majorly
+metaschema
+online
 pre
 programmatically
 recurses
@@ -28,3 +33,10 @@ validator
 validators
 versioned
 schemas
+
+Zac
+HD
+
+Berman
+Freenode
+GPL
diff -pruN 3.0.2-4/docs/validate.rst 3.2.0-5/docs/validate.rst
--- 3.0.2-4/docs/validate.rst	2019-08-02 00:53:34.000000000 +0000
+++ 3.2.0-5/docs/validate.rst	2019-11-18 12:36:14.000000000 +0000
@@ -321,14 +321,26 @@ to validate. Their names can be viewed b
 `FormatChecker.checkers` attribute. Certain checkers will only be
 available if an appropriate package is available for use. The easiest way to
 ensure you have what is needed is to install ``jsonschema`` using the
-``format`` setuptools extra -- i.e.
+``format`` or ``format_nongpl`` setuptools extra -- i.e.
 
 .. code-block:: sh
 
    $ pip install jsonschema[format]
 
-which will install all of the below dependencies for all formats. The
-more specific list of available checkers, along with their requirement
+which will install all of the below dependencies for all formats.
+
+Or if you want to install MIT-license compatible dependencies only:
+
+.. code-block:: sh
+
+   $ pip install jsonschema[format_nongpl]
+
+The non-GPL extra is intended to not install any direct dependencies
+that are GPL (but that of course end-users should do their own verification).
+At the moment, it supports all the available checkers except for ``iri`` and
+``iri-reference``.
+
+The more specific list of available checkers, along with their requirement
 (if any,) are listed below.
 
 .. note::
@@ -342,7 +354,7 @@ Checker                    Notes
 =========================  ====================
 ``color``                  requires webcolors_
 ``date``
-``date-time``              requires strict-rfc3339_
+``date-time``              requires strict-rfc3339_ or rfc3339-validator_
 ``email``
 ``hostname``
 ``idn-hostname``           requires idna_
@@ -353,9 +365,9 @@ Checker                    Notes
 ``json-pointer``           requires jsonpointer_
 ``regex``
 ``relative-json-pointer``  requires jsonpointer_
-``time``                   requires strict-rfc3339_
-``uri``                    requires rfc3987_
-``uri-reference``          requires rfc3987_
+``time``                   requires strict-rfc3339_ or rfc3339-validator_
+``uri``                    requires rfc3987_ or rfc3986-validator_
+``uri-reference``          requires rfc3987_ or rfc3986-validator_
 =========================  ====================
 
 
@@ -365,7 +377,8 @@ Checker                    Notes
 .. _rfc5322: https://tools.ietf.org/html/rfc5322#section-3.4.1
 .. _strict-rfc3339: https://pypi.org/pypi/strict-rfc3339/
 .. _webcolors: https://pypi.org/pypi/webcolors/
-
+.. _rfc3339-validator: https://pypi.org/project/rfc3339-validator/
+.. _rfc3986-validator: https://pypi.org/project/rfc3986-validator/
 
 .. note::
 
diff -pruN 3.0.2-4/.github/FUNDING.yml 3.2.0-5/.github/FUNDING.yml
--- 3.0.2-4/.github/FUNDING.yml	2019-08-02 00:53:34.000000000 +0000
+++ 3.2.0-5/.github/FUNDING.yml	2019-11-18 12:36:14.000000000 +0000
@@ -1,3 +1,5 @@
 # These are supported funding model platforms
 
+github: "Julian"
+patreon: "JulianWasTaken"
 tidelift: "pypi/jsonschema"
diff -pruN 3.0.2-4/.github/SECURITY.md 3.2.0-5/.github/SECURITY.md
--- 3.0.2-4/.github/SECURITY.md	1970-01-01 00:00:00.000000000 +0000
+++ 3.2.0-5/.github/SECURITY.md	2019-11-18 12:36:14.000000000 +0000
@@ -0,0 +1,21 @@
+# Security Policy
+
+## Supported Versions
+
+In general, only the latest released ``jsonschema`` version is supported
+and will receive updates.
+
+## Reporting a Vulnerability
+
+To report a security vulnerability, please send an email to
+``Julian+Security@GrayVines.com`` with subject line ``SECURITY
+(jsonschema)``.
+
+I will do my best to respond within 48 hours to acknowledge the message
+and discuss further steps.
+
+If the vulnerability is accepted, an advisory will be sent out via
+GitHub's security advisory functionality.
+
+For non-sensitive discussion related to this policy itself, feel free to
+open an issue on the issue tracker.
diff -pruN 3.0.2-4/json/bin/jsonschema_suite 3.2.0-5/json/bin/jsonschema_suite
--- 3.0.2-4/json/bin/jsonschema_suite	2019-08-02 00:53:34.000000000 +0000
+++ 3.2.0-5/json/bin/jsonschema_suite	2019-11-18 12:36:14.000000000 +0000
@@ -1,4 +1,4 @@
-#! /usr/bin/env python
+#! /usr/bin/env python3
 from __future__ import print_function
 from pprint import pformat
 import argparse
@@ -99,11 +99,13 @@ class SanityTests(unittest.TestCase):
 
     def test_all_descriptions_have_reasonable_length(self):
         for case in cases(self.test_files):
-            descript = case["description"]
+            description = case["description"]
             self.assertLess(
-                len(descript),
-                60,
-                "%r is too long! (keep it to less than 60 chars)" % (descript,)
+                len(description),
+                70,
+                "%r is too long! (keep it to less than 70 chars)" % (
+                    description,
+                ),
             )
 
     def test_all_descriptions_are_unique(self):
@@ -149,7 +151,7 @@ class SanityTests(unittest.TestCase):
 
         expected = {
             os.path.join(REMOTES_DIR, path): contents
-            for path, contents in REMOTES.iteritems()
+            for path, contents in REMOTES.items()
         }
 
         missing = set(files).symmetric_difference(expected)
@@ -217,8 +219,9 @@ def main(arguments):
                 if e.errno != errno.EEXIST:
                     raise
 
-            with open(filepath, "wb") as out_file:
+            with open(filepath, "w") as out_file:
                 json.dump(schema, out_file, indent=4, sort_keys=True)
+                out_file.write("\n")
     elif arguments.command == "serve":
         try:
             from flask import Flask, jsonify
diff -pruN 3.0.2-4/json/README.md 3.2.0-5/json/README.md
--- 3.0.2-4/json/README.md	2019-08-02 00:53:34.000000000 +0000
+++ 3.2.0-5/json/README.md	2019-11-18 12:36:14.000000000 +0000
@@ -67,8 +67,8 @@ This suite is being used by:
 
 ### Clojure ###
 
+* [jinx](https://github.com/juxt/jinx)
 * [json-schema](https://github.com/tatut/json-schema)
-* [JSON Schema for Clojure(Script) (JUXT)](https://github.com/juxt/json-schema)
 
 ### Coffeescript ###
 
@@ -80,7 +80,7 @@ This suite is being used by:
 
 ### Dart ###
 
-* [json_schema](https://github.com/patefacio/json_schema) 
+* [json_schema](https://github.com/patefacio/json_schema)
 
 ### Elixir ###
 
@@ -92,7 +92,7 @@ This suite is being used by:
 
 ### Go ###
 
-* [gojsonschema](https://github.com/sigu-399/gojsonschema) 
+* [gojsonschema](https://github.com/sigu-399/gojsonschema)
 * [validate-json](https://github.com/cesanta/validate-json)
 
 ### Haskell ###
@@ -127,11 +127,12 @@ This suite is being used by:
 
 ### Node.js ###
 
-The JSON Schema Test Suite is also available as an
-[npm](https://www.npmjs.com/package/json-schema-test-suite) package.
-Node-specific support is maintained on the [node branch](https://github.com/json-schema-org/JSON-Schema-Test-Suite/tree/node).
-See [NODE-README.md](https://github.com/json-schema-org/JSON-Schema-Test-Suite/blob/node/NODE-README.md)
-for more information.
+For node.js developers, the suite is also available as an
+[npm](https://www.npmjs.com/package/@json-schema-org/tests) package.
+
+Node-specific support is maintained in a [separate
+repository](https://github.com/json-schema-org/json-schema-test-suite-npm)
+which also welcomes your contributions!
 
 ### .NET ###
 
diff -pruN 3.0.2-4/json/remotes/folder/folderInteger.json 3.2.0-5/json/remotes/folder/folderInteger.json
--- 3.0.2-4/json/remotes/folder/folderInteger.json	2019-08-02 00:53:34.000000000 +0000
+++ 3.2.0-5/json/remotes/folder/folderInteger.json	2019-11-18 12:36:14.000000000 +0000
@@ -1,3 +1,3 @@
 {
     "type": "integer"
-}
\ No newline at end of file
+}
diff -pruN 3.0.2-4/json/remotes/integer.json 3.2.0-5/json/remotes/integer.json
--- 3.0.2-4/json/remotes/integer.json	2019-08-02 00:53:34.000000000 +0000
+++ 3.2.0-5/json/remotes/integer.json	2019-11-18 12:36:14.000000000 +0000
@@ -1,3 +1,3 @@
 {
     "type": "integer"
-}
\ No newline at end of file
+}
diff -pruN 3.0.2-4/json/remotes/name-defs.json 3.2.0-5/json/remotes/name-defs.json
--- 3.0.2-4/json/remotes/name-defs.json	2019-08-02 00:53:34.000000000 +0000
+++ 3.2.0-5/json/remotes/name-defs.json	2019-11-18 12:36:14.000000000 +0000
@@ -2,8 +2,12 @@
     "$defs": {
         "orNull": {
             "anyOf": [
-                {"type": "null"},
-                {"$ref": "#"}
+                {
+                    "type": "null"
+                },
+                {
+                    "$ref": "#"
+                }
             ]
         }
     },
diff -pruN 3.0.2-4/json/remotes/name.json 3.2.0-5/json/remotes/name.json
--- 3.0.2-4/json/remotes/name.json	2019-08-02 00:53:34.000000000 +0000
+++ 3.2.0-5/json/remotes/name.json	2019-11-18 12:36:14.000000000 +0000
@@ -2,8 +2,12 @@
     "definitions": {
         "orNull": {
             "anyOf": [
-                {"type": "null"},
-                {"$ref": "#"}
+                {
+                    "type": "null"
+                },
+                {
+                    "$ref": "#"
+                }
             ]
         }
     },
diff -pruN 3.0.2-4/json/remotes/subSchemas.json 3.2.0-5/json/remotes/subSchemas.json
--- 3.0.2-4/json/remotes/subSchemas.json	2019-08-02 00:53:34.000000000 +0000
+++ 3.2.0-5/json/remotes/subSchemas.json	2019-11-18 12:36:14.000000000 +0000
@@ -1,8 +1,8 @@
 {
     "integer": {
         "type": "integer"
-    }, 
+    },
     "refToInteger": {
         "$ref": "#/integer"
     }
-}
\ No newline at end of file
+}
diff -pruN 3.0.2-4/json/tests/draft2019-06/additionalItems.json 3.2.0-5/json/tests/draft2019-06/additionalItems.json
--- 3.0.2-4/json/tests/draft2019-06/additionalItems.json	2019-08-02 00:53:34.000000000 +0000
+++ 3.2.0-5/json/tests/draft2019-06/additionalItems.json	1970-01-01 00:00:00.000000000 +0000
@@ -1,87 +0,0 @@
-[
-    {
-        "description": "additionalItems as schema",
-        "schema": {
-            "items": [{}],
-            "additionalItems": {"type": "integer"}
-        },
-        "tests": [
-            {
-                "description": "additional items match schema",
-                "data": [ null, 2, 3, 4 ],
-                "valid": true
-            },
-            {
-                "description": "additional items do not match schema",
-                "data": [ null, 2, 3, "foo" ],
-                "valid": false
-            }
-        ]
-    },
-    {
-        "description": "items is schema, no additionalItems",
-        "schema": {
-            "items": {},
-            "additionalItems": false
-        },
-        "tests": [
-            {
-                "description": "all items match schema",
-                "data": [ 1, 2, 3, 4, 5 ],
-                "valid": true
-            }
-        ]
-    },
-    {
-        "description": "array of items with no additionalItems",
-        "schema": {
-            "items": [{}, {}, {}],
-            "additionalItems": false
-        },
-        "tests": [
-            {
-                "description": "fewer number of items present",
-                "data": [ 1, 2 ],
-                "valid": true
-            },
-            {
-                "description": "equal number of items present",
-                "data": [ 1, 2, 3 ],
-                "valid": true
-            },
-            {
-                "description": "additional items are not permitted",
-                "data": [ 1, 2, 3, 4 ],
-                "valid": false
-            }
-        ]
-    },
-    {
-        "description": "additionalItems as false without items",
-        "schema": {"additionalItems": false},
-        "tests": [
-            {
-                "description":
-                    "items defaults to empty schema so everything is valid",
-                "data": [ 1, 2, 3, 4, 5 ],
-                "valid": true
-            },
-            {
-                "description": "ignores non-arrays",
-                "data": {"foo" : "bar"},
-                "valid": true
-            }
-        ]
-    },
-    {
-        "description": "additionalItems are allowed by default",
-        "schema": {"items": [{"type": "integer"}]},
-        "tests": [
-            {
-                "description": "only the first item is validated",
-                "data": [1, "foo", false],
-                "valid": true
-            }
-        ]
-    }
-]
diff -pruN 3.0.2-4/json/tests/draft2019-06/additionalProperties.json 3.2.0-5/json/tests/draft2019-06/additionalProperties.json
--- 3.0.2-4/json/tests/draft2019-06/additionalProperties.json	2019-08-02 00:53:34.000000000 +0000
+++ 3.2.0-5/json/tests/draft2019-06/additionalProperties.json	1970-01-01 00:00:00.000000000 +0000
@@ -1,133 +0,0 @@
-[
-    {
-        "description":
-            "additionalProperties being false does not allow other properties",
-        "schema": {
-            "properties": {"foo": {}, "bar": {}},
-            "patternProperties": { "^v": {} },
-            "additionalProperties": false
-        },
-        "tests": [
-            {
-                "description": "no additional properties is valid",
-                "data": {"foo": 1},
-                "valid": true
-            },
-            {
-                "description": "an additional property is invalid",
-                "data": {"foo" : 1, "bar" : 2, "quux" : "boom"},
-                "valid": false
-            },
-            {
-                "description": "ignores arrays",
-                "data": [1, 2, 3],
-                "valid": true
-            },
-            {
-                "description": "ignores strings",
-                "data": "foobarbaz",
-                "valid": true
-            },
-            {
-                "description": "ignores other non-objects",
-                "data": 12,
-                "valid": true
-            },
-            {
-                "description": "patternProperties are not additional properties",
-                "data": {"foo":1, "vroom": 2},
-                "valid": true
-            }
-        ]
-    },
-    {
-        "description": "non-ASCII pattern with additionalProperties",
-        "schema": {
-            "patternProperties": {"^á": {}},
-            "additionalProperties": false
-        },
-        "tests": [
-            {
-                "description": "matching the pattern is valid",
-                "data": {"ármányos": 2},
-                "valid": true
-            },
-            {
-                "description": "not matching the pattern is invalid",
-                "data": {"élmény": 2},
-                "valid": false
-            }
-        ]
-    },
-    {
-        "description":
-            "additionalProperties allows a schema which should validate",
-        "schema": {
-            "properties": {"foo": {}, "bar": {}},
-            "additionalProperties": {"type": "boolean"}
-        },
-        "tests": [
-            {
-                "description": "no additional properties is valid",
-                "data": {"foo": 1},
-                "valid": true
-            },
-            {
-                "description": "an additional valid property is valid",
-                "data": {"foo" : 1, "bar" : 2, "quux" : true},
-                "valid": true
-            },
-            {
-                "description": "an additional invalid property is invalid",
-                "data": {"foo" : 1, "bar" : 2, "quux" : 12},
-                "valid": false
-            }
-        ]
-    },
-    {
-        "description":
-            "additionalProperties can exist by itself",
-        "schema": {
-            "additionalProperties": {"type": "boolean"}
-        },
-        "tests": [
-            {
-                "description": "an additional valid property is valid",
-                "data": {"foo" : true},
-                "valid": true
-            },
-            {
-                "description": "an additional invalid property is invalid",
-                "data": {"foo" : 1},
-                "valid": false
-            }
-        ]
-    },
-    {
-        "description": "additionalProperties are allowed by default",
-        "schema": {"properties": {"foo": {}, "bar": {}}},
-        "tests": [
-            {
-                "description": "additional properties are allowed",
-                "data": {"foo": 1, "bar": 2, "quux": true},
-                "valid": true
-            }
-        ]
-    },
-    {
-        "description": "additionalProperties should not look in applicators",
-        "schema": {
-            "allOf": [
-                {"properties": {"foo": {}}}
-            ],
-            "additionalProperties": {"type": "boolean"}
-        },
-        "tests": [
-            {
-                "description": "properties defined in allOf are not allowed",
-                "data": {"foo": 1, "bar": true},
-                "valid": false
-            }
-        ]
-    }
-]
diff -pruN 3.0.2-4/json/tests/draft2019-06/allOf.json 3.2.0-5/json/tests/draft2019-06/allOf.json
--- 3.0.2-4/json/tests/draft2019-06/allOf.json	2019-08-02 00:53:34.000000000 +0000
+++ 3.2.0-5/json/tests/draft2019-06/allOf.json	1970-01-01 00:00:00.000000000 +0000
@@ -1,218 +0,0 @@
-[
-    {
-        "description": "allOf",
-        "schema": {
-            "allOf": [
-                {
-                    "properties": {
-                        "bar": {"type": "integer"}
-                    },
-                    "required": ["bar"]
-                },
-                {
-                    "properties": {
-                        "foo": {"type": "string"}
-                    },
-                    "required": ["foo"]
-                }
-            ]
-        },
-        "tests": [
-            {
-                "description": "allOf",
-                "data": {"foo": "baz", "bar": 2},
-                "valid": true
-            },
-            {
-                "description": "mismatch second",
-                "data": {"foo": "baz"},
-                "valid": false
-            },
-            {
-                "description": "mismatch first",
-                "data": {"bar": 2},
-                "valid": false
-            },
-            {
-                "description": "wrong type",
-                "data": {"foo": "baz", "bar": "quux"},
-                "valid": false
-            }
-        ]
-    },
-    {
-        "description": "allOf with base schema",
-        "schema": {
-            "properties": {"bar": {"type": "integer"}},
-            "required": ["bar"],
-            "allOf" : [
-                {
-                    "properties": {
-                        "foo": {"type": "string"}
-                    },
-                    "required": ["foo"]
-                },
-                {
-                    "properties": {
-                        "baz": {"type": "null"}
-                    },
-                    "required": ["baz"]
-                }
-            ]
-        },
-        "tests": [
-            {
-                "description": "valid",
-                "data": {"foo": "quux", "bar": 2, "baz": null},
-                "valid": true
-            },
-            {
-                "description": "mismatch base schema",
-                "data": {"foo": "quux", "baz": null},
-                "valid": false
-            },
-            {
-                "description": "mismatch first allOf",
-                "data": {"bar": 2, "baz": null},
-                "valid": false
-            },
-            {
-                "description": "mismatch second allOf",
-                "data": {"foo": "quux", "bar": 2},
-                "valid": false
-            },
-            {
-                "description": "mismatch both",
-                "data": {"bar": 2},
-                "valid": false
-            }
-        ]
-    },
-    {
-        "description": "allOf simple types",
-        "schema": {
-            "allOf": [
-                {"maximum": 30},
-                {"minimum": 20}
-            ]
-        },
-        "tests": [
-            {
-                "description": "valid",
-                "data": 25,
-                "valid": true
-            },
-            {
-                "description": "mismatch one",
-                "data": 35,
-                "valid": false
-            }
-        ]
-    },
-    {
-        "description": "allOf with boolean schemas, all true",
-        "schema": {"allOf": [true, true]},
-        "tests": [
-            {
-                "description": "any value is valid",
-                "data": "foo",
-                "valid": true
-            }
-        ]
-    },
-    {
-        "description": "allOf with boolean schemas, some false",
-        "schema": {"allOf": [true, false]},
-        "tests": [
-            {
-                "description": "any value is invalid",
-                "data": "foo",
-                "valid": false
-            }
-        ]
-    },
-    {
-        "description": "allOf with boolean schemas, all false",
-        "schema": {"allOf": [false, false]},
-        "tests": [
-            {
-                "description": "any value is invalid",
-                "data": "foo",
-                "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 -pruN 3.0.2-4/json/tests/draft2019-06/anyOf.json 3.2.0-5/json/tests/draft2019-06/anyOf.json
--- 3.0.2-4/json/tests/draft2019-06/anyOf.json	2019-08-02 00:53:34.000000000 +0000
+++ 3.2.0-5/json/tests/draft2019-06/anyOf.json	1970-01-01 00:00:00.000000000 +0000
@@ -1,189 +0,0 @@
-[
-    {
-        "description": "anyOf",
-        "schema": {
-            "anyOf": [
-                {
-                    "type": "integer"
-                },
-                {
-                    "minimum": 2
-                }
-            ]
-        },
-        "tests": [
-            {
-                "description": "first anyOf valid",
-                "data": 1,
-                "valid": true
-            },
-            {
-                "description": "second anyOf valid",
-                "data": 2.5,
-                "valid": true
-            },
-            {
-                "description": "both anyOf valid",
-                "data": 3,
-                "valid": true
-            },
-            {
-                "description": "neither anyOf valid",
-                "data": 1.5,
-                "valid": false
-            }
-        ]
-    },
-    {
-        "description": "anyOf with base schema",
-        "schema": {
-            "type": "string",
-            "anyOf" : [
-                {
-                    "maxLength": 2
-                },
-                {
-                    "minLength": 4
-                }
-            ]
-        },
-        "tests": [
-            {
-                "description": "mismatch base schema",
-                "data": 3,
-                "valid": false
-            },
-            {
-                "description": "one anyOf valid",
-                "data": "foobar",
-                "valid": true
-            },
-            {
-                "description": "both anyOf invalid",
-                "data": "foo",
-                "valid": false
-            }
-        ]
-    },
-    {
-        "description": "anyOf with boolean schemas, all true",
-        "schema": {"anyOf": [true, true]},
-        "tests": [
-            {
-                "description": "any value is valid",
-                "data": "foo",
-                "valid": true
-            }
-        ]
-    },
-    {
-        "description": "anyOf with boolean schemas, some true",
-        "schema": {"anyOf": [true, false]},
-        "tests": [
-            {
-                "description": "any value is valid",
-                "data": "foo",
-                "valid": true
-            }
-        ]
-    },
-    {
-        "description": "anyOf with boolean schemas, all false",
-        "schema": {"anyOf": [false, false]},
-        "tests": [
-            {
-                "description": "any value is invalid",
-                "data": "foo",
-                "valid": false
-            }
-        ]
-    },
-    {
-        "description": "anyOf complex types",
-        "schema": {
-            "anyOf": [
-                {
-                    "properties": {
-                        "bar": {"type": "integer"}
-                    },
-                    "required": ["bar"]
-                },
-                {
-                    "properties": {
-                        "foo": {"type": "string"}
-                    },
-                    "required": ["foo"]
-                }
-            ]
-        },
-        "tests": [
-            {
-                "description": "first anyOf valid (complex)",
-                "data": {"bar": 2},
-                "valid": true
-            },
-            {
-                "description": "second anyOf valid (complex)",
-                "data": {"foo": "baz"},
-                "valid": true
-            },
-            {
-                "description": "both anyOf valid (complex)",
-                "data": {"foo": "baz", "bar": 2},
-                "valid": true
-            },
-            {
-                "description": "neither anyOf valid (complex)",
-                "data": {"foo": 2, "bar": "quux"},
-                "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
-            }
-        ]
-    },
-    {
-        "description": "nested anyOf, to check validation semantics",
-        "schema": {
-            "anyOf": [
-                {
-                    "anyOf": [
-                        {
-                            "type": "null"
-                        }
-                    ]
-                }
-            ]
-        },
-        "tests": [
-            {
-                "description": "null is valid",
-                "data": null,
-                "valid": true
-            },
-            {
-                "description": "anything non-null is invalid",
-                "data": 123,
-                "valid": false
-            }
-        ]
-    }
-]
diff -pruN 3.0.2-4/json/tests/draft2019-06/boolean_schema.json 3.2.0-5/json/tests/draft2019-06/boolean_schema.json
--- 3.0.2-4/json/tests/draft2019-06/boolean_schema.json	2019-08-02 00:53:34.000000000 +0000
+++ 3.2.0-5/json/tests/draft2019-06/boolean_schema.json	1970-01-01 00:00:00.000000000 +0000
@@ -1,104 +0,0 @@
-[
-    {
-        "description": "boolean schema 'true'",
-        "schema": true,
-        "tests": [
-            {
-                "description": "number is valid",
-                "data": 1,
-                "valid": true
-            },
-            {
-                "description": "string is valid",
-                "data": "foo",
-                "valid": true
-            },
-            {
-                "description": "boolean true is valid",
-                "data": true,
-                "valid": true
-            },
-            {
-                "description": "boolean false is valid",
-                "data": false,
-                "valid": true
-            },
-            {
-                "description": "null is valid",
-                "data": null,
-                "valid": true
-            },
-            {
-                "description": "object is valid",
-                "data": {"foo": "bar"},
-                "valid": true
-            },
-            {
-                "description": "empty object is valid",
-                "data": {},
-                "valid": true
-            },
-            {
-                "description": "array is valid",
-                "data": ["foo"],
-                "valid": true
-            },
-            {
-                "description": "empty array is valid",
-                "data": [],
-                "valid": true
-            }
-        ]
-    },
-    {
-        "description": "boolean schema 'false'",
-        "schema": false,
-        "tests": [
-            {
-                "description": "number is invalid",
-                "data": 1,
-                "valid": false
-            },
-            {
-                "description": "string is invalid",
-                "data": "foo",
-                "valid": false
-            },
-            {
-                "description": "boolean true is invalid",
-                "data": true,
-                "valid": false
-            },
-            {
-                "description": "boolean false is invalid",
-                "data": false,
-                "valid": false
-            },
-            {
-                "description": "null is invalid",
-                "data": null,
-                "valid": false
-            },
-            {
-                "description": "object is invalid",
-                "data": {"foo": "bar"},
-                "valid": false
-            },
-            {
-                "description": "empty object is invalid",
-                "data": {},
-                "valid": false
-            },
-            {
-                "description": "array is invalid",
-                "data": ["foo"],
-                "valid": false
-            },
-            {
-                "description": "empty array is invalid",
-                "data": [],
-                "valid": false
-            }
-        ]
-    }
-]
diff -pruN 3.0.2-4/json/tests/draft2019-06/const.json 3.2.0-5/json/tests/draft2019-06/const.json
--- 3.0.2-4/json/tests/draft2019-06/const.json	2019-08-02 00:53:34.000000000 +0000
+++ 3.2.0-5/json/tests/draft2019-06/const.json	1970-01-01 00:00:00.000000000 +0000
@@ -1,170 +0,0 @@
-[
-    {
-        "description": "const validation",
-        "schema": {"const": 2},
-        "tests": [
-            {
-                "description": "same value is valid",
-                "data": 2,
-                "valid": true
-            },
-            {
-                "description": "another value is invalid",
-                "data": 5,
-                "valid": false
-            },
-            {
-                "description": "another type is invalid",
-                "data": "a",
-                "valid": false
-            }
-        ]
-    },
-    {
-        "description": "const with object",
-        "schema": {"const": {"foo": "bar", "baz": "bax"}},
-        "tests": [
-            {
-                "description": "same object is valid",
-                "data": {"foo": "bar", "baz": "bax"},
-                "valid": true
-            },
-            {
-                "description": "same object with different property order is valid",
-                "data": {"baz": "bax", "foo": "bar"},
-                "valid": true
-            },
-            {
-                "description": "another object is invalid",
-                "data": {"foo": "bar"},
-                "valid": false
-            },
-            {
-                "description": "another type is invalid",
-                "data": [1, 2],
-                "valid": false
-            }
-        ]
-    },
-    {
-        "description": "const with array",
-        "schema": {"const": [{ "foo": "bar" }]},
-        "tests": [
-            {
-                "description": "same array is valid",
-                "data": [{"foo": "bar"}],
-                "valid": true
-            },
-            {
-                "description": "another array item is invalid",
-                "data": [2],
-                "valid": false
-            },
-            {
-                "description": "array with additional items is invalid",
-                "data": [1, 2, 3],
-                "valid": false
-            }
-        ]
-    },
-    {
-        "description": "const with null",
-        "schema": {"const": null},
-        "tests": [
-            {
-                "description": "null is valid",
-                "data": null,
-                "valid": true
-            },
-            {
-                "description": "not null is invalid",
-                "data": 0,
-                "valid": false
-            }
-        ]
-    },
-    {
-        "description": "const with false does not match 0",
-        "schema": {"const": false},
-        "tests": [
-            {
-                "description": "false is valid",
-                "data": false,
-                "valid": true
-            },
-            {
-                "description": "integer zero is invalid",
-                "data": 0,
-                "valid": false
-            },
-            {
-                "description": "float zero is invalid",
-                "data": 0.0,
-                "valid": false
-            }
-        ]
-    },
-    {
-        "description": "const with true does not match 1",
-        "schema": {"const": true},
-        "tests": [
-            {
-                "description": "true is valid",
-                "data": true,
-                "valid": true
-            },
-            {
-                "description": "integer one is invalid",
-                "data": 1,
-                "valid": false
-            },
-            {
-                "description": "float one is invalid",
-                "data": 1.0,
-                "valid": false
-            }
-        ]
-    },
-    {
-        "description": "const with 0 does not match false",
-        "schema": {"const": 0},
-        "tests": [
-            {
-                "description": "false is invalid",
-                "data": false,
-                "valid": false
-            },
-            {
-                "description": "integer zero is valid",
-                "data": 0,
-                "valid": true
-            },
-            {
-                "description": "float zero is valid",
-                "data": 0.0,
-                "valid": true
-            }
-        ]
-    },
-    {
-        "description": "const with 1 does not match true",
-        "schema": {"const": 1},
-        "tests": [
-            {
-                "description": "true is invalid",
-                "data": true,
-                "valid": false
-            },
-            {
-                "description": "integer one is valid",
-                "data": 1,
-                "valid": true
-            },
-            {
-                "description": "float one is valid",
-                "data": 1.0,
-                "valid": true
-            }
-        ]
-    }
-]
diff -pruN 3.0.2-4/json/tests/draft2019-06/contains.json 3.2.0-5/json/tests/draft2019-06/contains.json
--- 3.0.2-4/json/tests/draft2019-06/contains.json	2019-08-02 00:53:34.000000000 +0000
+++ 3.2.0-5/json/tests/draft2019-06/contains.json	1970-01-01 00:00:00.000000000 +0000
@@ -1,95 +0,0 @@
-[
-    {
-        "description": "contains keyword validation",
-        "schema": {
-            "contains": {"minimum": 5}
-        },
-        "tests": [
-            {
-                "description": "array with item matching schema (5) is valid",
-                "data": [3, 4, 5],
-                "valid": true
-            },
-            {
-                "description": "array with item matching schema (6) is valid",
-                "data": [3, 4, 6],
-                "valid": true
-            },
-            {
-                "description": "array with two items matching schema (5, 6) is valid",
-                "data": [3, 4, 5, 6],
-                "valid": true
-            },
-            {
-                "description": "array without items matching schema is invalid",
-                "data": [2, 3, 4],
-                "valid": false
-            },
-            {
-                "description": "empty array is invalid",
-                "data": [],
-                "valid": false
-            },
-            {
-                "description": "not array is valid",
-                "data": {},
-                "valid": true
-            }
-        ]
-    },
-    {
-        "description": "contains keyword with const keyword",
-        "schema": {
-            "contains": { "const": 5 }
-        },
-        "tests": [
-            {
-                "description": "array with item 5 is valid",
-                "data": [3, 4, 5],
-                "valid": true
-            },
-            {
-                "description": "array with two items 5 is valid",
-                "data": [3, 4, 5, 5],
-                "valid": true
-            },
-            {
-                "description": "array without item 5 is invalid",
-                "data": [1, 2, 3, 4],
-                "valid": false
-            }
-        ]
-    },
-    {
-        "description": "contains keyword with boolean schema true",
-        "schema": {"contains": true},
-        "tests": [
-            {
-                "description": "any non-empty array is valid",
-                "data": ["foo"],
-                "valid": true
-            },
-            {
-                "description": "empty array is invalid",
-                "data": [],
-                "valid": false
-            }
-        ]
-    },
-    {
-        "description": "contains keyword with boolean schema false",
-        "schema": {"contains": false},
-        "tests": [
-            {
-                "description": "any non-empty array is invalid",
-                "data": ["foo"],
-                "valid": false
-            },
-            {
-                "description": "empty array is invalid",
-                "data": [],
-                "valid": false
-            }
-        ]
-    }
-]
diff -pruN 3.0.2-4/json/tests/draft2019-06/default.json 3.2.0-5/json/tests/draft2019-06/default.json
--- 3.0.2-4/json/tests/draft2019-06/default.json	2019-08-02 00:53:34.000000000 +0000
+++ 3.2.0-5/json/tests/draft2019-06/default.json	1970-01-01 00:00:00.000000000 +0000
@@ -1,49 +0,0 @@
-[
-    {
-        "description": "invalid type for default",
-        "schema": {
-            "properties": {
-                "foo": {
-                    "type": "integer",
-                    "default": []
-                }
-            }
-        },
-        "tests": [
-            {
-                "description": "valid when property is specified",
-                "data": {"foo": 13},
-                "valid": true
-            },
-            {
-                "description": "still valid when the invalid default is used",
-                "data": {},
-                "valid": true
-            }
-        ]
-    },
-    {
-        "description": "invalid string value for default",
-        "schema": {
-            "properties": {
-                "bar": {
-                    "type": "string",
-                    "minLength": 4,
-                    "default": "bad"
-                }
-            }
-        },
-        "tests": [
-            {
-                "description": "valid when property is specified",
-                "data": {"bar": "good"},
-                "valid": true
-            },
-            {
-                "description": "still valid when the invalid default is used",
-                "data": {},
-                "valid": true
-            }
-        ]
-    }
-]
diff -pruN 3.0.2-4/json/tests/draft2019-06/defs.json 3.2.0-5/json/tests/draft2019-06/defs.json
--- 3.0.2-4/json/tests/draft2019-06/defs.json	2019-08-02 00:53:34.000000000 +0000
+++ 3.2.0-5/json/tests/draft2019-06/defs.json	1970-01-01 00:00:00.000000000 +0000
@@ -1,24 +0,0 @@
-[
-    {
-        "description": "valid definition",
-        "schema": {"$ref": "http://json-schema.org/draft/2019-06/schema#"},
-        "tests": [
-            {
-                "description": "valid definition schema",
-                "data": {"$defs": {"foo": {"type": "integer"}}},
-                "valid": true
-            }
-        ]
-    },
-    {
-        "description": "invalid definition",
-        "schema": {"$ref": "http://json-schema.org/draft/2019-06/schema#"},
-        "tests": [
-            {
-                "description": "invalid definition schema",
-                "data": {"$defs": {"foo": {"type": 1}}},
-                "valid": false
-            }
-        ]
-    }
-]
diff -pruN 3.0.2-4/json/tests/draft2019-06/dependencies.json 3.2.0-5/json/tests/draft2019-06/dependencies.json
--- 3.0.2-4/json/tests/draft2019-06/dependencies.json	2019-08-02 00:53:34.000000000 +0000
+++ 3.2.0-5/json/tests/draft2019-06/dependencies.json	1970-01-01 00:00:00.000000000 +0000
@@ -1,268 +0,0 @@
-[
-    {
-        "description": "dependencies",
-        "schema": {
-            "dependencies": {"bar": ["foo"]}
-        },
-        "tests": [
-            {
-                "description": "neither",
-                "data": {},
-                "valid": true
-            },
-            {
-                "description": "nondependant",
-                "data": {"foo": 1},
-                "valid": true
-            },
-            {
-                "description": "with dependency",
-                "data": {"foo": 1, "bar": 2},
-                "valid": true
-            },
-            {
-                "description": "missing dependency",
-                "data": {"bar": 2},
-                "valid": false
-            },
-            {
-                "description": "ignores arrays",
-                "data": ["bar"],
-                "valid": true
-            },
-            {
-                "description": "ignores strings",
-                "data": "foobar",
-                "valid": true
-            },
-            {
-                "description": "ignores other non-objects",
-                "data": 12,
-                "valid": true
-            }
-        ]
-    },
-    {
-        "description": "dependencies with empty array",
-        "schema": {
-            "dependencies": {"bar": []}
-        },
-        "tests": [
-            {
-                "description": "empty object",
-                "data": {},
-                "valid": true
-            },
-            {
-                "description": "object with one property",
-                "data": {"bar": 2},
-                "valid": true
-            }
-        ]
-    },
-    {
-        "description": "multiple dependencies",
-        "schema": {
-            "dependencies": {"quux": ["foo", "bar"]}
-        },
-        "tests": [
-            {
-                "description": "neither",
-                "data": {},
-                "valid": true
-            },
-            {
-                "description": "nondependants",
-                "data": {"foo": 1, "bar": 2},
-                "valid": true
-            },
-            {
-                "description": "with dependencies",
-                "data": {"foo": 1, "bar": 2, "quux": 3},
-                "valid": true
-            },
-            {
-                "description": "missing dependency",
-                "data": {"foo": 1, "quux": 2},
-                "valid": false
-            },
-            {
-                "description": "missing other dependency",
-                "data": {"bar": 1, "quux": 2},
-                "valid": false
-            },
-            {
-                "description": "missing both dependencies",
-                "data": {"quux": 1},
-                "valid": false
-            }
-        ]
-    },
-    {
-        "description": "multiple dependencies subschema",
-        "schema": {
-            "dependencies": {
-                "bar": {
-                    "properties": {
-                        "foo": {"type": "integer"},
-                        "bar": {"type": "integer"}
-                    }
-                }
-            }
-        },
-        "tests": [
-            {
-                "description": "valid",
-                "data": {"foo": 1, "bar": 2},
-                "valid": true
-            },
-            {
-                "description": "no dependency",
-                "data": {"foo": "quux"},
-                "valid": true
-            },
-            {
-                "description": "wrong type",
-                "data": {"foo": "quux", "bar": 2},
-                "valid": false
-            },
-            {
-                "description": "wrong type other",
-                "data": {"foo": 2, "bar": "quux"},
-                "valid": false
-            },
-            {
-                "description": "wrong type both",
-                "data": {"foo": "quux", "bar": "quux"},
-                "valid": false
-            }
-        ]
-    },
-    {
-        "description": "dependencies with boolean subschemas",
-        "schema": {
-            "dependencies": {
-                "foo": true,
-                "bar": false
-            }
-        },
-        "tests": [
-            {
-                "description": "object with property having schema true is valid",
-                "data": {"foo": 1},
-                "valid": true
-            },
-            {
-                "description": "object with property having schema false is invalid",
-                "data": {"bar": 2},
-                "valid": false
-            },
-            {
-                "description": "object with both properties is invalid",
-                "data": {"foo": 1, "bar": 2},
-                "valid": false
-            },
-            {
-                "description": "empty object is valid",
-                "data": {},
-                "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
-            }
-        ]
-    },
-    {
-        "description": "dependencies with escaped characters",
-        "schema": {
-            "dependencies": {
-                "foo\nbar": ["foo\rbar"],
-                "foo\tbar": {
-                    "minProperties": 4
-                },
-                "foo'bar": {"required": ["foo\"bar"]},
-                "foo\"bar": ["foo'bar"]
-            }
-        },
-        "tests": [
-            {
-                "description": "valid object 1",
-                "data": {
-                    "foo\nbar": 1,
-                    "foo\rbar": 2
-                },
-                "valid": true
-            },
-            {
-                "description": "valid object 2",
-                "data": {
-                    "foo\tbar": 1,
-                    "a": 2,
-                    "b": 3,
-                    "c": 4
-                },
-                "valid": true
-            },
-            {
-                "description": "valid object 3",
-                "data": {
-                    "foo'bar": 1,
-                    "foo\"bar": 2
-                },
-                "valid": true
-            },
-            {
-                "description": "invalid object 1",
-                "data": {
-                    "foo\nbar": 1,
-                    "foo": 2
-                },
-                "valid": false
-            },
-            {
-                "description": "invalid object 2",
-                "data": {
-                    "foo\tbar": 1,
-                    "a": 2
-                },
-                "valid": false
-            },
-            {
-                "description": "invalid object 3",
-                "data": {
-                    "foo'bar": 1
-                },
-                "valid": false
-            },
-            {
-                "description": "invalid object 4",
-                "data": {
-                    "foo\"bar": 2
-                },
-                "valid": false
-            }
-        ]
-    }
-]
diff -pruN 3.0.2-4/json/tests/draft2019-06/enum.json 3.2.0-5/json/tests/draft2019-06/enum.json
--- 3.0.2-4/json/tests/draft2019-06/enum.json	2019-08-02 00:53:34.000000000 +0000
+++ 3.2.0-5/json/tests/draft2019-06/enum.json	1970-01-01 00:00:00.000000000 +0000
@@ -1,179 +0,0 @@
-[
-    {
-        "description": "simple enum validation",
-        "schema": {"enum": [1, 2, 3]},
-        "tests": [
-            {
-                "description": "one of the enum is valid",
-                "data": 1,
-                "valid": true
-            },
-            {
-                "description": "something else is invalid",
-                "data": 4,
-                "valid": false
-            }
-        ]
-    },
-    {
-        "description": "heterogeneous enum validation",
-        "schema": {"enum": [6, "foo", [], true, {"foo": 12}]},
-        "tests": [
-            {
-                "description": "one of the enum is valid",
-                "data": [],
-                "valid": true
-            },
-            {
-                "description": "something else is invalid",
-                "data": null,
-                "valid": false
-            },
-            {
-                "description": "objects are deep compared",
-                "data": {"foo": false},
-                "valid": false
-            }
-        ]
-    },
-    {
-        "description": "enums in properties",
-        "schema": {
-            "type":"object",
-            "properties": {
-                "foo": {"enum":["foo"]},
-                "bar": {"enum":["bar"]}
-            },
-            "required": ["bar"]
-        },
-        "tests": [
-            {
-                "description": "both properties are valid",
-                "data": {"foo":"foo", "bar":"bar"},
-                "valid": true
-            },
-            {
-                "description": "missing optional property is valid",
-                "data": {"bar":"bar"},
-                "valid": true
-            },
-            {
-                "description": "missing required property is invalid",
-                "data": {"foo":"foo"},
-                "valid": false
-            },
-            {
-                "description": "missing all properties is invalid",
-                "data": {},
-                "valid": false
-            }
-        ]
-    },
-    {
-        "description": "enum with escaped characters",
-        "schema": {
-            "enum": ["foo\nbar", "foo\rbar"]
-        },
-        "tests": [
-            {
-                "description": "member 1 is valid",
-                "data": "foo\nbar",
-                "valid": true
-            },
-            {
-                "description": "member 2 is valid",
-                "data": "foo\rbar",
-                "valid": true
-            },
-            {
-                "description": "another string is invalid",
-                "data": "abc",
-                "valid": false
-            }
-        ]
-    },
-    {
-        "description": "enum with false does not match 0",
-        "schema": {"enum": [false]},
-        "tests": [
-            {
-                "description": "false is valid",
-                "data": false,
-                "valid": true
-            },
-            {
-                "description": "integer zero is invalid",
-                "data": 0,
-                "valid": false
-            },
-            {
-                "description": "float zero is invalid",
-                "data": 0.0,
-                "valid": false
-            }
-        ]
-    },
-    {
-        "description": "enum with true does not match 1",
-        "schema": {"enum": [true]},
-        "tests": [
-            {
-                "description": "true is valid",
-                "data": true,
-                "valid": true
-            },
-            {
-                "description": "integer one is invalid",
-                "data": 1,
-                "valid": false
-            },
-            {
-                "description": "float one is invalid",
-                "data": 1.0,
-                "valid": false
-            }
-        ]
-    },
-    {
-        "description": "enum with 0 does not match false",
-        "schema": {"enum": [0]},
-        "tests": [
-            {
-                "description": "false is invalid",
-                "data": false,
-                "valid": false
-            },
-            {
-                "description": "integer zero is valid",
-                "data": 0,
-                "valid": true
-            },
-            {
-                "description": "float zero is valid",
-                "data": 0.0,
-                "valid": true
-            }
-        ]
-    },
-    {
-        "description": "enum with 1 does not match true",
-        "schema": {"enum": [1]},
-        "tests": [
-            {
-                "description": "true is invalid",
-                "data": true,
-                "valid": false
-            },
-            {
-                "description": "integer one is valid",
-                "data": 1,
-                "valid": true
-            },
-            {
-                "description": "float one is valid",
-                "data": 1.0,
-                "valid": true
-            }
-        ]
-    }
-]
diff -pruN 3.0.2-4/json/tests/draft2019-06/exclusiveMaximum.json 3.2.0-5/json/tests/draft2019-06/exclusiveMaximum.json
--- 3.0.2-4/json/tests/draft2019-06/exclusiveMaximum.json	2019-08-02 00:53:34.000000000 +0000
+++ 3.2.0-5/json/tests/draft2019-06/exclusiveMaximum.json	1970-01-01 00:00:00.000000000 +0000
@@ -1,30 +0,0 @@
-[
-    {
-        "description": "exclusiveMaximum validation",
-        "schema": {
-            "exclusiveMaximum": 3.0
-        },
-        "tests": [
-            {
-                "description": "below the exclusiveMaximum is valid",
-                "data": 2.2,
-                "valid": true
-            },
-            {
-                "description": "boundary point is invalid",
-                "data": 3.0,
-                "valid": false
-            },
-            {
-                "description": "above the exclusiveMaximum is invalid",
-                "data": 3.5,
-                "valid": false
-            },
-            {
-                "description": "ignores non-numbers",
-                "data": "x",
-                "valid": true
-            }
-        ]
-    }
-]
diff -pruN 3.0.2-4/json/tests/draft2019-06/exclusiveMinimum.json 3.2.0-5/json/tests/draft2019-06/exclusiveMinimum.json
--- 3.0.2-4/json/tests/draft2019-06/exclusiveMinimum.json	2019-08-02 00:53:34.000000000 +0000
+++ 3.2.0-5/json/tests/draft2019-06/exclusiveMinimum.json	1970-01-01 00:00:00.000000000 +0000
@@ -1,30 +0,0 @@
-[
-    {
-        "description": "exclusiveMinimum validation",
-        "schema": {
-            "exclusiveMinimum": 1.1
-        },
-        "tests": [
-            {
-                "description": "above the exclusiveMinimum is valid",
-                "data": 1.2,
-                "valid": true
-            },
-            {
-                "description": "boundary point is invalid",
-                "data": 1.1,
-                "valid": false
-            },
-            {
-                "description": "below the exclusiveMinimum is invalid",
-                "data": 0.6,
-                "valid": false
-            },
-            {
-                "description": "ignores non-numbers",
-                "data": "x",
-                "valid": true
-            }
-        ]
-    }
-]
diff -pruN 3.0.2-4/json/tests/draft2019-06/if-then-else.json 3.2.0-5/json/tests/draft2019-06/if-then-else.json
--- 3.0.2-4/json/tests/draft2019-06/if-then-else.json	2019-08-02 00:53:34.000000000 +0000
+++ 3.2.0-5/json/tests/draft2019-06/if-then-else.json	1970-01-01 00:00:00.000000000 +0000
@@ -1,188 +0,0 @@
-[
-    {
-        "description": "ignore if without then or else",
-        "schema": {
-            "if": {
-                "const": 0
-            }
-        },
-        "tests": [
-            {
-                "description": "valid when valid against lone if",
-                "data": 0,
-                "valid": true
-            },
-            {
-                "description": "valid when invalid against lone if",
-                "data": "hello",
-                "valid": true
-            }
-        ]
-    },
-    {
-        "description": "ignore then without if",
-        "schema": {
-            "then": {
-                "const": 0
-            }
-        },
-        "tests": [
-            {
-                "description": "valid when valid against lone then",
-                "data": 0,
-                "valid": true
-            },
-            {
-                "description": "valid when invalid against lone then",
-                "data": "hello",
-                "valid": true
-            }
-        ]
-    },
-    {
-        "description": "ignore else without if",
-        "schema": {
-            "else": {
-                "const": 0
-            }
-        },
-        "tests": [
-            {
-                "description": "valid when valid against lone else",
-                "data": 0,
-                "valid": true
-            },
-            {
-                "description": "valid when invalid against lone else",
-                "data": "hello",
-                "valid": true
-            }
-        ]
-    },
-    {
-        "description": "if and then without else",
-        "schema": {
-            "if": {
-                "exclusiveMaximum": 0
-            },
-            "then": {
-                "minimum": -10
-            }
-        },
-        "tests": [
-            {
-                "description": "valid through then",
-                "data": -1,
-                "valid": true
-            },
-            {
-                "description": "invalid through then",
-                "data": -100,
-                "valid": false
-            },
-            {
-                "description": "valid when if test fails",
-                "data": 3,
-                "valid": true
-            }
-        ]
-    },
-    {
-        "description": "if and else without then",
-        "schema": {
-            "if": {
-                "exclusiveMaximum": 0
-            },
-            "else": {
-                "multipleOf": 2
-            }
-        },
-        "tests": [
-            {
-                "description": "valid when if test passes",
-                "data": -1,
-                "valid": true
-            },
-            {
-                "description": "valid through else",
-                "data": 4,
-                "valid": true
-            },
-            {
-                "description": "invalid through else",
-                "data": 3,
-                "valid": false
-            }
-        ]
-    },
-    {
-        "description": "validate against correct branch, then vs else",
-        "schema": {
-            "if": {
-                "exclusiveMaximum": 0
-            },
-            "then": {
-                "minimum": -10
-            },
-            "else": {
-                "multipleOf": 2
-            }
-        },
-        "tests": [
-            {
-                "description": "valid through then",
-                "data": -1,
-                "valid": true
-            },
-            {
-                "description": "invalid through then",
-                "data": -100,
-                "valid": false
-            },
-            {
-                "description": "valid through else",
-                "data": 4,
-                "valid": true
-            },
-            {
-                "description": "invalid through else",
-                "data": 3,
-                "valid": false
-            }
-        ]
-    },
-    {
-        "description": "non-interference across combined schemas",
-        "schema": {
-            "allOf": [
-                {
-                    "if": {
-                        "exclusiveMaximum": 0
-                    }
-                },
-                {
-                    "then": {
-                        "minimum": -10
-                    }
-                },
-                {
-                    "else": {
-                        "multipleOf": 2
-                    }
-                }
-            ]
-        },
-        "tests": [
-            {
-                "description": "valid, but woud have been invalid through then",
-                "data": -100,
-                "valid": true
-            },
-            {
-                "description": "valid, but would have been invalid through else",
-                "data": 3,
-                "valid": true
-            }
-        ]
-    }
-]
diff -pruN 3.0.2-4/json/tests/draft2019-06/items.json 3.2.0-5/json/tests/draft2019-06/items.json
--- 3.0.2-4/json/tests/draft2019-06/items.json	2019-08-02 00:53:34.000000000 +0000
+++ 3.2.0-5/json/tests/draft2019-06/items.json	1970-01-01 00:00:00.000000000 +0000
@@ -1,250 +0,0 @@
-[
-    {
-        "description": "a schema given for items",
-        "schema": {
-            "items": {"type": "integer"}
-        },
-        "tests": [
-            {
-                "description": "valid items",
-                "data": [ 1, 2, 3 ],
-                "valid": true
-            },
-            {
-                "description": "wrong type of items",
-                "data": [1, "x"],
-                "valid": false
-            },
-            {
-                "description": "ignores non-arrays",
-                "data": {"foo" : "bar"},
-                "valid": true
-            },
-            {
-                "description": "JavaScript pseudo-array is valid",
-                "data": {
-                    "0": "invalid",
-                    "length": 1
-                },
-                "valid": true
-            }
-        ]
-    },
-    {
-        "description": "an array of schemas for items",
-        "schema": {
-            "items": [
-                {"type": "integer"},
-                {"type": "string"}
-            ]
-        },
-        "tests": [
-            {
-                "description": "correct types",
-                "data": [ 1, "foo" ],
-                "valid": true
-            },
-            {
-                "description": "wrong types",
-                "data": [ "foo", 1 ],
-                "valid": false
-            },
-            {
-                "description": "incomplete array of items",
-                "data": [ 1 ],
-                "valid": true
-            },
-            {
-                "description": "array with additional items",
-                "data": [ 1, "foo", true ],
-                "valid": true
-            },
-            {
-                "description": "empty array",
-                "data": [ ],
-                "valid": true
-            },
-            {
-                "description": "JavaScript pseudo-array is valid",
-                "data": {
-                    "0": "invalid",
-                    "1": "valid",
-                    "length": 2
-                },
-                "valid": true
-            }
-        ]
-    },
-    {
-        "description": "items with boolean schema (true)",
-        "schema": {"items": true},
-        "tests": [
-            {
-                "description": "any array is valid",
-                "data": [ 1, "foo", true ],
-                "valid": true
-            },
-            {
-                "description": "empty array is valid",
-                "data": [],
-                "valid": true
-            }
-        ]
-    },
-    {
-        "description": "items with boolean schema (false)",
-        "schema": {"items": false},
-        "tests": [
-            {
-                "description": "any non-empty array is invalid",
-                "data": [ 1, "foo", true ],
-                "valid": false
-            },
-            {
-                "description": "empty array is valid",
-                "data": [],
-                "valid": true
-            }
-        ]
-    },
-    {
-        "description": "items with boolean schemas",
-        "schema": {
-            "items": [true, false]
-        },
-        "tests": [
-            {
-                "description": "array with one item is valid",
-                "data": [ 1 ],
-                "valid": true
-            },
-            {
-                "description": "array with two items is invalid",
-                "data": [ 1, "foo" ],
-                "valid": false
-            },
-            {
-                "description": "empty array is valid",
-                "data": [],
-                "valid": true
-            }
-        ]
-    },
-    {
-        "description": "items and subitems",
-        "schema": {
-            "$defs": {
-                "item": {
-                    "type": "array",
-                    "additionalItems": false,
-                    "items": [
-                        { "$ref": "#/$defs/sub-item" },
-                        { "$ref": "#/$defs/sub-item" }
-                    ]
-                },
-                "sub-item": {
-                    "type": "object",
-                    "required": ["foo"]
-                }
-            },
-            "type": "array",
-            "additionalItems": false,
-            "items": [
-                { "$ref": "#/$defs/item" },
-                { "$ref": "#/$defs/item" },
-                { "$ref": "#/$defs/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 -pruN 3.0.2-4/json/tests/draft2019-06/maximum.json 3.2.0-5/json/tests/draft2019-06/maximum.json
--- 3.0.2-4/json/tests/draft2019-06/maximum.json	2019-08-02 00:53:34.000000000 +0000
+++ 3.2.0-5/json/tests/draft2019-06/maximum.json	1970-01-01 00:00:00.000000000 +0000
@@ -1,28 +0,0 @@
-[
-    {
-        "description": "maximum validation",
-        "schema": {"maximum": 3.0},
-        "tests": [
-            {
-                "description": "below the maximum is valid",
-                "data": 2.6,
-                "valid": true
-            },
-            {
-                "description": "boundary point is valid",
-                "data": 3.0,
-                "valid": true
-            },
-            {
-                "description": "above the maximum is invalid",
-                "data": 3.5,
-                "valid": false
-            },
-            {
-                "description": "ignores non-numbers",
-                "data": "x",
-                "valid": true
-            }
-        ]
-    }
-]
diff -pruN 3.0.2-4/json/tests/draft2019-06/maxItems.json 3.2.0-5/json/tests/draft2019-06/maxItems.json
--- 3.0.2-4/json/tests/draft2019-06/maxItems.json	2019-08-02 00:53:34.000000000 +0000
+++ 3.2.0-5/json/tests/draft2019-06/maxItems.json	1970-01-01 00:00:00.000000000 +0000
@@ -1,28 +0,0 @@
-[
-    {
-        "description": "maxItems validation",
-        "schema": {"maxItems": 2},
-        "tests": [
-            {
-                "description": "shorter is valid",
-                "data": [1],
-                "valid": true
-            },
-            {
-                "description": "exact length is valid",
-                "data": [1, 2],
-                "valid": true
-            },
-            {
-                "description": "too long is invalid",
-                "data": [1, 2, 3],
-                "valid": false
-            },
-            {
-                "description": "ignores non-arrays",
-                "data": "foobar",
-                "valid": true
-            }
-        ]
-    }
-]
diff -pruN 3.0.2-4/json/tests/draft2019-06/maxLength.json 3.2.0-5/json/tests/draft2019-06/maxLength.json
--- 3.0.2-4/json/tests/draft2019-06/maxLength.json	2019-08-02 00:53:34.000000000 +0000
+++ 3.2.0-5/json/tests/draft2019-06/maxLength.json	1970-01-01 00:00:00.000000000 +0000
@@ -1,33 +0,0 @@
-[
-    {
-        "description": "maxLength validation",
-        "schema": {"maxLength": 2},
-        "tests": [
-            {
-                "description": "shorter is valid",
-                "data": "f",
-                "valid": true
-            },
-            {
-                "description": "exact length is valid",
-                "data": "fo",
-                "valid": true
-            },
-            {
-                "description": "too long is invalid",
-                "data": "foo",
-                "valid": false
-            },
-            {
-                "description": "ignores non-strings",
-                "data": 100,
-                "valid": true
-            },
-            {
-                "description": "two supplementary Unicode code points is long enough",
-                "data": "\uD83D\uDCA9\uD83D\uDCA9",
-                "valid": true
-            }
-        ]
-    }
-]
diff -pruN 3.0.2-4/json/tests/draft2019-06/maxProperties.json 3.2.0-5/json/tests/draft2019-06/maxProperties.json
--- 3.0.2-4/json/tests/draft2019-06/maxProperties.json	2019-08-02 00:53:34.000000000 +0000
+++ 3.2.0-5/json/tests/draft2019-06/maxProperties.json	1970-01-01 00:00:00.000000000 +0000
@@ -1,38 +0,0 @@
-[
-    {
-        "description": "maxProperties validation",
-        "schema": {"maxProperties": 2},
-        "tests": [
-            {
-                "description": "shorter is valid",
-                "data": {"foo": 1},
-                "valid": true
-            },
-            {
-                "description": "exact length is valid",
-                "data": {"foo": 1, "bar": 2},
-                "valid": true
-            },
-            {
-                "description": "too long is invalid",
-                "data": {"foo": 1, "bar": 2, "baz": 3},
-                "valid": false
-            },
-            {
-                "description": "ignores arrays",
-                "data": [1, 2, 3],
-                "valid": true
-            },
-            {
-                "description": "ignores strings",
-                "data": "foobar",
-                "valid": true
-            },
-            {
-                "description": "ignores other non-objects",
-                "data": 12,
-                "valid": true
-            }
-        ]
-    }
-]
diff -pruN 3.0.2-4/json/tests/draft2019-06/minimum.json 3.2.0-5/json/tests/draft2019-06/minimum.json
--- 3.0.2-4/json/tests/draft2019-06/minimum.json	2019-08-02 00:53:34.000000000 +0000
+++ 3.2.0-5/json/tests/draft2019-06/minimum.json	1970-01-01 00:00:00.000000000 +0000
@@ -1,59 +0,0 @@
-[
-    {
-        "description": "minimum validation",
-        "schema": {"minimum": 1.1},
-        "tests": [
-            {
-                "description": "above the minimum is valid",
-                "data": 2.6,
-                "valid": true
-            },
-            {
-                "description": "boundary point is valid",
-                "data": 1.1,
-                "valid": true
-            },
-            {
-                "description": "below the minimum is invalid",
-                "data": 0.6,
-                "valid": false
-            },
-            {
-                "description": "ignores non-numbers",
-                "data": "x",
-                "valid": true
-            }
-        ]
-    },
-    {
-        "description": "minimum validation with signed integer",
-        "schema": {"minimum": -2},
-        "tests": [
-            {
-                "description": "negative above the minimum is valid",
-                "data": -1,
-                "valid": true
-            },
-            {
-                "description": "positive above the minimum is valid",
-                "data": 0,
-                "valid": true
-            },
-            {
-                "description": "boundary point is valid",
-                "data": -2,
-                "valid": true
-            },
-            {
-                "description": "below the minimum is invalid",
-                "data": -3,
-                "valid": false
-            },
-            {
-                "description": "ignores non-numbers",
-                "data": "x",
-                "valid": true
-            }
-        ]
-    }
-]
diff -pruN 3.0.2-4/json/tests/draft2019-06/minItems.json 3.2.0-5/json/tests/draft2019-06/minItems.json
--- 3.0.2-4/json/tests/draft2019-06/minItems.json	2019-08-02 00:53:34.000000000 +0000
+++ 3.2.0-5/json/tests/draft2019-06/minItems.json	1970-01-01 00:00:00.000000000 +0000
@@ -1,28 +0,0 @@
-[
-    {
-        "description": "minItems validation",
-        "schema": {"minItems": 1},
-        "tests": [
-            {
-                "description": "longer is valid",
-                "data": [1, 2],
-                "valid": true
-            },
-            {
-                "description": "exact length is valid",
-                "data": [1],
-                "valid": true
-            },
-            {
-                "description": "too short is invalid",
-                "data": [],
-                "valid": false
-            },
-            {
-                "description": "ignores non-arrays",
-                "data": "",
-                "valid": true
-            }
-        ]
-    }
-]
diff -pruN 3.0.2-4/json/tests/draft2019-06/minLength.json 3.2.0-5/json/tests/draft2019-06/minLength.json
--- 3.0.2-4/json/tests/draft2019-06/minLength.json	2019-08-02 00:53:34.000000000 +0000
+++ 3.2.0-5/json/tests/draft2019-06/minLength.json	1970-01-01 00:00:00.000000000 +0000
@@ -1,33 +0,0 @@
-[
-    {
-        "description": "minLength validation",
-        "schema": {"minLength": 2},
-        "tests": [
-            {
-                "description": "longer is valid",
-                "data": "foo",
-                "valid": true
-            },
-            {
-                "description": "exact length is valid",
-                "data": "fo",
-                "valid": true
-            },
-            {
-                "description": "too short is invalid",
-                "data": "f",
-                "valid": false
-            },
-            {
-                "description": "ignores non-strings",
-                "data": 1,
-                "valid": true
-            },
-            {
-                "description": "one supplementary Unicode code point is not long enough",
-                "data": "\uD83D\uDCA9",
-                "valid": false
-            }
-        ]
-    }
-]
diff -pruN 3.0.2-4/json/tests/draft2019-06/minProperties.json 3.2.0-5/json/tests/draft2019-06/minProperties.json
--- 3.0.2-4/json/tests/draft2019-06/minProperties.json	2019-08-02 00:53:34.000000000 +0000
+++ 3.2.0-5/json/tests/draft2019-06/minProperties.json	1970-01-01 00:00:00.000000000 +0000
@@ -1,38 +0,0 @@
-[
-    {
-        "description": "minProperties validation",
-        "schema": {"minProperties": 1},
-        "tests": [
-            {
-                "description": "longer is valid",
-                "data": {"foo": 1, "bar": 2},
-                "valid": true
-            },
-            {
-                "description": "exact length is valid",
-                "data": {"foo": 1},
-                "valid": true
-            },
-            {
-                "description": "too short is invalid",
-                "data": {},
-                "valid": false
-            },
-            {
-                "description": "ignores arrays",
-                "data": [],
-                "valid": true
-            },
-            {
-                "description": "ignores strings",
-                "data": "",
-                "valid": true
-            },
-            {
-                "description": "ignores other non-objects",
-                "data": 12,
-                "valid": true
-            }
-        ]
-    }
-]
diff -pruN 3.0.2-4/json/tests/draft2019-06/multipleOf.json 3.2.0-5/json/tests/draft2019-06/multipleOf.json
--- 3.0.2-4/json/tests/draft2019-06/multipleOf.json	2019-08-02 00:53:34.000000000 +0000
+++ 3.2.0-5/json/tests/draft2019-06/multipleOf.json	1970-01-01 00:00:00.000000000 +0000
@@ -1,60 +0,0 @@
-[
-    {
-        "description": "by int",
-        "schema": {"multipleOf": 2},
-        "tests": [
-            {
-                "description": "int by int",
-                "data": 10,
-                "valid": true
-            },
-            {
-                "description": "int by int fail",
-                "data": 7,
-                "valid": false
-            },
-            {
-                "description": "ignores non-numbers",
-                "data": "foo",
-                "valid": true
-            }
-        ]
-    },
-    {
-        "description": "by number",
-        "schema": {"multipleOf": 1.5},
-        "tests": [
-            {
-                "description": "zero is multiple of anything",
-                "data": 0,
-                "valid": true
-            },
-            {
-                "description": "4.5 is multiple of 1.5",
-                "data": 4.5,
-                "valid": true
-            },
-            {
-                "description": "35 is not multiple of 1.5",
-                "data": 35,
-                "valid": false
-            }
-        ]
-    },
-    {
-        "description": "by small number",
-        "schema": {"multipleOf": 0.0001},
-        "tests": [
-            {
-                "description": "0.0075 is multiple of 0.0001",
-                "data": 0.0075,
-                "valid": true
-            },
-            {
-                "description": "0.00751 is not multiple of 0.0001",
-                "data": 0.00751,
-                "valid": false
-            }
-        ]
-    }
-]
diff -pruN 3.0.2-4/json/tests/draft2019-06/not.json 3.2.0-5/json/tests/draft2019-06/not.json
--- 3.0.2-4/json/tests/draft2019-06/not.json	2019-08-02 00:53:34.000000000 +0000
+++ 3.2.0-5/json/tests/draft2019-06/not.json	1970-01-01 00:00:00.000000000 +0000
@@ -1,117 +0,0 @@
-[
-    {
-        "description": "not",
-        "schema": {
-            "not": {"type": "integer"}
-        },
-        "tests": [
-            {
-                "description": "allowed",
-                "data": "foo",
-                "valid": true
-            },
-            {
-                "description": "disallowed",
-                "data": 1,
-                "valid": false
-            }
-        ]
-    },
-    {
-        "description": "not multiple types",
-        "schema": {
-            "not": {"type": ["integer", "boolean"]}
-        },
-        "tests": [
-            {
-                "description": "valid",
-                "data": "foo",
-                "valid": true
-            },
-            {
-                "description": "mismatch",
-                "data": 1,
-                "valid": false
-            },
-            {
-                "description": "other mismatch",
-                "data": true,
-                "valid": false
-            }
-        ]
-    },
-    {
-        "description": "not more complex schema",
-        "schema": {
-            "not": {
-                "type": "object",
-                "properties": {
-                    "foo": {
-                        "type": "string"
-                    }
-                }
-             }
-        },
-        "tests": [
-            {
-                "description": "match",
-                "data": 1,
-                "valid": true
-            },
-            {
-                "description": "other match",
-                "data": {"foo": 1},
-                "valid": true
-            },
-            {
-                "description": "mismatch",
-                "data": {"foo": "bar"},
-                "valid": false
-            }
-        ]
-    },
-    {
-        "description": "forbidden property",
-        "schema": {
-            "properties": {
-                "foo": { 
-                    "not": {}
-                }
-            }
-        },
-        "tests": [
-            {
-                "description": "property present",
-                "data": {"foo": 1, "bar": 2},
-                "valid": false
-            },
-            {
-                "description": "property absent",
-                "data": {"bar": 1, "baz": 2},
-                "valid": true
-            }
-        ]
-    },
-    {
-        "description": "not with boolean schema true",
-        "schema": {"not": true},
-        "tests": [
-            {
-                "description": "any value is invalid",
-                "data": "foo",
-                "valid": false
-            }
-        ]
-    },
-    {
-        "description": "not with boolean schema false",
-        "schema": {"not": false},
-        "tests": [
-            {
-                "description": "any value is valid",
-                "data": "foo",
-                "valid": true
-            }
-        ]
-    }
-]
diff -pruN 3.0.2-4/json/tests/draft2019-06/oneOf.json 3.2.0-5/json/tests/draft2019-06/oneOf.json
--- 3.0.2-4/json/tests/draft2019-06/oneOf.json	2019-08-02 00:53:34.000000000 +0000
+++ 3.2.0-5/json/tests/draft2019-06/oneOf.json	1970-01-01 00:00:00.000000000 +0000
@@ -1,206 +0,0 @@
-[
-    {
-        "description": "oneOf",
-        "schema": {
-            "oneOf": [
-                {
-                    "type": "integer"
-                },
-                {
-                    "minimum": 2
-                }
-            ]
-        },
-        "tests": [
-            {
-                "description": "first oneOf valid",
-                "data": 1,
-                "valid": true
-            },
-            {
-                "description": "second oneOf valid",
-                "data": 2.5,
-                "valid": true
-            },
-            {
-                "description": "both oneOf valid",
-                "data": 3,
-                "valid": false
-            },
-            {
-                "description": "neither oneOf valid",
-                "data": 1.5,
-                "valid": false
-            }
-        ]
-    },
-    {
-        "description": "oneOf with base schema",
-        "schema": {
-            "type": "string",
-            "oneOf" : [
-                {
-                    "minLength": 2
-                },
-                {
-                    "maxLength": 4
-                }
-            ]
-        },
-        "tests": [
-            {
-                "description": "mismatch base schema",
-                "data": 3,
-                "valid": false
-            },
-            {
-                "description": "one oneOf valid",
-                "data": "foobar",
-                "valid": true
-            },
-            {
-                "description": "both oneOf valid",
-                "data": "foo",
-                "valid": false
-            }
-        ]
-    },
-    {
-        "description": "oneOf with boolean schemas, all true",
-        "schema": {"oneOf": [true, true, true]},
-        "tests": [
-            {
-                "description": "any value is invalid",
-                "data": "foo",
-                "valid": false
-            }
-        ]
-    },
-    {
-        "description": "oneOf with boolean schemas, one true",
-        "schema": {"oneOf": [true, false, false]},
-        "tests": [
-            {
-                "description": "any value is valid",
-                "data": "foo",
-                "valid": true
-            }
-        ]
-    },
-    {
-        "description": "oneOf with boolean schemas, more than one true",
-        "schema": {"oneOf": [true, true, false]},
-        "tests": [
-            {
-                "description": "any value is invalid",
-                "data": "foo",
-                "valid": false
-            }
-        ]
-    },
-    {
-        "description": "oneOf with boolean schemas, all false",
-        "schema": {"oneOf": [false, false, false]},
-        "tests": [
-            {
-                "description": "any value is invalid",
-                "data": "foo",
-                "valid": false
-            }
-        ]
-    },
-    {
-        "description": "oneOf complex types",
-        "schema": {
-            "oneOf": [
-                {
-                    "properties": {
-                        "bar": {"type": "integer"}
-                    },
-                    "required": ["bar"]
-                },
-                {
-                    "properties": {
-                        "foo": {"type": "string"}
-                    },
-                    "required": ["foo"]
-                }
-            ]
-        },
-        "tests": [
-            {
-                "description": "first oneOf valid (complex)",
-                "data": {"bar": 2},
-                "valid": true
-            },
-            {
-                "description": "second oneOf valid (complex)",
-                "data": {"foo": "baz"},
-                "valid": true
-            },
-            {
-                "description": "both oneOf valid (complex)",
-                "data": {"foo": "baz", "bar": 2},
-                "valid": false
-            },
-            {
-                "description": "neither oneOf valid (complex)",
-                "data": {"foo": 2, "bar": "quux"},
-                "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 -pruN 3.0.2-4/json/tests/draft2019-06/optional/bignum.json 3.2.0-5/json/tests/draft2019-06/optional/bignum.json
--- 3.0.2-4/json/tests/draft2019-06/optional/bignum.json	2019-08-02 00:53:34.000000000 +0000
+++ 3.2.0-5/json/tests/draft2019-06/optional/bignum.json	1970-01-01 00:00:00.000000000 +0000
@@ -1,105 +0,0 @@
-[
-    {
-        "description": "integer",
-        "schema": {"type": "integer"},
-        "tests": [
-            {
-                "description": "a bignum is an integer",
-                "data": 12345678910111213141516171819202122232425262728293031,
-                "valid": true
-            }
-        ]
-    },
-    {
-        "description": "number",
-        "schema": {"type": "number"},
-        "tests": [
-            {
-                "description": "a bignum is a number",
-                "data": 98249283749234923498293171823948729348710298301928331,
-                "valid": true
-            }
-        ]
-    },
-    {
-        "description": "integer",
-        "schema": {"type": "integer"},
-        "tests": [
-            {
-                "description": "a negative bignum is an integer",
-                "data": -12345678910111213141516171819202122232425262728293031,
-                "valid": true
-            }
-        ]
-    },
-    {
-        "description": "number",
-        "schema": {"type": "number"},
-        "tests": [
-            {
-                "description": "a negative bignum is a number",
-                "data": -98249283749234923498293171823948729348710298301928331,
-                "valid": true
-            }
-        ]
-    },
-    {
-        "description": "string",
-        "schema": {"type": "string"},
-        "tests": [
-            {
-                "description": "a bignum is not a string",
-                "data": 98249283749234923498293171823948729348710298301928331,
-                "valid": false
-            }
-        ]
-    },
-    {
-        "description": "integer comparison",
-        "schema": {"maximum": 18446744073709551615},
-        "tests": [
-            {
-                "description": "comparison works for high numbers",
-                "data": 18446744073709551600,
-                "valid": true
-            }
-        ]
-    },
-    {
-        "description": "float comparison with high precision",
-        "schema": {
-            "exclusiveMaximum": 972783798187987123879878123.18878137
-        },
-        "tests": [
-            {
-                "description": "comparison works for high numbers",
-                "data": 972783798187987123879878123.188781371,
-                "valid": false
-            }
-        ]
-    },
-    {
-        "description": "integer comparison",
-        "schema": {"minimum": -18446744073709551615},
-        "tests": [
-            {
-                "description": "comparison works for very negative numbers",
-                "data": -18446744073709551600,
-                "valid": true
-            }
-        ]
-    },
-    {
-        "description": "float comparison with high precision on negative numbers",
-        "schema": {
-            "exclusiveMinimum": -972783798187987123879878123.18878137
-        },
-        "tests": [
-            {
-                "description": "comparison works for very negative numbers",
-                "data": -972783798187987123879878123.188781371,
-                "valid": false
-            }
-        ]
-    }
-]
diff -pruN 3.0.2-4/json/tests/draft2019-06/optional/content.json 3.2.0-5/json/tests/draft2019-06/optional/content.json
--- 3.0.2-4/json/tests/draft2019-06/optional/content.json	2019-08-02 00:53:34.000000000 +0000
+++ 3.2.0-5/json/tests/draft2019-06/optional/content.json	1970-01-01 00:00:00.000000000 +0000
@@ -1,77 +0,0 @@
-[
-    {
-        "description": "validation of string-encoded content based on media type",
-        "schema": {
-            "contentMediaType": "application/json"
-        },
-        "tests": [
-            {
-                "description": "a valid JSON document",
-                "data": "{\"foo\": \"bar\"}",
-                "valid": true
-            },
-            {
-                "description": "an invalid JSON document",
-                "data": "{:}",
-                "valid": false
-            },
-            {
-                "description": "ignores non-strings",
-                "data": 100,
-                "valid": true
-            }
-        ]
-    },
-    {
-        "description": "validation of binary string-encoding",
-        "schema": {
-            "contentEncoding": "base64"
-        },
-        "tests": [
-            {
-                "description": "a valid base64 string",
-                "data": "eyJmb28iOiAiYmFyIn0K",
-                "valid": true
-            },
-            {
-                "description": "an invalid base64 string (% is not a valid character)",
-                "data": "eyJmb28iOi%iYmFyIn0K",
-                "valid": false
-            },
-            {
-                "description": "ignores non-strings",
-                "data": 100,
-                "valid": true
-            }
-        ]
-    },
-    {
-        "description": "validation of binary-encoded media type documents",
-        "schema": {
-            "contentMediaType": "application/json",
-            "contentEncoding": "base64"
-        },
-        "tests": [
-            {
-                "description": "a valid base64-encoded JSON document",
-                "data": "eyJmb28iOiAiYmFyIn0K",
-                "valid": true
-            },
-            {
-                "description": "a validly-encoded invalid JSON document",
-                "data": "ezp9Cg==",
-                "valid": false
-            },
-            {
-                "description": "an invalid base64 string that is valid JSON",
-                "data": "{}",
-                "valid": false
-            },
-            {
-                "description": "ignores non-strings",
-                "data": 100,
-                "valid": true
-            }
-        ]
-    }
-]
diff -pruN 3.0.2-4/json/tests/draft2019-06/optional/ecmascript-regex.json 3.2.0-5/json/tests/draft2019-06/optional/ecmascript-regex.json
--- 3.0.2-4/json/tests/draft2019-06/optional/ecmascript-regex.json	2019-08-02 00:53:34.000000000 +0000
+++ 3.2.0-5/json/tests/draft2019-06/optional/ecmascript-regex.json	1970-01-01 00:00:00.000000000 +0000
@@ -1,13 +0,0 @@
-[
-    {
-        "description": "ECMA 262 regex non-compliance",
-        "schema": { "format": "regex" },
-        "tests": [
-            {
-                "description": "ECMA 262 has no support for \\Z anchor from .NET",
-                "data": "^\\S(|(.|\\n)*\\S)\\Z",
-                "valid": false
-            }
-        ]
-    }
-]
diff -pruN 3.0.2-4/json/tests/draft2019-06/optional/format/date.json 3.2.0-5/json/tests/draft2019-06/optional/format/date.json
--- 3.0.2-4/json/tests/draft2019-06/optional/format/date.json	2019-08-02 00:53:34.000000000 +0000
+++ 3.2.0-5/json/tests/draft2019-06/optional/format/date.json	1970-01-01 00:00:00.000000000 +0000
@@ -1,23 +0,0 @@
-[
-    {
-        "description": "validation of date strings",
-        "schema": {"format": "date"},
-        "tests": [
-            {
-                "description": "a valid date string",
-                "data": "1963-06-19",
-                "valid": true
-            },
-            {
-                "description": "an invalid date-time string",
-                "data": "06/19/1963",
-                "valid": false
-            },
-            {
-                "description": "only RFC3339 not all of ISO 8601 are valid",
-                "data": "2013-350",
-                "valid": false
-            }
-        ]
-    }
-]
diff -pruN 3.0.2-4/json/tests/draft2019-06/optional/format/date-time.json 3.2.0-5/json/tests/draft2019-06/optional/format/date-time.json
--- 3.0.2-4/json/tests/draft2019-06/optional/format/date-time.json	2019-08-02 00:53:34.000000000 +0000
+++ 3.2.0-5/json/tests/draft2019-06/optional/format/date-time.json	1970-01-01 00:00:00.000000000 +0000
@@ -1,53 +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 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 -pruN 3.0.2-4/json/tests/draft2019-06/optional/format/email.json 3.2.0-5/json/tests/draft2019-06/optional/format/email.json
--- 3.0.2-4/json/tests/draft2019-06/optional/format/email.json	2019-08-02 00:53:34.000000000 +0000
+++ 3.2.0-5/json/tests/draft2019-06/optional/format/email.json	1970-01-01 00:00:00.000000000 +0000
@@ -1,18 +0,0 @@
-[
-    {
-        "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 -pruN 3.0.2-4/json/tests/draft2019-06/optional/format/hostname.json 3.2.0-5/json/tests/draft2019-06/optional/format/hostname.json
--- 3.0.2-4/json/tests/draft2019-06/optional/format/hostname.json	2019-08-02 00:53:34.000000000 +0000
+++ 3.2.0-5/json/tests/draft2019-06/optional/format/hostname.json	1970-01-01 00:00:00.000000000 +0000
@@ -1,33 +0,0 @@
-[
-    {
-        "description": "validation of host names",
-        "schema": {"format": "hostname"},
-        "tests": [
-            {
-                "description": "a valid host name",
-                "data": "www.example.com",
-                "valid": true
-            },
-            {
-                "description": "a valid punycoded IDN hostname",
-                "data": "xn--4gbwdl.xn--wgbh1c",
-                "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
-            }
-        ]
-    }
-]
diff -pruN 3.0.2-4/json/tests/draft2019-06/optional/format/idn-email.json 3.2.0-5/json/tests/draft2019-06/optional/format/idn-email.json
--- 3.0.2-4/json/tests/draft2019-06/optional/format/idn-email.json	2019-08-02 00:53:34.000000000 +0000
+++ 3.2.0-5/json/tests/draft2019-06/optional/format/idn-email.json	1970-01-01 00:00:00.000000000 +0000
@@ -1,18 +0,0 @@
-[
-    {
-        "description": "validation of an internationalized e-mail addresses",
-        "schema": {"format": "idn-email"},
-        "tests": [
-            {
-                "description": "a valid idn e-mail (example@example.test in Hangul)",
-                "data": "실례@실례.테스트",
-                "valid": true
-            },
-            {
-                "description": "an invalid idn e-mail address",
-                "data": "2962",
-                "valid": false
-            }
-        ]
-    }
-]
diff -pruN 3.0.2-4/json/tests/draft2019-06/optional/format/idn-hostname.json 3.2.0-5/json/tests/draft2019-06/optional/format/idn-hostname.json
--- 3.0.2-4/json/tests/draft2019-06/optional/format/idn-hostname.json	2019-08-02 00:53:34.000000000 +0000
+++ 3.2.0-5/json/tests/draft2019-06/optional/format/idn-hostname.json	1970-01-01 00:00:00.000000000 +0000
@@ -1,28 +0,0 @@
-[
-    {
-        "description": "validation of internationalized host names",
-        "schema": {"format": "idn-hostname"},
-        "tests": [
-            {
-                "description": "a valid host name (example.test in Hangul)",
-                "data": "실례.테스트",
-                "valid": true
-            },
-            {
-                "description": "illegal first char U+302E Hangul single dot tone mark",
-                "data": "〮실례.테스트",
-                "valid": false
-            },
-            {
-                "description": "contains illegal char U+302E Hangul single dot tone mark",
-                "data": "실〮례.테스트",
-                "valid": false
-            },
-            {
-                "description": "a host name with a component too long",
-                "data": "실실실실실실실실실실실실실실실실실실실실실실실실실실실실실실실실실실실실실실실실실실실실실실실실실실실실례례테스트례례례례례례례례례례례례례례례례례테스트례례례례례례례례례례례례례례례례례례례테스트례례례례례례례례례례례례테스트례례실례.테스트",
-                "valid": false
-            }
-        ]
-    }
-]
diff -pruN 3.0.2-4/json/tests/draft2019-06/optional/format/ipv4.json 3.2.0-5/json/tests/draft2019-06/optional/format/ipv4.json
--- 3.0.2-4/json/tests/draft2019-06/optional/format/ipv4.json	2019-08-02 00:53:34.000000000 +0000
+++ 3.2.0-5/json/tests/draft2019-06/optional/format/ipv4.json	1970-01-01 00:00:00.000000000 +0000
@@ -1,33 +0,0 @@
-[
-    {
-        "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 -pruN 3.0.2-4/json/tests/draft2019-06/optional/format/ipv6.json 3.2.0-5/json/tests/draft2019-06/optional/format/ipv6.json
--- 3.0.2-4/json/tests/draft2019-06/optional/format/ipv6.json	2019-08-02 00:53:34.000000000 +0000
+++ 3.2.0-5/json/tests/draft2019-06/optional/format/ipv6.json	1970-01-01 00:00:00.000000000 +0000
@@ -1,28 +0,0 @@
-[
-    {
-        "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 -pruN 3.0.2-4/json/tests/draft2019-06/optional/format/iri.json 3.2.0-5/json/tests/draft2019-06/optional/format/iri.json
--- 3.0.2-4/json/tests/draft2019-06/optional/format/iri.json	2019-08-02 00:53:34.000000000 +0000
+++ 3.2.0-5/json/tests/draft2019-06/optional/format/iri.json	1970-01-01 00:00:00.000000000 +0000
@@ -1,53 +0,0 @@
-[
-    {
-        "description": "validation of IRIs",
-        "schema": {"format": "iri"},
-        "tests": [
-            {
-                "description": "a valid IRI with anchor tag",
-                "data": "http://ƒøø.ßår/?∂éœ=πîx#πîüx",
-                "valid": true
-            },
-            {
-                "description": "a valid IRI with anchor tag and parantheses",
-                "data": "http://ƒøø.com/blah_(wîkïpédiå)_blah#ßité-1",
-                "valid": true
-            },
-            {
-                "description": "a valid IRI with URL-encoded stuff",
-                "data": "http://ƒøø.ßår/?q=Test%20URL-encoded%20stuff",
-                "valid": true
-            },
-            {
-                "description": "a valid IRI with many special characters",
-                "data": "http://-.~_!$&'()*+,;=:%40:80%2f::::::@example.com",
-                "valid": true
-            },
-            {
-                "description": "a valid IRI based on IPv6",
-                "data": "http://[2001:0db8:85a3:0000:0000:8a2e:0370:7334]",
-                "valid": true
-            },
-            {
-                "description": "an invalid IRI based on IPv6",
-                "data": "http://2001:0db8:85a3:0000:0000:8a2e:0370:7334",
-                "valid": false
-            },
-            {
-                "description": "an invalid relative IRI Reference",
-                "data": "/abc",
-                "valid": false
-            },
-            {
-                "description": "an invalid IRI",
-                "data": "\\\\WINDOWS\\filëßåré",
-                "valid": false
-            },
-            {
-                "description": "an invalid IRI though valid IRI reference",
-                "data": "âππ",
-                "valid": false
-            }
-        ]
-    }
-]
diff -pruN 3.0.2-4/json/tests/draft2019-06/optional/format/iri-reference.json 3.2.0-5/json/tests/draft2019-06/optional/format/iri-reference.json
--- 3.0.2-4/json/tests/draft2019-06/optional/format/iri-reference.json	2019-08-02 00:53:34.000000000 +0000
+++ 3.2.0-5/json/tests/draft2019-06/optional/format/iri-reference.json	1970-01-01 00:00:00.000000000 +0000
@@ -1,43 +0,0 @@
-[
-    {
-        "description": "validation of IRI References",
-        "schema": {"format": "iri-reference"},
-        "tests": [
-            {
-                "description": "a valid IRI",
-                "data": "http://ƒøø.ßår/?∂éœ=πîx#πîüx",
-                "valid": true
-            },
-            {
-                "description": "a valid protocol-relative IRI Reference",
-                "data": "//ƒøø.ßår/?∂éœ=πîx#πîüx",
-                "valid": true
-            },
-            {
-                "description": "a valid relative IRI Reference",
-                "data": "/âππ",
-                "valid": true
-            },
-            {
-                "description": "an invalid IRI Reference",
-                "data": "\\\\WINDOWS\\filëßåré",
-                "valid": false
-            },
-            {
-                "description": "a valid IRI Reference",
-                "data": "âππ",
-                "valid": true
-            },
-            {
-                "description": "a valid IRI fragment",
-                "data": "#ƒrägmênt",
-                "valid": true
-            },
-            {
-                "description": "an invalid IRI fragment",
-                "data": "#ƒräg\\mênt",
-                "valid": false
-            }
-        ]
-    }
-]
diff -pruN 3.0.2-4/json/tests/draft2019-06/optional/format/json-pointer.json 3.2.0-5/json/tests/draft2019-06/optional/format/json-pointer.json
--- 3.0.2-4/json/tests/draft2019-06/optional/format/json-pointer.json	2019-08-02 00:53:34.000000000 +0000
+++ 3.2.0-5/json/tests/draft2019-06/optional/format/json-pointer.json	1970-01-01 00:00:00.000000000 +0000
@@ -1,168 +0,0 @@
-[
-    {
-        "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 -pruN 3.0.2-4/json/tests/draft2019-06/optional/format/regex.json 3.2.0-5/json/tests/draft2019-06/optional/format/regex.json
--- 3.0.2-4/json/tests/draft2019-06/optional/format/regex.json	2019-08-02 00:53:34.000000000 +0000
+++ 3.2.0-5/json/tests/draft2019-06/optional/format/regex.json	1970-01-01 00:00:00.000000000 +0000
@@ -1,18 +0,0 @@
-[
-    {
-        "description": "validation of regular expressions",
-        "schema": {"format": "regex"},
-        "tests": [
-            {
-                "description": "a valid regular expression",
-                "data": "([abc])+\\s+$",
-                "valid": true
-            },
-            {
-                "description": "a regular expression with unclosed parens is invalid",
-                "data": "^(abc]",
-                "valid": false
-            }
-        ]
-    }
-]
diff -pruN 3.0.2-4/json/tests/draft2019-06/optional/format/relative-json-pointer.json 3.2.0-5/json/tests/draft2019-06/optional/format/relative-json-pointer.json
--- 3.0.2-4/json/tests/draft2019-06/optional/format/relative-json-pointer.json	2019-08-02 00:53:34.000000000 +0000
+++ 3.2.0-5/json/tests/draft2019-06/optional/format/relative-json-pointer.json	1970-01-01 00:00:00.000000000 +0000
@@ -1,33 +0,0 @@
-[
-    {
-        "description": "validation of Relative JSON Pointers (RJP)",
-        "schema": {"format": "relative-json-pointer"},
-        "tests": [
-            {
-                "description": "a valid upwards RJP",
-                "data": "1",
-                "valid": true
-            },
-            {
-                "description": "a valid downwards RJP",  
-                "data": "0/foo/bar",
-                "valid": true
-            },
-            {
-                "description": "a valid up and then down RJP, with array index",
-                "data": "2/0/baz/1/zip",
-                "valid": true
-            },
-            {
-                "description": "a valid RJP taking the member or index name",
-                "data": "0#",
-                "valid": true
-            },
-            {
-                "description": "an invalid RJP that is a valid JSON Pointer",
-                "data": "/foo/bar",
-                "valid": false
-            }
-        ]
-    }
-]
diff -pruN 3.0.2-4/json/tests/draft2019-06/optional/format/time.json 3.2.0-5/json/tests/draft2019-06/optional/format/time.json
--- 3.0.2-4/json/tests/draft2019-06/optional/format/time.json	2019-08-02 00:53:34.000000000 +0000
+++ 3.2.0-5/json/tests/draft2019-06/optional/format/time.json	1970-01-01 00:00:00.000000000 +0000
@@ -1,23 +0,0 @@
-[
-    {
-        "description": "validation of time strings",
-        "schema": {"format": "time"},
-        "tests": [
-            {
-                "description": "a valid time string",
-                "data": "08:30:06.283185Z",
-                "valid": true
-            },
-            {
-                "description": "an invalid time string",
-                "data": "08:30:06 PST",
-                "valid": false
-            },
-            {
-                "description": "only RFC3339 not all of ISO 8601 are valid",
-                "data": "01:01:01,1111",
-                "valid": false
-            }
-        ]
-    }
-]
diff -pruN 3.0.2-4/json/tests/draft2019-06/optional/format/uri.json 3.2.0-5/json/tests/draft2019-06/optional/format/uri.json
--- 3.0.2-4/json/tests/draft2019-06/optional/format/uri.json	2019-08-02 00:53:34.000000000 +0000
+++ 3.2.0-5/json/tests/draft2019-06/optional/format/uri.json	1970-01-01 00:00:00.000000000 +0000
@@ -1,103 +0,0 @@
-[
-    {
-        "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 -pruN 3.0.2-4/json/tests/draft2019-06/optional/format/uri-reference.json 3.2.0-5/json/tests/draft2019-06/optional/format/uri-reference.json
--- 3.0.2-4/json/tests/draft2019-06/optional/format/uri-reference.json	2019-08-02 00:53:34.000000000 +0000
+++ 3.2.0-5/json/tests/draft2019-06/optional/format/uri-reference.json	1970-01-01 00:00:00.000000000 +0000
@@ -1,43 +0,0 @@
-[
-    {
-        "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 -pruN 3.0.2-4/json/tests/draft2019-06/optional/format/uri-template.json 3.2.0-5/json/tests/draft2019-06/optional/format/uri-template.json
--- 3.0.2-4/json/tests/draft2019-06/optional/format/uri-template.json	2019-08-02 00:53:34.000000000 +0000
+++ 3.2.0-5/json/tests/draft2019-06/optional/format/uri-template.json	1970-01-01 00:00:00.000000000 +0000
@@ -1,30 +0,0 @@
-[
-    {
-        "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 -pruN 3.0.2-4/json/tests/draft2019-06/optional/zeroTerminatedFloats.json 3.2.0-5/json/tests/draft2019-06/optional/zeroTerminatedFloats.json
--- 3.0.2-4/json/tests/draft2019-06/optional/zeroTerminatedFloats.json	2019-08-02 00:53:34.000000000 +0000
+++ 3.2.0-5/json/tests/draft2019-06/optional/zeroTerminatedFloats.json	1970-01-01 00:00:00.000000000 +0000
@@ -1,15 +0,0 @@
-[
-    {
-        "description": "some languages do not distinguish between different types of numeric value",
-        "schema": {
-            "type": "integer"
-        },
-        "tests": [
-            {
-                "description": "a float without fractional part is an integer",
-                "data": 1.0,
-                "valid": true
-            }
-        ]
-    }
-]
diff -pruN 3.0.2-4/json/tests/draft2019-06/pattern.json 3.2.0-5/json/tests/draft2019-06/pattern.json
--- 3.0.2-4/json/tests/draft2019-06/pattern.json	2019-08-02 00:53:34.000000000 +0000
+++ 3.2.0-5/json/tests/draft2019-06/pattern.json	1970-01-01 00:00:00.000000000 +0000
@@ -1,34 +0,0 @@
-[
-    {
-        "description": "pattern validation",
-        "schema": {"pattern": "^a*$"},
-        "tests": [
-            {
-                "description": "a matching pattern is valid",
-                "data": "aaa",
-                "valid": true
-            },
-            {
-                "description": "a non-matching pattern is invalid",
-                "data": "abc",
-                "valid": false
-            },
-            {
-                "description": "ignores non-strings",
-                "data": true,
-                "valid": true
-            }
-        ]
-    },
-    {
-        "description": "pattern is not anchored",
-        "schema": {"pattern": "a+"},
-        "tests": [
-            {
-                "description": "matches a substring",
-                "data": "xxaayy",
-                "valid": true
-            }
-        ]
-    }
-]
diff -pruN 3.0.2-4/json/tests/draft2019-06/patternProperties.json 3.2.0-5/json/tests/draft2019-06/patternProperties.json
--- 3.0.2-4/json/tests/draft2019-06/patternProperties.json	2019-08-02 00:53:34.000000000 +0000
+++ 3.2.0-5/json/tests/draft2019-06/patternProperties.json	1970-01-01 00:00:00.000000000 +0000
@@ -1,151 +0,0 @@
-[
-    {
-        "description":
-            "patternProperties validates properties matching a regex",
-        "schema": {
-            "patternProperties": {
-                "f.*o": {"type": "integer"}
-            }
-        },
-        "tests": [
-            {
-                "description": "a single valid match is valid",
-                "data": {"foo": 1},
-                "valid": true
-            },
-            {
-                "description": "multiple valid matches is valid",
-                "data": {"foo": 1, "foooooo" : 2},
-                "valid": true
-            },
-            {
-                "description": "a single invalid match is invalid",
-                "data": {"foo": "bar", "fooooo": 2},
-                "valid": false
-            },
-            {
-                "description": "multiple invalid matches is invalid",
-                "data": {"foo": "bar", "foooooo" : "baz"},
-                "valid": false
-            },
-            {
-                "description": "ignores arrays",
-                "data": ["foo"],
-                "valid": true
-            },
-            {
-                "description": "ignores strings",
-                "data": "foo",
-                "valid": true
-            },
-            {
-                "description": "ignores other non-objects",
-                "data": 12,
-                "valid": true
-            }
-        ]
-    },
-    {
-        "description": "multiple simultaneous patternProperties are validated",
-        "schema": {
-            "patternProperties": {
-                "a*": {"type": "integer"},
-                "aaa*": {"maximum": 20}
-            }
-        },
-        "tests": [
-            {
-                "description": "a single valid match is valid",
-                "data": {"a": 21},
-                "valid": true
-            },
-            {
-                "description": "a simultaneous match is valid",
-                "data": {"aaaa": 18},
-                "valid": true
-            },
-            {
-                "description": "multiple matches is valid",
-                "data": {"a": 21, "aaaa": 18},
-                "valid": true
-            },
-            {
-                "description": "an invalid due to one is invalid",
-                "data": {"a": "bar"},
-                "valid": false
-            },
-            {
-                "description": "an invalid due to the other is invalid",
-                "data": {"aaaa": 31},
-                "valid": false
-            },
-            {
-                "description": "an invalid due to both is invalid",
-                "data": {"aaa": "foo", "aaaa": 31},
-                "valid": false
-            }
-        ]
-    },
-    {
-        "description": "regexes are not anchored by default and are case sensitive",
-        "schema": {
-            "patternProperties": {
-                "[0-9]{2,}": { "type": "boolean" },
-                "X_": { "type": "string" }
-            }
-        },
-        "tests": [
-            {
-                "description": "non recognized members are ignored",
-                "data": { "answer 1": "42" },
-                "valid": true
-            },
-            {
-                "description": "recognized members are accounted for",
-                "data": { "a31b": null },
-                "valid": false
-            },
-            {
-                "description": "regexes are case sensitive",
-                "data": { "a_x_3": 3 },
-                "valid": true
-            },
-            {
-                "description": "regexes are case sensitive, 2",
-                "data": { "a_X_3": 3 },
-                "valid": false
-            }
-        ]
-    },
-    {
-        "description": "patternProperties with boolean schemas",
-        "schema": {
-            "patternProperties": {
-                "f.*": true,
-                "b.*": false
-            }
-        },
-        "tests": [
-            {
-                "description": "object with property matching schema true is valid",
-                "data": {"foo": 1},
-                "valid": true
-            },
-            {
-                "description": "object with property matching schema false is invalid",
-                "data": {"bar": 2},
-                "valid": false
-            },
-            {
-                "description": "object with both properties is invalid",
-                "data": {"foo": 1, "bar": 2},
-                "valid": false
-            },
-            {
-                "description": "empty object is valid",
-                "data": {},
-                "valid": true
-            }
-        ]
-    }
-]
diff -pruN 3.0.2-4/json/tests/draft2019-06/properties.json 3.2.0-5/json/tests/draft2019-06/properties.json
--- 3.0.2-4/json/tests/draft2019-06/properties.json	2019-08-02 00:53:34.000000000 +0000
+++ 3.2.0-5/json/tests/draft2019-06/properties.json	1970-01-01 00:00:00.000000000 +0000
@@ -1,167 +0,0 @@
-[
-    {
-        "description": "object properties validation",
-        "schema": {
-            "properties": {
-                "foo": {"type": "integer"},
-                "bar": {"type": "string"}
-            }
-        },
-        "tests": [
-            {
-                "description": "both properties present and valid is valid",
-                "data": {"foo": 1, "bar": "baz"},
-                "valid": true
-            },
-            {
-                "description": "one property invalid is invalid",
-                "data": {"foo": 1, "bar": {}},
-                "valid": false
-            },
-            {
-                "description": "both properties invalid is invalid",
-                "data": {"foo": [], "bar": {}},
-                "valid": false
-            },
-            {
-                "description": "doesn't invalidate other properties",
-                "data": {"quux": []},
-                "valid": true
-            },
-            {
-                "description": "ignores arrays",
-                "data": [],
-                "valid": true
-            },
-            {
-                "description": "ignores other non-objects",
-                "data": 12,
-                "valid": true
-            }
-        ]
-    },
-    {
-        "description":
-            "properties, patternProperties, additionalProperties interaction",
-        "schema": {
-            "properties": {
-                "foo": {"type": "array", "maxItems": 3},
-                "bar": {"type": "array"}
-            },
-            "patternProperties": {"f.o": {"minItems": 2}},
-            "additionalProperties": {"type": "integer"}
-        },
-        "tests": [
-            {
-                "description": "property validates property",
-                "data": {"foo": [1, 2]},
-                "valid": true
-            },
-            {
-                "description": "property invalidates property",
-                "data": {"foo": [1, 2, 3, 4]},
-                "valid": false
-            },
-            {
-                "description": "patternProperty invalidates property",
-                "data": {"foo": []},
-                "valid": false
-            },
-            {
-                "description": "patternProperty validates nonproperty",
-                "data": {"fxo": [1, 2]},
-                "valid": true
-            },
-            {
-                "description": "patternProperty invalidates nonproperty",
-                "data": {"fxo": []},
-                "valid": false
-            },
-            {
-                "description": "additionalProperty ignores property",
-                "data": {"bar": []},
-                "valid": true
-            },
-            {
-                "description": "additionalProperty validates others",
-                "data": {"quux": 3},
-                "valid": true
-            },
-            {
-                "description": "additionalProperty invalidates others",
-                "data": {"quux": "foo"},
-                "valid": false
-            }
-        ]
-    },
-    {
-        "description": "properties with boolean schema",
-        "schema": {
-            "properties": {
-                "foo": true,
-                "bar": false
-            }
-        },
-        "tests": [
-            {
-                "description": "no property present is valid",
-                "data": {},
-                "valid": true
-            },
-            {
-                "description": "only 'true' property present is valid",
-                "data": {"foo": 1},
-                "valid": true
-            },
-            {
-                "description": "only 'false' property present is invalid",
-                "data": {"bar": 2},
-                "valid": false
-            },
-            {
-                "description": "both properties present is invalid",
-                "data": {"foo": 1, "bar": 2},
-                "valid": false
-            }
-        ]
-    },
-    {
-        "description": "properties with escaped characters",
-        "schema": {
-            "properties": {
-                "foo\nbar": {"type": "number"},
-                "foo\"bar": {"type": "number"},
-                "foo\\bar": {"type": "number"},
-                "foo\rbar": {"type": "number"},
-                "foo\tbar": {"type": "number"},
-                "foo\fbar": {"type": "number"}
-            }
-        },
-        "tests": [
-            {
-                "description": "object with all numbers is valid",
-                "data": {
-                    "foo\nbar": 1,
-                    "foo\"bar": 1,
-                    "foo\\bar": 1,
-                    "foo\rbar": 1,
-                    "foo\tbar": 1,
-                    "foo\fbar": 1
-                },
-                "valid": true
-            },
-            {
-                "description": "object with strings is invalid",
-                "data": {
-                    "foo\nbar": "1",
-                    "foo\"bar": "1",
-                    "foo\\bar": "1",
-                    "foo\rbar": "1",
-                    "foo\tbar": "1",
-                    "foo\fbar": "1"
-                },
-                "valid": false
-            }
-        ]
-    }
-]
diff -pruN 3.0.2-4/json/tests/draft2019-06/propertyNames.json 3.2.0-5/json/tests/draft2019-06/propertyNames.json
--- 3.0.2-4/json/tests/draft2019-06/propertyNames.json	2019-08-02 00:53:34.000000000 +0000
+++ 3.2.0-5/json/tests/draft2019-06/propertyNames.json	1970-01-01 00:00:00.000000000 +0000
@@ -1,78 +0,0 @@
-[
-    {
-        "description": "propertyNames validation",
-        "schema": {
-            "propertyNames": {"maxLength": 3}
-        },
-        "tests": [
-            {
-                "description": "all property names valid",
-                "data": {
-                    "f": {},
-                    "foo": {}
-                },
-                "valid": true
-            },
-            {
-                "description": "some property names invalid",
-                "data": {
-                    "foo": {},
-                    "foobar": {}
-                },
-                "valid": false
-            },
-            {
-                "description": "object without properties is valid",
-                "data": {},
-                "valid": true
-            },
-            {
-                "description": "ignores arrays",
-                "data": [1, 2, 3, 4],
-                "valid": true
-            },
-            {
-                "description": "ignores strings",
-                "data": "foobar",
-                "valid": true
-            },
-            {
-                "description": "ignores other non-objects",
-                "data": 12,
-                "valid": true
-            }
-        ]
-    },
-    {
-        "description": "propertyNames with boolean schema true",
-        "schema": {"propertyNames": true},
-        "tests": [
-            {
-                "description": "object with any properties is valid",
-                "data": {"foo": 1},
-                "valid": true
-            },
-            {
-                "description": "empty object is valid",
-                "data": {},
-                "valid": true
-            }
-        ]
-    },
-    {
-        "description": "propertyNames with boolean schema false",
-        "schema": {"propertyNames": false},
-        "tests": [
-            {
-                "description": "object with any properties is invalid",
-                "data": {"foo": 1},
-                "valid": false
-            },
-            {
-                "description": "empty object is valid",
-                "data": {},
-                "valid": true
-            }
-        ]
-    }
-]
diff -pruN 3.0.2-4/json/tests/draft2019-06/ref.json 3.2.0-5/json/tests/draft2019-06/ref.json
--- 3.0.2-4/json/tests/draft2019-06/ref.json	2019-08-02 00:53:34.000000000 +0000
+++ 3.2.0-5/json/tests/draft2019-06/ref.json	1970-01-01 00:00:00.000000000 +0000
@@ -1,443 +0,0 @@
-[
-    {
-        "description": "root pointer ref",
-        "schema": {
-            "properties": {
-                "foo": {"$ref": "#"}
-            },
-            "additionalProperties": false
-        },
-        "tests": [
-            {
-                "description": "match",
-                "data": {"foo": false},
-                "valid": true
-            },
-            {
-                "description": "recursive match",
-                "data": {"foo": {"foo": false}},
-                "valid": true
-            },
-            {
-                "description": "mismatch",
-                "data": {"bar": false},
-                "valid": false
-            },
-            {
-                "description": "recursive mismatch",
-                "data": {"foo": {"bar": false}},
-                "valid": false
-            }
-        ]
-    },
-    {
-        "description": "relative pointer ref to object",
-        "schema": {
-            "properties": {
-                "foo": {"type": "integer"},
-                "bar": {"$ref": "#/properties/foo"}
-            }
-        },
-        "tests": [
-            {
-                "description": "match",
-                "data": {"bar": 3},
-                "valid": true
-            },
-            {
-                "description": "mismatch",
-                "data": {"bar": true},
-                "valid": false
-            }
-        ]
-    },
-    {
-        "description": "relative pointer ref to array",
-        "schema": {
-            "items": [
-                {"type": "integer"},
-                {"$ref": "#/items/0"}
-            ]
-        },
-        "tests": [
-            {
-                "description": "match array",
-                "data": [1, 2],
-                "valid": true
-            },
-            {
-                "description": "mismatch array",
-                "data": [1, "foo"],
-                "valid": false
-            }
-        ]
-    },
-    {
-        "description": "escaped pointer ref",
-        "schema": {
-            "tilda~field": {"type": "integer"},
-            "slash/field": {"type": "integer"},
-            "percent%field": {"type": "integer"},
-            "properties": {
-                "tilda": {"$ref": "#/tilda~0field"},
-                "slash": {"$ref": "#/slash~1field"},
-                "percent": {"$ref": "#/percent%25field"}
-            }
-        },
-        "tests": [
-            {
-                "description": "slash invalid",
-                "data": {"slash": "aoeu"},
-                "valid": false
-            },
-            {
-                "description": "tilda invalid",
-                "data": {"tilda": "aoeu"},
-                "valid": false
-            },
-            {
-                "description": "percent invalid",
-                "data": {"percent": "aoeu"},
-                "valid": false
-            },
-            {
-                "description": "slash valid",
-                "data": {"slash": 123},
-                "valid": true
-            },
-            {
-                "description": "tilda valid",
-                "data": {"tilda": 123},
-                "valid": true
-            },
-            {
-                "description": "percent valid",
-                "data": {"percent": 123},
-                "valid": true
-            }
-        ]
-    },
-    {
-        "description": "nested refs",
-        "schema": {
-            "$defs": {
-                "a": {"type": "integer"},
-                "b": {"$ref": "#/$defs/a"},
-                "c": {"$ref": "#/$defs/b"}
-            },
-            "$ref": "#/$defs/c"
-        },
-        "tests": [
-            {
-                "description": "nested ref valid",
-                "data": 5,
-                "valid": true
-            },
-            {
-                "description": "nested ref invalid",
-                "data": "a",
-                "valid": false
-            }
-        ]
-    },
-    {
-        "description": "ref overrides any sibling keywords",
-        "schema": {
-            "$defs": {
-                "reffed": {
-                    "type": "array"
-                }
-            },
-            "properties": {
-                "foo": {
-                    "$ref": "#/$defs/reffed",
-                    "maxItems": 2
-                }
-            }
-        },
-        "tests": [
-            {
-                "description": "ref valid",
-                "data": { "foo": [] },
-                "valid": true
-            },
-            {
-                "description": "ref valid, maxItems ignored",
-                "data": { "foo": [ 1, 2, 3] },
-                "valid": true
-            },
-            {
-                "description": "ref invalid",
-                "data": { "foo": "string" },
-                "valid": false
-            }
-        ]
-    },
-    {
-        "description": "remote ref, containing refs itself",
-        "schema": {"$ref": "http://json-schema.org/draft/2019-06/schema#"},
-        "tests": [
-            {
-                "description": "remote ref valid",
-                "data": {"minLength": 1},
-                "valid": true
-            },
-            {
-                "description": "remote ref invalid",
-                "data": {"minLength": -1},
-                "valid": false
-            }
-        ]
-    },
-    {
-        "description": "property named $ref that is not a reference",
-        "schema": {
-            "properties": {
-                "$ref": {"type": "string"}
-            }
-        },
-        "tests": [
-            {
-                "description": "property named $ref valid",
-                "data": {"$ref": "a"},
-                "valid": true
-            },
-            {
-                "description": "property named $ref invalid",
-                "data": {"$ref": 2},
-                "valid": false
-            }
-        ]
-    },
-    {
-        "description": "$ref to boolean schema true",
-        "schema": {
-            "$ref": "#/$defs/bool",
-            "$defs": {
-                "bool": true
-            }
-        },
-        "tests": [
-            {
-                "description": "any value is valid",
-                "data": "foo",
-                "valid": true
-            }
-        ]
-    },
-    {
-        "description": "$ref to boolean schema false",
-        "schema": {
-            "$ref": "#/$defs/bool",
-            "$defs": {
-                "bool": false
-            }
-        },
-        "tests": [
-            {
-                "description": "any value is invalid",
-                "data": "foo",
-                "valid": false
-            }
-        ]
-    },
-    {
-        "description": "Recursive references between schemas",
-        "schema": {
-            "$id": "http://localhost:1234/tree",
-            "description": "tree of nodes",
-            "type": "object",
-            "properties": {
-                "meta": {"type": "string"},
-                "nodes": {
-                    "type": "array",
-                    "items": {"$ref": "node"}
-                }
-            },
-            "required": ["meta", "nodes"],
-            "$defs": {
-                "node": {
-                    "$id": "http://localhost:1234/node",
-                    "description": "node",
-                    "type": "object",
-                    "properties": {
-                        "value": {"type": "number"},
-                        "subtree": {"$ref": "tree"}
-                    },
-                    "required": ["value"]
-                }
-            }
-        },
-        "tests": [
-            {
-                "description": "valid tree",
-                "data": { 
-                    "meta": "root",
-                    "nodes": [
-                        {
-                            "value": 1,
-                            "subtree": {
-                                "meta": "child",
-                                "nodes": [
-                                    {"value": 1.1},
-                                    {"value": 1.2}
-                                ]
-                            }
-                        },
-                        {
-                            "value": 2,
-                            "subtree": {
-                                "meta": "child",
-                                "nodes": [
-                                    {"value": 2.1},
-                                    {"value": 2.2}
-                                ]
-                            }
-                        }
-                    ]
-                },
-                "valid": true
-            },
-            {
-                "description": "invalid tree",
-                "data": { 
-                    "meta": "root",
-                    "nodes": [
-                        {
-                            "value": 1,
-                            "subtree": {
-                                "meta": "child",
-                                "nodes": [
-                                    {"value": "string is invalid"},
-                                    {"value": 1.2}
-                                ]
-                            }
-                        },
-                        {
-                            "value": 2,
-                            "subtree": {
-                                "meta": "child",
-                                "nodes": [
-                                    {"value": 2.1},
-                                    {"value": 2.2}
-                                ]
-                            }
-                        }
-                    ]
-                },
-                "valid": false
-            }
-        ]
-    },
-    {
-        "description": "refs with quote",
-        "schema": {
-            "properties": {
-                "foo\"bar": {"$ref": "#/$defs/foo%22bar"}
-            },
-            "$defs": {
-                "foo\"bar": {"type": "number"}
-            }
-        },
-        "tests": [
-            {
-                "description": "object with numbers is valid",
-                "data": {
-                    "foo\"bar": 1
-                },
-                "valid": true
-            },
-            {
-                "description": "object with strings is invalid",
-                "data": {
-                    "foo\"bar": "1"
-                },
-                "valid": false
-            }
-        ]
-    },
-    {
-        "description": "Location-independent identifier",
-        "schema": {
-            "allOf": [{
-                "$ref": "#foo"
-            }],
-            "$defs": {
-                "A": {
-                    "$id": "#foo",
-                    "type": "integer"
-                }
-            }
-        },
-        "tests": [
-            {
-                "data": 1,
-                "description": "match",
-                "valid": true
-            },
-            {
-                "data": "a",
-                "description": "mismatch",
-                "valid": false
-            }
-        ]
-    },
-    {
-        "description": "Location-independent identifier with absolute URI",
-        "schema": {
-            "allOf": [{
-                "$ref": "http://localhost:1234/bar#foo"
-            }],
-            "$defs": {
-                "A": {
-                    "$id": "http://localhost:1234/bar#foo",
-                    "type": "integer"
-                }
-            }
-        },
-        "tests": [
-            {
-                "data": 1,
-                "description": "match",
-                "valid": true
-            },
-            {
-                "data": "a",
-                "description": "mismatch",
-                "valid": false
-            }
-        ]
-    },
-    {
-        "description": "Location-independent identifier with base URI change in subschema",
-        "schema": {
-            "$id": "http://localhost:1234/root",
-            "allOf": [{
-                "$ref": "http://localhost:1234/nested.json#foo"
-            }],
-            "$defs": {
-                "A": {
-                    "$id": "nested.json",
-                    "$defs": {
-                        "B": {
-                            "$id": "#foo",
-                            "type": "integer"
-                        }
-                    }
-                }
-            }
-        },
-        "tests": [
-            {
-                "data": 1,
-                "description": "match",
-                "valid": true
-            },
-            {
-                "data": "a",
-                "description": "mismatch",
-                "valid": false
-            }
-        ]
-    }
-]
diff -pruN 3.0.2-4/json/tests/draft2019-06/refRemote.json 3.2.0-5/json/tests/draft2019-06/refRemote.json
--- 3.0.2-4/json/tests/draft2019-06/refRemote.json	2019-08-02 00:53:34.000000000 +0000
+++ 3.2.0-5/json/tests/draft2019-06/refRemote.json	1970-01-01 00:00:00.000000000 +0000
@@ -1,167 +0,0 @@
-[
-    {
-        "description": "remote ref",
-        "schema": {"$ref": "http://localhost:1234/integer.json"},
-        "tests": [
-            {
-                "description": "remote ref valid",
-                "data": 1,
-                "valid": true
-            },
-            {
-                "description": "remote ref invalid",
-                "data": "a",
-                "valid": false
-            }
-        ]
-    },
-    {
-        "description": "fragment within remote ref",
-        "schema": {"$ref": "http://localhost:1234/subSchemas.json#/integer"},
-        "tests": [
-            {
-                "description": "remote fragment valid",
-                "data": 1,
-                "valid": true
-            },
-            {
-                "description": "remote fragment invalid",
-                "data": "a",
-                "valid": false
-            }
-        ]
-    },
-    {
-        "description": "ref within remote ref",
-        "schema": {
-            "$ref": "http://localhost:1234/subSchemas.json#/refToInteger"
-        },
-        "tests": [
-            {
-                "description": "ref within ref valid",
-                "data": 1,
-                "valid": true
-            },
-            {
-                "description": "ref within ref invalid",
-                "data": "a",
-                "valid": false
-            }
-        ]
-    },
-    {
-        "description": "base URI change",
-        "schema": {
-            "$id": "http://localhost:1234/",
-            "items": {
-                "$id": "folder/",
-                "items": {"$ref": "folderInteger.json"}
-            }
-        },
-        "tests": [
-            {
-                "description": "base URI change ref valid",
-                "data": [[1]],
-                "valid": true
-            },
-            {
-                "description": "base URI change ref invalid",
-                "data": [["a"]],
-                "valid": false
-            }
-        ]
-    },
-    {
-        "description": "base URI change - change folder",
-        "schema": {
-            "$id": "http://localhost:1234/scope_change_defs1.json",
-            "type" : "object",
-            "properties": {"list": {"$ref": "#/$defs/baz"}},
-            "$defs": {
-                "baz": {
-                    "$id": "folder/",
-                    "type": "array",
-                    "items": {"$ref": "folderInteger.json"}
-                }
-            }
-        },
-        "tests": [
-            {
-                "description": "number is valid",
-                "data": {"list": [1]},
-                "valid": true
-            },
-            {
-                "description": "string is invalid",
-                "data": {"list": ["a"]},
-                "valid": false
-            }
-        ]
-    },
-    {
-        "description": "base URI change - change folder in subschema",
-        "schema": {
-            "$id": "http://localhost:1234/scope_change_defs2.json",
-            "type" : "object",
-            "properties": {"list": {"$ref": "#/$defs/baz/$defs/bar"}},
-            "$defs": {
-                "baz": {
-                    "$id": "folder/",
-                    "$defs": {
-                        "bar": {
-                            "type": "array",
-                            "items": {"$ref": "folderInteger.json"}
-                        }
-                    }
-                }
-            }
-        },
-        "tests": [
-            {
-                "description": "number is valid",
-                "data": {"list": [1]},
-                "valid": true
-            },
-            {
-                "description": "string is invalid",
-                "data": {"list": ["a"]},
-                "valid": false
-            }
-        ]
-    },
-    {
-        "description": "root ref in remote ref",
-        "schema": {
-            "$id": "http://localhost:1234/object",
-            "type": "object",
-            "properties": {
-                "name": {"$ref": "name-defs.json#/$defs/orNull"}
-            }
-        },
-        "tests": [
-            {
-                "description": "string is valid",
-                "data": {
-                    "name": "foo"
-                },
-                "valid": true
-            },
-            {
-                "description": "null is valid",
-                "data": {
-                    "name": null
-                },
-                "valid": true
-            },
-            {
-                "description": "object is invalid",
-                "data": {
-                    "name": {
-                        "name": null
-                    }
-                },
-                "valid": false
-            }
-        ]
-    }
-]
diff -pruN 3.0.2-4/json/tests/draft2019-06/required.json 3.2.0-5/json/tests/draft2019-06/required.json
--- 3.0.2-4/json/tests/draft2019-06/required.json	2019-08-02 00:53:34.000000000 +0000
+++ 3.2.0-5/json/tests/draft2019-06/required.json	1970-01-01 00:00:00.000000000 +0000
@@ -1,105 +0,0 @@
-[
-    {
-        "description": "required validation",
-        "schema": {
-            "properties": {
-                "foo": {},
-                "bar": {}
-            },
-            "required": ["foo"]
-        },
-        "tests": [
-            {
-                "description": "present required property is valid",
-                "data": {"foo": 1},
-                "valid": true
-            },
-            {
-                "description": "non-present required property is invalid",
-                "data": {"bar": 1},
-                "valid": false
-            },
-            {
-                "description": "ignores arrays",
-                "data": [],
-                "valid": true
-            },
-            {
-                "description": "ignores strings",
-                "data": "",
-                "valid": true
-            },
-            {
-                "description": "ignores other non-objects",
-                "data": 12,
-                "valid": true
-            }
-        ]
-    },
-    {
-        "description": "required default validation",
-        "schema": {
-            "properties": {
-                "foo": {}
-            }
-        },
-        "tests": [
-            {
-                "description": "not required by default",
-                "data": {},
-                "valid": true
-            }
-        ]
-    },
-    {
-        "description": "required with empty array",
-        "schema": {
-            "properties": {
-                "foo": {}
-            },
-            "required": []
-        },
-        "tests": [
-            {
-                "description": "property not required",
-                "data": {},
-                "valid": true
-            }
-        ]
-    },
-    {
-        "description": "required with escaped characters",
-        "schema": {
-            "required": [
-                "foo\nbar",
-                "foo\"bar",
-                "foo\\bar",
-                "foo\rbar",
-                "foo\tbar",
-                "foo\fbar"
-            ]
-        },
-        "tests": [
-            {
-                "description": "object with all properties present is valid",
-                "data": {
-                    "foo\nbar": 1,
-                    "foo\"bar": 1,
-                    "foo\\bar": 1,
-                    "foo\rbar": 1,
-                    "foo\tbar": 1,
-                    "foo\fbar": 1
-                },
-                "valid": true
-            },
-            {
-                "description": "object with some properties missing is invalid",
-                "data": {
-                    "foo\nbar": "1",
-                    "foo\"bar": "1"
-                },
-                "valid": false
-            }
-        ]
-    }
-]
diff -pruN 3.0.2-4/json/tests/draft2019-06/type.json 3.2.0-5/json/tests/draft2019-06/type.json
--- 3.0.2-4/json/tests/draft2019-06/type.json	2019-08-02 00:53:34.000000000 +0000
+++ 3.2.0-5/json/tests/draft2019-06/type.json	1970-01-01 00:00:00.000000000 +0000
@@ -1,464 +0,0 @@
-[
-    {
-        "description": "integer type matches integers",
-        "schema": {"type": "integer"},
-        "tests": [
-            {
-                "description": "an integer is an integer",
-                "data": 1,
-                "valid": true
-            },
-            {
-                "description": "a float is not an integer",
-                "data": 1.1,
-                "valid": false
-            },
-            {
-                "description": "a string is not an integer",
-                "data": "foo",
-                "valid": false
-            },
-            {
-                "description": "a string is still not an integer, even if it looks like one",
-                "data": "1",
-                "valid": false
-            },
-            {
-                "description": "an object is not an integer",
-                "data": {},
-                "valid": false
-            },
-            {
-                "description": "an array is not an integer",
-                "data": [],
-                "valid": false
-            },
-            {
-                "description": "a boolean is not an integer",
-                "data": true,
-                "valid": false
-            },
-            {
-                "description": "null is not an integer",
-                "data": null,
-                "valid": false
-            }
-        ]
-    },
-    {
-        "description": "number type matches numbers",
-        "schema": {"type": "number"},
-        "tests": [
-            {
-                "description": "an integer is a number",
-                "data": 1,
-                "valid": true
-            },
-            {
-                "description": "a float is a number",
-                "data": 1.1,
-                "valid": true
-            },
-            {
-                "description": "a string is not a number",
-                "data": "foo",
-                "valid": false
-            },
-            {
-                "description": "a string is still not a number, even if it looks like one",
-                "data": "1",
-                "valid": false
-            },
-            {
-                "description": "an object is not a number",
-                "data": {},
-                "valid": false
-            },
-            {
-                "description": "an array is not a number",
-                "data": [],
-                "valid": false
-            },
-            {
-                "description": "a boolean is not a number",
-                "data": true,
-                "valid": false
-            },
-            {
-                "description": "null is not a number",
-                "data": null,
-                "valid": false
-            }
-        ]
-    },
-    {
-        "description": "string type matches strings",
-        "schema": {"type": "string"},
-        "tests": [
-            {
-                "description": "1 is not a string",
-                "data": 1,
-                "valid": false
-            },
-            {
-                "description": "a float is not a string",
-                "data": 1.1,
-                "valid": false
-            },
-            {
-                "description": "a string is a string",
-                "data": "foo",
-                "valid": true
-            },
-            {
-                "description": "a string is still a string, even if it looks like a number",
-                "data": "1",
-                "valid": true
-            },
-            {
-                "description": "an empty string is still a string",
-                "data": "",
-                "valid": true
-            },
-            {
-                "description": "an object is not a string",
-                "data": {},
-                "valid": false
-            },
-            {
-                "description": "an array is not a string",
-                "data": [],
-                "valid": false
-            },
-            {
-                "description": "a boolean is not a string",
-                "data": true,
-                "valid": false
-            },
-            {
-                "description": "null is not a string",
-                "data": null,
-                "valid": false
-            }
-        ]
-    },
-    {
-        "description": "object type matches objects",
-        "schema": {"type": "object"},
-        "tests": [
-            {
-                "description": "an integer is not an object",
-                "data": 1,
-                "valid": false
-            },
-            {
-                "description": "a float is not an object",
-                "data": 1.1,
-                "valid": false
-            },
-            {
-                "description": "a string is not an object",
-                "data": "foo",
-                "valid": false
-            },
-            {
-                "description": "an object is an object",
-                "data": {},
-                "valid": true
-            },
-            {
-                "description": "an array is not an object",
-                "data": [],
-                "valid": false
-            },
-            {
-                "description": "a boolean is not an object",
-                "data": true,
-                "valid": false
-            },
-            {
-                "description": "null is not an object",
-                "data": null,
-                "valid": false
-            }
-        ]
-    },
-    {
-        "description": "array type matches arrays",
-        "schema": {"type": "array"},
-        "tests": [
-            {
-                "description": "an integer is not an array",
-                "data": 1,
-                "valid": false
-            },
-            {
-                "description": "a float is not an array",
-                "data": 1.1,
-                "valid": false
-            },
-            {
-                "description": "a string is not an array",
-                "data": "foo",
-                "valid": false
-            },
-            {
-                "description": "an object is not an array",
-                "data": {},
-                "valid": false
-            },
-            {
-                "description": "an array is an array",
-                "data": [],
-                "valid": true
-            },
-            {
-                "description": "a boolean is not an array",
-                "data": true,
-                "valid": false
-            },
-            {
-                "description": "null is not an array",
-                "data": null,
-                "valid": false
-            }
-        ]
-    },
-    {
-        "description": "boolean type matches booleans",
-        "schema": {"type": "boolean"},
-        "tests": [
-            {
-                "description": "an integer is not a boolean",
-                "data": 1,
-                "valid": false
-            },
-            {
-                "description": "zero is not a boolean",
-                "data": 0,
-                "valid": false
-            },
-            {
-                "description": "a float is not a boolean",
-                "data": 1.1,
-                "valid": false
-            },
-            {
-                "description": "a string is not a boolean",
-                "data": "foo",
-                "valid": false
-            },
-            {
-                "description": "an empty string is not a boolean",
-                "data": "",
-                "valid": false
-            },
-            {
-                "description": "an object is not a boolean",
-                "data": {},
-                "valid": false
-            },
-            {
-                "description": "an array is not a boolean",
-                "data": [],
-                "valid": false
-            },
-            {
-                "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
-            }
-        ]
-    },
-    {
-        "description": "null type matches only the null object",
-        "schema": {"type": "null"},
-        "tests": [
-            {
-                "description": "an integer is not null",
-                "data": 1,
-                "valid": false
-            },
-            {
-                "description": "a float is not null",
-                "data": 1.1,
-                "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
-            },
-            {
-                "description": "an array is not null",
-                "data": [],
-                "valid": false
-            },
-            {
-                "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
-            }
-        ]
-    },
-    {
-        "description": "multiple types can be specified in an array",
-        "schema": {"type": ["integer", "string"]},
-        "tests": [
-            {
-                "description": "an integer is valid",
-                "data": 1,
-                "valid": true
-            },
-            {
-                "description": "a string is valid",
-                "data": "foo",
-                "valid": true
-            },
-            {
-                "description": "a float is invalid",
-                "data": 1.1,
-                "valid": false
-            },
-            {
-                "description": "an object is invalid",
-                "data": {},
-                "valid": false
-            },
-            {
-                "description": "an array is invalid",
-                "data": [],
-                "valid": false
-            },
-            {
-                "description": "a boolean is invalid",
-                "data": true,
-                "valid": false
-            },
-            {
-                "description": "null is invalid",
-                "data": null,
-                "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 -pruN 3.0.2-4/json/tests/draft2019-06/uniqueItems.json 3.2.0-5/json/tests/draft2019-06/uniqueItems.json
--- 3.0.2-4/json/tests/draft2019-06/uniqueItems.json	2019-08-02 00:53:34.000000000 +0000
+++ 3.2.0-5/json/tests/draft2019-06/uniqueItems.json	1970-01-01 00:00:00.000000000 +0000
@@ -1,89 +0,0 @@
-[
-    {
-        "description": "uniqueItems validation",
-        "schema": {"uniqueItems": true},
-        "tests": [
-            {
-                "description": "unique array of integers is valid",
-                "data": [1, 2],
-                "valid": true
-            },
-            {
-                "description": "non-unique array of integers is invalid",
-                "data": [1, 1],
-                "valid": false
-            },
-            {
-                "description": "numbers are unique if mathematically unequal",
-                "data": [1.0, 1.00, 1],
-                "valid": false
-            },
-            {
-                "description": "false is not equal to zero",
-                "data": [0, false],
-                "valid": true
-            },
-            {
-                "description": "true is not equal to one",
-                "data": [1, true],
-                "valid": true
-            },
-            {
-                "description": "unique array of objects is valid",
-                "data": [{"foo": "bar"}, {"foo": "baz"}],
-                "valid": true
-            },
-            {
-                "description": "non-unique array of objects is invalid",
-                "data": [{"foo": "bar"}, {"foo": "bar"}],
-                "valid": false
-            },
-            {
-                "description": "unique array of nested objects is valid",
-                "data": [
-                    {"foo": {"bar" : {"baz" : true}}},
-                    {"foo": {"bar" : {"baz" : false}}}
-                ],
-                "valid": true
-            },
-            {
-                "description": "non-unique array of nested objects is invalid",
-                "data": [
-                    {"foo": {"bar" : {"baz" : true}}},
-                    {"foo": {"bar" : {"baz" : true}}}
-                ],
-                "valid": false
-            },
-            {
-                "description": "unique array of arrays is valid",
-                "data": [["foo"], ["bar"]],
-                "valid": true
-            },
-            {
-                "description": "non-unique array of arrays is invalid",
-                "data": [["foo"], ["foo"]],
-                "valid": false
-            },
-            {
-                "description": "1 and true are unique",
-                "data": [1, true],
-                "valid": true
-            },
-            {
-                "description": "0 and false are unique",
-                "data": [0, false],
-                "valid": true
-            },
-            {
-                "description": "unique heterogeneous types are valid",
-                "data": [{}, [1], true, null, 1],
-                "valid": true
-            },
-            {
-                "description": "non-unique heterogeneous types are invalid",
-                "data": [{}, [1], true, null, {}, 1],
-                "valid": false
-            }
-        ]
-    }
-]
diff -pruN 3.0.2-4/json/tests/draft2019-09/additionalItems.json 3.2.0-5/json/tests/draft2019-09/additionalItems.json
--- 3.0.2-4/json/tests/draft2019-09/additionalItems.json	1970-01-01 00:00:00.000000000 +0000
+++ 3.2.0-5/json/tests/draft2019-09/additionalItems.json	2019-11-18 12:36:14.000000000 +0000
@@ -0,0 +1,87 @@
+[
+    {
+        "description": "additionalItems as schema",
+        "schema": {
+            "items": [{}],
+            "additionalItems": {"type": "integer"}
+        },
+        "tests": [
+            {
+                "description": "additional items match schema",
+                "data": [ null, 2, 3, 4 ],
+                "valid": true
+            },
+            {
+                "description": "additional items do not match schema",
+                "data": [ null, 2, 3, "foo" ],
+                "valid": false
+            }
+        ]
+    },
+    {
+        "description": "items is schema, no additionalItems",
+        "schema": {
+            "items": {},
+            "additionalItems": false
+        },
+        "tests": [
+            {
+                "description": "all items match schema",
+                "data": [ 1, 2, 3, 4, 5 ],
+                "valid": true
+            }
+        ]
+    },
+    {
+        "description": "array of items with no additionalItems",
+        "schema": {
+            "items": [{}, {}, {}],
+            "additionalItems": false
+        },
+        "tests": [
+            {
+                "description": "fewer number of items present",
+                "data": [ 1, 2 ],
+                "valid": true
+            },
+            {
+                "description": "equal number of items present",
+                "data": [ 1, 2, 3 ],
+                "valid": true
+            },
+            {
+                "description": "additional items are not permitted",
+                "data": [ 1, 2, 3, 4 ],
+                "valid": false
+            }
+        ]
+    },
+    {
+        "description": "additionalItems as false without items",
+        "schema": {"additionalItems": false},
+        "tests": [
+            {
+                "description":
+                    "items defaults to empty schema so everything is valid",
+                "data": [ 1, 2, 3, 4, 5 ],
+                "valid": true
+            },
+            {
+                "description": "ignores non-arrays",
+                "data": {"foo" : "bar"},
+                "valid": true
+            }
+        ]
+    },
+    {
+        "description": "additionalItems are allowed by default",
+        "schema": {"items": [{"type": "integer"}]},
+        "tests": [
+            {
+                "description": "only the first item is validated",
+                "data": [1, "foo", false],
+                "valid": true
+            }
+        ]
+    }
+]
diff -pruN 3.0.2-4/json/tests/draft2019-09/additionalProperties.json 3.2.0-5/json/tests/draft2019-09/additionalProperties.json
--- 3.0.2-4/json/tests/draft2019-09/additionalProperties.json	1970-01-01 00:00:00.000000000 +0000
+++ 3.2.0-5/json/tests/draft2019-09/additionalProperties.json	2019-11-18 12:36:14.000000000 +0000
@@ -0,0 +1,133 @@
+[
+    {
+        "description":
+            "additionalProperties being false does not allow other properties",
+        "schema": {
+            "properties": {"foo": {}, "bar": {}},
+            "patternProperties": { "^v": {} },
+            "additionalProperties": false
+        },
+        "tests": [
+            {
+                "description": "no additional properties is valid",
+                "data": {"foo": 1},
+                "valid": true
+            },
+            {
+                "description": "an additional property is invalid",
+                "data": {"foo" : 1, "bar" : 2, "quux" : "boom"},
+                "valid": false
+            },
+            {
+                "description": "ignores arrays",
+                "data": [1, 2, 3],
+                "valid": true
+            },
+            {
+                "description": "ignores strings",
+                "data": "foobarbaz",
+                "valid": true
+            },
+            {
+                "description": "ignores other non-objects",
+                "data": 12,
+                "valid": true
+            },
+            {
+                "description": "patternProperties are not additional properties",
+                "data": {"foo":1, "vroom": 2},
+                "valid": true
+            }
+        ]
+    },
+    {
+        "description": "non-ASCII pattern with additionalProperties",
+        "schema": {
+            "patternProperties": {"^á": {}},
+            "additionalProperties": false
+        },
+        "tests": [
+            {
+                "description": "matching the pattern is valid",
+                "data": {"ármányos": 2},
+                "valid": true
+            },
+            {
+                "description": "not matching the pattern is invalid",
+                "data": {"élmény": 2},
+                "valid": false
+            }
+        ]
+    },
+    {
+        "description":
+            "additionalProperties allows a schema which should validate",
+        "schema": {
+            "properties": {"foo": {}, "bar": {}},
+            "additionalProperties": {"type": "boolean"}
+        },
+        "tests": [
+            {
+                "description": "no additional properties is valid",
+                "data": {"foo": 1},
+                "valid": true
+            },
+            {
+                "description": "an additional valid property is valid",
+                "data": {"foo" : 1, "bar" : 2, "quux" : true},
+                "valid": true
+            },
+            {
+                "description": "an additional invalid property is invalid",
+                "data": {"foo" : 1, "bar" : 2, "quux" : 12},
+                "valid": false
+            }
+        ]
+    },
+    {
+        "description":
+            "additionalProperties can exist by itself",
+        "schema": {
+            "additionalProperties": {"type": "boolean"}
+        },
+        "tests": [
+            {
+                "description": "an additional valid property is valid",
+                "data": {"foo" : true},
+                "valid": true
+            },
+            {
+                "description": "an additional invalid property is invalid",
+                "data": {"foo" : 1},
+                "valid": false
+            }
+        ]
+    },
+    {
+        "description": "additionalProperties are allowed by default",
+        "schema": {"properties": {"foo": {}, "bar": {}}},
+        "tests": [
+            {
+                "description": "additional properties are allowed",
+                "data": {"foo": 1, "bar": 2, "quux": true},
+                "valid": true
+            }
+        ]
+    },
+    {
+        "description": "additionalProperties should not look in applicators",
+        "schema": {
+            "allOf": [
+                {"properties": {"foo": {}}}
+            ],
+            "additionalProperties": {"type": "boolean"}
+        },
+        "tests": [
+            {
+                "description": "properties defined in allOf are not allowed",
+                "data": {"foo": 1, "bar": true},
+                "valid": false
+            }
+        ]
+    }
+]
diff -pruN 3.0.2-4/json/tests/draft2019-09/allOf.json 3.2.0-5/json/tests/draft2019-09/allOf.json
--- 3.0.2-4/json/tests/draft2019-09/allOf.json	1970-01-01 00:00:00.000000000 +0000
+++ 3.2.0-5/json/tests/draft2019-09/allOf.json	2019-11-18 12:36:14.000000000 +0000
@@ -0,0 +1,218 @@
+[
+    {
+        "description": "allOf",
+        "schema": {
+            "allOf": [
+                {
+                    "properties": {
+                        "bar": {"type": "integer"}
+                    },
+                    "required": ["bar"]
+                },
+                {
+                    "properties": {
+                        "foo": {"type": "string"}
+                    },
+                    "required": ["foo"]
+                }
+            ]
+        },
+        "tests": [
+            {
+                "description": "allOf",
+                "data": {"foo": "baz", "bar": 2},
+                "valid": true
+            },
+            {
+                "description": "mismatch second",
+                "data": {"foo": "baz"},
+                "valid": false
+            },
+            {
+                "description": "mismatch first",
+                "data": {"bar": 2},
+                "valid": false
+            },
+            {
+                "description": "wrong type",
+                "data": {"foo": "baz", "bar": "quux"},
+                "valid": false
+            }
+        ]
+    },
+    {
+        "description": "allOf with base schema",
+        "schema": {
+            "properties": {"bar": {"type": "integer"}},
+            "required": ["bar"],
+            "allOf" : [
+                {
+                    "properties": {
+                        "foo": {"type": "string"}
+                    },
+                    "required": ["foo"]
+                },
+                {
+                    "properties": {
+                        "baz": {"type": "null"}
+                    },
+                    "required": ["baz"]
+                }
+            ]
+        },
+        "tests": [
+            {
+                "description": "valid",
+                "data": {"foo": "quux", "bar": 2, "baz": null},
+                "valid": true
+            },
+            {
+                "description": "mismatch base schema",
+                "data": {"foo": "quux", "baz": null},
+                "valid": false
+            },
+            {
+                "description": "mismatch first allOf",
+                "data": {"bar": 2, "baz": null},
+                "valid": false
+            },
+            {
+                "description": "mismatch second allOf",
+                "data": {"foo": "quux", "bar": 2},
+                "valid": false
+            },
+            {
+                "description": "mismatch both",
+                "data": {"bar": 2},
+                "valid": false
+            }
+        ]
+    },
+    {
+        "description": "allOf simple types",
+        "schema": {
+            "allOf": [
+                {"maximum": 30},
+                {"minimum": 20}
+            ]
+        },
+        "tests": [
+            {
+                "description": "valid",
+                "data": 25,
+                "valid": true
+            },
+            {
+                "description": "mismatch one",
+                "data": 35,
+                "valid": false
+            }
+        ]
+    },
+    {
+        "description": "allOf with boolean schemas, all true",
+        "schema": {"allOf": [true, true]},
+        "tests": [
+            {
+                "description": "any value is valid",
+                "data": "foo",
+                "valid": true
+            }
+        ]
+    },
+    {
+        "description": "allOf with boolean schemas, some false",
+        "schema": {"allOf": [true, false]},
+        "tests": [
+            {
+                "description": "any value is invalid",
+                "data": "foo",
+                "valid": false
+            }
+        ]
+    },
+    {
+        "description": "allOf with boolean schemas, all false",
+        "schema": {"allOf": [false, false]},
+        "tests": [
+            {
+                "description": "any value is invalid",
+                "data": "foo",
+                "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 -pruN 3.0.2-4/json/tests/draft2019-09/anchor.json 3.2.0-5/json/tests/draft2019-09/anchor.json
--- 3.0.2-4/json/tests/draft2019-09/anchor.json	1970-01-01 00:00:00.000000000 +0000
+++ 3.2.0-5/json/tests/draft2019-09/anchor.json	2019-11-18 12:36:14.000000000 +0000
@@ -0,0 +1,87 @@
+[
+    {
+        "description": "Location-independent identifier",
+        "schema": {
+            "allOf": [{
+                "$ref": "#foo"
+            }],
+            "$defs": {
+                "A": {
+                    "$anchor": "foo",
+                    "type": "integer"
+                }
+            }
+        },
+        "tests": [
+            {
+                "data": 1,
+                "description": "match",
+                "valid": true
+            },
+            {
+                "data": "a",
+                "description": "mismatch",
+                "valid": false
+            }
+        ]
+    },
+    {
+        "description": "Location-independent identifier with absolute URI",
+        "schema": {
+            "allOf": [{
+                "$ref": "http://localhost:1234/bar#foo"
+            }],
+            "$defs": {
+                "A": {
+                    "$id": "http://localhost:1234/bar",
+                    "$anchor": "foo",
+                    "type": "integer"
+                }
+            }
+        },
+        "tests": [
+            {
+                "data": 1,
+                "description": "match",
+                "valid": true
+            },
+            {
+                "data": "a",
+                "description": "mismatch",
+                "valid": false
+            }
+        ]
+    },
+    {
+        "description": "Location-independent identifier with base URI change in subschema",
+        "schema": {
+            "$id": "http://localhost:1234/root",
+            "allOf": [{
+                "$ref": "http://localhost:1234/nested.json#foo"
+            }],
+            "$defs": {
+                "A": {
+                    "$id": "nested.json",
+                    "$defs": {
+                        "B": {
+                            "$anchor": "foo",
+                            "type": "integer"
+                        }
+                    }
+                }
+            }
+        },
+        "tests": [
+            {
+                "data": 1,
+                "description": "match",
+                "valid": true
+            },
+            {
+                "data": "a",
+                "description": "mismatch",
+                "valid": false
+            }
+        ]
+    }
+]
diff -pruN 3.0.2-4/json/tests/draft2019-09/anyOf.json 3.2.0-5/json/tests/draft2019-09/anyOf.json
--- 3.0.2-4/json/tests/draft2019-09/anyOf.json	1970-01-01 00:00:00.000000000 +0000
+++ 3.2.0-5/json/tests/draft2019-09/anyOf.json	2019-11-18 12:36:14.000000000 +0000
@@ -0,0 +1,189 @@
+[
+    {
+        "description": "anyOf",
+        "schema": {
+            "anyOf": [
+                {
+                    "type": "integer"
+                },
+                {
+                    "minimum": 2
+                }
+            ]
+        },
+        "tests": [
+            {
+                "description": "first anyOf valid",
+                "data": 1,
+                "valid": true
+            },
+            {
+                "description": "second anyOf valid",
+                "data": 2.5,
+                "valid": true
+            },
+            {
+                "description": "both anyOf valid",
+                "data": 3,
+                "valid": true
+            },
+            {
+                "description": "neither anyOf valid",
+                "data": 1.5,
+                "valid": false
+            }
+        ]
+    },
+    {
+        "description": "anyOf with base schema",
+        "schema": {
+            "type": "string",
+            "anyOf" : [
+                {
+                    "maxLength": 2
+                },
+                {
+                    "minLength": 4
+                }
+            ]
+        },
+        "tests": [
+            {
+                "description": "mismatch base schema",
+                "data": 3,
+                "valid": false
+            },
+            {
+                "description": "one anyOf valid",
+                "data": "foobar",
+                "valid": true
+            },
+            {
+                "description": "both anyOf invalid",
+                "data": "foo",
+                "valid": false
+            }
+        ]
+    },
+    {
+        "description": "anyOf with boolean schemas, all true",
+        "schema": {"anyOf": [true, true]},
+        "tests": [
+            {
+                "description": "any value is valid",
+                "data": "foo",
+                "valid": true
+            }
+        ]
+    },
+    {
+        "description": "anyOf with boolean schemas, some true",
+        "schema": {"anyOf": [true, false]},
+        "tests": [
+            {
+                "description": "any value is valid",
+                "data": "foo",
+                "valid": true
+            }
+        ]
+    },
+    {
+        "description": "anyOf with boolean schemas, all false",
+        "schema": {"anyOf": [false, false]},
+        "tests": [
+            {
+                "description": "any value is invalid",
+                "data": "foo",
+                "valid": false
+            }
+        ]
+    },
+    {
+        "description": "anyOf complex types",
+        "schema": {
+            "anyOf": [
+                {
+                    "properties": {
+                        "bar": {"type": "integer"}
+                    },
+                    "required": ["bar"]
+                },
+                {
+                    "properties": {
+                        "foo": {"type": "string"}
+                    },
+                    "required": ["foo"]
+                }
+            ]
+        },
+        "tests": [
+            {
+                "description": "first anyOf valid (complex)",
+                "data": {"bar": 2},
+                "valid": true
+            },
+            {
+                "description": "second anyOf valid (complex)",
+                "data": {"foo": "baz"},
+                "valid": true
+            },
+            {
+                "description": "both anyOf valid (complex)",
+                "data": {"foo": "baz", "bar": 2},
+                "valid": true
+            },
+            {
+                "description": "neither anyOf valid (complex)",
+                "data": {"foo": 2, "bar": "quux"},
+                "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
+            }
+        ]
+    },
+    {
+        "description": "nested anyOf, to check validation semantics",
+        "schema": {
+            "anyOf": [
+                {
+                    "anyOf": [
+                        {
+                            "type": "null"
+                        }
+                    ]
+                }
+            ]
+        },
+        "tests": [
+            {
+                "description": "null is valid",
+                "data": null,
+                "valid": true
+            },
+            {
+                "description": "anything non-null is invalid",
+                "data": 123,
+                "valid": false
+            }
+        ]
+    }
+]
diff -pruN 3.0.2-4/json/tests/draft2019-09/boolean_schema.json 3.2.0-5/json/tests/draft2019-09/boolean_schema.json
--- 3.0.2-4/json/tests/draft2019-09/boolean_schema.json	1970-01-01 00:00:00.000000000 +0000
+++ 3.2.0-5/json/tests/draft2019-09/boolean_schema.json	2019-11-18 12:36:14.000000000 +0000
@@ -0,0 +1,104 @@
+[
+    {
+        "description": "boolean schema 'true'",
+        "schema": true,
+        "tests": [
+            {
+                "description": "number is valid",
+                "data": 1,
+                "valid": true
+            },
+            {
+                "description": "string is valid",
+                "data": "foo",
+                "valid": true
+            },
+            {
+                "description": "boolean true is valid",
+                "data": true,
+                "valid": true
+            },
+            {
+                "description": "boolean false is valid",
+                "data": false,
+                "valid": true
+            },
+            {
+                "description": "null is valid",
+                "data": null,
+                "valid": true
+            },
+            {
+                "description": "object is valid",
+                "data": {"foo": "bar"},
+                "valid": true
+            },
+            {
+                "description": "empty object is valid",
+                "data": {},
+                "valid": true
+            },
+            {
+                "description": "array is valid",
+                "data": ["foo"],
+                "valid": true
+            },
+            {
+                "description": "empty array is valid",
+                "data": [],
+                "valid": true
+            }
+        ]
+    },
+    {
+        "description": "boolean schema 'false'",
+        "schema": false,
+        "tests": [
+            {
+                "description": "number is invalid",
+                "data": 1,
+                "valid": false
+            },
+            {
+                "description": "string is invalid",
+                "data": "foo",
+                "valid": false
+            },
+            {
+                "description": "boolean true is invalid",
+                "data": true,
+                "valid": false
+            },
+            {
+                "description": "boolean false is invalid",
+                "data": false,
+                "valid": false
+            },
+            {
+                "description": "null is invalid",
+                "data": null,
+                "valid": false
+            },
+            {
+                "description": "object is invalid",
+                "data": {"foo": "bar"},
+                "valid": false
+            },
+            {
+                "description": "empty object is invalid",
+                "data": {},
+                "valid": false
+            },
+            {
+                "description": "array is invalid",
+                "data": ["foo"],
+                "valid": false
+            },
+            {
+                "description": "empty array is invalid",
+                "data": [],
+                "valid": false
+            }
+        ]
+    }
+]
diff -pruN 3.0.2-4/json/tests/draft2019-09/const.json 3.2.0-5/json/tests/draft2019-09/const.json
--- 3.0.2-4/json/tests/draft2019-09/const.json	1970-01-01 00:00:00.000000000 +0000
+++ 3.2.0-5/json/tests/draft2019-09/const.json	2019-11-18 12:36:14.000000000 +0000
@@ -0,0 +1,170 @@
+[
+    {
+        "description": "const validation",
+        "schema": {"const": 2},
+        "tests": [
+            {
+                "description": "same value is valid",
+                "data": 2,
+                "valid": true
+            },
+            {
+                "description": "another value is invalid",
+                "data": 5,
+                "valid": false
+            },
+            {
+                "description": "another type is invalid",
+                "data": "a",
+                "valid": false
+            }
+        ]
+    },
+    {
+        "description": "const with object",
+        "schema": {"const": {"foo": "bar", "baz": "bax"}},
+        "tests": [
+            {
+                "description": "same object is valid",
+                "data": {"foo": "bar", "baz": "bax"},
+                "valid": true
+            },
+            {
+                "description": "same object with different property order is valid",
+                "data": {"baz": "bax", "foo": "bar"},
+                "valid": true
+            },
+            {
+                "description": "another object is invalid",
+                "data": {"foo": "bar"},
+                "valid": false
+            },
+            {
+                "description": "another type is invalid",
+                "data": [1, 2],
+                "valid": false
+            }
+        ]
+    },
+    {
+        "description": "const with array",
+        "schema": {"const": [{ "foo": "bar" }]},
+        "tests": [
+            {
+                "description": "same array is valid",
+                "data": [{"foo": "bar"}],
+                "valid": true
+            },
+            {
+                "description": "another array item is invalid",
+                "data": [2],
+                "valid": false
+            },
+            {
+                "description": "array with additional items is invalid",
+                "data": [1, 2, 3],
+                "valid": false
+            }
+        ]
+    },
+    {
+        "description": "const with null",
+        "schema": {"const": null},
+        "tests": [
+            {
+                "description": "null is valid",
+                "data": null,
+                "valid": true
+            },
+            {
+                "description": "not null is invalid",
+                "data": 0,
+                "valid": false
+            }
+        ]
+    },
+    {
+        "description": "const with false does not match 0",
+        "schema": {"const": false},
+        "tests": [
+            {
+                "description": "false is valid",
+                "data": false,
+                "valid": true
+            },
+            {
+                "description": "integer zero is invalid",
+                "data": 0,
+                "valid": false
+            },
+            {
+                "description": "float zero is invalid",
+                "data": 0.0,
+                "valid": false
+            }
+        ]
+    },
+    {
+        "description": "const with true does not match 1",
+        "schema": {"const": true},
+        "tests": [
+            {
+                "description": "true is valid",
+                "data": true,
+                "valid": true
+            },
+            {
+                "description": "integer one is invalid",
+                "data": 1,
+                "valid": false
+            },
+            {
+                "description": "float one is invalid",
+                "data": 1.0,
+                "valid": false
+            }
+        ]
+    },
+    {
+        "description": "const with 0 does not match false",
+        "schema": {"const": 0},
+        "tests": [
+            {
+                "description": "false is invalid",
+                "data": false,
+                "valid": false
+            },
+            {
+                "description": "integer zero is valid",
+                "data": 0,
+                "valid": true
+            },
+            {
+                "description": "float zero is valid",
+                "data": 0.0,
+                "valid": true
+            }
+        ]
+    },
+    {
+        "description": "const with 1 does not match true",
+        "schema": {"const": 1},
+        "tests": [
+            {
+                "description": "true is invalid",
+                "data": true,
+                "valid": false
+            },
+            {
+                "description": "integer one is valid",
+                "data": 1,
+                "valid": true
+            },
+            {
+                "description": "float one is valid",
+                "data": 1.0,
+                "valid": true
+            }
+        ]
+    }
+]
diff -pruN 3.0.2-4/json/tests/draft2019-09/contains.json 3.2.0-5/json/tests/draft2019-09/contains.json
--- 3.0.2-4/json/tests/draft2019-09/contains.json	1970-01-01 00:00:00.000000000 +0000
+++ 3.2.0-5/json/tests/draft2019-09/contains.json	2019-11-18 12:36:14.000000000 +0000
@@ -0,0 +1,95 @@
+[
+    {
+        "description": "contains keyword validation",
+        "schema": {
+            "contains": {"minimum": 5}
+        },
+        "tests": [
+            {
+                "description": "array with item matching schema (5) is valid",
+                "data": [3, 4, 5],
+                "valid": true
+            },
+            {
+                "description": "array with item matching schema (6) is valid",
+                "data": [3, 4, 6],
+                "valid": true
+            },
+            {
+                "description": "array with two items matching schema (5, 6) is valid",
+                "data": [3, 4, 5, 6],
+                "valid": true
+            },
+            {
+                "description": "array without items matching schema is invalid",
+                "data": [2, 3, 4],
+                "valid": false
+            },
+            {
+                "description": "empty array is invalid",
+                "data": [],
+                "valid": false
+            },
+            {
+                "description": "not array is valid",
+                "data": {},
+                "valid": true
+            }
+        ]
+    },
+    {
+        "description": "contains keyword with const keyword",
+        "schema": {
+            "contains": { "const": 5 }
+        },
+        "tests": [
+            {
+                "description": "array with item 5 is valid",
+                "data": [3, 4, 5],
+                "valid": true
+            },
+            {
+                "description": "array with two items 5 is valid",
+                "data": [3, 4, 5, 5],
+                "valid": true
+            },
+            {
+                "description": "array without item 5 is invalid",
+                "data": [1, 2, 3, 4],
+                "valid": false
+            }
+        ]
+    },
+    {
+        "description": "contains keyword with boolean schema true",
+        "schema": {"contains": true},
+        "tests": [
+            {
+                "description": "any non-empty array is valid",
+                "data": ["foo"],
+                "valid": true
+            },
+            {
+                "description": "empty array is invalid",
+                "data": [],
+                "valid": false
+            }
+        ]
+    },
+    {
+        "description": "contains keyword with boolean schema false",
+        "schema": {"contains": false},
+        "tests": [
+            {
+                "description": "any non-empty array is invalid",
+                "data": ["foo"],
+                "valid": false
+            },
+            {
+                "description": "empty array is invalid",
+                "data": [],
+                "valid": false
+            }
+        ]
+    }
+]
diff -pruN 3.0.2-4/json/tests/draft2019-09/default.json 3.2.0-5/json/tests/draft2019-09/default.json
--- 3.0.2-4/json/tests/draft2019-09/default.json	1970-01-01 00:00:00.000000000 +0000
+++ 3.2.0-5/json/tests/draft2019-09/default.json	2019-11-18 12:36:14.000000000 +0000
@@ -0,0 +1,49 @@
+[
+    {
+        "description": "invalid type for default",
+        "schema": {
+            "properties": {
+                "foo": {
+                    "type": "integer",
+                    "default": []
+                }
+            }
+        },
+        "tests": [
+            {
+                "description": "valid when property is specified",
+                "data": {"foo": 13},
+                "valid": true
+            },
+            {
+                "description": "still valid when the invalid default is used",
+                "data": {},
+                "valid": true
+            }
+        ]
+    },
+    {
+        "description": "invalid string value for default",
+        "schema": {
+            "properties": {
+                "bar": {
+                    "type": "string",
+                    "minLength": 4,
+                    "default": "bad"
+                }
+            }
+        },
+        "tests": [
+            {
+                "description": "valid when property is specified",
+                "data": {"bar": "good"},
+                "valid": true
+            },
+            {
+                "description": "still valid when the invalid default is used",
+                "data": {},
+                "valid": true
+            }
+        ]
+    }
+]
diff -pruN 3.0.2-4/json/tests/draft2019-09/defs.json 3.2.0-5/json/tests/draft2019-09/defs.json
--- 3.0.2-4/json/tests/draft2019-09/defs.json	1970-01-01 00:00:00.000000000 +0000
+++ 3.2.0-5/json/tests/draft2019-09/defs.json	2019-11-18 12:36:14.000000000 +0000
@@ -0,0 +1,24 @@
+[
+    {
+        "description": "valid definition",
+        "schema": {"$ref": "https://json-schema.org/draft/2019-09/schema"},
+        "tests": [
+            {
+                "description": "valid definition schema",
+                "data": {"$defs": {"foo": {"type": "integer"}}},
+                "valid": true
+            }
+        ]
+    },
+    {
+        "description": "invalid definition",
+        "schema": {"$ref": "https://json-schema.org/draft/2019-09/schema"},
+        "tests": [
+            {
+                "description": "invalid definition schema",
+                "data": {"$defs": {"foo": {"type": 1}}},
+                "valid": false
+            }
+        ]
+    }
+]
diff -pruN 3.0.2-4/json/tests/draft2019-09/dependencies.json 3.2.0-5/json/tests/draft2019-09/dependencies.json
--- 3.0.2-4/json/tests/draft2019-09/dependencies.json	1970-01-01 00:00:00.000000000 +0000
+++ 3.2.0-5/json/tests/draft2019-09/dependencies.json	2019-11-18 12:36:14.000000000 +0000
@@ -0,0 +1,268 @@
+[
+    {
+        "description": "dependencies",
+        "schema": {
+            "dependencies": {"bar": ["foo"]}
+        },
+        "tests": [
+            {
+                "description": "neither",
+                "data": {},
+                "valid": true
+            },
+            {
+                "description": "nondependant",
+                "data": {"foo": 1},
+                "valid": true
+            },
+            {
+                "description": "with dependency",
+                "data": {"foo": 1, "bar": 2},
+                "valid": true
+            },
+            {
+                "description": "missing dependency",
+                "data": {"bar": 2},
+                "valid": false
+            },
+            {
+                "description": "ignores arrays",
+                "data": ["bar"],
+                "valid": true
+            },
+            {
+                "description": "ignores strings",
+                "data": "foobar",
+                "valid": true
+            },
+            {
+                "description": "ignores other non-objects",
+                "data": 12,
+                "valid": true
+            }
+        ]
+    },
+    {
+        "description": "dependencies with empty array",
+        "schema": {
+            "dependencies": {"bar": []}
+        },
+        "tests": [
+            {
+                "description": "empty object",
+                "data": {},
+                "valid": true
+            },
+            {
+                "description": "object with one property",
+                "data": {"bar": 2},
+                "valid": true
+            }
+        ]
+    },
+    {
+        "description": "multiple dependencies",
+        "schema": {
+            "dependencies": {"quux": ["foo", "bar"]}
+        },
+        "tests": [
+            {
+                "description": "neither",
+                "data": {},
+                "valid": true
+            },
+            {
+                "description": "nondependants",
+                "data": {"foo": 1, "bar": 2},
+                "valid": true
+            },
+            {
+                "description": "with dependencies",
+                "data": {"foo": 1, "bar": 2, "quux": 3},
+                "valid": true
+            },
+            {
+                "description": "missing dependency",
+                "data": {"foo": 1, "quux": 2},
+                "valid": false
+            },
+            {
+                "description": "missing other dependency",
+                "data": {"bar": 1, "quux": 2},
+                "valid": false
+            },
+            {
+                "description": "missing both dependencies",
+                "data": {"quux": 1},
+                "valid": false
+            }
+        ]
+    },
+    {
+        "description": "multiple dependencies subschema",
+        "schema": {
+            "dependencies": {
+                "bar": {
+                    "properties": {
+                        "foo": {"type": "integer"},
+                        "bar": {"type": "integer"}
+                    }
+                }
+            }
+        },
+        "tests": [
+            {
+                "description": "valid",
+                "data": {"foo": 1, "bar": 2},
+                "valid": true
+            },
+            {
+                "description": "no dependency",
+                "data": {"foo": "quux"},
+                "valid": true
+            },
+            {
+                "description": "wrong type",
+                "data": {"foo": "quux", "bar": 2},
+                "valid": false
+            },
+            {
+                "description": "wrong type other",
+                "data": {"foo": 2, "bar": "quux"},
+                "valid": false
+            },
+            {
+                "description": "wrong type both",
+                "data": {"foo": "quux", "bar": "quux"},
+                "valid": false
+            }
+        ]
+    },
+    {
+        "description": "dependencies with boolean subschemas",
+        "schema": {
+            "dependencies": {
+                "foo": true,
+                "bar": false
+            }
+        },
+        "tests": [
+            {
+                "description": "object with property having schema true is valid",
+                "data": {"foo": 1},
+                "valid": true
+            },
+            {
+                "description": "object with property having schema false is invalid",
+                "data": {"bar": 2},
+                "valid": false
+            },
+            {
+                "description": "object with both properties is invalid",
+                "data": {"foo": 1, "bar": 2},
+                "valid": false
+            },
+            {
+                "description": "empty object is valid",
+                "data": {},
+                "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
+            }
+        ]
+    },
+    {
+        "description": "dependencies with escaped characters",
+        "schema": {
+            "dependencies": {
+                "foo\nbar": ["foo\rbar"],
+                "foo\tbar": {
+                    "minProperties": 4
+                },
+                "foo'bar": {"required": ["foo\"bar"]},
+                "foo\"bar": ["foo'bar"]
+            }
+        },
+        "tests": [
+            {
+                "description": "valid object 1",
+                "data": {
+                    "foo\nbar": 1,
+                    "foo\rbar": 2
+                },
+                "valid": true
+            },
+            {
+                "description": "valid object 2",
+                "data": {
+                    "foo\tbar": 1,
+                    "a": 2,
+                    "b": 3,
+                    "c": 4
+                },
+                "valid": true
+            },
+            {
+                "description": "valid object 3",
+                "data": {
+                    "foo'bar": 1,
+                    "foo\"bar": 2
+                },
+                "valid": true
+            },
+            {
+                "description": "invalid object 1",
+                "data": {
+                    "foo\nbar": 1,
+                    "foo": 2
+                },
+                "valid": false
+            },
+            {
+                "description": "invalid object 2",
+                "data": {
+                    "foo\tbar": 1,
+                    "a": 2
+                },
+                "valid": false
+            },
+            {
+                "description": "invalid object 3",
+                "data": {
+                    "foo'bar": 1
+                },
+                "valid": false
+            },
+            {
+                "description": "invalid object 4",
+                "data": {
+                    "foo\"bar": 2
+                },
+                "valid": false
+            }
+        ]
+    }
+]
diff -pruN 3.0.2-4/json/tests/draft2019-09/enum.json 3.2.0-5/json/tests/draft2019-09/enum.json
--- 3.0.2-4/json/tests/draft2019-09/enum.json	1970-01-01 00:00:00.000000000 +0000
+++ 3.2.0-5/json/tests/draft2019-09/enum.json	2019-11-18 12:36:14.000000000 +0000
@@ -0,0 +1,179 @@
+[
+    {
+        "description": "simple enum validation",
+        "schema": {"enum": [1, 2, 3]},
+        "tests": [
+            {
+                "description": "one of the enum is valid",
+                "data": 1,
+                "valid": true
+            },
+            {
+                "description": "something else is invalid",
+                "data": 4,
+                "valid": false
+            }
+        ]
+    },
+    {
+        "description": "heterogeneous enum validation",
+        "schema": {"enum": [6, "foo", [], true, {"foo": 12}]},
+        "tests": [
+            {
+                "description": "one of the enum is valid",
+                "data": [],
+                "valid": true
+            },
+            {
+                "description": "something else is invalid",
+                "data": null,
+                "valid": false
+            },
+            {
+                "description": "objects are deep compared",
+                "data": {"foo": false},
+                "valid": false
+            }
+        ]
+    },
+    {
+        "description": "enums in properties",
+        "schema": {
+            "type":"object",
+            "properties": {
+                "foo": {"enum":["foo"]},
+                "bar": {"enum":["bar"]}
+            },
+            "required": ["bar"]
+        },
+        "tests": [
+            {
+                "description": "both properties are valid",
+                "data": {"foo":"foo", "bar":"bar"},
+                "valid": true
+            },
+            {
+                "description": "missing optional property is valid",
+                "data": {"bar":"bar"},
+                "valid": true
+            },
+            {
+                "description": "missing required property is invalid",
+                "data": {"foo":"foo"},
+                "valid": false
+            },
+            {
+                "description": "missing all properties is invalid",
+                "data": {},
+                "valid": false
+            }
+        ]
+    },
+    {
+        "description": "enum with escaped characters",
+        "schema": {
+            "enum": ["foo\nbar", "foo\rbar"]
+        },
+        "tests": [
+            {
+                "description": "member 1 is valid",
+                "data": "foo\nbar",
+                "valid": true
+            },
+            {
+                "description": "member 2 is valid",
+                "data": "foo\rbar",
+                "valid": true
+            },
+            {
+                "description": "another string is invalid",
+                "data": "abc",
+                "valid": false
+            }
+        ]
+    },
+    {
+        "description": "enum with false does not match 0",
+        "schema": {"enum": [false]},
+        "tests": [
+            {
+                "description": "false is valid",
+                "data": false,
+                "valid": true
+            },
+            {
+                "description": "integer zero is invalid",
+                "data": 0,
+                "valid": false
+            },
+            {
+                "description": "float zero is invalid",
+                "data": 0.0,
+                "valid": false
+            }
+        ]
+    },
+    {
+        "description": "enum with true does not match 1",
+        "schema": {"enum": [true]},
+        "tests": [
+            {
+                "description": "true is valid",
+                "data": true,
+                "valid": true
+            },
+            {
+                "description": "integer one is invalid",
+                "data": 1,
+                "valid": false
+            },
+            {
+                "description": "float one is invalid",
+                "data": 1.0,
+                "valid": false
+            }
+        ]
+    },
+    {
+        "description": "enum with 0 does not match false",
+        "schema": {"enum": [0]},
+        "tests": [
+            {
+                "description": "false is invalid",
+                "data": false,
+                "valid": false
+            },
+            {
+                "description": "integer zero is valid",
+                "data": 0,
+                "valid": true
+            },
+            {
+                "description": "float zero is valid",
+                "data": 0.0,
+                "valid": true
+            }
+        ]
+    },
+    {
+        "description": "enum with 1 does not match true",
+        "schema": {"enum": [1]},
+        "tests": [
+            {
+                "description": "true is invalid",
+                "data": true,
+                "valid": false
+            },
+            {
+                "description": "integer one is valid",
+                "data": 1,
+                "valid": true
+            },
+            {
+                "description": "float one is valid",
+                "data": 1.0,
+                "valid": true
+            }
+        ]
+    }
+]
diff -pruN 3.0.2-4/json/tests/draft2019-09/exclusiveMaximum.json 3.2.0-5/json/tests/draft2019-09/exclusiveMaximum.json
--- 3.0.2-4/json/tests/draft2019-09/exclusiveMaximum.json	1970-01-01 00:00:00.000000000 +0000
+++ 3.2.0-5/json/tests/draft2019-09/exclusiveMaximum.json	2019-11-18 12:36:14.000000000 +0000
@@ -0,0 +1,30 @@
+[
+    {
+        "description": "exclusiveMaximum validation",
+        "schema": {
+            "exclusiveMaximum": 3.0
+        },
+        "tests": [
+            {
+                "description": "below the exclusiveMaximum is valid",
+                "data": 2.2,
+                "valid": true
+            },
+            {
+                "description": "boundary point is invalid",
+                "data": 3.0,
+                "valid": false
+            },
+            {
+                "description": "above the exclusiveMaximum is invalid",
+                "data": 3.5,
+                "valid": false
+            },
+            {
+                "description": "ignores non-numbers",
+                "data": "x",
+                "valid": true
+            }
+        ]
+    }
+]
diff -pruN 3.0.2-4/json/tests/draft2019-09/exclusiveMinimum.json 3.2.0-5/json/tests/draft2019-09/exclusiveMinimum.json
--- 3.0.2-4/json/tests/draft2019-09/exclusiveMinimum.json	1970-01-01 00:00:00.000000000 +0000
+++ 3.2.0-5/json/tests/draft2019-09/exclusiveMinimum.json	2019-11-18 12:36:14.000000000 +0000
@@ -0,0 +1,30 @@
+[
+    {
+        "description": "exclusiveMinimum validation",
+        "schema": {
+            "exclusiveMinimum": 1.1
+        },
+        "tests": [
+            {
+                "description": "above the exclusiveMinimum is valid",
+                "data": 1.2,
+                "valid": true
+            },
+            {
+                "description": "boundary point is invalid",
+                "data": 1.1,
+                "valid": false
+            },
+            {
+                "description": "below the exclusiveMinimum is invalid",
+                "data": 0.6,
+                "valid": false
+            },
+            {
+                "description": "ignores non-numbers",
+                "data": "x",
+                "valid": true
+            }
+        ]
+    }
+]
diff -pruN 3.0.2-4/json/tests/draft2019-09/format.json 3.2.0-5/json/tests/draft2019-09/format.json
--- 3.0.2-4/json/tests/draft2019-09/format.json	1970-01-01 00:00:00.000000000 +0000
+++ 3.2.0-5/json/tests/draft2019-09/format.json	2019-11-18 12:36:14.000000000 +0000
@@ -0,0 +1,614 @@
+[
+    {
+        "description": "validation of e-mail addresses",
+        "schema": {"format": "email"},
+        "tests": [
+            {
+                "description": "ignores integers",
+                "data": 12,
+                "valid": true
+            },
+            {
+                "description": "ignores floats",
+                "data": 13.7,
+                "valid": true
+            },
+            {
+                "description": "ignores objects",
+                "data": {},
+                "valid": true
+            },
+            {
+                "description": "ignores arrays",
+                "data": [],
+                "valid": true
+            },
+            {
+                "description": "ignores booleans",
+                "data": false,
+                "valid": true
+            },
+            {
+                "description": "ignores null",
+                "data": null,
+                "valid": true
+            }
+        ]
+    },
+    {
+        "description": "validation of IDN e-mail addresses",
+        "schema": {"format": "idn-email"},
+        "tests": [
+            {
+                "description": "ignores integers",
+                "data": 12,
+                "valid": true
+            },
+            {
+                "description": "ignores floats",
+                "data": 13.7,
+                "valid": true
+            },
+            {
+                "description": "ignores objects",
+                "data": {},
+                "valid": true
+            },
+            {
+                "description": "ignores arrays",
+                "data": [],
+                "valid": true
+            },
+            {
+                "description": "ignores booleans",
+                "data": false,
+                "valid": true
+            },
+            {
+                "description": "ignores null",
+                "data": null,
+                "valid": true
+            }
+        ]
+    },
+    {
+        "description": "validation of regexes",
+        "schema": {"format": "regex"},
+        "tests": [
+            {
+                "description": "ignores integers",
+                "data": 12,
+                "valid": true
+            },
+            {
+                "description": "ignores floats",
+                "data": 13.7,
+                "valid": true
+            },
+            {
+                "description": "ignores objects",
+                "data": {},
+                "valid": true
+            },
+            {
+                "description": "ignores arrays",
+                "data": [],
+                "valid": true
+            },
+            {
+                "description": "ignores booleans",
+                "data": false,
+                "valid": true
+            },
+            {
+                "description": "ignores null",
+                "data": null,
+                "valid": true
+            }
+        ]
+    },
+    {
+        "description": "validation of IP addresses",
+        "schema": {"format": "ipv4"},
+        "tests": [
+            {
+                "description": "ignores integers",
+                "data": 12,
+                "valid": true
+            },
+            {
+                "description": "ignores floats",
+                "data": 13.7,
+                "valid": true
+            },
+            {
+                "description": "ignores objects",
+                "data": {},
+                "valid": true
+            },
+            {
+                "description": "ignores arrays",
+                "data": [],
+                "valid": true
+            },
+            {
+                "description": "ignores booleans",
+                "data": false,
+                "valid": true
+            },
+            {
+                "description": "ignores null",
+                "data": null,
+                "valid": true
+            }
+        ]
+    },
+    {
+        "description": "validation of IPv6 addresses",
+        "schema": {"format": "ipv6"},
+        "tests": [
+            {
+                "description": "ignores integers",
+                "data": 12,
+                "valid": true
+            },
+            {
+                "description": "ignores floats",
+                "data": 13.7,
+                "valid": true
+            },
+            {
+                "description": "ignores objects",
+                "data": {},
+                "valid": true
+            },
+            {
+                "description": "ignores arrays",
+                "data": [],
+                "valid": true
+            },
+            {
+                "description": "ignores booleans",
+                "data": false,
+                "valid": true
+            },
+            {
+                "description": "ignores null",
+                "data": null,
+                "valid": true
+            }
+        ]
+    },
+    {
+        "description": "validation of IDN hostnames",
+        "schema": {"format": "idn-hostname"},
+        "tests": [
+            {
+                "description": "ignores integers",
+                "data": 12,
+                "valid": true
+            },
+            {
+                "description": "ignores floats",
+                "data": 13.7,
+                "valid": true
+            },
+            {
+                "description": "ignores objects",
+                "data": {},
+                "valid": true
+            },
+            {
+                "description": "ignores arrays",
+                "data": [],
+                "valid": true
+            },
+            {
+                "description": "ignores booleans",
+                "data": false,
+                "valid": true
+            },
+            {
+                "description": "ignores null",
+                "data": null,
+                "valid": true
+            }
+        ]
+    },
+    {
+        "description": "validation of hostnames",
+        "schema": {"format": "hostname"},
+        "tests": [
+            {
+                "description": "ignores integers",
+                "data": 12,
+                "valid": true
+            },
+            {
+                "description": "ignores floats",
+                "data": 13.7,
+                "valid": true
+            },
+            {
+                "description": "ignores objects",
+                "data": {},
+                "valid": true
+            },
+            {
+                "description": "ignores arrays",
+                "data": [],
+                "valid": true
+            },
+            {
+                "description": "ignores booleans",
+                "data": false,
+                "valid": true
+            },
+            {
+                "description": "ignores null",
+                "data": null,
+                "valid": true
+            }
+        ]
+    },
+    {
+        "description": "validation of date strings",
+        "schema": {"format": "date"},
+        "tests": [
+            {
+                "description": "ignores integers",
+                "data": 12,
+                "valid": true
+            },
+            {
+                "description": "ignores floats",
+                "data": 13.7,
+                "valid": true
+            },
+            {
+                "description": "ignores objects",
+                "data": {},
+                "valid": true
+            },
+            {
+                "description": "ignores arrays",
+                "data": [],
+                "valid": true
+            },
+            {
+                "description": "ignores booleans",
+                "data": false,
+                "valid": true
+            },
+            {
+                "description": "ignores null",
+                "data": null,
+                "valid": true
+            }
+        ]
+    },
+    {
+        "description": "validation of date-time strings",
+        "schema": {"format": "date-time"},
+        "tests": [
+            {
+                "description": "ignores integers",
+                "data": 12,
+                "valid": true
+            },
+            {
+                "description": "ignores floats",
+                "data": 13.7,
+                "valid": true
+            },
+            {
+                "description": "ignores objects",
+                "data": {},
+                "valid": true
+            },
+            {
+                "description": "ignores arrays",
+                "data": [],
+                "valid": true
+            },
+            {
+                "description": "ignores booleans",
+                "data": false,
+                "valid": true
+            },
+            {
+                "description": "ignores null",
+                "data": null,
+                "valid": true
+            }
+        ]
+    },
+    {
+        "description": "validation of time strings",
+        "schema": {"format": "time"},
+        "tests": [
+            {
+                "description": "ignores integers",
+                "data": 12,
+                "valid": true
+            },
+            {
+                "description": "ignores floats",
+                "data": 13.7,
+                "valid": true
+            },
+            {
+                "description": "ignores objects",
+                "data": {},
+                "valid": true
+            },
+            {
+                "description": "ignores arrays",
+                "data": [],
+                "valid": true
+            },
+            {
+                "description": "ignores booleans",
+                "data": false,
+                "valid": true
+            },
+            {
+                "description": "ignores null",
+                "data": null,
+                "valid": true
+            }
+        ]
+    },
+    {
+        "description": "validation of JSON pointers",
+        "schema": {"format": "json-pointer"},
+        "tests": [
+            {
+                "description": "ignores integers",
+                "data": 12,
+                "valid": true
+            },
+            {
+                "description": "ignores floats",
+                "data": 13.7,
+                "valid": true
+            },
+            {
+                "description": "ignores objects",
+                "data": {},
+                "valid": true
+            },
+            {
+                "description": "ignores arrays",
+                "data": [],
+                "valid": true
+            },
+            {
+                "description": "ignores booleans",
+                "data": false,
+                "valid": true
+            },
+            {
+                "description": "ignores null",
+                "data": null,
+                "valid": true
+            }
+        ]
+    },
+    {
+        "description": "validation of relative JSON pointers",
+        "schema": {"format": "relative-json-pointer"},
+        "tests": [
+            {
+                "description": "ignores integers",
+                "data": 12,
+                "valid": true
+            },
+            {
+                "description": "ignores floats",
+                "data": 13.7,
+                "valid": true
+            },
+            {
+                "description": "ignores objects",
+                "data": {},
+                "valid": true
+            },
+            {
+                "description": "ignores arrays",
+                "data": [],
+                "valid": true
+            },
+            {
+                "description": "ignores booleans",
+                "data": false,
+                "valid": true
+            },
+            {
+                "description": "ignores null",
+                "data": null,
+                "valid": true
+            }
+        ]
+    },
+    {
+        "description": "validation of IRIs",
+        "schema": {"format": "iri"},
+        "tests": [
+            {
+                "description": "ignores integers",
+                "data": 12,
+                "valid": true
+            },
+            {
+                "description": "ignores floats",
+                "data": 13.7,
+                "valid": true
+            },
+            {
+                "description": "ignores objects",
+                "data": {},
+                "valid": true
+            },
+            {
+                "description": "ignores arrays",
+                "data": [],
+                "valid": true
+            },
+            {
+                "description": "ignores booleans",
+                "data": false,
+                "valid": true
+            },
+            {
+                "description": "ignores null",
+                "data": null,
+                "valid": true
+            }
+        ]
+    },
+    {
+        "description": "validation of IRI references",
+        "schema": {"format": "iri-reference"},
+        "tests": [
+            {
+                "description": "ignores integers",
+                "data": 12,
+                "valid": true
+            },
+            {
+                "description": "ignores floats",
+                "data": 13.7,
+                "valid": true
+            },
+            {
+                "description": "ignores objects",
+                "data": {},
+                "valid": true
+            },
+            {
+                "description": "ignores arrays",
+                "data": [],
+                "valid": true
+            },
+            {
+                "description": "ignores booleans",
+                "data": false,
+                "valid": true
+            },
+            {
+                "description": "ignores null",
+                "data": null,
+                "valid": true
+            }
+        ]
+    },
+    {
+        "description": "validation of URIs",
+        "schema": {"format": "uri"},
+        "tests": [
+            {
+                "description": "ignores integers",
+                "data": 12,
+                "valid": true
+            },
+            {
+                "description": "ignores floats",
+                "data": 13.7,
+                "valid": true
+            },
+            {
+                "description": "ignores objects",
+                "data": {},
+                "valid": true
+            },
+            {
+                "description": "ignores arrays",
+                "data": [],
+                "valid": true
+            },
+            {
+                "description": "ignores booleans",
+                "data": false,
+                "valid": true
+            },
+            {
+                "description": "ignores null",
+                "data": null,
+                "valid": true
+            }
+        ]
+    },
+    {
+        "description": "validation of URI references",
+        "schema": {"format": "uri-reference"},
+        "tests": [
+            {
+                "description": "ignores integers",
+                "data": 12,
+                "valid": true
+            },
+            {
+                "description": "ignores floats",
+                "data": 13.7,
+                "valid": true
+            },
+            {
+                "description": "ignores objects",
+                "data": {},
+                "valid": true
+            },
+            {
+                "description": "ignores arrays",
+                "data": [],
+                "valid": true
+            },
+            {
+                "description": "ignores booleans",
+                "data": false,
+                "valid": true
+            },
+            {
+                "description": "ignores null",
+                "data": null,
+                "valid": true
+            }
+        ]
+    },
+    {
+        "description": "validation of URI templates",
+        "schema": {"format": "uri-template"},
+        "tests": [
+            {
+                "description": "ignores integers",
+                "data": 12,
+                "valid": true
+            },
+            {
+                "description": "ignores floats",
+                "data": 13.7,
+                "valid": true
+            },
+            {
+                "description": "ignores objects",
+                "data": {},
+                "valid": true
+            },
+            {
+                "description": "ignores arrays",
+                "data": [],
+                "valid": true
+            },
+            {
+                "description": "ignores booleans",
+                "data": false,
+                "valid": true
+            },
+            {
+                "description": "ignores null",
+                "data": null,
+                "valid": true
+            }
+        ]
+    }
+]
diff -pruN 3.0.2-4/json/tests/draft2019-09/if-then-else.json 3.2.0-5/json/tests/draft2019-09/if-then-else.json
--- 3.0.2-4/json/tests/draft2019-09/if-then-else.json	1970-01-01 00:00:00.000000000 +0000
+++ 3.2.0-5/json/tests/draft2019-09/if-then-else.json	2019-11-18 12:36:14.000000000 +0000
@@ -0,0 +1,188 @@
+[
+    {
+        "description": "ignore if without then or else",
+        "schema": {
+            "if": {
+                "const": 0
+            }
+        },
+        "tests": [
+            {
+                "description": "valid when valid against lone if",
+                "data": 0,
+                "valid": true
+            },
+            {
+                "description": "valid when invalid against lone if",
+                "data": "hello",
+                "valid": true
+            }
+        ]
+    },
+    {
+        "description": "ignore then without if",
+        "schema": {
+            "then": {
+                "const": 0
+            }
+        },
+        "tests": [
+            {
+                "description": "valid when valid against lone then",
+                "data": 0,
+                "valid": true
+            },
+            {
+                "description": "valid when invalid against lone then",
+                "data": "hello",
+                "valid": true
+            }
+        ]
+    },
+    {
+        "description": "ignore else without if",
+        "schema": {
+            "else": {
+                "const": 0
+            }
+        },
+        "tests": [
+            {
+                "description": "valid when valid against lone else",
+                "data": 0,
+                "valid": true
+            },
+            {
+                "description": "valid when invalid against lone else",
+                "data": "hello",
+                "valid": true
+            }
+        ]
+    },
+    {
+        "description": "if and then without else",
+        "schema": {
+            "if": {
+                "exclusiveMaximum": 0
+            },
+            "then": {
+                "minimum": -10
+            }
+        },
+        "tests": [
+            {
+                "description": "valid through then",
+                "data": -1,
+                "valid": true
+            },
+            {
+                "description": "invalid through then",
+                "data": -100,
+                "valid": false
+            },
+            {
+                "description": "valid when if test fails",
+                "data": 3,
+                "valid": true
+            }
+        ]
+    },
+    {
+        "description": "if and else without then",
+        "schema": {
+            "if": {
+                "exclusiveMaximum": 0
+            },
+            "else": {
+                "multipleOf": 2
+            }
+        },
+        "tests": [
+            {
+                "description": "valid when if test passes",
+                "data": -1,
+                "valid": true
+            },
+            {
+                "description": "valid through else",
+                "data": 4,
+                "valid": true
+            },
+            {
+                "description": "invalid through else",
+                "data": 3,
+                "valid": false
+            }
+        ]
+    },
+    {
+        "description": "validate against correct branch, then vs else",
+        "schema": {
+            "if": {
+                "exclusiveMaximum": 0
+            },
+            "then": {
+                "minimum": -10
+            },
+            "else": {
+                "multipleOf": 2
+            }
+        },
+        "tests": [
+            {
+                "description": "valid through then",
+                "data": -1,
+                "valid": true
+            },
+            {
+                "description": "invalid through then",
+                "data": -100,
+                "valid": false
+            },
+            {
+                "description": "valid through else",
+                "data": 4,
+                "valid": true
+            },
+            {
+                "description": "invalid through else",
+                "data": 3,
+                "valid": false
+            }
+        ]
+    },
+    {
+        "description": "non-interference across combined schemas",
+        "schema": {
+            "allOf": [
+                {
+                    "if": {
+                        "exclusiveMaximum": 0
+                    }
+                },
+                {
+                    "then": {
+                        "minimum": -10
+                    }
+                },
+                {
+                    "else": {
+                        "multipleOf": 2
+                    }
+                }
+            ]
+        },
+        "tests": [
+            {
+                "description": "valid, but would have been invalid through then",
+                "data": -100,
+                "valid": true
+            },
+            {
+                "description": "valid, but would have been invalid through else",
+                "data": 3,
+                "valid": true
+            }
+        ]
+    }
+]
diff -pruN 3.0.2-4/json/tests/draft2019-09/items.json 3.2.0-5/json/tests/draft2019-09/items.json
--- 3.0.2-4/json/tests/draft2019-09/items.json	1970-01-01 00:00:00.000000000 +0000
+++ 3.2.0-5/json/tests/draft2019-09/items.json	2019-11-18 12:36:14.000000000 +0000
@@ -0,0 +1,250 @@
+[
+    {
+        "description": "a schema given for items",
+        "schema": {
+            "items": {"type": "integer"}
+        },
+        "tests": [
+            {
+                "description": "valid items",
+                "data": [ 1, 2, 3 ],
+                "valid": true
+            },
+            {
+                "description": "wrong type of items",
+                "data": [1, "x"],
+                "valid": false
+            },
+            {
+                "description": "ignores non-arrays",
+                "data": {"foo" : "bar"},
+                "valid": true
+            },
+            {
+                "description": "JavaScript pseudo-array is valid",
+                "data": {
+                    "0": "invalid",
+                    "length": 1
+                },
+                "valid": true
+            }
+        ]
+    },
+    {
+        "description": "an array of schemas for items",
+        "schema": {
+            "items": [
+                {"type": "integer"},
+                {"type": "string"}
+            ]
+        },
+        "tests": [
+            {
+                "description": "correct types",
+                "data": [ 1, "foo" ],
+                "valid": true
+            },
+            {
+                "description": "wrong types",
+                "data": [ "foo", 1 ],
+                "valid": false
+            },
+            {
+                "description": "incomplete array of items",
+                "data": [ 1 ],
+                "valid": true
+            },
+            {
+                "description": "array with additional items",
+                "data": [ 1, "foo", true ],
+                "valid": true
+            },
+            {
+                "description": "empty array",
+                "data": [ ],
+                "valid": true
+            },
+            {
+                "description": "JavaScript pseudo-array is valid",
+                "data": {
+                    "0": "invalid",
+                    "1": "valid",
+                    "length": 2
+                },
+                "valid": true
+            }
+        ]
+    },
+    {
+        "description": "items with boolean schema (true)",
+        "schema": {"items": true},
+        "tests": [
+            {
+                "description": "any array is valid",
+                "data": [ 1, "foo", true ],
+                "valid": true
+            },
+            {
+                "description": "empty array is valid",
+                "data": [],
+                "valid": true
+            }
+        ]
+    },
+    {
+        "description": "items with boolean schema (false)",
+        "schema": {"items": false},
+        "tests": [
+            {
+                "description": "any non-empty array is invalid",
+                "data": [ 1, "foo", true ],
+                "valid": false
+            },
+            {
+                "description": "empty array is valid",
+                "data": [],
+                "valid": true
+            }
+        ]
+    },
+    {
+        "description": "items with boolean schemas",
+        "schema": {
+            "items": [true, false]
+        },
+        "tests": [
+            {
+                "description": "array with one item is valid",
+                "data": [ 1 ],
+                "valid": true
+            },
+            {
+                "description": "array with two items is invalid",
+                "data": [ 1, "foo" ],
+                "valid": false
+            },
+            {
+                "description": "empty array is valid",
+                "data": [],
+                "valid": true
+            }
+        ]
+    },
+    {
+        "description": "items and subitems",
+        "schema": {
+            "$defs": {
+                "item": {
+                    "type": "array",
+                    "additionalItems": false,
+                    "items": [
+                        { "$ref": "#/$defs/sub-item" },
+                        { "$ref": "#/$defs/sub-item" }
+                    ]
+                },
+                "sub-item": {
+                    "type": "object",
+                    "required": ["foo"]
+                }
+            },
+            "type": "array",
+            "additionalItems": false,
+            "items": [
+                { "$ref": "#/$defs/item" },
+                { "$ref": "#/$defs/item" },
+                { "$ref": "#/$defs/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 -pruN 3.0.2-4/json/tests/draft2019-09/maximum.json 3.2.0-5/json/tests/draft2019-09/maximum.json
--- 3.0.2-4/json/tests/draft2019-09/maximum.json	1970-01-01 00:00:00.000000000 +0000
+++ 3.2.0-5/json/tests/draft2019-09/maximum.json	2019-11-18 12:36:14.000000000 +0000
@@ -0,0 +1,28 @@
+[
+    {
+        "description": "maximum validation",
+        "schema": {"maximum": 3.0},
+        "tests": [
+            {
+                "description": "below the maximum is valid",
+                "data": 2.6,
+                "valid": true
+            },
+            {
+                "description": "boundary point is valid",
+                "data": 3.0,
+                "valid": true
+            },
+            {
+                "description": "above the maximum is invalid",
+                "data": 3.5,
+                "valid": false
+            },
+            {
+                "description": "ignores non-numbers",
+                "data": "x",
+                "valid": true
+            }
+        ]
+    }
+]
diff -pruN 3.0.2-4/json/tests/draft2019-09/maxItems.json 3.2.0-5/json/tests/draft2019-09/maxItems.json
--- 3.0.2-4/json/tests/draft2019-09/maxItems.json	1970-01-01 00:00:00.000000000 +0000
+++ 3.2.0-5/json/tests/draft2019-09/maxItems.json	2019-11-18 12:36:14.000000000 +0000
@@ -0,0 +1,28 @@
+[
+    {
+        "description": "maxItems validation",
+        "schema": {"maxItems": 2},
+        "tests": [
+            {
+                "description": "shorter is valid",
+                "data": [1],
+                "valid": true
+            },
+            {
+                "description": "exact length is valid",
+                "data": [1, 2],
+                "valid": true
+            },
+            {
+                "description": "too long is invalid",
+                "data": [1, 2, 3],
+                "valid": false
+            },
+            {
+                "description": "ignores non-arrays",
+                "data": "foobar",
+                "valid": true
+            }
+        ]
+    }
+]
diff -pruN 3.0.2-4/json/tests/draft2019-09/maxLength.json 3.2.0-5/json/tests/draft2019-09/maxLength.json
--- 3.0.2-4/json/tests/draft2019-09/maxLength.json	1970-01-01 00:00:00.000000000 +0000
+++ 3.2.0-5/json/tests/draft2019-09/maxLength.json	2019-11-18 12:36:14.000000000 +0000
@@ -0,0 +1,33 @@
+[
+    {
+        "description": "maxLength validation",
+        "schema": {"maxLength": 2},
+        "tests": [
+            {
+                "description": "shorter is valid",
+                "data": "f",
+                "valid": true
+            },
+            {
+                "description": "exact length is valid",
+                "data": "fo",
+                "valid": true
+            },
+            {
+                "description": "too long is invalid",
+                "data": "foo",
+                "valid": false
+            },
+            {
+                "description": "ignores non-strings",
+                "data": 100,
+                "valid": true
+            },
+            {
+                "description": "two supplementary Unicode code points is long enough",
+                "data": "\uD83D\uDCA9\uD83D\uDCA9",
+                "valid": true
+            }
+        ]
+    }
+]
diff -pruN 3.0.2-4/json/tests/draft2019-09/maxProperties.json 3.2.0-5/json/tests/draft2019-09/maxProperties.json
--- 3.0.2-4/json/tests/draft2019-09/maxProperties.json	1970-01-01 00:00:00.000000000 +0000
+++ 3.2.0-5/json/tests/draft2019-09/maxProperties.json	2019-11-18 12:36:14.000000000 +0000
@@ -0,0 +1,38 @@
+[
+    {
+        "description": "maxProperties validation",
+        "schema": {"maxProperties": 2},
+        "tests": [
+            {
+                "description": "shorter is valid",
+                "data": {"foo": 1},
+                "valid": true
+            },
+            {
+                "description": "exact length is valid",
+                "data": {"foo": 1, "bar": 2},
+                "valid": true
+            },
+            {
+                "description": "too long is invalid",
+                "data": {"foo": 1, "bar": 2, "baz": 3},
+                "valid": false
+            },
+            {
+                "description": "ignores arrays",
+                "data": [1, 2, 3],
+                "valid": true
+            },
+            {
+                "description": "ignores strings",
+                "data": "foobar",
+                "valid": true
+            },
+            {
+                "description": "ignores other non-objects",
+                "data": 12,
+                "valid": true
+            }
+        ]
+    }
+]
diff -pruN 3.0.2-4/json/tests/draft2019-09/minimum.json 3.2.0-5/json/tests/draft2019-09/minimum.json
--- 3.0.2-4/json/tests/draft2019-09/minimum.json	1970-01-01 00:00:00.000000000 +0000
+++ 3.2.0-5/json/tests/draft2019-09/minimum.json	2019-11-18 12:36:14.000000000 +0000
@@ -0,0 +1,59 @@
+[
+    {
+        "description": "minimum validation",
+        "schema": {"minimum": 1.1},
+        "tests": [
+            {
+                "description": "above the minimum is valid",
+                "data": 2.6,
+                "valid": true
+            },
+            {
+                "description": "boundary point is valid",
+                "data": 1.1,
+                "valid": true
+            },
+            {
+                "description": "below the minimum is invalid",
+                "data": 0.6,
+                "valid": false
+            },
+            {
+                "description": "ignores non-numbers",
+                "data": "x",
+                "valid": true
+            }
+        ]
+    },
+    {
+        "description": "minimum validation with signed integer",
+        "schema": {"minimum": -2},
+        "tests": [
+            {
+                "description": "negative above the minimum is valid",
+                "data": -1,
+                "valid": true
+            },
+            {
+                "description": "positive above the minimum is valid",
+                "data": 0,
+                "valid": true
+            },
+            {
+                "description": "boundary point is valid",
+                "data": -2,
+                "valid": true
+            },
+            {
+                "description": "below the minimum is invalid",
+                "data": -3,
+                "valid": false
+            },
+            {
+                "description": "ignores non-numbers",
+                "data": "x",
+                "valid": true
+            }
+        ]
+    }
+]
diff -pruN 3.0.2-4/json/tests/draft2019-09/minItems.json 3.2.0-5/json/tests/draft2019-09/minItems.json
--- 3.0.2-4/json/tests/draft2019-09/minItems.json	1970-01-01 00:00:00.000000000 +0000
+++ 3.2.0-5/json/tests/draft2019-09/minItems.json	2019-11-18 12:36:14.000000000 +0000
@@ -0,0 +1,28 @@
+[
+    {
+        "description": "minItems validation",
+        "schema": {"minItems": 1},
+        "tests": [
+            {
+                "description": "longer is valid",
+                "data": [1, 2],
+                "valid": true
+            },
+            {
+                "description": "exact length is valid",
+                "data": [1],
+                "valid": true
+            },
+            {
+                "description": "too short is invalid",
+                "data": [],
+                "valid": false
+            },
+            {
+                "description": "ignores non-arrays",
+                "data": "",
+                "valid": true
+            }
+        ]
+    }
+]
diff -pruN 3.0.2-4/json/tests/draft2019-09/minLength.json 3.2.0-5/json/tests/draft2019-09/minLength.json
--- 3.0.2-4/json/tests/draft2019-09/minLength.json	1970-01-01 00:00:00.000000000 +0000
+++ 3.2.0-5/json/tests/draft2019-09/minLength.json	2019-11-18 12:36:14.000000000 +0000
@@ -0,0 +1,33 @@
+[
+    {
+        "description": "minLength validation",
+        "schema": {"minLength": 2},
+        "tests": [
+            {
+                "description": "longer is valid",
+                "data": "foo",
+                "valid": true
+            },
+            {
+                "description": "exact length is valid",
+                "data": "fo",
+                "valid": true
+            },
+            {
+                "description": "too short is invalid",
+                "data": "f",
+                "valid": false
+            },
+            {
+                "description": "ignores non-strings",
+                "data": 1,
+                "valid": true
+            },
+            {
+                "description": "one supplementary Unicode code point is not long enough",
+                "data": "\uD83D\uDCA9",
+                "valid": false
+            }
+        ]
+    }
+]
diff -pruN 3.0.2-4/json/tests/draft2019-09/minProperties.json 3.2.0-5/json/tests/draft2019-09/minProperties.json
--- 3.0.2-4/json/tests/draft2019-09/minProperties.json	1970-01-01 00:00:00.000000000 +0000
+++ 3.2.0-5/json/tests/draft2019-09/minProperties.json	2019-11-18 12:36:14.000000000 +0000
@@ -0,0 +1,38 @@
+[
+    {
+        "description": "minProperties validation",
+        "schema": {"minProperties": 1},
+        "tests": [
+            {
+                "description": "longer is valid",
+                "data": {"foo": 1, "bar": 2},
+                "valid": true
+            },
+            {
+                "description": "exact length is valid",
+                "data": {"foo": 1},
+                "valid": true
+            },
+            {
+                "description": "too short is invalid",
+                "data": {},
+                "valid": false
+            },
+            {
+                "description": "ignores arrays",
+                "data": [],
+                "valid": true
+            },
+            {
+                "description": "ignores strings",
+                "data": "",
+                "valid": true
+            },
+            {
+                "description": "ignores other non-objects",
+                "data": 12,
+                "valid": true
+            }
+        ]
+    }
+]
diff -pruN 3.0.2-4/json/tests/draft2019-09/multipleOf.json 3.2.0-5/json/tests/draft2019-09/multipleOf.json
--- 3.0.2-4/json/tests/draft2019-09/multipleOf.json	1970-01-01 00:00:00.000000000 +0000
+++ 3.2.0-5/json/tests/draft2019-09/multipleOf.json	2019-11-18 12:36:14.000000000 +0000
@@ -0,0 +1,60 @@
+[
+    {
+        "description": "by int",
+        "schema": {"multipleOf": 2},
+        "tests": [
+            {
+                "description": "int by int",
+                "data": 10,
+                "valid": true
+            },
+            {
+                "description": "int by int fail",
+                "data": 7,
+                "valid": false
+            },
+            {
+                "description": "ignores non-numbers",
+                "data": "foo",
+                "valid": true
+            }
+        ]
+    },
+    {
+        "description": "by number",
+        "schema": {"multipleOf": 1.5},
+        "tests": [
+            {
+                "description": "zero is multiple of anything",
+                "data": 0,
+                "valid": true
+            },
+            {
+                "description": "4.5 is multiple of 1.5",
+                "data": 4.5,
+                "valid": true
+            },
+            {
+                "description": "35 is not multiple of 1.5",
+                "data": 35,
+                "valid": false
+            }
+        ]
+    },
+    {
+        "description": "by small number",
+        "schema": {"multipleOf": 0.0001},
+        "tests": [
+            {
+                "description": "0.0075 is multiple of 0.0001",
+                "data": 0.0075,
+                "valid": true
+            },
+            {
+                "description": "0.00751 is not multiple of 0.0001",
+                "data": 0.00751,
+                "valid": false
+            }
+        ]
+    }
+]
diff -pruN 3.0.2-4/json/tests/draft2019-09/not.json 3.2.0-5/json/tests/draft2019-09/not.json
--- 3.0.2-4/json/tests/draft2019-09/not.json	1970-01-01 00:00:00.000000000 +0000
+++ 3.2.0-5/json/tests/draft2019-09/not.json	2019-11-18 12:36:14.000000000 +0000
@@ -0,0 +1,117 @@
+[
+    {
+        "description": "not",
+        "schema": {
+            "not": {"type": "integer"}
+        },
+        "tests": [
+            {
+                "description": "allowed",
+                "data": "foo",
+                "valid": true
+            },
+            {
+                "description": "disallowed",
+                "data": 1,
+                "valid": false
+            }
+        ]
+    },
+    {
+        "description": "not multiple types",
+        "schema": {
+            "not": {"type": ["integer", "boolean"]}
+        },
+        "tests": [
+            {
+                "description": "valid",
+                "data": "foo",
+                "valid": true
+            },
+            {
+                "description": "mismatch",
+                "data": 1,
+                "valid": false
+            },
+            {
+                "description": "other mismatch",
+                "data": true,
+                "valid": false
+            }
+        ]
+    },
+    {
+        "description": "not more complex schema",
+        "schema": {
+            "not": {
+                "type": "object",
+                "properties": {
+                    "foo": {
+                        "type": "string"
+                    }
+                }
+             }
+        },
+        "tests": [
+            {
+                "description": "match",
+                "data": 1,
+                "valid": true
+            },
+            {
+                "description": "other match",
+                "data": {"foo": 1},
+                "valid": true
+            },
+            {
+                "description": "mismatch",
+                "data": {"foo": "bar"},
+                "valid": false
+            }
+        ]
+    },
+    {
+        "description": "forbidden property",
+        "schema": {
+            "properties": {
+                "foo": { 
+                    "not": {}
+                }
+            }
+        },
+        "tests": [
+            {
+                "description": "property present",
+                "data": {"foo": 1, "bar": 2},
+                "valid": false
+            },
+            {
+                "description": "property absent",
+                "data": {"bar": 1, "baz": 2},
+                "valid": true
+            }
+        ]
+    },
+    {
+        "description": "not with boolean schema true",
+        "schema": {"not": true},
+        "tests": [
+            {
+                "description": "any value is invalid",
+                "data": "foo",
+                "valid": false
+            }
+        ]
+    },
+    {
+        "description": "not with boolean schema false",
+        "schema": {"not": false},
+        "tests": [
+            {
+                "description": "any value is valid",
+                "data": "foo",
+                "valid": true
+            }
+        ]
+    }
+]
diff -pruN 3.0.2-4/json/tests/draft2019-09/oneOf.json 3.2.0-5/json/tests/draft2019-09/oneOf.json
--- 3.0.2-4/json/tests/draft2019-09/oneOf.json	1970-01-01 00:00:00.000000000 +0000
+++ 3.2.0-5/json/tests/draft2019-09/oneOf.json	2019-11-18 12:36:14.000000000 +0000
@@ -0,0 +1,206 @@
+[
+    {
+        "description": "oneOf",
+        "schema": {
+            "oneOf": [
+                {
+                    "type": "integer"
+                },
+                {
+                    "minimum": 2
+                }
+            ]
+        },
+        "tests": [
+            {
+                "description": "first oneOf valid",
+                "data": 1,
+                "valid": true
+            },
+            {
+                "description": "second oneOf valid",
+                "data": 2.5,
+                "valid": true
+            },
+            {
+                "description": "both oneOf valid",
+                "data": 3,
+                "valid": false
+            },
+            {
+                "description": "neither oneOf valid",
+                "data": 1.5,
+                "valid": false
+            }
+        ]
+    },
+    {
+        "description": "oneOf with base schema",
+        "schema": {
+            "type": "string",
+            "oneOf" : [
+                {
+                    "minLength": 2
+                },
+                {
+                    "maxLength": 4
+                }
+            ]
+        },
+        "tests": [
+            {
+                "description": "mismatch base schema",
+                "data": 3,
+                "valid": false
+            },
+            {
+                "description": "one oneOf valid",
+                "data": "foobar",
+                "valid": true
+            },
+            {
+                "description": "both oneOf valid",
+                "data": "foo",
+                "valid": false
+            }
+        ]
+    },
+    {
+        "description": "oneOf with boolean schemas, all true",
+        "schema": {"oneOf": [true, true, true]},
+        "tests": [
+            {
+                "description": "any value is invalid",
+                "data": "foo",
+                "valid": false
+            }
+        ]
+    },
+    {
+        "description": "oneOf with boolean schemas, one true",
+        "schema": {"oneOf": [true, false, false]},
+        "tests": [
+            {
+                "description": "any value is valid",
+                "data": "foo",
+                "valid": true
+            }
+        ]
+    },
+    {
+        "description": "oneOf with boolean schemas, more than one true",
+        "schema": {"oneOf": [true, true, false]},
+        "tests": [
+            {
+                "description": "any value is invalid",
+                "data": "foo",
+                "valid": false
+            }
+        ]
+    },
+    {
+        "description": "oneOf with boolean schemas, all false",
+        "schema": {"oneOf": [false, false, false]},
+        "tests": [
+            {
+                "description": "any value is invalid",
+                "data": "foo",
+                "valid": false
+            }
+        ]
+    },
+    {
+        "description": "oneOf complex types",
+        "schema": {
+            "oneOf": [
+                {
+                    "properties": {
+                        "bar": {"type": "integer"}
+                    },
+                    "required": ["bar"]
+                },
+                {
+                    "properties": {
+                        "foo": {"type": "string"}
+                    },
+                    "required": ["foo"]
+                }
+            ]
+        },
+        "tests": [
+            {
+                "description": "first oneOf valid (complex)",
+                "data": {"bar": 2},
+                "valid": true
+            },
+            {
+                "description": "second oneOf valid (complex)",
+                "data": {"foo": "baz"},
+                "valid": true
+            },
+            {
+                "description": "both oneOf valid (complex)",
+                "data": {"foo": "baz", "bar": 2},
+                "valid": false
+            },
+            {
+                "description": "neither oneOf valid (complex)",
+                "data": {"foo": 2, "bar": "quux"},
+                "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 -pruN 3.0.2-4/json/tests/draft2019-09/optional/bignum.json 3.2.0-5/json/tests/draft2019-09/optional/bignum.json
--- 3.0.2-4/json/tests/draft2019-09/optional/bignum.json	1970-01-01 00:00:00.000000000 +0000
+++ 3.2.0-5/json/tests/draft2019-09/optional/bignum.json	2019-11-18 12:36:14.000000000 +0000
@@ -0,0 +1,105 @@
+[
+    {
+        "description": "integer",
+        "schema": {"type": "integer"},
+        "tests": [
+            {
+                "description": "a bignum is an integer",
+                "data": 12345678910111213141516171819202122232425262728293031,
+                "valid": true
+            }
+        ]
+    },
+    {
+        "description": "number",
+        "schema": {"type": "number"},
+        "tests": [
+            {
+                "description": "a bignum is a number",
+                "data": 98249283749234923498293171823948729348710298301928331,
+                "valid": true
+            }
+        ]
+    },
+    {
+        "description": "integer",
+        "schema": {"type": "integer"},
+        "tests": [
+            {
+                "description": "a negative bignum is an integer",
+                "data": -12345678910111213141516171819202122232425262728293031,
+                "valid": true
+            }
+        ]
+    },
+    {
+        "description": "number",
+        "schema": {"type": "number"},
+        "tests": [
+            {
+                "description": "a negative bignum is a number",
+                "data": -98249283749234923498293171823948729348710298301928331,
+                "valid": true
+            }
+        ]
+    },
+    {
+        "description": "string",
+        "schema": {"type": "string"},
+        "tests": [
+            {
+                "description": "a bignum is not a string",
+                "data": 98249283749234923498293171823948729348710298301928331,
+                "valid": false
+            }
+        ]
+    },
+    {
+        "description": "integer comparison",
+        "schema": {"maximum": 18446744073709551615},
+        "tests": [
+            {
+                "description": "comparison works for high numbers",
+                "data": 18446744073709551600,
+                "valid": true
+            }
+        ]
+    },
+    {
+        "description": "float comparison with high precision",
+        "schema": {
+            "exclusiveMaximum": 972783798187987123879878123.18878137
+        },
+        "tests": [
+            {
+                "description": "comparison works for high numbers",
+                "data": 972783798187987123879878123.188781371,
+                "valid": false
+            }
+        ]
+    },
+    {
+        "description": "integer comparison",
+        "schema": {"minimum": -18446744073709551615},
+        "tests": [
+            {
+                "description": "comparison works for very negative numbers",
+                "data": -18446744073709551600,
+                "valid": true
+            }
+        ]
+    },
+    {
+        "description": "float comparison with high precision on negative numbers",
+        "schema": {
+            "exclusiveMinimum": -972783798187987123879878123.18878137
+        },
+        "tests": [
+            {
+                "description": "comparison works for very negative numbers",
+                "data": -972783798187987123879878123.188781371,
+                "valid": false
+            }
+        ]
+    }
+]
diff -pruN 3.0.2-4/json/tests/draft2019-09/optional/content.json 3.2.0-5/json/tests/draft2019-09/optional/content.json
--- 3.0.2-4/json/tests/draft2019-09/optional/content.json	1970-01-01 00:00:00.000000000 +0000
+++ 3.2.0-5/json/tests/draft2019-09/optional/content.json	2019-11-18 12:36:14.000000000 +0000
@@ -0,0 +1,77 @@
+[
+    {
+        "description": "validation of string-encoded content based on media type",
+        "schema": {
+            "contentMediaType": "application/json"
+        },
+        "tests": [
+            {
+                "description": "a valid JSON document",
+                "data": "{\"foo\": \"bar\"}",
+                "valid": true
+            },
+            {
+                "description": "an invalid JSON document",
+                "data": "{:}",
+                "valid": false
+            },
+            {
+                "description": "ignores non-strings",
+                "data": 100,
+                "valid": true
+            }
+        ]
+    },
+    {
+        "description": "validation of binary string-encoding",
+        "schema": {
+            "contentEncoding": "base64"
+        },
+        "tests": [
+            {
+                "description": "a valid base64 string",
+                "data": "eyJmb28iOiAiYmFyIn0K",
+                "valid": true
+            },
+            {
+                "description": "an invalid base64 string (% is not a valid character)",
+                "data": "eyJmb28iOi%iYmFyIn0K",
+                "valid": false
+            },
+            {
+                "description": "ignores non-strings",
+                "data": 100,
+                "valid": true
+            }
+        ]
+    },
+    {
+        "description": "validation of binary-encoded media type documents",
+        "schema": {
+            "contentMediaType": "application/json",
+            "contentEncoding": "base64"
+        },
+        "tests": [
+            {
+                "description": "a valid base64-encoded JSON document",
+                "data": "eyJmb28iOiAiYmFyIn0K",
+                "valid": true
+            },
+            {
+                "description": "a validly-encoded invalid JSON document",
+                "data": "ezp9Cg==",
+                "valid": false
+            },
+            {
+                "description": "an invalid base64 string that is valid JSON",
+                "data": "{}",
+                "valid": false
+            },
+            {
+                "description": "ignores non-strings",
+                "data": 100,
+                "valid": true
+            }
+        ]
+    }
+]
diff -pruN 3.0.2-4/json/tests/draft2019-09/optional/ecmascript-regex.json 3.2.0-5/json/tests/draft2019-09/optional/ecmascript-regex.json
--- 3.0.2-4/json/tests/draft2019-09/optional/ecmascript-regex.json	1970-01-01 00:00:00.000000000 +0000
+++ 3.2.0-5/json/tests/draft2019-09/optional/ecmascript-regex.json	2019-11-18 12:36:14.000000000 +0000
@@ -0,0 +1,213 @@
+[
+    {
+        "description": "ECMA 262 regex non-compliance",
+        "schema": { "format": "regex" },
+        "tests": [
+            {
+                "description": "ECMA 262 has no support for \\Z anchor from .NET",
+                "data": "^\\S(|(.|\\n)*\\S)\\Z",
+                "valid": false
+            }
+        ]
+    },
+    {
+        "description": "ECMA 262 regex $ does not match trailing newline",
+        "schema": {
+            "type": "string",
+            "pattern": "^abc$"
+        },
+        "tests": [
+            {
+                "description": "matches in Python, but should not in jsonschema",
+                "data": "abc\n",
+                "valid": false
+            },
+            {
+                "description": "should match",
+                "data": "abc",
+                "valid": true
+            }
+        ]
+    },
+    {
+        "description": "ECMA 262 regex converts \\a to ascii BEL",
+        "schema": {
+            "type": "string",
+            "pattern": "^\\a$"
+        },
+        "tests": [
+            {
+                "description": "does not match",
+                "data": "\\a",
+                "valid": false
+            },
+            {
+                "description": "matches",
+                "data": "\u0007",
+                "valid": true
+            }
+        ]
+    },
+    {
+        "description": "ECMA 262 regex escapes control codes with \\c and upper letter",
+        "schema": {
+            "type": "string",
+            "pattern": "^\\cC$"
+        },
+        "tests": [
+            {
+                "description": "does not match",
+                "data": "\\cC",
+                "valid": false
+            },
+            {
+                "description": "matches",
+                "data": "\u0003",
+                "valid": true
+            }
+        ]
+    },
+    {
+        "description": "ECMA 262 regex escapes control codes with \\c and lower letter",
+        "schema": {
+            "type": "string",
+            "pattern": "^\\cc$"
+        },
+        "tests": [
+            {
+                "description": "does not match",
+                "data": "\\cc",
+                "valid": false
+            },
+            {
+                "description": "matches",
+                "data": "\u0003",
+                "valid": true
+            }
+        ]
+    },
+    {
+        "description": "ECMA 262 \\d matches ascii digits only",
+        "schema": {
+            "type": "string",
+            "pattern": "^\\d$"
+        },
+        "tests": [
+            {
+                "description": "ASCII zero matches",
+                "data": "0",
+                "valid": true
+            },
+            {
+                "description": "NKO DIGIT ZERO does not match (unlike e.g. Python)",
+                "data": "߀",
+                "valid": false
+            },
+            {
+                "description": "NKO DIGIT ZERO (as \\u escape) does not match",
+                "data": "\u07c0",
+                "valid": false
+            }
+        ]
+    },
+    {
+        "description": "ECMA 262 \\D matches everything but ascii digits",
+        "schema": {
+            "type": "string",
+            "pattern": "^\\D$"
+        },
+        "tests": [
+            {
+                "description": "ASCII zero does not match",
+                "data": "0",
+                "valid": false
+            },
+            {
+                "description": "NKO DIGIT ZERO matches (unlike e.g. Python)",
+                "data": "߀",
+                "valid": true
+            },
+            {
+                "description": "NKO DIGIT ZERO (as \\u escape) matches",
+                "data": "\u07c0",
+                "valid": true
+            }
+        ]
+    },
+    {
+        "description": "ECMA 262 \\w matches ascii letters only",
+        "schema": {
+            "type": "string",
+            "pattern": "^\\w$"
+        },
+        "tests": [
+            {
+                "description": "ASCII 'a' matches",
+                "data": "a",
+                "valid": true
+            },
+            {
+                "description": "latin-1 e-acute does not match (unlike e.g. Python)",
+                "data": "é",
+                "valid": false
+            }
+        ]
+    },
+    {
+        "description": "ECMA 262 \\w matches everything but ascii letters",
+        "schema": {
+            "type": "string",
+            "pattern": "^\\W$"
+        },
+        "tests": [
+            {
+                "description": "ASCII 'a' does not match",
+                "data": "a",
+                "valid": false
+            },
+            {
+                "description": "latin-1 e-acute matches (unlike e.g. Python)",
+                "data": "é",
+                "valid": true
+            }
+        ]
+    },
+    {
+        "description": "ECMA 262 \\s matches ascii whitespace only",
+        "schema": {
+            "type": "string",
+            "pattern": "^\\s$"
+        },
+        "tests": [
+            {
+                "description": "ASCII space matches",
+                "data": " ",
+                "valid": true
+            },
+            {
+                "description": "latin-1 non-breaking-space does not match (unlike e.g. Python)",
+                "data": "\u00a0",
+                "valid": false
+            }
+        ]
+    },
+    {
+        "description": "ECMA 262 \\S matches everything but ascii whitespace",
+        "schema": {
+            "type": "string",
+            "pattern": "^\\S$"
+        },
+        "tests": [
+            {
+                "description": "ASCII space does not match",
+                "data": " ",
+                "valid": false
+            },
+            {
+                "description": "latin-1 non-breaking-space matches (unlike e.g. Python)",
+                "data": "\u00a0",
+                "valid": true
+            }
+        ]
+    }
+]
diff -pruN 3.0.2-4/json/tests/draft2019-09/optional/format/date.json 3.2.0-5/json/tests/draft2019-09/optional/format/date.json
--- 3.0.2-4/json/tests/draft2019-09/optional/format/date.json	1970-01-01 00:00:00.000000000 +0000
+++ 3.2.0-5/json/tests/draft2019-09/optional/format/date.json	2019-11-18 12:36:14.000000000 +0000
@@ -0,0 +1,23 @@
+[
+    {
+        "description": "validation of date strings",
+        "schema": {"format": "date"},
+        "tests": [
+            {
+                "description": "a valid date string",
+                "data": "1963-06-19",
+                "valid": true
+            },
+            {
+                "description": "an invalid date-time string",
+                "data": "06/19/1963",
+                "valid": false
+            },
+            {
+                "description": "only RFC3339 not all of ISO 8601 are valid",
+                "data": "2013-350",
+                "valid": false
+            }
+        ]
+    }
+]
diff -pruN 3.0.2-4/json/tests/draft2019-09/optional/format/date-time.json 3.2.0-5/json/tests/draft2019-09/optional/format/date-time.json
--- 3.0.2-4/json/tests/draft2019-09/optional/format/date-time.json	1970-01-01 00:00:00.000000000 +0000
+++ 3.2.0-5/json/tests/draft2019-09/optional/format/date-time.json	2019-11-18 12:36:14.000000000 +0000
@@ -0,0 +1,53 @@
+[
+    {
+        "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 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 -pruN 3.0.2-4/json/tests/draft2019-09/optional/format/email.json 3.2.0-5/json/tests/draft2019-09/optional/format/email.json
--- 3.0.2-4/json/tests/draft2019-09/optional/format/email.json	1970-01-01 00:00:00.000000000 +0000
+++ 3.2.0-5/json/tests/draft2019-09/optional/format/email.json	2019-11-18 12:36:14.000000000 +0000
@@ -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 -pruN 3.0.2-4/json/tests/draft2019-09/optional/format/hostname.json 3.2.0-5/json/tests/draft2019-09/optional/format/hostname.json
--- 3.0.2-4/json/tests/draft2019-09/optional/format/hostname.json	1970-01-01 00:00:00.000000000 +0000
+++ 3.2.0-5/json/tests/draft2019-09/optional/format/hostname.json	2019-11-18 12:36:14.000000000 +0000
@@ -0,0 +1,33 @@
+[
+    {
+        "description": "validation of host names",
+        "schema": {"format": "hostname"},
+        "tests": [
+            {
+                "description": "a valid host name",
+                "data": "www.example.com",
+                "valid": true
+            },
+            {
+                "description": "a valid punycoded IDN hostname",
+                "data": "xn--4gbwdl.xn--wgbh1c",
+                "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
+            }
+        ]
+    }
+]
diff -pruN 3.0.2-4/json/tests/draft2019-09/optional/format/idn-email.json 3.2.0-5/json/tests/draft2019-09/optional/format/idn-email.json
--- 3.0.2-4/json/tests/draft2019-09/optional/format/idn-email.json	1970-01-01 00:00:00.000000000 +0000
+++ 3.2.0-5/json/tests/draft2019-09/optional/format/idn-email.json	2019-11-18 12:36:14.000000000 +0000
@@ -0,0 +1,18 @@
+[
+    {
+        "description": "validation of an internationalized e-mail addresses",
+        "schema": {"format": "idn-email"},
+        "tests": [
+            {
+                "description": "a valid idn e-mail (example@example.test in Hangul)",
+                "data": "실례@실례.테스트",
+                "valid": true
+            },
+            {
+                "description": "an invalid idn e-mail address",
+                "data": "2962",
+                "valid": false
+            }
+        ]
+    }
+]
diff -pruN 3.0.2-4/json/tests/draft2019-09/optional/format/idn-hostname.json 3.2.0-5/json/tests/draft2019-09/optional/format/idn-hostname.json
--- 3.0.2-4/json/tests/draft2019-09/optional/format/idn-hostname.json	1970-01-01 00:00:00.000000000 +0000
+++ 3.2.0-5/json/tests/draft2019-09/optional/format/idn-hostname.json	2019-11-18 12:36:14.000000000 +0000
@@ -0,0 +1,28 @@
+[
+    {
+        "description": "validation of internationalized host names",
+        "schema": {"format": "idn-hostname"},
+        "tests": [
+            {
+                "description": "a valid host name (example.test in Hangul)",
+                "data": "실례.테스트",
+                "valid": true
+            },
+            {
+                "description": "illegal first char U+302E Hangul single dot tone mark",
+                "data": "〮실례.테스트",
+                "valid": false
+            },
+            {
+                "description": "contains illegal char U+302E Hangul single dot tone mark",
+                "data": "실〮례.테스트",
+                "valid": false
+            },
+            {
+                "description": "a host name with a component too long",
+                "data": "실실실실실실실실실실실실실실실실실실실실실실실실실실실실실실실실실실실실실실실실실실실실실실실실실실실실례례테스트례례례례례례례례례례례례례례례례례테스트례례례례례례례례례례례례례례례례례례례테스트례례례례례례례례례례례례테스트례례실례.테스트",
+                "valid": false
+            }
+        ]
+    }
+]
diff -pruN 3.0.2-4/json/tests/draft2019-09/optional/format/ipv4.json 3.2.0-5/json/tests/draft2019-09/optional/format/ipv4.json
--- 3.0.2-4/json/tests/draft2019-09/optional/format/ipv4.json	1970-01-01 00:00:00.000000000 +0000
+++ 3.2.0-5/json/tests/draft2019-09/optional/format/ipv4.json	2019-11-18 12:36:14.000000000 +0000
@@ -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 -pruN 3.0.2-4/json/tests/draft2019-09/optional/format/ipv6.json 3.2.0-5/json/tests/draft2019-09/optional/format/ipv6.json
--- 3.0.2-4/json/tests/draft2019-09/optional/format/ipv6.json	1970-01-01 00:00:00.000000000 +0000
+++ 3.2.0-5/json/tests/draft2019-09/optional/format/ipv6.json	2019-11-18 12:36:14.000000000 +0000
@@ -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 -pruN 3.0.2-4/json/tests/draft2019-09/optional/format/iri.json 3.2.0-5/json/tests/draft2019-09/optional/format/iri.json
--- 3.0.2-4/json/tests/draft2019-09/optional/format/iri.json	1970-01-01 00:00:00.000000000 +0000
+++ 3.2.0-5/json/tests/draft2019-09/optional/format/iri.json	2019-11-18 12:36:14.000000000 +0000
@@ -0,0 +1,53 @@
+[
+    {
+        "description": "validation of IRIs",
+        "schema": {"format": "iri"},
+        "tests": [
+            {
+                "description": "a valid IRI with anchor tag",
+                "data": "http://ƒøø.ßår/?∂éœ=πîx#πîüx",
+                "valid": true
+            },
+            {
+                "description": "a valid IRI with anchor tag and parantheses",
+                "data": "http://ƒøø.com/blah_(wîkïpédiå)_blah#ßité-1",
+                "valid": true
+            },
+            {
+                "description": "a valid IRI with URL-encoded stuff",
+                "data": "http://ƒøø.ßår/?q=Test%20URL-encoded%20stuff",
+                "valid": true
+            },
+            {
+                "description": "a valid IRI with many special characters",
+                "data": "http://-.~_!$&'()*+,;=:%40:80%2f::::::@example.com",
+                "valid": true
+            },
+            {
+                "description": "a valid IRI based on IPv6",
+                "data": "http://[2001:0db8:85a3:0000:0000:8a2e:0370:7334]",
+                "valid": true
+            },
+            {
+                "description": "an invalid IRI based on IPv6",
+                "data": "http://2001:0db8:85a3:0000:0000:8a2e:0370:7334",
+                "valid": false
+            },
+            {
+                "description": "an invalid relative IRI Reference",
+                "data": "/abc",
+                "valid": false
+            },
+            {
+                "description": "an invalid IRI",
+                "data": "\\\\WINDOWS\\filëßåré",
+                "valid": false
+            },
+            {
+                "description": "an invalid IRI though valid IRI reference",
+                "data": "âππ",
+                "valid": false
+            }
+        ]
+    }
+]
diff -pruN 3.0.2-4/json/tests/draft2019-09/optional/format/iri-reference.json 3.2.0-5/json/tests/draft2019-09/optional/format/iri-reference.json
--- 3.0.2-4/json/tests/draft2019-09/optional/format/iri-reference.json	1970-01-01 00:00:00.000000000 +0000
+++ 3.2.0-5/json/tests/draft2019-09/optional/format/iri-reference.json	2019-11-18 12:36:14.000000000 +0000
@@ -0,0 +1,43 @@
+[
+    {
+        "description": "validation of IRI References",
+        "schema": {"format": "iri-reference"},
+        "tests": [
+            {
+                "description": "a valid IRI",
+                "data": "http://ƒøø.ßår/?∂éœ=πîx#πîüx",
+                "valid": true
+            },
+            {
+                "description": "a valid protocol-relative IRI Reference",
+                "data": "//ƒøø.ßår/?∂éœ=πîx#πîüx",
+                "valid": true
+            },
+            {
+                "description": "a valid relative IRI Reference",
+                "data": "/âππ",
+                "valid": true
+            },
+            {
+                "description": "an invalid IRI Reference",
+                "data": "\\\\WINDOWS\\filëßåré",
+                "valid": false
+            },
+            {
+                "description": "a valid IRI Reference",
+                "data": "âππ",
+                "valid": true
+            },
+            {
+                "description": "a valid IRI fragment",
+                "data": "#ƒrägmênt",
+                "valid": true
+            },
+            {
+                "description": "an invalid IRI fragment",
+                "data": "#ƒräg\\mênt",
+                "valid": false
+            }
+        ]
+    }
+]
diff -pruN 3.0.2-4/json/tests/draft2019-09/optional/format/json-pointer.json 3.2.0-5/json/tests/draft2019-09/optional/format/json-pointer.json
--- 3.0.2-4/json/tests/draft2019-09/optional/format/json-pointer.json	1970-01-01 00:00:00.000000000 +0000
+++ 3.2.0-5/json/tests/draft2019-09/optional/format/json-pointer.json	2019-11-18 12:36:14.000000000 +0000
@@ -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 -pruN 3.0.2-4/json/tests/draft2019-09/optional/format/regex.json 3.2.0-5/json/tests/draft2019-09/optional/format/regex.json
--- 3.0.2-4/json/tests/draft2019-09/optional/format/regex.json	1970-01-01 00:00:00.000000000 +0000
+++ 3.2.0-5/json/tests/draft2019-09/optional/format/regex.json	2019-11-18 12:36:14.000000000 +0000
@@ -0,0 +1,18 @@
+[
+    {
+        "description": "validation of regular expressions",
+        "schema": {"format": "regex"},
+        "tests": [
+            {
+                "description": "a valid regular expression",
+                "data": "([abc])+\\s+$",
+                "valid": true
+            },
+            {
+                "description": "a regular expression with unclosed parens is invalid",
+                "data": "^(abc]",
+                "valid": false
+            }
+        ]
+    }
+]
diff -pruN 3.0.2-4/json/tests/draft2019-09/optional/format/relative-json-pointer.json 3.2.0-5/json/tests/draft2019-09/optional/format/relative-json-pointer.json
--- 3.0.2-4/json/tests/draft2019-09/optional/format/relative-json-pointer.json	1970-01-01 00:00:00.000000000 +0000
+++ 3.2.0-5/json/tests/draft2019-09/optional/format/relative-json-pointer.json	2019-11-18 12:36:14.000000000 +0000
@@ -0,0 +1,33 @@
+[
+    {
+        "description": "validation of Relative JSON Pointers (RJP)",
+        "schema": {"format": "relative-json-pointer"},
+        "tests": [
+            {
+                "description": "a valid upwards RJP",
+                "data": "1",
+                "valid": true
+            },
+            {
+                "description": "a valid downwards RJP",  
+                "data": "0/foo/bar",
+                "valid": true
+            },
+            {
+                "description": "a valid up and then down RJP, with array index",
+                "data": "2/0/baz/1/zip",
+                "valid": true
+            },
+            {
+                "description": "a valid RJP taking the member or index name",
+                "data": "0#",
+                "valid": true
+            },
+            {
+                "description": "an invalid RJP that is a valid JSON Pointer",
+                "data": "/foo/bar",
+                "valid": false
+            }
+        ]
+    }
+]
diff -pruN 3.0.2-4/json/tests/draft2019-09/optional/format/time.json 3.2.0-5/json/tests/draft2019-09/optional/format/time.json
--- 3.0.2-4/json/tests/draft2019-09/optional/format/time.json	1970-01-01 00:00:00.000000000 +0000
+++ 3.2.0-5/json/tests/draft2019-09/optional/format/time.json	2019-11-18 12:36:14.000000000 +0000
@@ -0,0 +1,23 @@
+[
+    {
+        "description": "validation of time strings",
+        "schema": {"format": "time"},
+        "tests": [
+            {
+                "description": "a valid time string",
+                "data": "08:30:06.283185Z",
+                "valid": true
+            },
+            {
+                "description": "an invalid time string",
+                "data": "08:30:06 PST",
+                "valid": false
+            },
+            {
+                "description": "only RFC3339 not all of ISO 8601 are valid",
+                "data": "01:01:01,1111",
+                "valid": false
+            }
+        ]
+    }
+]
diff -pruN 3.0.2-4/json/tests/draft2019-09/optional/format/uri.json 3.2.0-5/json/tests/draft2019-09/optional/format/uri.json
--- 3.0.2-4/json/tests/draft2019-09/optional/format/uri.json	1970-01-01 00:00:00.000000000 +0000
+++ 3.2.0-5/json/tests/draft2019-09/optional/format/uri.json	2019-11-18 12:36:14.000000000 +0000
@@ -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 -pruN 3.0.2-4/json/tests/draft2019-09/optional/format/uri-reference.json 3.2.0-5/json/tests/draft2019-09/optional/format/uri-reference.json
--- 3.0.2-4/json/tests/draft2019-09/optional/format/uri-reference.json	1970-01-01 00:00:00.000000000 +0000
+++ 3.2.0-5/json/tests/draft2019-09/optional/format/uri-reference.json	2019-11-18 12:36:14.000000000 +0000
@@ -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 -pruN 3.0.2-4/json/tests/draft2019-09/optional/format/uri-template.json 3.2.0-5/json/tests/draft2019-09/optional/format/uri-template.json
--- 3.0.2-4/json/tests/draft2019-09/optional/format/uri-template.json	1970-01-01 00:00:00.000000000 +0000
+++ 3.2.0-5/json/tests/draft2019-09/optional/format/uri-template.json	2019-11-18 12:36:14.000000000 +0000
@@ -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 -pruN 3.0.2-4/json/tests/draft2019-09/optional/zeroTerminatedFloats.json 3.2.0-5/json/tests/draft2019-09/optional/zeroTerminatedFloats.json
--- 3.0.2-4/json/tests/draft2019-09/optional/zeroTerminatedFloats.json	1970-01-01 00:00:00.000000000 +0000
+++ 3.2.0-5/json/tests/draft2019-09/optional/zeroTerminatedFloats.json	2019-11-18 12:36:14.000000000 +0000
@@ -0,0 +1,15 @@
+[
+    {
+        "description": "some languages do not distinguish between different types of numeric value",
+        "schema": {
+            "type": "integer"
+        },
+        "tests": [
+            {
+                "description": "a float without fractional part is an integer",
+                "data": 1.0,
+                "valid": true
+            }
+        ]
+    }
+]
diff -pruN 3.0.2-4/json/tests/draft2019-09/pattern.json 3.2.0-5/json/tests/draft2019-09/pattern.json
--- 3.0.2-4/json/tests/draft2019-09/pattern.json	1970-01-01 00:00:00.000000000 +0000
+++ 3.2.0-5/json/tests/draft2019-09/pattern.json	2019-11-18 12:36:14.000000000 +0000
@@ -0,0 +1,34 @@
+[
+    {
+        "description": "pattern validation",
+        "schema": {"pattern": "^a*$"},
+        "tests": [
+            {
+                "description": "a matching pattern is valid",
+                "data": "aaa",
+                "valid": true
+            },
+            {
+                "description": "a non-matching pattern is invalid",
+                "data": "abc",
+                "valid": false
+            },
+            {
+                "description": "ignores non-strings",
+                "data": true,
+                "valid": true
+            }
+        ]
+    },
+    {
+        "description": "pattern is not anchored",
+        "schema": {"pattern": "a+"},
+        "tests": [
+            {
+                "description": "matches a substring",
+                "data": "xxaayy",
+                "valid": true
+            }
+        ]
+    }
+]
diff -pruN 3.0.2-4/json/tests/draft2019-09/patternProperties.json 3.2.0-5/json/tests/draft2019-09/patternProperties.json
--- 3.0.2-4/json/tests/draft2019-09/patternProperties.json	1970-01-01 00:00:00.000000000 +0000
+++ 3.2.0-5/json/tests/draft2019-09/patternProperties.json	2019-11-18 12:36:14.000000000 +0000
@@ -0,0 +1,151 @@
+[
+    {
+        "description":
+            "patternProperties validates properties matching a regex",
+        "schema": {
+            "patternProperties": {
+                "f.*o": {"type": "integer"}
+            }
+        },
+        "tests": [
+            {
+                "description": "a single valid match is valid",
+                "data": {"foo": 1},
+                "valid": true
+            },
+            {
+                "description": "multiple valid matches is valid",
+                "data": {"foo": 1, "foooooo" : 2},
+                "valid": true
+            },
+            {
+                "description": "a single invalid match is invalid",
+                "data": {"foo": "bar", "fooooo": 2},
+                "valid": false
+            },
+            {
+                "description": "multiple invalid matches is invalid",
+                "data": {"foo": "bar", "foooooo" : "baz"},
+                "valid": false
+            },
+            {
+                "description": "ignores arrays",
+                "data": ["foo"],
+                "valid": true
+            },
+            {
+                "description": "ignores strings",
+                "data": "foo",
+                "valid": true
+            },
+            {
+                "description": "ignores other non-objects",
+                "data": 12,
+                "valid": true
+            }
+        ]
+    },
+    {
+        "description": "multiple simultaneous patternProperties are validated",
+        "schema": {
+            "patternProperties": {
+                "a*": {"type": "integer"},
+                "aaa*": {"maximum": 20}
+            }
+        },
+        "tests": [
+            {
+                "description": "a single valid match is valid",
+                "data": {"a": 21},
+                "valid": true
+            },
+            {
+                "description": "a simultaneous match is valid",
+                "data": {"aaaa": 18},
+                "valid": true
+            },
+            {
+                "description": "multiple matches is valid",
+                "data": {"a": 21, "aaaa": 18},
+                "valid": true
+            },
+            {
+                "description": "an invalid due to one is invalid",
+                "data": {"a": "bar"},
+                "valid": false
+            },
+            {
+                "description": "an invalid due to the other is invalid",
+                "data": {"aaaa": 31},
+                "valid": false
+            },
+            {
+                "description": "an invalid due to both is invalid",
+                "data": {"aaa": "foo", "aaaa": 31},
+                "valid": false
+            }
+        ]
+    },
+    {
+        "description": "regexes are not anchored by default and are case sensitive",
+        "schema": {
+            "patternProperties": {
+                "[0-9]{2,}": { "type": "boolean" },
+                "X_": { "type": "string" }
+            }
+        },
+        "tests": [
+            {
+                "description": "non recognized members are ignored",
+                "data": { "answer 1": "42" },
+                "valid": true
+            },
+            {
+                "description": "recognized members are accounted for",
+                "data": { "a31b": null },
+                "valid": false
+            },
+            {
+                "description": "regexes are case sensitive",
+                "data": { "a_x_3": 3 },
+                "valid": true
+            },
+            {
+                "description": "regexes are case sensitive, 2",
+                "data": { "a_X_3": 3 },
+                "valid": false
+            }
+        ]
+    },
+    {
+        "description": "patternProperties with boolean schemas",
+        "schema": {
+            "patternProperties": {
+                "f.*": true,
+                "b.*": false
+            }
+        },
+        "tests": [
+            {
+                "description": "object with property matching schema true is valid",
+                "data": {"foo": 1},
+                "valid": true
+            },
+            {
+                "description": "object with property matching schema false is invalid",
+                "data": {"bar": 2},
+                "valid": false
+            },
+            {
+                "description": "object with both properties is invalid",
+                "data": {"foo": 1, "bar": 2},
+                "valid": false
+            },
+            {
+                "description": "empty object is valid",
+                "data": {},
+                "valid": true
+            }
+        ]
+    }
+]
diff -pruN 3.0.2-4/json/tests/draft2019-09/properties.json 3.2.0-5/json/tests/draft2019-09/properties.json
--- 3.0.2-4/json/tests/draft2019-09/properties.json	1970-01-01 00:00:00.000000000 +0000
+++ 3.2.0-5/json/tests/draft2019-09/properties.json	2019-11-18 12:36:14.000000000 +0000
@@ -0,0 +1,167 @@
+[
+    {
+        "description": "object properties validation",
+        "schema": {
+            "properties": {
+                "foo": {"type": "integer"},
+                "bar": {"type": "string"}
+            }
+        },
+        "tests": [
+            {
+                "description": "both properties present and valid is valid",
+                "data": {"foo": 1, "bar": "baz"},
+                "valid": true
+            },
+            {
+                "description": "one property invalid is invalid",
+                "data": {"foo": 1, "bar": {}},
+                "valid": false
+            },
+            {
+                "description": "both properties invalid is invalid",
+                "data": {"foo": [], "bar": {}},
+                "valid": false
+            },
+            {
+                "description": "doesn't invalidate other properties",
+                "data": {"quux": []},
+                "valid": true
+            },
+            {
+                "description": "ignores arrays",
+                "data": [],
+                "valid": true
+            },
+            {
+                "description": "ignores other non-objects",
+                "data": 12,
+                "valid": true
+            }
+        ]
+    },
+    {
+        "description":
+            "properties, patternProperties, additionalProperties interaction",
+        "schema": {
+            "properties": {
+                "foo": {"type": "array", "maxItems": 3},
+                "bar": {"type": "array"}
+            },
+            "patternProperties": {"f.o": {"minItems": 2}},
+            "additionalProperties": {"type": "integer"}
+        },
+        "tests": [
+            {
+                "description": "property validates property",
+                "data": {"foo": [1, 2]},
+                "valid": true
+            },
+            {
+                "description": "property invalidates property",
+                "data": {"foo": [1, 2, 3, 4]},
+                "valid": false
+            },
+            {
+                "description": "patternProperty invalidates property",
+                "data": {"foo": []},
+                "valid": false
+            },
+            {
+                "description": "patternProperty validates nonproperty",
+                "data": {"fxo": [1, 2]},
+                "valid": true
+            },
+            {
+                "description": "patternProperty invalidates nonproperty",
+                "data": {"fxo": []},
+                "valid": false
+            },
+            {
+                "description": "additionalProperty ignores property",
+                "data": {"bar": []},
+                "valid": true
+            },
+            {
+                "description": "additionalProperty validates others",
+                "data": {"quux": 3},
+                "valid": true
+            },
+            {
+                "description": "additionalProperty invalidates others",
+                "data": {"quux": "foo"},
+                "valid": false
+            }
+        ]
+    },
+    {
+        "description": "properties with boolean schema",
+        "schema": {
+            "properties": {
+                "foo": true,
+                "bar": false
+            }
+        },
+        "tests": [
+            {
+                "description": "no property present is valid",
+                "data": {},
+                "valid": true
+            },
+            {
+                "description": "only 'true' property present is valid",
+                "data": {"foo": 1},
+                "valid": true
+            },
+            {
+                "description": "only 'false' property present is invalid",
+                "data": {"bar": 2},
+                "valid": false
+            },
+            {
+                "description": "both properties present is invalid",
+                "data": {"foo": 1, "bar": 2},
+                "valid": false
+            }
+        ]
+    },
+    {
+        "description": "properties with escaped characters",
+        "schema": {
+            "properties": {
+                "foo\nbar": {"type": "number"},
+                "foo\"bar": {"type": "number"},
+                "foo\\bar": {"type": "number"},
+                "foo\rbar": {"type": "number"},
+                "foo\tbar": {"type": "number"},
+                "foo\fbar": {"type": "number"}
+            }
+        },
+        "tests": [
+            {
+                "description": "object with all numbers is valid",
+                "data": {
+                    "foo\nbar": 1,
+                    "foo\"bar": 1,
+                    "foo\\bar": 1,
+                    "foo\rbar": 1,
+                    "foo\tbar": 1,
+                    "foo\fbar": 1
+                },
+                "valid": true
+            },
+            {
+                "description": "object with strings is invalid",
+                "data": {
+                    "foo\nbar": "1",
+                    "foo\"bar": "1",
+                    "foo\\bar": "1",
+                    "foo\rbar": "1",
+                    "foo\tbar": "1",
+                    "foo\fbar": "1"
+                },
+                "valid": false
+            }
+        ]
+    }
+]
diff -pruN 3.0.2-4/json/tests/draft2019-09/propertyNames.json 3.2.0-5/json/tests/draft2019-09/propertyNames.json
--- 3.0.2-4/json/tests/draft2019-09/propertyNames.json	1970-01-01 00:00:00.000000000 +0000
+++ 3.2.0-5/json/tests/draft2019-09/propertyNames.json	2019-11-18 12:36:14.000000000 +0000
@@ -0,0 +1,78 @@
+[
+    {
+        "description": "propertyNames validation",
+        "schema": {
+            "propertyNames": {"maxLength": 3}
+        },
+        "tests": [
+            {
+                "description": "all property names valid",
+                "data": {
+                    "f": {},
+                    "foo": {}
+                },
+                "valid": true
+            },
+            {
+                "description": "some property names invalid",
+                "data": {
+                    "foo": {},
+                    "foobar": {}
+                },
+                "valid": false
+            },
+            {
+                "description": "object without properties is valid",
+                "data": {},
+                "valid": true
+            },
+            {
+                "description": "ignores arrays",
+                "data": [1, 2, 3, 4],
+                "valid": true
+            },
+            {
+                "description": "ignores strings",
+                "data": "foobar",
+                "valid": true
+            },
+            {
+                "description": "ignores other non-objects",
+                "data": 12,
+                "valid": true
+            }
+        ]
+    },
+    {
+        "description": "propertyNames with boolean schema true",
+        "schema": {"propertyNames": true},
+        "tests": [
+            {
+                "description": "object with any properties is valid",
+                "data": {"foo": 1},
+                "valid": true
+            },
+            {
+                "description": "empty object is valid",
+                "data": {},
+                "valid": true
+            }
+        ]
+    },
+    {
+        "description": "propertyNames with boolean schema false",
+        "schema": {"propertyNames": false},
+        "tests": [
+            {
+                "description": "object with any properties is invalid",
+                "data": {"foo": 1},
+                "valid": false
+            },
+            {
+                "description": "empty object is valid",
+                "data": {},
+                "valid": true
+            }
+        ]
+    }
+]
diff -pruN 3.0.2-4/json/tests/draft2019-09/ref.json 3.2.0-5/json/tests/draft2019-09/ref.json
--- 3.0.2-4/json/tests/draft2019-09/ref.json	1970-01-01 00:00:00.000000000 +0000
+++ 3.2.0-5/json/tests/draft2019-09/ref.json	2019-11-18 12:36:14.000000000 +0000
@@ -0,0 +1,359 @@
+[
+    {
+        "description": "root pointer ref",
+        "schema": {
+            "properties": {
+                "foo": {"$ref": "#"}
+            },
+            "additionalProperties": false
+        },
+        "tests": [
+            {
+                "description": "match",
+                "data": {"foo": false},
+                "valid": true
+            },
+            {
+                "description": "recursive match",
+                "data": {"foo": {"foo": false}},
+                "valid": true
+            },
+            {
+                "description": "mismatch",
+                "data": {"bar": false},
+                "valid": false
+            },
+            {
+                "description": "recursive mismatch",
+                "data": {"foo": {"bar": false}},
+                "valid": false
+            }
+        ]
+    },
+    {
+        "description": "relative pointer ref to object",
+        "schema": {
+            "properties": {
+                "foo": {"type": "integer"},
+                "bar": {"$ref": "#/properties/foo"}
+            }
+        },
+        "tests": [
+            {
+                "description": "match",
+                "data": {"bar": 3},
+                "valid": true
+            },
+            {
+                "description": "mismatch",
+                "data": {"bar": true},
+                "valid": false
+            }
+        ]
+    },
+    {
+        "description": "relative pointer ref to array",
+        "schema": {
+            "items": [
+                {"type": "integer"},
+                {"$ref": "#/items/0"}
+            ]
+        },
+        "tests": [
+            {
+                "description": "match array",
+                "data": [1, 2],
+                "valid": true
+            },
+            {
+                "description": "mismatch array",
+                "data": [1, "foo"],
+                "valid": false
+            }
+        ]
+    },
+    {
+        "description": "escaped pointer ref",
+        "schema": {
+            "tilda~field": {"type": "integer"},
+            "slash/field": {"type": "integer"},
+            "percent%field": {"type": "integer"},
+            "properties": {
+                "tilda": {"$ref": "#/tilda~0field"},
+                "slash": {"$ref": "#/slash~1field"},
+                "percent": {"$ref": "#/percent%25field"}
+            }
+        },
+        "tests": [
+            {
+                "description": "slash invalid",
+                "data": {"slash": "aoeu"},
+                "valid": false
+            },
+            {
+                "description": "tilda invalid",
+                "data": {"tilda": "aoeu"},
+                "valid": false
+            },
+            {
+                "description": "percent invalid",
+                "data": {"percent": "aoeu"},
+                "valid": false
+            },
+            {
+                "description": "slash valid",
+                "data": {"slash": 123},
+                "valid": true
+            },
+            {
+                "description": "tilda valid",
+                "data": {"tilda": 123},
+                "valid": true
+            },
+            {
+                "description": "percent valid",
+                "data": {"percent": 123},
+                "valid": true
+            }
+        ]
+    },
+    {
+        "description": "nested refs",
+        "schema": {
+            "$defs": {
+                "a": {"type": "integer"},
+                "b": {"$ref": "#/$defs/a"},
+                "c": {"$ref": "#/$defs/b"}
+            },
+            "$ref": "#/$defs/c"
+        },
+        "tests": [
+            {
+                "description": "nested ref valid",
+                "data": 5,
+                "valid": true
+            },
+            {
+                "description": "nested ref invalid",
+                "data": "a",
+                "valid": false
+            }
+        ]
+    },
+    {
+        "description": "ref overrides any sibling keywords",
+        "schema": {
+            "$defs": {
+                "reffed": {
+                    "type": "array"
+                }
+            },
+            "properties": {
+                "foo": {
+                    "$ref": "#/$defs/reffed",
+                    "maxItems": 2
+                }
+            }
+        },
+        "tests": [
+            {
+                "description": "ref valid",
+                "data": { "foo": [] },
+                "valid": true
+            },
+            {
+                "description": "ref valid, maxItems ignored",
+                "data": { "foo": [ 1, 2, 3] },
+                "valid": true
+            },
+            {
+                "description": "ref invalid",
+                "data": { "foo": "string" },
+                "valid": false
+            }
+        ]
+    },
+    {
+        "description": "remote ref, containing refs itself",
+        "schema": {"$ref": "https://json-schema.org/draft/2019-09/schema"},
+        "tests": [
+            {
+                "description": "remote ref valid",
+                "data": {"minLength": 1},
+                "valid": true
+            },
+            {
+                "description": "remote ref invalid",
+                "data": {"minLength": -1},
+                "valid": false
+            }
+        ]
+    },
+    {
+        "description": "property named $ref that is not a reference",
+        "schema": {
+            "properties": {
+                "$ref": {"type": "string"}
+            }
+        },
+        "tests": [
+            {
+                "description": "property named $ref valid",
+                "data": {"$ref": "a"},
+                "valid": true
+            },
+            {
+                "description": "property named $ref invalid",
+                "data": {"$ref": 2},
+                "valid": false
+            }
+        ]
+    },
+    {
+        "description": "$ref to boolean schema true",
+        "schema": {
+            "$ref": "#/$defs/bool",
+            "$defs": {
+                "bool": true
+            }
+        },
+        "tests": [
+            {
+                "description": "any value is valid",
+                "data": "foo",
+                "valid": true
+            }
+        ]
+    },
+    {
+        "description": "$ref to boolean schema false",
+        "schema": {
+            "$ref": "#/$defs/bool",
+            "$defs": {
+                "bool": false
+            }
+        },
+        "tests": [
+            {
+                "description": "any value is invalid",
+                "data": "foo",
+                "valid": false
+            }
+        ]
+    },
+    {
+        "description": "Recursive references between schemas",
+        "schema": {
+            "$id": "http://localhost:1234/tree",
+            "description": "tree of nodes",
+            "type": "object",
+            "properties": {
+                "meta": {"type": "string"},
+                "nodes": {
+                    "type": "array",
+                    "items": {"$ref": "node"}
+                }
+            },
+            "required": ["meta", "nodes"],
+            "$defs": {
+                "node": {
+                    "$id": "http://localhost:1234/node",
+                    "description": "node",
+                    "type": "object",
+                    "properties": {
+                        "value": {"type": "number"},
+                        "subtree": {"$ref": "tree"}
+                    },
+                    "required": ["value"]
+                }
+            }
+        },
+        "tests": [
+            {
+                "description": "valid tree",
+                "data": { 
+                    "meta": "root",
+                    "nodes": [
+                        {
+                            "value": 1,
+                            "subtree": {
+                                "meta": "child",
+                                "nodes": [
+                                    {"value": 1.1},
+                                    {"value": 1.2}
+                                ]
+                            }
+                        },
+                        {
+                            "value": 2,
+                            "subtree": {
+                                "meta": "child",
+                                "nodes": [
+                                    {"value": 2.1},
+                                    {"value": 2.2}
+                                ]
+                            }
+                        }
+                    ]
+                },
+                "valid": true
+            },
+            {
+                "description": "invalid tree",
+                "data": { 
+                    "meta": "root",
+                    "nodes": [
+                        {
+                            "value": 1,
+                            "subtree": {
+                                "meta": "child",
+                                "nodes": [
+                                    {"value": "string is invalid"},
+                                    {"value": 1.2}
+                                ]
+                            }
+                        },
+                        {
+                            "value": 2,
+                            "subtree": {
+                                "meta": "child",
+                                "nodes": [
+                                    {"value": 2.1},
+                                    {"value": 2.2}
+                                ]
+                            }
+                        }
+                    ]
+                },
+                "valid": false
+            }
+        ]
+    },
+    {
+        "description": "refs with quote",
+        "schema": {
+            "properties": {
+                "foo\"bar": {"$ref": "#/$defs/foo%22bar"}
+            },
+            "$defs": {
+                "foo\"bar": {"type": "number"}
+            }
+        },
+        "tests": [
+            {
+                "description": "object with numbers is valid",
+                "data": {
+                    "foo\"bar": 1
+                },
+                "valid": true
+            },
+            {
+                "description": "object with strings is invalid",
+                "data": {
+                    "foo\"bar": "1"
+                },
+                "valid": false
+            }
+        ]
+    }
+]
diff -pruN 3.0.2-4/json/tests/draft2019-09/refRemote.json 3.2.0-5/json/tests/draft2019-09/refRemote.json
--- 3.0.2-4/json/tests/draft2019-09/refRemote.json	1970-01-01 00:00:00.000000000 +0000
+++ 3.2.0-5/json/tests/draft2019-09/refRemote.json	2019-11-18 12:36:14.000000000 +0000
@@ -0,0 +1,167 @@
+[
+    {
+        "description": "remote ref",
+        "schema": {"$ref": "http://localhost:1234/integer.json"},
+        "tests": [
+            {
+                "description": "remote ref valid",
+                "data": 1,
+                "valid": true
+            },
+            {
+                "description": "remote ref invalid",
+                "data": "a",
+                "valid": false
+            }
+        ]
+    },
+    {
+        "description": "fragment within remote ref",
+        "schema": {"$ref": "http://localhost:1234/subSchemas.json#/integer"},
+        "tests": [
+            {
+                "description": "remote fragment valid",
+                "data": 1,
+                "valid": true
+            },
+            {
+                "description": "remote fragment invalid",
+                "data": "a",
+                "valid": false
+            }
+        ]
+    },
+    {
+        "description": "ref within remote ref",
+        "schema": {
+            "$ref": "http://localhost:1234/subSchemas.json#/refToInteger"
+        },
+        "tests": [
+            {
+                "description": "ref within ref valid",
+                "data": 1,
+                "valid": true
+            },
+            {
+                "description": "ref within ref invalid",
+                "data": "a",
+                "valid": false
+            }
+        ]
+    },
+    {
+        "description": "base URI change",
+        "schema": {
+            "$id": "http://localhost:1234/",
+            "items": {
+                "$id": "folder/",
+                "items": {"$ref": "folderInteger.json"}
+            }
+        },
+        "tests": [
+            {
+                "description": "base URI change ref valid",
+                "data": [[1]],
+                "valid": true
+            },
+            {
+                "description": "base URI change ref invalid",
+                "data": [["a"]],
+                "valid": false
+            }
+        ]
+    },
+    {
+        "description": "base URI change - change folder",
+        "schema": {
+            "$id": "http://localhost:1234/scope_change_defs1.json",
+            "type" : "object",
+            "properties": {"list": {"$ref": "#/$defs/baz"}},
+            "$defs": {
+                "baz": {
+                    "$id": "folder/",
+                    "type": "array",
+                    "items": {"$ref": "folderInteger.json"}
+                }
+            }
+        },
+        "tests": [
+            {
+                "description": "number is valid",
+                "data": {"list": [1]},
+                "valid": true
+            },
+            {
+                "description": "string is invalid",
+                "data": {"list": ["a"]},
+                "valid": false
+            }
+        ]
+    },
+    {
+        "description": "base URI change - change folder in subschema",
+        "schema": {
+            "$id": "http://localhost:1234/scope_change_defs2.json",
+            "type" : "object",
+            "properties": {"list": {"$ref": "#/$defs/baz/$defs/bar"}},
+            "$defs": {
+                "baz": {
+                    "$id": "folder/",
+                    "$defs": {
+                        "bar": {
+                            "type": "array",
+                            "items": {"$ref": "folderInteger.json"}
+                        }
+                    }
+                }
+            }
+        },
+        "tests": [
+            {
+                "description": "number is valid",
+                "data": {"list": [1]},
+                "valid": true
+            },
+            {
+                "description": "string is invalid",
+                "data": {"list": ["a"]},
+                "valid": false
+            }
+        ]
+    },
+    {
+        "description": "root ref in remote ref",
+        "schema": {
+            "$id": "http://localhost:1234/object",
+            "type": "object",
+            "properties": {
+                "name": {"$ref": "name-defs.json#/$defs/orNull"}
+            }
+        },
+        "tests": [
+            {
+                "description": "string is valid",
+                "data": {
+                    "name": "foo"
+                },
+                "valid": true
+            },
+            {
+                "description": "null is valid",
+                "data": {
+                    "name": null
+                },
+                "valid": true
+            },
+            {
+                "description": "object is invalid",
+                "data": {
+                    "name": {
+                        "name": null
+                    }
+                },
+                "valid": false
+            }
+        ]
+    }
+]
diff -pruN 3.0.2-4/json/tests/draft2019-09/required.json 3.2.0-5/json/tests/draft2019-09/required.json
--- 3.0.2-4/json/tests/draft2019-09/required.json	1970-01-01 00:00:00.000000000 +0000
+++ 3.2.0-5/json/tests/draft2019-09/required.json	2019-11-18 12:36:14.000000000 +0000
@@ -0,0 +1,105 @@
+[
+    {
+        "description": "required validation",
+        "schema": {
+            "properties": {
+                "foo": {},
+                "bar": {}
+            },
+            "required": ["foo"]
+        },
+        "tests": [
+            {
+                "description": "present required property is valid",
+                "data": {"foo": 1},
+                "valid": true
+            },
+            {
+                "description": "non-present required property is invalid",
+                "data": {"bar": 1},
+                "valid": false
+            },
+            {
+                "description": "ignores arrays",
+                "data": [],
+                "valid": true
+            },
+            {
+                "description": "ignores strings",
+                "data": "",
+                "valid": true
+            },
+            {
+                "description": "ignores other non-objects",
+                "data": 12,
+                "valid": true
+            }
+        ]
+    },
+    {
+        "description": "required default validation",
+        "schema": {
+            "properties": {
+                "foo": {}
+            }
+        },
+        "tests": [
+            {
+                "description": "not required by default",
+                "data": {},
+                "valid": true
+            }
+        ]
+    },
+    {
+        "description": "required with empty array",
+        "schema": {
+            "properties": {
+                "foo": {}
+            },
+            "required": []
+        },
+        "tests": [
+            {
+                "description": "property not required",
+                "data": {},
+                "valid": true
+            }
+        ]
+    },
+    {
+        "description": "required with escaped characters",
+        "schema": {
+            "required": [
+                "foo\nbar",
+                "foo\"bar",
+                "foo\\bar",
+                "foo\rbar",
+                "foo\tbar",
+                "foo\fbar"
+            ]
+        },
+        "tests": [
+            {
+                "description": "object with all properties present is valid",
+                "data": {
+                    "foo\nbar": 1,
+                    "foo\"bar": 1,
+                    "foo\\bar": 1,
+                    "foo\rbar": 1,
+                    "foo\tbar": 1,
+                    "foo\fbar": 1
+                },
+                "valid": true
+            },
+            {
+                "description": "object with some properties missing is invalid",
+                "data": {
+                    "foo\nbar": "1",
+                    "foo\"bar": "1"
+                },
+                "valid": false
+            }
+        ]
+    }
+]
diff -pruN 3.0.2-4/json/tests/draft2019-09/type.json 3.2.0-5/json/tests/draft2019-09/type.json
--- 3.0.2-4/json/tests/draft2019-09/type.json	1970-01-01 00:00:00.000000000 +0000
+++ 3.2.0-5/json/tests/draft2019-09/type.json	2019-11-18 12:36:14.000000000 +0000
@@ -0,0 +1,464 @@
+[
+    {
+        "description": "integer type matches integers",
+        "schema": {"type": "integer"},
+        "tests": [
+            {
+                "description": "an integer is an integer",
+                "data": 1,
+                "valid": true
+            },
+            {
+                "description": "a float is not an integer",
+                "data": 1.1,
+                "valid": false
+            },
+            {
+                "description": "a string is not an integer",
+                "data": "foo",
+                "valid": false
+            },
+            {
+                "description": "a string is still not an integer, even if it looks like one",
+                "data": "1",
+                "valid": false
+            },
+            {
+                "description": "an object is not an integer",
+                "data": {},
+                "valid": false
+            },
+            {
+                "description": "an array is not an integer",
+                "data": [],
+                "valid": false
+            },
+            {
+                "description": "a boolean is not an integer",
+                "data": true,
+                "valid": false
+            },
+            {
+                "description": "null is not an integer",
+                "data": null,
+                "valid": false
+            }
+        ]
+    },
+    {
+        "description": "number type matches numbers",
+        "schema": {"type": "number"},
+        "tests": [
+            {
+                "description": "an integer is a number",
+                "data": 1,
+                "valid": true
+            },
+            {
+                "description": "a float is a number",
+                "data": 1.1,
+                "valid": true
+            },
+            {
+                "description": "a string is not a number",
+                "data": "foo",
+                "valid": false
+            },
+            {
+                "description": "a string is still not a number, even if it looks like one",
+                "data": "1",
+                "valid": false
+            },
+            {
+                "description": "an object is not a number",
+                "data": {},
+                "valid": false
+            },
+            {
+                "description": "an array is not a number",
+                "data": [],
+                "valid": false
+            },
+            {
+                "description": "a boolean is not a number",
+                "data": true,
+                "valid": false
+            },
+            {
+                "description": "null is not a number",
+                "data": null,
+                "valid": false
+            }
+        ]
+    },
+    {
+        "description": "string type matches strings",
+        "schema": {"type": "string"},
+        "tests": [
+            {
+                "description": "1 is not a string",
+                "data": 1,
+                "valid": false
+            },
+            {
+                "description": "a float is not a string",
+                "data": 1.1,
+                "valid": false
+            },
+            {
+                "description": "a string is a string",
+                "data": "foo",
+                "valid": true
+            },
+            {
+                "description": "a string is still a string, even if it looks like a number",
+                "data": "1",
+                "valid": true
+            },
+            {
+                "description": "an empty string is still a string",
+                "data": "",
+                "valid": true
+            },
+            {
+                "description": "an object is not a string",
+                "data": {},
+                "valid": false
+            },
+            {
+                "description": "an array is not a string",
+                "data": [],
+                "valid": false
+            },
+            {
+                "description": "a boolean is not a string",
+                "data": true,
+                "valid": false
+            },
+            {
+                "description": "null is not a string",
+                "data": null,
+                "valid": false
+            }
+        ]
+    },
+    {
+        "description": "object type matches objects",
+        "schema": {"type": "object"},
+        "tests": [
+            {
+                "description": "an integer is not an object",
+                "data": 1,
+                "valid": false
+            },
+            {
+                "description": "a float is not an object",
+                "data": 1.1,
+                "valid": false
+            },
+            {
+                "description": "a string is not an object",
+                "data": "foo",
+                "valid": false
+            },
+            {
+                "description": "an object is an object",
+                "data": {},
+                "valid": true
+            },
+            {
+                "description": "an array is not an object",
+                "data": [],
+                "valid": false
+            },
+            {
+                "description": "a boolean is not an object",
+                "data": true,
+                "valid": false
+            },
+            {
+                "description": "null is not an object",
+                "data": null,
+                "valid": false
+            }
+        ]
+    },
+    {
+        "description": "array type matches arrays",
+        "schema": {"type": "array"},
+        "tests": [
+            {
+                "description": "an integer is not an array",
+                "data": 1,
+                "valid": false
+            },
+            {
+                "description": "a float is not an array",
+                "data": 1.1,
+                "valid": false
+            },
+            {
+                "description": "a string is not an array",
+                "data": "foo",
+                "valid": false
+            },
+            {
+                "description": "an object is not an array",
+                "data": {},
+                "valid": false
+            },
+            {
+                "description": "an array is an array",
+                "data": [],
+                "valid": true
+            },
+            {
+                "description": "a boolean is not an array",
+                "data": true,
+                "valid": false
+            },
+            {
+                "description": "null is not an array",
+                "data": null,
+                "valid": false
+            }
+        ]
+    },
+    {
+        "description": "boolean type matches booleans",
+        "schema": {"type": "boolean"},
+        "tests": [
+            {
+                "description": "an integer is not a boolean",
+                "data": 1,
+                "valid": false
+            },
+            {
+                "description": "zero is not a boolean",
+                "data": 0,
+                "valid": false
+            },
+            {
+                "description": "a float is not a boolean",
+                "data": 1.1,
+                "valid": false
+            },
+            {
+                "description": "a string is not a boolean",
+                "data": "foo",
+                "valid": false
+            },
+            {
+                "description": "an empty string is not a boolean",
+                "data": "",
+                "valid": false
+            },
+            {
+                "description": "an object is not a boolean",
+                "data": {},
+                "valid": false
+            },
+            {
+                "description": "an array is not a boolean",
+                "data": [],
+                "valid": false
+            },
+            {
+                "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
+            }
+        ]
+    },
+    {
+        "description": "null type matches only the null object",
+        "schema": {"type": "null"},
+        "tests": [
+            {
+                "description": "an integer is not null",
+                "data": 1,
+                "valid": false
+            },
+            {
+                "description": "a float is not null",
+                "data": 1.1,
+                "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
+            },
+            {
+                "description": "an array is not null",
+                "data": [],
+                "valid": false
+            },
+            {
+                "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
+            }
+        ]
+    },
+    {
+        "description": "multiple types can be specified in an array",
+        "schema": {"type": ["integer", "string"]},
+        "tests": [
+            {
+                "description": "an integer is valid",
+                "data": 1,
+                "valid": true
+            },
+            {
+                "description": "a string is valid",
+                "data": "foo",
+                "valid": true
+            },
+            {
+                "description": "a float is invalid",
+                "data": 1.1,
+                "valid": false
+            },
+            {
+                "description": "an object is invalid",
+                "data": {},
+                "valid": false
+            },
+            {
+                "description": "an array is invalid",
+                "data": [],
+                "valid": false
+            },
+            {
+                "description": "a boolean is invalid",
+                "data": true,
+                "valid": false
+            },
+            {
+                "description": "null is invalid",
+                "data": null,
+                "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 -pruN 3.0.2-4/json/tests/draft2019-09/uniqueItems.json 3.2.0-5/json/tests/draft2019-09/uniqueItems.json
--- 3.0.2-4/json/tests/draft2019-09/uniqueItems.json	1970-01-01 00:00:00.000000000 +0000
+++ 3.2.0-5/json/tests/draft2019-09/uniqueItems.json	2019-11-18 12:36:14.000000000 +0000
@@ -0,0 +1,173 @@
+[
+    {
+        "description": "uniqueItems validation",
+        "schema": {"uniqueItems": true},
+        "tests": [
+            {
+                "description": "unique array of integers is valid",
+                "data": [1, 2],
+                "valid": true
+            },
+            {
+                "description": "non-unique array of integers is invalid",
+                "data": [1, 1],
+                "valid": false
+            },
+            {
+                "description": "numbers are unique if mathematically unequal",
+                "data": [1.0, 1.00, 1],
+                "valid": false
+            },
+            {
+                "description": "false is not equal to zero",
+                "data": [0, false],
+                "valid": true
+            },
+            {
+                "description": "true is not equal to one",
+                "data": [1, true],
+                "valid": true
+            },
+            {
+                "description": "unique array of objects is valid",
+                "data": [{"foo": "bar"}, {"foo": "baz"}],
+                "valid": true
+            },
+            {
+                "description": "non-unique array of objects is invalid",
+                "data": [{"foo": "bar"}, {"foo": "bar"}],
+                "valid": false
+            },
+            {
+                "description": "unique array of nested objects is valid",
+                "data": [
+                    {"foo": {"bar" : {"baz" : true}}},
+                    {"foo": {"bar" : {"baz" : false}}}
+                ],
+                "valid": true
+            },
+            {
+                "description": "non-unique array of nested objects is invalid",
+                "data": [
+                    {"foo": {"bar" : {"baz" : true}}},
+                    {"foo": {"bar" : {"baz" : true}}}
+                ],
+                "valid": false
+            },
+            {
+                "description": "unique array of arrays is valid",
+                "data": [["foo"], ["bar"]],
+                "valid": true
+            },
+            {
+                "description": "non-unique array of arrays is invalid",
+                "data": [["foo"], ["foo"]],
+                "valid": false
+            },
+            {
+                "description": "1 and true are unique",
+                "data": [1, true],
+                "valid": true
+            },
+            {
+                "description": "0 and false are unique",
+                "data": [0, false],
+                "valid": true
+            },
+            {
+                "description": "unique heterogeneous types are valid",
+                "data": [{}, [1], true, null, 1],
+                "valid": true
+            },
+            {
+                "description": "non-unique heterogeneous types are invalid",
+                "data": [{}, [1], true, null, {}, 1],
+                "valid": false
+            }
+        ]
+    },
+    {
+        "description": "uniqueItems with an array of items",
+        "schema": {
+            "items": [{"type": "boolean"}, {"type": "boolean"}], 
+            "uniqueItems": true
+        },
+        "tests": [
+            {
+                "description": "[false, true] from items array is valid",
+                "data": [false, true],
+                "valid": true
+            },
+            {
+                "description": "[true, false] from items array is valid",
+                "data": [true, false],
+                "valid": true
+            },
+            {
+                "description": "[false, false] from items array is not valid",
+                "data": [false, false],
+                "valid": false
+            },
+            {
+                "description": "[true, true] from items array is not valid",
+                "data": [true, true],
+                "valid": false
+            },
+            {
+                "description": "unique array extended from [false, true] is valid",
+                "data": [false, true, "foo", "bar"],
+                "valid": true
+            },
+            {
+                "description": "unique array extended from [true, false] is valid",
+                "data": [true, false, "foo", "bar"],
+                "valid": true
+            },
+            {
+                "description": "non-unique array extended from [false, true] is not valid",
+                "data": [false, true, "foo", "foo"],
+                "valid": false
+            },
+            {
+                "description": "non-unique array extended from [true, false] is not valid",
+                "data": [true, false, "foo", "foo"],
+                "valid": false
+            }
+        ]
+    },
+    {
+        "description": "uniqueItems with an array of items and additionalItems=false",
+        "schema": {
+            "items": [{"type": "boolean"}, {"type": "boolean"}], 
+            "uniqueItems": true, 
+            "additionalItems": false
+        },
+        "tests": [
+            {
+                "description": "[false, true] from items array is valid",
+                "data": [false, true],
+                "valid": true
+            },
+            {
+                "description": "[true, false] from items array is valid",
+                "data": [true, false],
+                "valid": true
+            },
+            {
+                "description": "[false, false] from items array is not valid",
+                "data": [false, false],
+                "valid": false
+            },
+            {
+                "description": "[true, true] from items array is not valid",
+                "data": [true, true],
+                "valid": false
+            },
+            {
+                "description": "extra items are invalid even if unique",
+                "data": [false, true, null],
+                "valid": false
+            }
+        ]
+    }
+]
diff -pruN 3.0.2-4/json/tests/draft3/format.json 3.2.0-5/json/tests/draft3/format.json
--- 3.0.2-4/json/tests/draft3/format.json	1970-01-01 00:00:00.000000000 +0000
+++ 3.2.0-5/json/tests/draft3/format.json	2019-11-18 12:36:14.000000000 +0000
@@ -0,0 +1,362 @@
+[
+    {
+        "description": "validation of e-mail addresses",
+        "schema": {"format": "email"},
+        "tests": [
+            {
+                "description": "ignores integers",
+                "data": 12,
+                "valid": true
+            },
+            {
+                "description": "ignores floats",
+                "data": 13.7,
+                "valid": true
+            },
+            {
+                "description": "ignores objects",
+                "data": {},
+                "valid": true
+            },
+            {
+                "description": "ignores arrays",
+                "data": [],
+                "valid": true
+            },
+            {
+                "description": "ignores booleans",
+                "data": false,
+                "valid": true
+            },
+            {
+                "description": "ignores null",
+                "data": null,
+                "valid": true
+            }
+        ]
+    },
+    {
+        "description": "validation of IP addresses",
+        "schema": {"format": "ip-address"},
+        "tests": [
+            {
+                "description": "ignores integers",
+                "data": 12,
+                "valid": true
+            },
+            {
+                "description": "ignores floats",
+                "data": 13.7,
+                "valid": true
+            },
+            {
+                "description": "ignores objects",
+                "data": {},
+                "valid": true
+            },
+            {
+                "description": "ignores arrays",
+                "data": [],
+                "valid": true
+            },
+            {
+                "description": "ignores booleans",
+                "data": false,
+                "valid": true
+            },
+            {
+                "description": "ignores null",
+                "data": null,
+                "valid": true
+            }
+        ]
+    },
+    {
+        "description": "validation of IPv6 addresses",
+        "schema": {"format": "ipv6"},
+        "tests": [
+            {
+                "description": "ignores integers",
+                "data": 12,
+                "valid": true
+            },
+            {
+                "description": "ignores floats",
+                "data": 13.7,
+                "valid": true
+            },
+            {
+                "description": "ignores objects",
+                "data": {},
+                "valid": true
+            },
+            {
+                "description": "ignores arrays",
+                "data": [],
+                "valid": true
+            },
+            {
+                "description": "ignores booleans",
+                "data": false,
+                "valid": true
+            },
+            {
+                "description": "ignores null",
+                "data": null,
+                "valid": true
+            }
+        ]
+    },
+    {
+        "description": "validation of hostnames",
+        "schema": {"format": "host-name"},
+        "tests": [
+            {
+                "description": "ignores integers",
+                "data": 12,
+                "valid": true
+            },
+            {
+                "description": "ignores floats",
+                "data": 13.7,
+                "valid": true
+            },
+            {
+                "description": "ignores objects",
+                "data": {},
+                "valid": true
+            },
+            {
+                "description": "ignores arrays",
+                "data": [],
+                "valid": true
+            },
+            {
+                "description": "ignores booleans",
+                "data": false,
+                "valid": true
+            },
+            {
+                "description": "ignores null",
+                "data": null,
+                "valid": true
+            }
+        ]
+    },
+    {
+        "description": "validation of date-time strings",
+        "schema": {"format": "date-time"},
+        "tests": [
+            {
+                "description": "ignores integers",
+                "data": 12,
+                "valid": true
+            },
+            {
+                "description": "ignores floats",
+                "data": 13.7,
+                "valid": true
+            },
+            {
+                "description": "ignores objects",
+                "data": {},
+                "valid": true
+            },
+            {
+                "description": "ignores arrays",
+                "data": [],
+                "valid": true
+            },
+            {
+                "description": "ignores booleans",
+                "data": false,
+                "valid": true
+            },
+            {
+                "description": "ignores null",
+                "data": null,
+                "valid": true
+            }
+        ]
+    },
+    {
+        "description": "validation of regular expressions",
+        "schema": {"format": "regex"},
+        "tests": [
+            {
+                "description": "ignores integers",
+                "data": 12,
+                "valid": true
+            },
+            {
+                "description": "ignores floats",
+                "data": 13.7,
+                "valid": true
+            },
+            {
+                "description": "ignores objects",
+                "data": {},
+                "valid": true
+            },
+            {
+                "description": "ignores arrays",
+                "data": [],
+                "valid": true
+            },
+            {
+                "description": "ignores booleans",
+                "data": false,
+                "valid": true
+            },
+            {
+                "description": "ignores null",
+                "data": null,
+                "valid": true
+            }
+        ]
+    },
+    {
+        "description": "validation of date strings",
+        "schema": {"format": "date"},
+        "tests": [
+            {
+                "description": "ignores integers",
+                "data": 12,
+                "valid": true
+            },
+            {
+                "description": "ignores floats",
+                "data": 13.7,
+                "valid": true
+            },
+            {
+                "description": "ignores objects",
+                "data": {},
+                "valid": true
+            },
+            {
+                "description": "ignores arrays",
+                "data": [],
+                "valid": true
+            },
+            {
+                "description": "ignores booleans",
+                "data": false,
+                "valid": true
+            },
+            {
+                "description": "ignores null",
+                "data": null,
+                "valid": true
+            }
+        ]
+    },
+    {
+        "description": "validation of time strings",
+        "schema": {"format": "time"},
+        "tests": [
+            {
+                "description": "ignores integers",
+                "data": 12,
+                "valid": true
+            },
+            {
+                "description": "ignores floats",
+                "data": 13.7,
+                "valid": true
+            },
+            {
+                "description": "ignores objects",
+                "data": {},
+                "valid": true
+            },
+            {
+                "description": "ignores arrays",
+                "data": [],
+                "valid": true
+            },
+            {
+                "description": "ignores booleans",
+                "data": false,
+                "valid": true
+            },
+            {
+                "description": "ignores null",
+                "data": null,
+                "valid": true
+            }
+        ]
+    },
+    {
+        "description": "validation of CSS colors",
+        "schema": {"format": "color"},
+        "tests": [
+            {
+                "description": "ignores integers",
+                "data": 12,
+                "valid": true
+            },
+            {
+                "description": "ignores floats",
+                "data": 13.7,
+                "valid": true
+            },
+            {
+                "description": "ignores objects",
+                "data": {},
+                "valid": true
+            },
+            {
+                "description": "ignores arrays",
+                "data": [],
+                "valid": true
+            },
+            {
+                "description": "ignores booleans",
+                "data": false,
+                "valid": true
+            },
+            {
+                "description": "ignores null",
+                "data": null,
+                "valid": true
+            }
+        ]
+    },
+    {
+        "description": "validation of URIs",
+        "schema": {"format": "uri"},
+        "tests": [
+            {
+                "description": "ignores integers",
+                "data": 12,
+                "valid": true
+            },
+            {
+                "description": "ignores floats",
+                "data": 13.7,
+                "valid": true
+            },
+            {
+                "description": "ignores objects",
+                "data": {},
+                "valid": true
+            },
+            {
+                "description": "ignores arrays",
+                "data": [],
+                "valid": true
+            },
+            {
+                "description": "ignores booleans",
+                "data": false,
+                "valid": true
+            },
+            {
+                "description": "ignores null",
+                "data": null,
+                "valid": true
+            }
+        ]
+    }
+]
diff -pruN 3.0.2-4/json/tests/draft3/optional/ecmascript-regex.json 3.2.0-5/json/tests/draft3/optional/ecmascript-regex.json
--- 3.0.2-4/json/tests/draft3/optional/ecmascript-regex.json	1970-01-01 00:00:00.000000000 +0000
+++ 3.2.0-5/json/tests/draft3/optional/ecmascript-regex.json	2019-11-18 12:36:14.000000000 +0000
@@ -0,0 +1,18 @@
+[
+    {
+        "description": "ECMA 262 regex dialect recognition",
+        "schema": { "format": "regex" },
+        "tests": [
+            {
+                "description": "[^] is a valid regex",
+                "data": "[^]",
+                "valid": true
+            },
+            {
+                "description": "ECMA 262 has no support for lookbehind",
+                "data": "(?<=foo)bar",
+                "valid": false
+            }
+        ]
+    }
+]
diff -pruN 3.0.2-4/json/tests/draft3/optional/jsregex.json 3.2.0-5/json/tests/draft3/optional/jsregex.json
--- 3.0.2-4/json/tests/draft3/optional/jsregex.json	2019-08-02 00:53:34.000000000 +0000
+++ 3.2.0-5/json/tests/draft3/optional/jsregex.json	1970-01-01 00:00:00.000000000 +0000
@@ -1,18 +0,0 @@
-[
-    {
-        "description": "ECMA 262 regex dialect recognition",
-        "schema": { "format": "regex" },
-        "tests": [
-            {
-                "description": "[^] is a valid regex",
-                "data": "[^]",
-                "valid": true
-            },
-            {
-                "description": "ECMA 262 has no support for lookbehind",
-                "data": "(?<=foo)bar",
-                "valid": false
-            }
-        ]
-    }
-]
diff -pruN 3.0.2-4/json/tests/draft3/uniqueItems.json 3.2.0-5/json/tests/draft3/uniqueItems.json
--- 3.0.2-4/json/tests/draft3/uniqueItems.json	2019-08-02 00:53:34.000000000 +0000
+++ 3.2.0-5/json/tests/draft3/uniqueItems.json	2019-11-18 12:36:14.000000000 +0000
@@ -75,5 +75,89 @@
                 "valid": false
             }
         ]
+    },
+    {
+        "description": "uniqueItems with an array of items",
+        "schema": {
+            "items": [{"type": "boolean"}, {"type": "boolean"}], 
+            "uniqueItems": true
+        },
+        "tests": [
+            {
+                "description": "[false, true] from items array is valid",
+                "data": [false, true],
+                "valid": true
+            },
+            {
+                "description": "[true, false] from items array is valid",
+                "data": [true, false],
+                "valid": true
+            },
+            {
+                "description": "[false, false] from items array is not valid",
+                "data": [false, false],
+                "valid": false
+            },
+            {
+                "description": "[true, true] from items array is not valid",
+                "data": [true, true],
+                "valid": false
+            },
+            {
+                "description": "unique array extended from [false, true] is valid",
+                "data": [false, true, "foo", "bar"],
+                "valid": true
+            },
+            {
+                "description": "unique array extended from [true, false] is valid",
+                "data": [true, false, "foo", "bar"],
+                "valid": true
+            },
+            {
+                "description": "non-unique array extended from [false, true] is not valid",
+                "data": [false, true, "foo", "foo"],
+                "valid": false
+            },
+            {
+                "description": "non-unique array extended from [true, false] is not valid",
+                "data": [true, false, "foo", "foo"],
+                "valid": false
+            }
+        ]
+    },
+    {
+        "description": "uniqueItems with an array of items and additionalItems=false",
+        "schema": {
+            "items": [{"type": "boolean"}, {"type": "boolean"}], 
+            "uniqueItems": true, 
+            "additionalItems": false
+        },
+        "tests": [
+            {
+                "description": "[false, true] from items array is valid",
+                "data": [false, true],
+                "valid": true
+            },
+            {
+                "description": "[true, false] from items array is valid",
+                "data": [true, false],
+                "valid": true
+            },
+            {
+                "description": "[false, false] from items array is not valid",
+                "data": [false, false],
+                "valid": false
+            },
+            {
+                "description": "[true, true] from items array is not valid",
+                "data": [true, true],
+                "valid": false
+            },
+            {
+                "description": "extra items are invalid even if unique",
+                "data": [false, true, null],
+                "valid": false
+            }
+        ]
     }
 ]
diff -pruN 3.0.2-4/json/tests/draft4/format.json 3.2.0-5/json/tests/draft4/format.json
--- 3.0.2-4/json/tests/draft4/format.json	1970-01-01 00:00:00.000000000 +0000
+++ 3.2.0-5/json/tests/draft4/format.json	2019-11-18 12:36:14.000000000 +0000
@@ -0,0 +1,218 @@
+[
+    {
+        "description": "validation of e-mail addresses",
+        "schema": {"format": "email"},
+        "tests": [
+            {
+                "description": "ignores integers",
+                "data": 12,
+                "valid": true
+            },
+            {
+                "description": "ignores floats",
+                "data": 13.7,
+                "valid": true
+            },
+            {
+                "description": "ignores objects",
+                "data": {},
+                "valid": true
+            },
+            {
+                "description": "ignores arrays",
+                "data": [],
+                "valid": true
+            },
+            {
+                "description": "ignores booleans",
+                "data": false,
+                "valid": true
+            },
+            {
+                "description": "ignores null",
+                "data": null,
+                "valid": true
+            }
+        ]
+    },
+    {
+        "description": "validation of IP addresses",
+        "schema": {"format": "ipv4"},
+        "tests": [
+            {
+                "description": "ignores integers",
+                "data": 12,
+                "valid": true
+            },
+            {
+                "description": "ignores floats",
+                "data": 13.7,
+                "valid": true
+            },
+            {
+                "description": "ignores objects",
+                "data": {},
+                "valid": true
+            },
+            {
+                "description": "ignores arrays",
+                "data": [],
+                "valid": true
+            },
+            {
+                "description": "ignores booleans",
+                "data": false,
+                "valid": true
+            },
+            {
+                "description": "ignores null",
+                "data": null,
+                "valid": true
+            }
+        ]
+    },
+    {
+        "description": "validation of IPv6 addresses",
+        "schema": {"format": "ipv6"},
+        "tests": [
+            {
+                "description": "ignores integers",
+                "data": 12,
+                "valid": true
+            },
+            {
+                "description": "ignores floats",
+                "data": 13.7,
+                "valid": true
+            },
+            {
+                "description": "ignores objects",
+                "data": {},
+                "valid": true
+            },
+            {
+                "description": "ignores arrays",
+                "data": [],
+                "valid": true
+            },
+            {
+                "description": "ignores booleans",
+                "data": false,
+                "valid": true
+            },
+            {
+                "description": "ignores null",
+                "data": null,
+                "valid": true
+            }
+        ]
+    },
+    {
+        "description": "validation of hostnames",
+        "schema": {"format": "hostname"},
+        "tests": [
+            {
+                "description": "ignores integers",
+                "data": 12,
+                "valid": true
+            },
+            {
+                "description": "ignores floats",
+                "data": 13.7,
+                "valid": true
+            },
+            {
+                "description": "ignores objects",
+                "data": {},
+                "valid": true
+            },
+            {
+                "description": "ignores arrays",
+                "data": [],
+                "valid": true
+            },
+            {
+                "description": "ignores booleans",
+                "data": false,
+                "valid": true
+            },
+            {
+                "description": "ignores null",
+                "data": null,
+                "valid": true
+            }
+        ]
+    },
+    {
+        "description": "validation of date-time strings",
+        "schema": {"format": "date-time"},
+        "tests": [
+            {
+                "description": "ignores integers",
+                "data": 12,
+                "valid": true
+            },
+            {
+                "description": "ignores floats",
+                "data": 13.7,
+                "valid": true
+            },
+            {
+                "description": "ignores objects",
+                "data": {},
+                "valid": true
+            },
+            {
+                "description": "ignores arrays",
+                "data": [],
+                "valid": true
+            },
+            {
+                "description": "ignores booleans",
+                "data": false,
+                "valid": true
+            },
+            {
+                "description": "ignores null",
+                "data": null,
+                "valid": true
+            }
+        ]
+    },
+    {
+        "description": "validation of URIs",
+        "schema": {"format": "uri"},
+        "tests": [
+            {
+                "description": "ignores integers",
+                "data": 12,
+                "valid": true
+            },
+            {
+                "description": "ignores floats",
+                "data": 13.7,
+                "valid": true
+            },
+            {
+                "description": "ignores objects",
+                "data": {},
+                "valid": true
+            },
+            {
+                "description": "ignores arrays",
+                "data": [],
+                "valid": true
+            },
+            {
+                "description": "ignores booleans",
+                "data": false,
+                "valid": true
+            },
+            {
+                "description": "ignores null",
+                "data": null,
+                "valid": true
+            }
+        ]
+    }
+]
diff -pruN 3.0.2-4/json/tests/draft4/optional/ecmascript-regex.json 3.2.0-5/json/tests/draft4/optional/ecmascript-regex.json
--- 3.0.2-4/json/tests/draft4/optional/ecmascript-regex.json	2019-08-02 00:53:34.000000000 +0000
+++ 3.2.0-5/json/tests/draft4/optional/ecmascript-regex.json	2019-11-18 12:36:14.000000000 +0000
@@ -9,5 +9,205 @@
                 "valid": false
             }
         ]
+    },
+    {
+        "description": "ECMA 262 regex $ does not match trailing newline",
+        "schema": {
+            "type": "string",
+            "pattern": "^abc$"
+        },
+        "tests": [
+            {
+                "description": "matches in Python, but should not in jsonschema",
+                "data": "abc\n",
+                "valid": false
+            },
+            {
+                "description": "should match",
+                "data": "abc",
+                "valid": true
+            }
+        ]
+    },
+    {
+        "description": "ECMA 262 regex converts \\a to ascii BEL",
+        "schema": {
+            "type": "string",
+            "pattern": "^\\a$"
+        },
+        "tests": [
+            {
+                "description": "does not match",
+                "data": "\\a",
+                "valid": false
+            },
+            {
+                "description": "matches",
+                "data": "\u0007",
+                "valid": true
+            }
+        ]
+    },
+    {
+        "description": "ECMA 262 regex escapes control codes with \\c and upper letter",
+        "schema": {
+            "type": "string",
+            "pattern": "^\\cC$"
+        },
+        "tests": [
+            {
+                "description": "does not match",
+                "data": "\\cC",
+                "valid": false
+            },
+            {
+                "description": "matches",
+                "data": "\u0003",
+                "valid": true
+            }
+        ]
+    },
+    {
+        "description": "ECMA 262 regex escapes control codes with \\c and lower letter",
+        "schema": {
+            "type": "string",
+            "pattern": "^\\cc$"
+        },
+        "tests": [
+            {
+                "description": "does not match",
+                "data": "\\cc",
+                "valid": false
+            },
+            {
+                "description": "matches",
+                "data": "\u0003",
+                "valid": true
+            }
+        ]
+    },
+    {
+        "description": "ECMA 262 \\d matches ascii digits only",
+        "schema": {
+            "type": "string",
+            "pattern": "^\\d$"
+        },
+        "tests": [
+            {
+                "description": "ASCII zero matches",
+                "data": "0",
+                "valid": true
+            },
+            {
+                "description": "NKO DIGIT ZERO does not match (unlike e.g. Python)",
+                "data": "߀",
+                "valid": false
+            },
+            {
+                "description": "NKO DIGIT ZERO (as \\u escape) does not match",
+                "data": "\u07c0",
+                "valid": false
+            }
+        ]
+    },
+    {
+        "description": "ECMA 262 \\D matches everything but ascii digits",
+        "schema": {
+            "type": "string",
+            "pattern": "^\\D$"
+        },
+        "tests": [
+            {
+                "description": "ASCII zero does not match",
+                "data": "0",
+                "valid": false
+            },
+            {
+                "description": "NKO DIGIT ZERO matches (unlike e.g. Python)",
+                "data": "߀",
+                "valid": true
+            },
+            {
+                "description": "NKO DIGIT ZERO (as \\u escape) matches",
+                "data": "\u07c0",
+                "valid": true
+            }
+        ]
+    },
+    {
+        "description": "ECMA 262 \\w matches ascii letters only",
+        "schema": {
+            "type": "string",
+            "pattern": "^\\w$"
+        },
+        "tests": [
+            {
+                "description": "ASCII 'a' matches",
+                "data": "a",
+                "valid": true
+            },
+            {
+                "description": "latin-1 e-acute does not match (unlike e.g. Python)",
+                "data": "é",
+                "valid": false
+            }
+        ]
+    },
+    {
+        "description": "ECMA 262 \\w matches everything but ascii letters",
+        "schema": {
+            "type": "string",
+            "pattern": "^\\W$"
+        },
+        "tests": [
+            {
+                "description": "ASCII 'a' does not match",
+                "data": "a",
+                "valid": false
+            },
+            {
+                "description": "latin-1 e-acute matches (unlike e.g. Python)",
+                "data": "é",
+                "valid": true
+            }
+        ]
+    },
+    {
+        "description": "ECMA 262 \\s matches ascii whitespace only",
+        "schema": {
+            "type": "string",
+            "pattern": "^\\s$"
+        },
+        "tests": [
+            {
+                "description": "ASCII space matches",
+                "data": " ",
+                "valid": true
+            },
+            {
+                "description": "latin-1 non-breaking-space does not match (unlike e.g. Python)",
+                "data": "\u00a0",
+                "valid": false
+            }
+        ]
+    },
+    {
+        "description": "ECMA 262 \\S matches everything but ascii whitespace",
+        "schema": {
+            "type": "string",
+            "pattern": "^\\S$"
+        },
+        "tests": [
+            {
+                "description": "ASCII space does not match",
+                "data": " ",
+                "valid": false
+            },
+            {
+                "description": "latin-1 non-breaking-space matches (unlike e.g. Python)",
+                "data": "\u00a0",
+                "valid": true
+            }
+        ]
     }
 ]
diff -pruN 3.0.2-4/json/tests/draft4/uniqueItems.json 3.2.0-5/json/tests/draft4/uniqueItems.json
--- 3.0.2-4/json/tests/draft4/uniqueItems.json	2019-08-02 00:53:34.000000000 +0000
+++ 3.2.0-5/json/tests/draft4/uniqueItems.json	2019-11-18 12:36:14.000000000 +0000
@@ -85,5 +85,89 @@
                 "valid": false
             }
         ]
+    },
+    {
+        "description": "uniqueItems with an array of items",
+        "schema": {
+            "items": [{"type": "boolean"}, {"type": "boolean"}], 
+            "uniqueItems": true
+        },
+        "tests": [
+            {
+                "description": "[false, true] from items array is valid",
+                "data": [false, true],
+                "valid": true
+            },
+            {
+                "description": "[true, false] from items array is valid",
+                "data": [true, false],
+                "valid": true
+            },
+            {
+                "description": "[false, false] from items array is not valid",
+                "data": [false, false],
+                "valid": false
+            },
+            {
+                "description": "[true, true] from items array is not valid",
+                "data": [true, true],
+                "valid": false
+            },
+            {
+                "description": "unique array extended from [false, true] is valid",
+                "data": [false, true, "foo", "bar"],
+                "valid": true
+            },
+            {
+                "description": "unique array extended from [true, false] is valid",
+                "data": [true, false, "foo", "bar"],
+                "valid": true
+            },
+            {
+                "description": "non-unique array extended from [false, true] is not valid",
+                "data": [false, true, "foo", "foo"],
+                "valid": false
+            },
+            {
+                "description": "non-unique array extended from [true, false] is not valid",
+                "data": [true, false, "foo", "foo"],
+                "valid": false
+            }
+        ]
+    },
+    {
+        "description": "uniqueItems with an array of items and additionalItems=false",
+        "schema": {
+            "items": [{"type": "boolean"}, {"type": "boolean"}], 
+            "uniqueItems": true, 
+            "additionalItems": false
+        },
+        "tests": [
+            {
+                "description": "[false, true] from items array is valid",
+                "data": [false, true],
+                "valid": true
+            },
+            {
+                "description": "[true, false] from items array is valid",
+                "data": [true, false],
+                "valid": true
+            },
+            {
+                "description": "[false, false] from items array is not valid",
+                "data": [false, false],
+                "valid": false
+            },
+            {
+                "description": "[true, true] from items array is not valid",
+                "data": [true, true],
+                "valid": false
+            },
+            {
+                "description": "extra items are invalid even if unique",
+                "data": [false, true, null],
+                "valid": false
+            }
+        ]
     }
 ]
diff -pruN 3.0.2-4/json/tests/draft6/contains.json 3.2.0-5/json/tests/draft6/contains.json
--- 3.0.2-4/json/tests/draft6/contains.json	2019-08-02 00:53:34.000000000 +0000
+++ 3.2.0-5/json/tests/draft6/contains.json	2019-11-18 12:36:14.000000000 +0000
@@ -89,6 +89,11 @@
                 "description": "empty array is invalid",
                 "data": [],
                 "valid": false
+            },
+            {
+                "description": "non-arrays are valid",
+                "data": "contains does not apply to strings",
+                "valid": true
             }
         ]
     }
diff -pruN 3.0.2-4/json/tests/draft6/format.json 3.2.0-5/json/tests/draft6/format.json
--- 3.0.2-4/json/tests/draft6/format.json	1970-01-01 00:00:00.000000000 +0000
+++ 3.2.0-5/json/tests/draft6/format.json	2019-11-18 12:36:14.000000000 +0000
@@ -0,0 +1,326 @@
+[
+    {
+        "description": "validation of e-mail addresses",
+        "schema": {"format": "email"},
+        "tests": [
+            {
+                "description": "ignores integers",
+                "data": 12,
+                "valid": true
+            },
+            {
+                "description": "ignores floats",
+                "data": 13.7,
+                "valid": true
+            },
+            {
+                "description": "ignores objects",
+                "data": {},
+                "valid": true
+            },
+            {
+                "description": "ignores arrays",
+                "data": [],
+                "valid": true
+            },
+            {
+                "description": "ignores booleans",
+                "data": false,
+                "valid": true
+            },
+            {
+                "description": "ignores null",
+                "data": null,
+                "valid": true
+            }
+        ]
+    },
+    {
+        "description": "validation of IP addresses",
+        "schema": {"format": "ipv4"},
+        "tests": [
+            {
+                "description": "ignores integers",
+                "data": 12,
+                "valid": true
+            },
+            {
+                "description": "ignores floats",
+                "data": 13.7,
+                "valid": true
+            },
+            {
+                "description": "ignores objects",
+                "data": {},
+                "valid": true
+            },
+            {
+                "description": "ignores arrays",
+                "data": [],
+                "valid": true
+            },
+            {
+                "description": "ignores booleans",
+                "data": false,
+                "valid": true
+            },
+            {
+                "description": "ignores null",
+                "data": null,
+                "valid": true
+            }
+        ]
+    },
+    {
+        "description": "validation of IPv6 addresses",
+        "schema": {"format": "ipv6"},
+        "tests": [
+            {
+                "description": "ignores integers",
+                "data": 12,
+                "valid": true
+            },
+            {
+                "description": "ignores floats",
+                "data": 13.7,
+                "valid": true
+            },
+            {
+                "description": "ignores objects",
+                "data": {},
+                "valid": true
+            },
+            {
+                "description": "ignores arrays",
+                "data": [],
+                "valid": true
+            },
+            {
+                "description": "ignores booleans",
+                "data": false,
+                "valid": true
+            },
+            {
+                "description": "ignores null",
+                "data": null,
+                "valid": true
+            }
+        ]
+    },
+    {
+        "description": "validation of hostnames",
+        "schema": {"format": "hostname"},
+        "tests": [
+            {
+                "description": "ignores integers",
+                "data": 12,
+                "valid": true
+            },
+            {
+                "description": "ignores floats",
+                "data": 13.7,
+                "valid": true
+            },
+            {
+                "description": "ignores objects",
+                "data": {},
+                "valid": true
+            },
+            {
+                "description": "ignores arrays",
+                "data": [],
+                "valid": true
+            },
+            {
+                "description": "ignores booleans",
+                "data": false,
+                "valid": true
+            },
+            {
+                "description": "ignores null",
+                "data": null,
+                "valid": true
+            }
+        ]
+    },
+    {
+        "description": "validation of date-time strings",
+        "schema": {"format": "date-time"},
+        "tests": [
+            {
+                "description": "ignores integers",
+                "data": 12,
+                "valid": true
+            },
+            {
+                "description": "ignores floats",
+                "data": 13.7,
+                "valid": true
+            },
+            {
+                "description": "ignores objects",
+                "data": {},
+                "valid": true
+            },
+            {
+                "description": "ignores arrays",
+                "data": [],
+                "valid": true
+            },
+            {
+                "description": "ignores booleans",
+                "data": false,
+                "valid": true
+            },
+            {
+                "description": "ignores null",
+                "data": null,
+                "valid": true
+            }
+        ]
+    },
+    {
+        "description": "validation of JSON pointers",
+        "schema": {"format": "json-pointer"},
+        "tests": [
+            {
+                "description": "ignores integers",
+                "data": 12,
+                "valid": true
+            },
+            {
+                "description": "ignores floats",
+                "data": 13.7,
+                "valid": true
+            },
+            {
+                "description": "ignores objects",
+                "data": {},
+                "valid": true
+            },
+            {
+                "description": "ignores arrays",
+                "data": [],
+                "valid": true
+            },
+            {
+                "description": "ignores booleans",
+                "data": false,
+                "valid": true
+            },
+            {
+                "description": "ignores null",
+                "data": null,
+                "valid": true
+            }
+        ]
+    },
+    {
+        "description": "validation of URIs",
+        "schema": {"format": "uri"},
+        "tests": [
+            {
+                "description": "ignores integers",
+                "data": 12,
+                "valid": true
+            },
+            {
+                "description": "ignores floats",
+                "data": 13.7,
+                "valid": true
+            },
+            {
+                "description": "ignores objects",
+                "data": {},
+                "valid": true
+            },
+            {
+                "description": "ignores arrays",
+                "data": [],
+                "valid": true
+            },
+            {
+                "description": "ignores booleans",
+                "data": false,
+                "valid": true
+            },
+            {
+                "description": "ignores null",
+                "data": null,
+                "valid": true
+            }
+        ]
+    },
+    {
+        "description": "validation of URI references",
+        "schema": {"format": "uri-reference"},
+        "tests": [
+            {
+                "description": "ignores integers",
+                "data": 12,
+                "valid": true
+            },
+            {
+                "description": "ignores floats",
+                "data": 13.7,
+                "valid": true
+            },
+            {
+                "description": "ignores objects",
+                "data": {},
+                "valid": true
+            },
+            {
+                "description": "ignores arrays",
+                "data": [],
+                "valid": true
+            },
+            {
+                "description": "ignores booleans",
+                "data": false,
+                "valid": true
+            },
+            {
+                "description": "ignores null",
+                "data": null,
+                "valid": true
+            }
+        ]
+    },
+    {
+        "description": "validation of URI templates",
+        "schema": {"format": "uri-template"},
+        "tests": [
+            {
+                "description": "ignores integers",
+                "data": 12,
+                "valid": true
+            },
+            {
+                "description": "ignores floats",
+                "data": 13.7,
+                "valid": true
+            },
+            {
+                "description": "ignores objects",
+                "data": {},
+                "valid": true
+            },
+            {
+                "description": "ignores arrays",
+                "data": [],
+                "valid": true
+            },
+            {
+                "description": "ignores booleans",
+                "data": false,
+                "valid": true
+            },
+            {
+                "description": "ignores null",
+                "data": null,
+                "valid": true
+            }
+        ]
+    }
+]
diff -pruN 3.0.2-4/json/tests/draft6/optional/ecmascript-regex.json 3.2.0-5/json/tests/draft6/optional/ecmascript-regex.json
--- 3.0.2-4/json/tests/draft6/optional/ecmascript-regex.json	2019-08-02 00:53:34.000000000 +0000
+++ 3.2.0-5/json/tests/draft6/optional/ecmascript-regex.json	2019-11-18 12:36:14.000000000 +0000
@@ -9,5 +9,205 @@
                 "valid": false
             }
         ]
+    },
+    {
+        "description": "ECMA 262 regex $ does not match trailing newline",
+        "schema": {
+            "type": "string",
+            "pattern": "^abc$"
+        },
+        "tests": [
+            {
+                "description": "matches in Python, but should not in jsonschema",
+                "data": "abc\n",
+                "valid": false
+            },
+            {
+                "description": "should match",
+                "data": "abc",
+                "valid": true
+            }
+        ]
+    },
+    {
+        "description": "ECMA 262 regex converts \\a to ascii BEL",
+        "schema": {
+            "type": "string",
+            "pattern": "^\\a$"
+        },
+        "tests": [
+            {
+                "description": "does not match",
+                "data": "\\a",
+                "valid": false
+            },
+            {
+                "description": "matches",
+                "data": "\u0007",
+                "valid": true
+            }
+        ]
+    },
+    {
+        "description": "ECMA 262 regex escapes control codes with \\c and upper letter",
+        "schema": {
+            "type": "string",
+            "pattern": "^\\cC$"
+        },
+        "tests": [
+            {
+                "description": "does not match",
+                "data": "\\cC",
+                "valid": false
+            },
+            {
+                "description": "matches",
+                "data": "\u0003",
+                "valid": true
+            }
+        ]
+    },
+    {
+        "description": "ECMA 262 regex escapes control codes with \\c and lower letter",
+        "schema": {
+            "type": "string",
+            "pattern": "^\\cc$"
+        },
+        "tests": [
+            {
+                "description": "does not match",
+                "data": "\\cc",
+                "valid": false
+            },
+            {
+                "description": "matches",
+                "data": "\u0003",
+                "valid": true
+            }
+        ]
+    },
+    {
+        "description": "ECMA 262 \\d matches ascii digits only",
+        "schema": {
+            "type": "string",
+            "pattern": "^\\d$"
+        },
+        "tests": [
+            {
+                "description": "ASCII zero matches",
+                "data": "0",
+                "valid": true
+            },
+            {
+                "description": "NKO DIGIT ZERO does not match (unlike e.g. Python)",
+                "data": "߀",
+                "valid": false
+            },
+            {
+                "description": "NKO DIGIT ZERO (as \\u escape) does not match",
+                "data": "\u07c0",
+                "valid": false
+            }
+        ]
+    },
+    {
+        "description": "ECMA 262 \\D matches everything but ascii digits",
+        "schema": {
+            "type": "string",
+            "pattern": "^\\D$"
+        },
+        "tests": [
+            {
+                "description": "ASCII zero does not match",
+                "data": "0",
+                "valid": false
+            },
+            {
+                "description": "NKO DIGIT ZERO matches (unlike e.g. Python)",
+                "data": "߀",
+                "valid": true
+            },
+            {
+                "description": "NKO DIGIT ZERO (as \\u escape) matches",
+                "data": "\u07c0",
+                "valid": true
+            }
+        ]
+    },
+    {
+        "description": "ECMA 262 \\w matches ascii letters only",
+        "schema": {
+            "type": "string",
+            "pattern": "^\\w$"
+        },
+        "tests": [
+            {
+                "description": "ASCII 'a' matches",
+                "data": "a",
+                "valid": true
+            },
+            {
+                "description": "latin-1 e-acute does not match (unlike e.g. Python)",
+                "data": "é",
+                "valid": false
+            }
+        ]
+    },
+    {
+        "description": "ECMA 262 \\w matches everything but ascii letters",
+        "schema": {
+            "type": "string",
+            "pattern": "^\\W$"
+        },
+        "tests": [
+            {
+                "description": "ASCII 'a' does not match",
+                "data": "a",
+                "valid": false
+            },
+            {
+                "description": "latin-1 e-acute matches (unlike e.g. Python)",
+                "data": "é",
+                "valid": true
+            }
+        ]
+    },
+    {
+        "description": "ECMA 262 \\s matches ascii whitespace only",
+        "schema": {
+            "type": "string",
+            "pattern": "^\\s$"
+        },
+        "tests": [
+            {
+                "description": "ASCII space matches",
+                "data": " ",
+                "valid": true
+            },
+            {
+                "description": "latin-1 non-breaking-space does not match (unlike e.g. Python)",
+                "data": "\u00a0",
+                "valid": false
+            }
+        ]
+    },
+    {
+        "description": "ECMA 262 \\S matches everything but ascii whitespace",
+        "schema": {
+            "type": "string",
+            "pattern": "^\\S$"
+        },
+        "tests": [
+            {
+                "description": "ASCII space does not match",
+                "data": " ",
+                "valid": false
+            },
+            {
+                "description": "latin-1 non-breaking-space matches (unlike e.g. Python)",
+                "data": "\u00a0",
+                "valid": true
+            }
+        ]
     }
 ]
diff -pruN 3.0.2-4/json/tests/draft6/optional/format.json 3.2.0-5/json/tests/draft6/optional/format.json
--- 3.0.2-4/json/tests/draft6/optional/format.json	2019-08-02 00:53:34.000000000 +0000
+++ 3.2.0-5/json/tests/draft6/optional/format.json	2019-11-18 12:36:14.000000000 +0000
@@ -199,9 +199,7 @@
     },
     {
         "description": "format: uri-template",
-        "schema": {
-            "format": "uri-template"
-        },
+        "schema": {"format": "uri-template"},
         "tests": [
             {
                 "description": "a valid uri-template",
diff -pruN 3.0.2-4/json/tests/draft6/uniqueItems.json 3.2.0-5/json/tests/draft6/uniqueItems.json
--- 3.0.2-4/json/tests/draft6/uniqueItems.json	2019-08-02 00:53:34.000000000 +0000
+++ 3.2.0-5/json/tests/draft6/uniqueItems.json	2019-11-18 12:36:14.000000000 +0000
@@ -85,5 +85,89 @@
                 "valid": false
             }
         ]
+    },
+    {
+        "description": "uniqueItems with an array of items",
+        "schema": {
+            "items": [{"type": "boolean"}, {"type": "boolean"}], 
+            "uniqueItems": true
+        },
+        "tests": [
+            {
+                "description": "[false, true] from items array is valid",
+                "data": [false, true],
+                "valid": true
+            },
+            {
+                "description": "[true, false] from items array is valid",
+                "data": [true, false],
+                "valid": true
+            },
+            {
+                "description": "[false, false] from items array is not valid",
+                "data": [false, false],
+                "valid": false
+            },
+            {
+                "description": "[true, true] from items array is not valid",
+                "data": [true, true],
+                "valid": false
+            },
+            {
+                "description": "unique array extended from [false, true] is valid",
+                "data": [false, true, "foo", "bar"],
+                "valid": true
+            },
+            {
+                "description": "unique array extended from [true, false] is valid",
+                "data": [true, false, "foo", "bar"],
+                "valid": true
+            },
+            {
+                "description": "non-unique array extended from [false, true] is not valid",
+                "data": [false, true, "foo", "foo"],
+                "valid": false
+            },
+            {
+                "description": "non-unique array extended from [true, false] is not valid",
+                "data": [true, false, "foo", "foo"],
+                "valid": false
+            }
+        ]
+    },
+    {
+        "description": "uniqueItems with an array of items and additionalItems=false",
+        "schema": {
+            "items": [{"type": "boolean"}, {"type": "boolean"}], 
+            "uniqueItems": true, 
+            "additionalItems": false
+        },
+        "tests": [
+            {
+                "description": "[false, true] from items array is valid",
+                "data": [false, true],
+                "valid": true
+            },
+            {
+                "description": "[true, false] from items array is valid",
+                "data": [true, false],
+                "valid": true
+            },
+            {
+                "description": "[false, false] from items array is not valid",
+                "data": [false, false],
+                "valid": false
+            },
+            {
+                "description": "[true, true] from items array is not valid",
+                "data": [true, true],
+                "valid": false
+            },
+            {
+                "description": "extra items are invalid even if unique",
+                "data": [false, true, null],
+                "valid": false
+            }
+        ]
     }
 ]
diff -pruN 3.0.2-4/json/tests/draft7/contains.json 3.2.0-5/json/tests/draft7/contains.json
--- 3.0.2-4/json/tests/draft7/contains.json	2019-08-02 00:53:34.000000000 +0000
+++ 3.2.0-5/json/tests/draft7/contains.json	2019-11-18 12:36:14.000000000 +0000
@@ -89,6 +89,11 @@
                 "description": "empty array is invalid",
                 "data": [],
                 "valid": false
+            },
+            {
+                "description": "non-arrays are valid",
+                "data": "contains does not apply to strings",
+                "valid": true
             }
         ]
     }
diff -pruN 3.0.2-4/json/tests/draft7/format.json 3.2.0-5/json/tests/draft7/format.json
--- 3.0.2-4/json/tests/draft7/format.json	1970-01-01 00:00:00.000000000 +0000
+++ 3.2.0-5/json/tests/draft7/format.json	2019-11-18 12:36:14.000000000 +0000
@@ -0,0 +1,614 @@
+[
+    {
+        "description": "validation of e-mail addresses",
+        "schema": {"format": "email"},
+        "tests": [
+            {
+                "description": "ignores integers",
+                "data": 12,
+                "valid": true
+            },
+            {
+                "description": "ignores floats",
+                "data": 13.7,
+                "valid": true
+            },
+            {
+                "description": "ignores objects",
+                "data": {},
+                "valid": true
+            },
+            {
+                "description": "ignores arrays",
+                "data": [],
+                "valid": true
+            },
+            {
+                "description": "ignores booleans",
+                "data": false,
+                "valid": true
+            },
+            {
+                "description": "ignores null",
+                "data": null,
+                "valid": true
+            }
+        ]
+    },
+    {
+        "description": "validation of IDN e-mail addresses",
+        "schema": {"format": "idn-email"},
+        "tests": [
+            {
+                "description": "ignores integers",
+                "data": 12,
+                "valid": true
+            },
+            {
+                "description": "ignores floats",
+                "data": 13.7,
+                "valid": true
+            },
+            {
+                "description": "ignores objects",
+                "data": {},
+                "valid": true
+            },
+            {
+                "description": "ignores arrays",
+                "data": [],
+                "valid": true
+            },
+            {
+                "description": "ignores booleans",
+                "data": false,
+                "valid": true
+            },
+            {
+                "description": "ignores null",
+                "data": null,
+                "valid": true
+            }
+        ]
+    },
+    {
+        "description": "validation of regexes",
+        "schema": {"format": "regex"},
+        "tests": [
+            {
+                "description": "ignores integers",
+                "data": 12,
+                "valid": true
+            },
+            {
+                "description": "ignores floats",
+                "data": 13.7,
+                "valid": true
+            },
+            {
+                "description": "ignores objects",
+                "data": {},
+                "valid": true
+            },
+            {
+                "description": "ignores arrays",
+                "data": [],
+                "valid": true
+            },
+            {
+                "description": "ignores booleans",
+                "data": false,
+                "valid": true
+            },
+            {
+                "description": "ignores null",
+                "data": null,
+                "valid": true
+            }
+        ]
+    },
+    {
+        "description": "validation of IP addresses",
+        "schema": {"format": "ipv4"},
+        "tests": [
+            {
+                "description": "ignores integers",
+                "data": 12,
+                "valid": true
+            },
+            {
+                "description": "ignores floats",
+                "data": 13.7,
+                "valid": true
+            },
+            {
+                "description": "ignores objects",
+                "data": {},
+                "valid": true
+            },
+            {
+                "description": "ignores arrays",
+                "data": [],
+                "valid": true
+            },
+            {
+                "description": "ignores booleans",
+                "data": false,
+                "valid": true
+            },
+            {
+                "description": "ignores null",
+                "data": null,
+                "valid": true
+            }
+        ]
+    },
+    {
+        "description": "validation of IPv6 addresses",
+        "schema": {"format": "ipv6"},
+        "tests": [
+            {
+                "description": "ignores integers",
+                "data": 12,
+                "valid": true
+            },
+            {
+                "description": "ignores floats",
+                "data": 13.7,
+                "valid": true
+            },
+            {
+                "description": "ignores objects",
+                "data": {},
+                "valid": true
+            },
+            {
+                "description": "ignores arrays",
+                "data": [],
+                "valid": true
+            },
+            {
+                "description": "ignores booleans",
+                "data": false,
+                "valid": true
+            },
+            {
+                "description": "ignores null",
+                "data": null,
+                "valid": true
+            }
+        ]
+    },
+    {
+        "description": "validation of IDN hostnames",
+        "schema": {"format": "idn-hostname"},
+        "tests": [
+            {
+                "description": "ignores integers",
+                "data": 12,
+                "valid": true
+            },
+            {
+                "description": "ignores floats",
+                "data": 13.7,
+                "valid": true
+            },
+            {
+                "description": "ignores objects",
+                "data": {},
+                "valid": true
+            },
+            {
+                "description": "ignores arrays",
+                "data": [],
+                "valid": true
+            },
+            {
+                "description": "ignores booleans",
+                "data": false,
+                "valid": true
+            },
+            {
+                "description": "ignores null",
+                "data": null,
+                "valid": true
+            }
+        ]
+    },
+    {
+        "description": "validation of hostnames",
+        "schema": {"format": "hostname"},
+        "tests": [
+            {
+                "description": "ignores integers",
+                "data": 12,
+                "valid": true
+            },
+            {
+                "description": "ignores floats",
+                "data": 13.7,
+                "valid": true
+            },
+            {
+                "description": "ignores objects",
+                "data": {},
+                "valid": true
+            },
+            {
+                "description": "ignores arrays",
+                "data": [],
+                "valid": true
+            },
+            {
+                "description": "ignores booleans",
+                "data": false,
+                "valid": true
+            },
+            {
+                "description": "ignores null",
+                "data": null,
+                "valid": true
+            }
+        ]
+    },
+    {
+        "description": "validation of date strings",
+        "schema": {"format": "date"},
+        "tests": [
+            {
+                "description": "ignores integers",
+                "data": 12,
+                "valid": true
+            },
+            {
+                "description": "ignores floats",
+                "data": 13.7,
+                "valid": true
+            },
+            {
+                "description": "ignores objects",
+                "data": {},
+                "valid": true
+            },
+            {
+                "description": "ignores arrays",
+                "data": [],
+                "valid": true
+            },
+            {
+                "description": "ignores booleans",
+                "data": false,
+                "valid": true
+            },
+            {
+                "description": "ignores null",
+                "data": null,
+                "valid": true
+            }
+        ]
+    },
+    {
+        "description": "validation of date-time strings",
+        "schema": {"format": "date-time"},
+        "tests": [
+            {
+                "description": "ignores integers",
+                "data": 12,
+                "valid": true
+            },
+            {
+                "description": "ignores floats",
+                "data": 13.7,
+                "valid": true
+            },
+            {
+                "description": "ignores objects",
+                "data": {},
+                "valid": true
+            },
+            {
+                "description": "ignores arrays",
+                "data": [],
+                "valid": true
+            },
+            {
+                "description": "ignores booleans",
+                "data": false,
+                "valid": true
+            },
+            {
+                "description": "ignores null",
+                "data": null,
+                "valid": true
+            }
+        ]
+    },
+    {
+        "description": "validation of time strings",
+        "schema": {"format": "time"},
+        "tests": [
+            {
+                "description": "ignores integers",
+                "data": 12,
+                "valid": true
+            },
+            {
+                "description": "ignores floats",
+                "data": 13.7,
+                "valid": true
+            },
+            {
+                "description": "ignores objects",
+                "data": {},
+                "valid": true
+            },
+            {
+                "description": "ignores arrays",
+                "data": [],
+                "valid": true
+            },
+            {
+                "description": "ignores booleans",
+                "data": false,
+                "valid": true
+            },
+            {
+                "description": "ignores null",
+                "data": null,
+                "valid": true
+            }
+        ]
+    },
+    {
+        "description": "validation of JSON pointers",
+        "schema": {"format": "json-pointer"},
+        "tests": [
+            {
+                "description": "ignores integers",
+                "data": 12,
+                "valid": true
+            },
+            {
+                "description": "ignores floats",
+                "data": 13.7,
+                "valid": true
+            },
+            {
+                "description": "ignores objects",
+                "data": {},
+                "valid": true
+            },
+            {
+                "description": "ignores arrays",
+                "data": [],
+                "valid": true
+            },
+            {
+                "description": "ignores booleans",
+                "data": false,
+                "valid": true
+            },
+            {
+                "description": "ignores null",
+                "data": null,
+                "valid": true
+            }
+        ]
+    },
+    {
+        "description": "validation of relative JSON pointers",
+        "schema": {"format": "relative-json-pointer"},
+        "tests": [
+            {
+                "description": "ignores integers",
+                "data": 12,
+                "valid": true
+            },
+            {
+                "description": "ignores floats",
+                "data": 13.7,
+                "valid": true
+            },
+            {
+                "description": "ignores objects",
+                "data": {},
+                "valid": true
+            },
+            {
+                "description": "ignores arrays",
+                "data": [],
+                "valid": true
+            },
+            {
+                "description": "ignores booleans",
+                "data": false,
+                "valid": true
+            },
+            {
+                "description": "ignores null",
+                "data": null,
+                "valid": true
+            }
+        ]
+    },
+    {
+        "description": "validation of IRIs",
+        "schema": {"format": "iri"},
+        "tests": [
+            {
+                "description": "ignores integers",
+                "data": 12,
+                "valid": true
+            },
+            {
+                "description": "ignores floats",
+                "data": 13.7,
+                "valid": true
+            },
+            {
+                "description": "ignores objects",
+                "data": {},
+                "valid": true
+            },
+            {
+                "description": "ignores arrays",
+                "data": [],
+                "valid": true
+            },
+            {
+                "description": "ignores booleans",
+                "data": false,
+                "valid": true
+            },
+            {
+                "description": "ignores null",
+                "data": null,
+                "valid": true
+            }
+        ]
+    },
+    {
+        "description": "validation of IRI references",
+        "schema": {"format": "iri-reference"},
+        "tests": [
+            {
+                "description": "ignores integers",
+                "data": 12,
+                "valid": true
+            },
+            {
+                "description": "ignores floats",
+                "data": 13.7,
+                "valid": true
+            },
+            {
+                "description": "ignores objects",
+                "data": {},
+                "valid": true
+            },
+            {
+                "description": "ignores arrays",
+                "data": [],
+                "valid": true
+            },
+            {
+                "description": "ignores booleans",
+                "data": false,
+                "valid": true
+            },
+            {
+                "description": "ignores null",
+                "data": null,
+                "valid": true
+            }
+        ]
+    },
+    {
+        "description": "validation of URIs",
+        "schema": {"format": "uri"},
+        "tests": [
+            {
+                "description": "ignores integers",
+                "data": 12,
+                "valid": true
+            },
+            {
+                "description": "ignores floats",
+                "data": 13.7,
+                "valid": true
+            },
+            {
+                "description": "ignores objects",
+                "data": {},
+                "valid": true
+            },
+            {
+                "description": "ignores arrays",
+                "data": [],
+                "valid": true
+            },
+            {
+                "description": "ignores booleans",
+                "data": false,
+                "valid": true
+            },
+            {
+                "description": "ignores null",
+                "data": null,
+                "valid": true
+            }
+        ]
+    },
+    {
+        "description": "validation of URI references",
+        "schema": {"format": "uri-reference"},
+        "tests": [
+            {
+                "description": "ignores integers",
+                "data": 12,
+                "valid": true
+            },
+            {
+                "description": "ignores floats",
+                "data": 13.7,
+                "valid": true
+            },
+            {
+                "description": "ignores objects",
+                "data": {},
+                "valid": true
+            },
+            {
+                "description": "ignores arrays",
+                "data": [],
+                "valid": true
+            },
+            {
+                "description": "ignores booleans",
+                "data": false,
+                "valid": true
+            },
+            {
+                "description": "ignores null",
+                "data": null,
+                "valid": true
+            }
+        ]
+    },
+    {
+        "description": "validation of URI templates",
+        "schema": {"format": "uri-template"},
+        "tests": [
+            {
+                "description": "ignores integers",
+                "data": 12,
+                "valid": true
+            },
+            {
+                "description": "ignores floats",
+                "data": 13.7,
+                "valid": true
+            },
+            {
+                "description": "ignores objects",
+                "data": {},
+                "valid": true
+            },
+            {
+                "description": "ignores arrays",
+                "data": [],
+                "valid": true
+            },
+            {
+                "description": "ignores booleans",
+                "data": false,
+                "valid": true
+            },
+            {
+                "description": "ignores null",
+                "data": null,
+                "valid": true
+            }
+        ]
+    }
+]
diff -pruN 3.0.2-4/json/tests/draft7/if-then-else.json 3.2.0-5/json/tests/draft7/if-then-else.json
--- 3.0.2-4/json/tests/draft7/if-then-else.json	2019-08-02 00:53:34.000000000 +0000
+++ 3.2.0-5/json/tests/draft7/if-then-else.json	2019-11-18 12:36:14.000000000 +0000
@@ -174,7 +174,7 @@
         },
         "tests": [
             {
-                "description": "valid, but woud have been invalid through then",
+                "description": "valid, but would have been invalid through then",
                 "data": -100,
                 "valid": true
             },
diff -pruN 3.0.2-4/json/tests/draft7/optional/ecmascript-regex.json 3.2.0-5/json/tests/draft7/optional/ecmascript-regex.json
--- 3.0.2-4/json/tests/draft7/optional/ecmascript-regex.json	2019-08-02 00:53:34.000000000 +0000
+++ 3.2.0-5/json/tests/draft7/optional/ecmascript-regex.json	2019-11-18 12:36:14.000000000 +0000
@@ -9,5 +9,205 @@
                 "valid": false
             }
         ]
+    },
+    {
+        "description": "ECMA 262 regex $ does not match trailing newline",
+        "schema": {
+            "type": "string",
+            "pattern": "^abc$"
+        },
+        "tests": [
+            {
+                "description": "matches in Python, but should not in jsonschema",
+                "data": "abc\n",
+                "valid": false
+            },
+            {
+                "description": "should match",
+                "data": "abc",
+                "valid": true
+            }
+        ]
+    },
+    {
+        "description": "ECMA 262 regex converts \\a to ascii BEL",
+        "schema": {
+            "type": "string",
+            "pattern": "^\\a$"
+        },
+        "tests": [
+            {
+                "description": "does not match",
+                "data": "\\a",
+                "valid": false
+            },
+            {
+                "description": "matches",
+                "data": "\u0007",
+                "valid": true
+            }
+        ]
+    },
+    {
+        "description": "ECMA 262 regex escapes control codes with \\c and upper letter",
+        "schema": {
+            "type": "string",
+            "pattern": "^\\cC$"
+        },
+        "tests": [
+            {
+                "description": "does not match",
+                "data": "\\cC",
+                "valid": false
+            },
+            {
+                "description": "matches",
+                "data": "\u0003",
+                "valid": true
+            }
+        ]
+    },
+    {
+        "description": "ECMA 262 regex escapes control codes with \\c and lower letter",
+        "schema": {
+            "type": "string",
+            "pattern": "^\\cc$"
+        },
+        "tests": [
+            {
+                "description": "does not match",
+                "data": "\\cc",
+                "valid": false
+            },
+            {
+                "description": "matches",
+                "data": "\u0003",
+                "valid": true
+            }
+        ]
+    },
+    {
+        "description": "ECMA 262 \\d matches ascii digits only",
+        "schema": {
+            "type": "string",
+            "pattern": "^\\d$"
+        },
+        "tests": [
+            {
+                "description": "ASCII zero matches",
+                "data": "0",
+                "valid": true
+            },
+            {
+                "description": "NKO DIGIT ZERO does not match (unlike e.g. Python)",
+                "data": "߀",
+                "valid": false
+            },
+            {
+                "description": "NKO DIGIT ZERO (as \\u escape) does not match",
+                "data": "\u07c0",
+                "valid": false
+            }
+        ]
+    },
+    {
+        "description": "ECMA 262 \\D matches everything but ascii digits",
+        "schema": {
+            "type": "string",
+            "pattern": "^\\D$"
+        },
+        "tests": [
+            {
+                "description": "ASCII zero does not match",
+                "data": "0",
+                "valid": false
+            },
+            {
+                "description": "NKO DIGIT ZERO matches (unlike e.g. Python)",
+                "data": "߀",
+                "valid": true
+            },
+            {
+                "description": "NKO DIGIT ZERO (as \\u escape) matches",
+                "data": "\u07c0",
+                "valid": true
+            }
+        ]
+    },
+    {
+        "description": "ECMA 262 \\w matches ascii letters only",
+        "schema": {
+            "type": "string",
+            "pattern": "^\\w$"
+        },
+        "tests": [
+            {
+                "description": "ASCII 'a' matches",
+                "data": "a",
+                "valid": true
+            },
+            {
+                "description": "latin-1 e-acute does not match (unlike e.g. Python)",
+                "data": "é",
+                "valid": false
+            }
+        ]
+    },
+    {
+        "description": "ECMA 262 \\w matches everything but ascii letters",
+        "schema": {
+            "type": "string",
+            "pattern": "^\\W$"
+        },
+        "tests": [
+            {
+                "description": "ASCII 'a' does not match",
+                "data": "a",
+                "valid": false
+            },
+            {
+                "description": "latin-1 e-acute matches (unlike e.g. Python)",
+                "data": "é",
+                "valid": true
+            }
+        ]
+    },
+    {
+        "description": "ECMA 262 \\s matches ascii whitespace only",
+        "schema": {
+            "type": "string",
+            "pattern": "^\\s$"
+        },
+        "tests": [
+            {
+                "description": "ASCII space matches",
+                "data": " ",
+                "valid": true
+            },
+            {
+                "description": "latin-1 non-breaking-space does not match (unlike e.g. Python)",
+                "data": "\u00a0",
+                "valid": false
+            }
+        ]
+    },
+    {
+        "description": "ECMA 262 \\S matches everything but ascii whitespace",
+        "schema": {
+            "type": "string",
+            "pattern": "^\\S$"
+        },
+        "tests": [
+            {
+                "description": "ASCII space does not match",
+                "data": " ",
+                "valid": false
+            },
+            {
+                "description": "latin-1 non-breaking-space matches (unlike e.g. Python)",
+                "data": "\u00a0",
+                "valid": true
+            }
+        ]
     }
 ]
diff -pruN 3.0.2-4/json/tests/draft7/optional/format/uri-template.json 3.2.0-5/json/tests/draft7/optional/format/uri-template.json
--- 3.0.2-4/json/tests/draft7/optional/format/uri-template.json	2019-08-02 00:53:34.000000000 +0000
+++ 3.2.0-5/json/tests/draft7/optional/format/uri-template.json	2019-11-18 12:36:14.000000000 +0000
@@ -1,9 +1,7 @@
 [
     {
         "description": "format: uri-template",
-        "schema": {
-            "format": "uri-template"
-        },
+        "schema": {"format": "uri-template"},
         "tests": [
             {
                 "description": "a valid uri-template",
diff -pruN 3.0.2-4/json/tests/draft7/uniqueItems.json 3.2.0-5/json/tests/draft7/uniqueItems.json
--- 3.0.2-4/json/tests/draft7/uniqueItems.json	2019-08-02 00:53:34.000000000 +0000
+++ 3.2.0-5/json/tests/draft7/uniqueItems.json	2019-11-18 12:36:14.000000000 +0000
@@ -85,5 +85,89 @@
                 "valid": false
             }
         ]
+    },
+    {
+        "description": "uniqueItems with an array of items",
+        "schema": {
+            "items": [{"type": "boolean"}, {"type": "boolean"}],
+            "uniqueItems": true
+        },
+        "tests": [
+            {
+                "description": "[false, true] from items array is valid",
+                "data": [false, true],
+                "valid": true
+            },
+            {
+                "description": "[true, false] from items array is valid",
+                "data": [true, false],
+                "valid": true
+            },
+            {
+                "description": "[false, false] from items array is not valid",
+                "data": [false, false],
+                "valid": false
+            },
+            {
+                "description": "[true, true] from items array is not valid",
+                "data": [true, true],
+                "valid": false
+            },
+            {
+                "description": "unique array extended from [false, true] is valid",
+                "data": [false, true, "foo", "bar"],
+                "valid": true
+            },
+            {
+                "description": "unique array extended from [true, false] is valid",
+                "data": [true, false, "foo", "bar"],
+                "valid": true
+            },
+            {
+                "description": "non-unique array extended from [false, true] is not valid",
+                "data": [false, true, "foo", "foo"],
+                "valid": false
+            },
+            {
+                "description": "non-unique array extended from [true, false] is not valid",
+                "data": [true, false, "foo", "foo"],
+                "valid": false
+            }
+        ]
+    },
+    {
+        "description": "uniqueItems with an array of items and additionalItems=false",
+        "schema": {
+            "items": [{"type": "boolean"}, {"type": "boolean"}],
+            "uniqueItems": true,
+            "additionalItems": false
+        },
+        "tests": [
+            {
+                "description": "[false, true] from items array is valid",
+                "data": [false, true],
+                "valid": true
+            },
+            {
+                "description": "[true, false] from items array is valid",
+                "data": [true, false],
+                "valid": true
+            },
+            {
+                "description": "[false, false] from items array is not valid",
+                "data": [false, false],
+                "valid": false
+            },
+            {
+                "description": "[true, true] from items array is not valid",
+                "data": [true, true],
+                "valid": false
+            },
+            {
+                "description": "extra items are invalid even if unique",
+                "data": [false, true, null],
+                "valid": false
+            }
+        ]
     }
 ]
diff -pruN 3.0.2-4/json/tests/latest/additionalItems.json 3.2.0-5/json/tests/latest/additionalItems.json
--- 3.0.2-4/json/tests/latest/additionalItems.json	1970-01-01 00:00:00.000000000 +0000
+++ 3.2.0-5/json/tests/latest/additionalItems.json	2019-11-18 12:36:14.000000000 +0000
@@ -0,0 +1,87 @@
+[
+    {
+        "description": "additionalItems as schema",
+        "schema": {
+            "items": [{}],
+            "additionalItems": {"type": "integer"}
+        },
+        "tests": [
+            {
+                "description": "additional items match schema",
+                "data": [ null, 2, 3, 4 ],
+                "valid": true
+            },
+            {
+                "description": "additional items do not match schema",
+                "data": [ null, 2, 3, "foo" ],
+                "valid": false
+            }
+        ]
+    },
+    {
+        "description": "items is schema, no additionalItems",
+        "schema": {
+            "items": {},
+            "additionalItems": false
+        },
+        "tests": [
+            {
+                "description": "all items match schema",
+                "data": [ 1, 2, 3, 4, 5 ],
+                "valid": true
+            }
+        ]
+    },
+    {
+        "description": "array of items with no additionalItems",
+        "schema": {
+            "items": [{}, {}, {}],
+            "additionalItems": false
+        },
+        "tests": [
+            {
+                "description": "fewer number of items present",
+                "data": [ 1, 2 ],
+                "valid": true
+            },
+            {
+                "description": "equal number of items present",
+                "data": [ 1, 2, 3 ],
+                "valid": true
+            },
+            {
+                "description": "additional items are not permitted",
+                "data": [ 1, 2, 3, 4 ],
+                "valid": false
+            }
+        ]
+    },
+    {
+        "description": "additionalItems as false without items",
+        "schema": {"additionalItems": false},
+        "tests": [
+            {
+                "description":
+                    "items defaults to empty schema so everything is valid",
+                "data": [ 1, 2, 3, 4, 5 ],
+                "valid": true
+            },
+            {
+                "description": "ignores non-arrays",
+                "data": {"foo" : "bar"},
+                "valid": true
+            }
+        ]
+    },
+    {
+        "description": "additionalItems are allowed by default",
+        "schema": {"items": [{"type": "integer"}]},
+        "tests": [
+            {
+                "description": "only the first item is validated",
+                "data": [1, "foo", false],
+                "valid": true
+            }
+        ]
+    }
+]
diff -pruN 3.0.2-4/json/tests/latest/additionalProperties.json 3.2.0-5/json/tests/latest/additionalProperties.json
--- 3.0.2-4/json/tests/latest/additionalProperties.json	1970-01-01 00:00:00.000000000 +0000
+++ 3.2.0-5/json/tests/latest/additionalProperties.json	2019-11-18 12:36:14.000000000 +0000
@@ -0,0 +1,133 @@
+[
+    {
+        "description":
+            "additionalProperties being false does not allow other properties",
+        "schema": {
+            "properties": {"foo": {}, "bar": {}},
+            "patternProperties": { "^v": {} },
+            "additionalProperties": false
+        },
+        "tests": [
+            {
+                "description": "no additional properties is valid",
+                "data": {"foo": 1},
+                "valid": true
+            },
+            {
+                "description": "an additional property is invalid",
+                "data": {"foo" : 1, "bar" : 2, "quux" : "boom"},
+                "valid": false
+            },
+            {
+                "description": "ignores arrays",
+                "data": [1, 2, 3],
+                "valid": true
+            },
+            {
+                "description": "ignores strings",
+                "data": "foobarbaz",
+                "valid": true
+            },
+            {
+                "description": "ignores other non-objects",
+                "data": 12,
+                "valid": true
+            },
+            {
+                "description": "patternProperties are not additional properties",
+                "data": {"foo":1, "vroom": 2},
+                "valid": true
+            }
+        ]
+    },
+    {
+        "description": "non-ASCII pattern with additionalProperties",
+        "schema": {
+            "patternProperties": {"^á": {}},
+            "additionalProperties": false
+        },
+        "tests": [
+            {
+                "description": "matching the pattern is valid",
+                "data": {"ármányos": 2},
+                "valid": true
+            },
+            {
+                "description": "not matching the pattern is invalid",
+                "data": {"élmény": 2},
+                "valid": false
+            }
+        ]
+    },
+    {
+        "description":
+            "additionalProperties allows a schema which should validate",
+        "schema": {
+            "properties": {"foo": {}, "bar": {}},
+            "additionalProperties": {"type": "boolean"}
+        },
+        "tests": [
+            {
+                "description": "no additional properties is valid",
+                "data": {"foo": 1},
+                "valid": true
+            },
+            {
+                "description": "an additional valid property is valid",
+                "data": {"foo" : 1, "bar" : 2, "quux" : true},
+                "valid": true
+            },
+            {
+                "description": "an additional invalid property is invalid",
+                "data": {"foo" : 1, "bar" : 2, "quux" : 12},
+                "valid": false
+            }
+        ]
+    },
+    {
+        "description":
+            "additionalProperties can exist by itself",
+        "schema": {
+            "additionalProperties": {"type": "boolean"}
+        },
+        "tests": [
+            {
+                "description": "an additional valid property is valid",
+                "data": {"foo" : true},
+                "valid": true
+            },
+            {
+                "description": "an additional invalid property is invalid",
+                "data": {"foo" : 1},
+                "valid": false
+            }
+        ]
+    },
+    {
+        "description": "additionalProperties are allowed by default",
+        "schema": {"properties": {"foo": {}, "bar": {}}},
+        "tests": [
+            {
+                "description": "additional properties are allowed",
+                "data": {"foo": 1, "bar": 2, "quux": true},
+                "valid": true
+            }
+        ]
+    },
+    {
+        "description": "additionalProperties should not look in applicators",
+        "schema": {
+            "allOf": [
+                {"properties": {"foo": {}}}
+            ],
+            "additionalProperties": {"type": "boolean"}
+        },
+        "tests": [
+            {
+                "description": "properties defined in allOf are not allowed",
+                "data": {"foo": 1, "bar": true},
+                "valid": false
+            }
+        ]
+    }
+]
diff -pruN 3.0.2-4/json/tests/latest/allOf.json 3.2.0-5/json/tests/latest/allOf.json
--- 3.0.2-4/json/tests/latest/allOf.json	1970-01-01 00:00:00.000000000 +0000
+++ 3.2.0-5/json/tests/latest/allOf.json	2019-11-18 12:36:14.000000000 +0000
@@ -0,0 +1,218 @@
+[
+    {
+        "description": "allOf",
+        "schema": {
+            "allOf": [
+                {
+                    "properties": {
+                        "bar": {"type": "integer"}
+                    },
+                    "required": ["bar"]
+                },
+                {
+                    "properties": {
+                        "foo": {"type": "string"}
+                    },
+                    "required": ["foo"]
+                }
+            ]
+        },
+        "tests": [
+            {
+                "description": "allOf",
+                "data": {"foo": "baz", "bar": 2},
+                "valid": true
+            },
+            {
+                "description": "mismatch second",
+                "data": {"foo": "baz"},
+                "valid": false
+            },
+            {
+                "description": "mismatch first",
+                "data": {"bar": 2},
+                "valid": false
+            },
+            {
+                "description": "wrong type",
+                "data": {"foo": "baz", "bar": "quux"},
+                "valid": false
+            }
+        ]
+    },
+    {
+        "description": "allOf with base schema",
+        "schema": {
+            "properties": {"bar": {"type": "integer"}},
+            "required": ["bar"],
+            "allOf" : [
+                {
+                    "properties": {
+                        "foo": {"type": "string"}
+                    },
+                    "required": ["foo"]
+                },
+                {
+                    "properties": {
+                        "baz": {"type": "null"}
+                    },
+                    "required": ["baz"]
+                }
+            ]
+        },
+        "tests": [
+            {
+                "description": "valid",
+                "data": {"foo": "quux", "bar": 2, "baz": null},
+                "valid": true
+            },
+            {
+                "description": "mismatch base schema",
+                "data": {"foo": "quux", "baz": null},
+                "valid": false
+            },
+            {
+                "description": "mismatch first allOf",
+                "data": {"bar": 2, "baz": null},
+                "valid": false
+            },
+            {
+                "description": "mismatch second allOf",
+                "data": {"foo": "quux", "bar": 2},
+                "valid": false
+            },
+            {
+                "description": "mismatch both",
+                "data": {"bar": 2},
+                "valid": false
+            }
+        ]
+    },
+    {
+        "description": "allOf simple types",
+        "schema": {
+            "allOf": [
+                {"maximum": 30},
+                {"minimum": 20}
+            ]
+        },
+        "tests": [
+            {
+                "description": "valid",
+                "data": 25,
+                "valid": true
+            },
+            {
+                "description": "mismatch one",
+                "data": 35,
+                "valid": false
+            }
+        ]
+    },
+    {
+        "description": "allOf with boolean schemas, all true",
+        "schema": {"allOf": [true, true]},
+        "tests": [
+            {
+                "description": "any value is valid",
+                "data": "foo",
+                "valid": true
+            }
+        ]
+    },
+    {
+        "description": "allOf with boolean schemas, some false",
+        "schema": {"allOf": [true, false]},
+        "tests": [
+            {
+                "description": "any value is invalid",
+                "data": "foo",
+                "valid": false
+            }
+        ]
+    },
+    {
+        "description": "allOf with boolean schemas, all false",
+        "schema": {"allOf": [false, false]},
+        "tests": [
+            {
+                "description": "any value is invalid",
+                "data": "foo",
+                "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 -pruN 3.0.2-4/json/tests/latest/anchor.json 3.2.0-5/json/tests/latest/anchor.json
--- 3.0.2-4/json/tests/latest/anchor.json	1970-01-01 00:00:00.000000000 +0000
+++ 3.2.0-5/json/tests/latest/anchor.json	2019-11-18 12:36:14.000000000 +0000
@@ -0,0 +1,87 @@
+[
+    {
+        "description": "Location-independent identifier",
+        "schema": {
+            "allOf": [{
+                "$ref": "#foo"
+            }],
+            "$defs": {
+                "A": {
+                    "$anchor": "foo",
+                    "type": "integer"
+                }
+            }
+        },
+        "tests": [
+            {
+                "data": 1,
+                "description": "match",
+                "valid": true
+            },
+            {
+                "data": "a",
+                "description": "mismatch",
+                "valid": false
+            }
+        ]
+    },
+    {
+        "description": "Location-independent identifier with absolute URI",
+        "schema": {
+            "allOf": [{
+                "$ref": "http://localhost:1234/bar#foo"
+            }],
+            "$defs": {
+                "A": {
+                    "$id": "http://localhost:1234/bar",
+                    "$anchor": "foo",
+                    "type": "integer"
+                }
+            }
+        },
+        "tests": [
+            {
+                "data": 1,
+                "description": "match",
+                "valid": true
+            },
+            {
+                "data": "a",
+                "description": "mismatch",
+                "valid": false
+            }
+        ]
+    },
+    {
+        "description": "Location-independent identifier with base URI change in subschema",
+        "schema": {
+            "$id": "http://localhost:1234/root",
+            "allOf": [{
+                "$ref": "http://localhost:1234/nested.json#foo"
+            }],
+            "$defs": {
+                "A": {
+                    "$id": "nested.json",
+                    "$defs": {
+                        "B": {
+                            "$anchor": "foo",
+                            "type": "integer"
+                        }
+                    }
+                }
+            }
+        },
+        "tests": [
+            {
+                "data": 1,
+                "description": "match",
+                "valid": true
+            },
+            {
+                "data": "a",
+                "description": "mismatch",
+                "valid": false
+            }
+        ]
+    }
+]
diff -pruN 3.0.2-4/json/tests/latest/anyOf.json 3.2.0-5/json/tests/latest/anyOf.json
--- 3.0.2-4/json/tests/latest/anyOf.json	1970-01-01 00:00:00.000000000 +0000
+++ 3.2.0-5/json/tests/latest/anyOf.json	2019-11-18 12:36:14.000000000 +0000
@@ -0,0 +1,189 @@
+[
+    {
+        "description": "anyOf",
+        "schema": {
+            "anyOf": [
+                {
+                    "type": "integer"
+                },
+                {
+                    "minimum": 2
+                }
+            ]
+        },
+        "tests": [
+            {
+                "description": "first anyOf valid",
+                "data": 1,
+                "valid": true
+            },
+            {
+                "description": "second anyOf valid",
+                "data": 2.5,
+                "valid": true
+            },
+            {
+                "description": "both anyOf valid",
+                "data": 3,
+                "valid": true
+            },
+            {
+                "description": "neither anyOf valid",
+                "data": 1.5,
+                "valid": false
+            }
+        ]
+    },
+    {
+        "description": "anyOf with base schema",
+        "schema": {
+            "type": "string",
+            "anyOf" : [
+                {
+                    "maxLength": 2
+                },
+                {
+                    "minLength": 4
+                }
+            ]
+        },
+        "tests": [
+            {
+                "description": "mismatch base schema",
+                "data": 3,
+                "valid": false
+            },
+            {
+                "description": "one anyOf valid",
+                "data": "foobar",
+                "valid": true
+            },
+            {
+                "description": "both anyOf invalid",
+                "data": "foo",
+                "valid": false
+            }
+        ]
+    },
+    {
+        "description": "anyOf with boolean schemas, all true",
+        "schema": {"anyOf": [true, true]},
+        "tests": [
+            {
+                "description": "any value is valid",
+                "data": "foo",
+                "valid": true
+            }
+        ]
+    },
+    {
+        "description": "anyOf with boolean schemas, some true",
+        "schema": {"anyOf": [true, false]},
+        "tests": [
+            {
+                "description": "any value is valid",
+                "data": "foo",
+                "valid": true
+            }
+        ]
+    },
+    {
+        "description": "anyOf with boolean schemas, all false",
+        "schema": {"anyOf": [false, false]},
+        "tests": [
+            {
+                "description": "any value is invalid",
+                "data": "foo",
+                "valid": false
+            }
+        ]
+    },
+    {
+        "description": "anyOf complex types",
+        "schema": {
+            "anyOf": [
+                {
+                    "properties": {
+                        "bar": {"type": "integer"}
+                    },
+                    "required": ["bar"]
+                },
+                {
+                    "properties": {
+                        "foo": {"type": "string"}
+                    },
+                    "required": ["foo"]
+                }
+            ]
+        },
+        "tests": [
+            {
+                "description": "first anyOf valid (complex)",
+                "data": {"bar": 2},
+                "valid": true
+            },
+            {
+                "description": "second anyOf valid (complex)",
+                "data": {"foo": "baz"},
+                "valid": true
+            },
+            {
+                "description": "both anyOf valid (complex)",
+                "data": {"foo": "baz", "bar": 2},
+                "valid": true
+            },
+            {
+                "description": "neither anyOf valid (complex)",
+                "data": {"foo": 2, "bar": "quux"},
+                "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
+            }
+        ]
+    },
+    {
+        "description": "nested anyOf, to check validation semantics",
+        "schema": {
+            "anyOf": [
+                {
+                    "anyOf": [
+                        {
+                            "type": "null"
+                        }
+                    ]
+                }
+            ]
+        },
+        "tests": [
+            {
+                "description": "null is valid",
+                "data": null,
+                "valid": true
+            },
+            {
+                "description": "anything non-null is invalid",
+                "data": 123,
+                "valid": false
+            }
+        ]
+    }
+]
diff -pruN 3.0.2-4/json/tests/latest/boolean_schema.json 3.2.0-5/json/tests/latest/boolean_schema.json
--- 3.0.2-4/json/tests/latest/boolean_schema.json	1970-01-01 00:00:00.000000000 +0000
+++ 3.2.0-5/json/tests/latest/boolean_schema.json	2019-11-18 12:36:14.000000000 +0000
@@ -0,0 +1,104 @@
+[
+    {
+        "description": "boolean schema 'true'",
+        "schema": true,
+        "tests": [
+            {
+                "description": "number is valid",
+                "data": 1,
+                "valid": true
+            },
+            {
+                "description": "string is valid",
+                "data": "foo",
+                "valid": true
+            },
+            {
+                "description": "boolean true is valid",
+                "data": true,
+                "valid": true
+            },
+            {
+                "description": "boolean false is valid",
+                "data": false,
+                "valid": true
+            },
+            {
+                "description": "null is valid",
+                "data": null,
+                "valid": true
+            },
+            {
+                "description": "object is valid",
+                "data": {"foo": "bar"},
+                "valid": true
+            },
+            {
+                "description": "empty object is valid",
+                "data": {},
+                "valid": true
+            },
+            {
+                "description": "array is valid",
+                "data": ["foo"],
+                "valid": true
+            },
+            {
+                "description": "empty array is valid",
+                "data": [],
+                "valid": true
+            }
+        ]
+    },
+    {
+        "description": "boolean schema 'false'",
+        "schema": false,
+        "tests": [
+            {
+                "description": "number is invalid",
+                "data": 1,
+                "valid": false
+            },
+            {
+                "description": "string is invalid",
+                "data": "foo",
+                "valid": false
+            },
+            {
+                "description": "boolean true is invalid",
+                "data": true,
+                "valid": false
+            },
+            {
+                "description": "boolean false is invalid",
+                "data": false,
+                "valid": false
+            },
+            {
+                "description": "null is invalid",
+                "data": null,
+                "valid": false
+            },
+            {
+                "description": "object is invalid",
+                "data": {"foo": "bar"},
+                "valid": false
+            },
+            {
+                "description": "empty object is invalid",
+                "data": {},
+                "valid": false
+            },
+            {
+                "description": "array is invalid",
+                "data": ["foo"],
+                "valid": false
+            },
+            {
+                "description": "empty array is invalid",
+                "data": [],
+                "valid": false
+            }
+        ]
+    }
+]
diff -pruN 3.0.2-4/json/tests/latest/const.json 3.2.0-5/json/tests/latest/const.json
--- 3.0.2-4/json/tests/latest/const.json	1970-01-01 00:00:00.000000000 +0000
+++ 3.2.0-5/json/tests/latest/const.json	2019-11-18 12:36:14.000000000 +0000
@@ -0,0 +1,170 @@
+[
+    {
+        "description": "const validation",
+        "schema": {"const": 2},
+        "tests": [
+            {
+                "description": "same value is valid",
+                "data": 2,
+                "valid": true
+            },
+            {
+                "description": "another value is invalid",
+                "data": 5,
+                "valid": false
+            },
+            {
+                "description": "another type is invalid",
+                "data": "a",
+                "valid": false
+            }
+        ]
+    },
+    {
+        "description": "const with object",
+        "schema": {"const": {"foo": "bar", "baz": "bax"}},
+        "tests": [
+            {
+                "description": "same object is valid",
+                "data": {"foo": "bar", "baz": "bax"},
+                "valid": true
+            },
+            {
+                "description": "same object with different property order is valid",
+                "data": {"baz": "bax", "foo": "bar"},
+                "valid": true
+            },
+            {
+                "description": "another object is invalid",
+                "data": {"foo": "bar"},
+                "valid": false
+            },
+            {
+                "description": "another type is invalid",
+                "data": [1, 2],
+                "valid": false
+            }
+        ]
+    },
+    {
+        "description": "const with array",
+        "schema": {"const": [{ "foo": "bar" }]},
+        "tests": [
+            {
+                "description": "same array is valid",
+                "data": [{"foo": "bar"}],
+                "valid": true
+            },
+            {
+                "description": "another array item is invalid",
+                "data": [2],
+                "valid": false
+            },
+            {
+                "description": "array with additional items is invalid",
+                "data": [1, 2, 3],
+                "valid": false
+            }
+        ]
+    },
+    {
+        "description": "const with null",
+        "schema": {"const": null},
+        "tests": [
+            {
+                "description": "null is valid",
+                "data": null,
+                "valid": true
+            },
+            {
+                "description": "not null is invalid",
+                "data": 0,
+                "valid": false
+            }
+        ]
+    },
+    {
+        "description": "const with false does not match 0",
+        "schema": {"const": false},
+        "tests": [
+            {
+                "description": "false is valid",
+                "data": false,
+                "valid": true
+            },
+            {
+                "description": "integer zero is invalid",
+                "data": 0,
+                "valid": false
+            },
+            {
+                "description": "float zero is invalid",
+                "data": 0.0,
+                "valid": false
+            }
+        ]
+    },
+    {
+        "description": "const with true does not match 1",
+        "schema": {"const": true},
+        "tests": [
+            {
+                "description": "true is valid",
+                "data": true,
+                "valid": true
+            },
+            {
+                "description": "integer one is invalid",
+                "data": 1,
+                "valid": false
+            },
+            {
+                "description": "float one is invalid",
+                "data": 1.0,
+                "valid": false
+            }
+        ]
+    },
+    {
+        "description": "const with 0 does not match false",
+        "schema": {"const": 0},
+        "tests": [
+            {
+                "description": "false is invalid",
+                "data": false,
+                "valid": false
+            },
+            {
+                "description": "integer zero is valid",
+                "data": 0,
+                "valid": true
+            },
+            {
+                "description": "float zero is valid",
+                "data": 0.0,
+                "valid": true
+            }
+        ]
+    },
+    {
+        "description": "const with 1 does not match true",
+        "schema": {"const": 1},
+        "tests": [
+            {
+                "description": "true is invalid",
+                "data": true,
+                "valid": false
+            },
+            {
+                "description": "integer one is valid",
+                "data": 1,
+                "valid": true
+            },
+            {
+                "description": "float one is valid",
+                "data": 1.0,
+                "valid": true
+            }
+        ]
+    }
+]
diff -pruN 3.0.2-4/json/tests/latest/contains.json 3.2.0-5/json/tests/latest/contains.json
--- 3.0.2-4/json/tests/latest/contains.json	1970-01-01 00:00:00.000000000 +0000
+++ 3.2.0-5/json/tests/latest/contains.json	2019-11-18 12:36:14.000000000 +0000
@@ -0,0 +1,95 @@
+[
+    {
+        "description": "contains keyword validation",
+        "schema": {
+            "contains": {"minimum": 5}
+        },
+        "tests": [
+            {
+                "description": "array with item matching schema (5) is valid",
+                "data": [3, 4, 5],
+                "valid": true
+            },
+            {
+                "description": "array with item matching schema (6) is valid",
+                "data": [3, 4, 6],
+                "valid": true
+            },
+            {
+                "description": "array with two items matching schema (5, 6) is valid",
+                "data": [3, 4, 5, 6],
+                "valid": true
+            },
+            {
+                "description": "array without items matching schema is invalid",
+                "data": [2, 3, 4],
+                "valid": false
+            },
+            {
+                "description": "empty array is invalid",
+                "data": [],
+                "valid": false
+            },
+            {
+                "description": "not array is valid",
+                "data": {},
+                "valid": true
+            }
+        ]
+    },
+    {
+        "description": "contains keyword with const keyword",
+        "schema": {
+            "contains": { "const": 5 }
+        },
+        "tests": [
+            {
+                "description": "array with item 5 is valid",
+                "data": [3, 4, 5],
+                "valid": true
+            },
+            {
+                "description": "array with two items 5 is valid",
+                "data": [3, 4, 5, 5],
+                "valid": true
+            },
+            {
+                "description": "array without item 5 is invalid",
+                "data": [1, 2, 3, 4],
+                "valid": false
+            }
+        ]
+    },
+    {
+        "description": "contains keyword with boolean schema true",
+        "schema": {"contains": true},
+        "tests": [
+            {
+                "description": "any non-empty array is valid",
+                "data": ["foo"],
+                "valid": true
+            },
+            {
+                "description": "empty array is invalid",
+                "data": [],
+                "valid": false
+            }
+        ]
+    },
+    {
+        "description": "contains keyword with boolean schema false",
+        "schema": {"contains": false},
+        "tests": [
+            {
+                "description": "any non-empty array is invalid",
+                "data": ["foo"],
+                "valid": false
+            },
+            {
+                "description": "empty array is invalid",
+                "data": [],
+                "valid": false
+            }
+        ]
+    }
+]
diff -pruN 3.0.2-4/json/tests/latest/default.json 3.2.0-5/json/tests/latest/default.json
--- 3.0.2-4/json/tests/latest/default.json	1970-01-01 00:00:00.000000000 +0000
+++ 3.2.0-5/json/tests/latest/default.json	2019-11-18 12:36:14.000000000 +0000
@@ -0,0 +1,49 @@
+[
+    {
+        "description": "invalid type for default",
+        "schema": {
+            "properties": {
+                "foo": {
+                    "type": "integer",
+                    "default": []
+                }
+            }
+        },
+        "tests": [
+            {
+                "description": "valid when property is specified",
+                "data": {"foo": 13},
+                "valid": true
+            },
+            {
+                "description": "still valid when the invalid default is used",
+                "data": {},
+                "valid": true
+            }
+        ]
+    },
+    {
+        "description": "invalid string value for default",
+        "schema": {
+            "properties": {
+                "bar": {
+                    "type": "string",
+                    "minLength": 4,
+                    "default": "bad"
+                }
+            }
+        },
+        "tests": [
+            {
+                "description": "valid when property is specified",
+                "data": {"bar": "good"},
+                "valid": true
+            },
+            {
+                "description": "still valid when the invalid default is used",
+                "data": {},
+                "valid": true
+            }
+        ]
+    }
+]
diff -pruN 3.0.2-4/json/tests/latest/defs.json 3.2.0-5/json/tests/latest/defs.json
--- 3.0.2-4/json/tests/latest/defs.json	1970-01-01 00:00:00.000000000 +0000
+++ 3.2.0-5/json/tests/latest/defs.json	2019-11-18 12:36:14.000000000 +0000
@@ -0,0 +1,24 @@
+[
+    {
+        "description": "valid definition",
+        "schema": {"$ref": "https://json-schema.org/draft/2019-09/schema"},
+        "tests": [
+            {
+                "description": "valid definition schema",
+                "data": {"$defs": {"foo": {"type": "integer"}}},
+                "valid": true
+            }
+        ]
+    },
+    {
+        "description": "invalid definition",
+        "schema": {"$ref": "https://json-schema.org/draft/2019-09/schema"},
+        "tests": [
+            {
+                "description": "invalid definition schema",
+                "data": {"$defs": {"foo": {"type": 1}}},
+                "valid": false
+            }
+        ]
+    }
+]
diff -pruN 3.0.2-4/json/tests/latest/dependencies.json 3.2.0-5/json/tests/latest/dependencies.json
--- 3.0.2-4/json/tests/latest/dependencies.json	1970-01-01 00:00:00.000000000 +0000
+++ 3.2.0-5/json/tests/latest/dependencies.json	2019-11-18 12:36:14.000000000 +0000
@@ -0,0 +1,268 @@
+[
+    {
+        "description": "dependencies",
+        "schema": {
+            "dependencies": {"bar": ["foo"]}
+        },
+        "tests": [
+            {
+                "description": "neither",
+                "data": {},
+                "valid": true
+            },
+            {
+                "description": "nondependant",
+                "data": {"foo": 1},
+                "valid": true
+            },
+            {
+                "description": "with dependency",
+                "data": {"foo": 1, "bar": 2},
+                "valid": true
+            },
+            {
+                "description": "missing dependency",
+                "data": {"bar": 2},
+                "valid": false
+            },
+            {
+                "description": "ignores arrays",
+                "data": ["bar"],
+                "valid": true
+            },
+            {
+                "description": "ignores strings",
+                "data": "foobar",
+                "valid": true
+            },
+            {
+                "description": "ignores other non-objects",
+                "data": 12,
+                "valid": true
+            }
+        ]
+    },
+    {
+        "description": "dependencies with empty array",
+        "schema": {
+            "dependencies": {"bar": []}
+        },
+        "tests": [
+            {
+                "description": "empty object",
+                "data": {},
+                "valid": true
+            },
+            {
+                "description": "object with one property",
+                "data": {"bar": 2},
+                "valid": true
+            }
+        ]
+    },
+    {
+        "description": "multiple dependencies",
+        "schema": {
+            "dependencies": {"quux": ["foo", "bar"]}
+        },
+        "tests": [
+            {
+                "description": "neither",
+                "data": {},
+                "valid": true
+            },
+            {
+                "description": "nondependants",
+                "data": {"foo": 1, "bar": 2},
+                "valid": true
+            },
+            {
+                "description": "with dependencies",
+                "data": {"foo": 1, "bar": 2, "quux": 3},
+                "valid": true
+            },
+            {
+                "description": "missing dependency",
+                "data": {"foo": 1, "quux": 2},
+                "valid": false
+            },
+            {
+                "description": "missing other dependency",
+                "data": {"bar": 1, "quux": 2},
+                "valid": false
+            },
+            {
+                "description": "missing both dependencies",
+                "data": {"quux": 1},
+                "valid": false
+            }
+        ]
+    },
+    {
+        "description": "multiple dependencies subschema",
+        "schema": {
+            "dependencies": {
+                "bar": {
+                    "properties": {
+                        "foo": {"type": "integer"},
+                        "bar": {"type": "integer"}
+                    }
+                }
+            }
+        },
+        "tests": [
+            {
+                "description": "valid",
+                "data": {"foo": 1, "bar": 2},
+                "valid": true
+            },
+            {
+                "description": "no dependency",
+                "data": {"foo": "quux"},
+                "valid": true
+            },
+            {
+                "description": "wrong type",
+                "data": {"foo": "quux", "bar": 2},
+                "valid": false
+            },
+            {
+                "description": "wrong type other",
+                "data": {"foo": 2, "bar": "quux"},
+                "valid": false
+            },
+            {
+                "description": "wrong type both",
+                "data": {"foo": "quux", "bar": "quux"},
+                "valid": false
+            }
+        ]
+    },
+    {
+        "description": "dependencies with boolean subschemas",
+        "schema": {
+            "dependencies": {
+                "foo": true,
+                "bar": false
+            }
+        },
+        "tests": [
+            {
+                "description": "object with property having schema true is valid",
+                "data": {"foo": 1},
+                "valid": true
+            },
+            {
+                "description": "object with property having schema false is invalid",
+                "data": {"bar": 2},
+                "valid": false
+            },
+            {
+                "description": "object with both properties is invalid",
+                "data": {"foo": 1, "bar": 2},
+                "valid": false
+            },
+            {
+                "description": "empty object is valid",
+                "data": {},
+                "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
+            }
+        ]
+    },
+    {
+        "description": "dependencies with escaped characters",
+        "schema": {
+            "dependencies": {
+                "foo\nbar": ["foo\rbar"],
+                "foo\tbar": {
+                    "minProperties": 4
+                },
+                "foo'bar": {"required": ["foo\"bar"]},
+                "foo\"bar": ["foo'bar"]
+            }
+        },
+        "tests": [
+            {
+                "description": "valid object 1",
+                "data": {
+                    "foo\nbar": 1,
+                    "foo\rbar": 2
+                },
+                "valid": true
+            },
+            {
+                "description": "valid object 2",
+                "data": {
+                    "foo\tbar": 1,
+                    "a": 2,
+                    "b": 3,
+                    "c": 4
+                },
+                "valid": true
+            },
+            {
+                "description": "valid object 3",
+                "data": {
+                    "foo'bar": 1,
+                    "foo\"bar": 2
+                },
+                "valid": true
+            },
+            {
+                "description": "invalid object 1",
+                "data": {
+                    "foo\nbar": 1,
+                    "foo": 2
+                },
+                "valid": false
+            },
+            {
+                "description": "invalid object 2",
+                "data": {
+                    "foo\tbar": 1,
+                    "a": 2
+                },
+                "valid": false
+            },
+            {
+                "description": "invalid object 3",
+                "data": {
+                    "foo'bar": 1
+                },
+                "valid": false
+            },
+            {
+                "description": "invalid object 4",
+                "data": {
+                    "foo\"bar": 2
+                },
+                "valid": false
+            }
+        ]
+    }
+]
diff -pruN 3.0.2-4/json/tests/latest/enum.json 3.2.0-5/json/tests/latest/enum.json
--- 3.0.2-4/json/tests/latest/enum.json	1970-01-01 00:00:00.000000000 +0000
+++ 3.2.0-5/json/tests/latest/enum.json	2019-11-18 12:36:14.000000000 +0000
@@ -0,0 +1,179 @@
+[
+    {
+        "description": "simple enum validation",
+        "schema": {"enum": [1, 2, 3]},
+        "tests": [
+            {
+                "description": "one of the enum is valid",
+                "data": 1,
+                "valid": true
+            },
+            {
+                "description": "something else is invalid",
+                "data": 4,
+                "valid": false
+            }
+        ]
+    },
+    {
+        "description": "heterogeneous enum validation",
+        "schema": {"enum": [6, "foo", [], true, {"foo": 12}]},
+        "tests": [
+            {
+                "description": "one of the enum is valid",
+                "data": [],
+                "valid": true
+            },
+            {
+                "description": "something else is invalid",
+                "data": null,
+                "valid": false
+            },
+            {
+                "description": "objects are deep compared",
+                "data": {"foo": false},
+                "valid": false
+            }
+        ]
+    },
+    {
+        "description": "enums in properties",
+        "schema": {
+            "type":"object",
+            "properties": {
+                "foo": {"enum":["foo"]},
+                "bar": {"enum":["bar"]}
+            },
+            "required": ["bar"]
+        },
+        "tests": [
+            {
+                "description": "both properties are valid",
+                "data": {"foo":"foo", "bar":"bar"},
+                "valid": true
+            },
+            {
+                "description": "missing optional property is valid",
+                "data": {"bar":"bar"},
+                "valid": true
+            },
+            {
+                "description": "missing required property is invalid",
+                "data": {"foo":"foo"},
+                "valid": false
+            },
+            {
+                "description": "missing all properties is invalid",
+                "data": {},
+                "valid": false
+            }
+        ]
+    },
+    {
+        "description": "enum with escaped characters",
+        "schema": {
+            "enum": ["foo\nbar", "foo\rbar"]
+        },
+        "tests": [
+            {
+                "description": "member 1 is valid",
+                "data": "foo\nbar",
+                "valid": true
+            },
+            {
+                "description": "member 2 is valid",
+                "data": "foo\rbar",
+                "valid": true
+            },
+            {
+                "description": "another string is invalid",
+                "data": "abc",
+                "valid": false
+            }
+        ]
+    },
+    {
+        "description": "enum with false does not match 0",
+        "schema": {"enum": [false]},
+        "tests": [
+            {
+                "description": "false is valid",
+                "data": false,
+                "valid": true
+            },
+            {
+                "description": "integer zero is invalid",
+                "data": 0,
+                "valid": false
+            },
+            {
+                "description": "float zero is invalid",
+                "data": 0.0,
+                "valid": false
+            }
+        ]
+    },
+    {
+        "description": "enum with true does not match 1",
+        "schema": {"enum": [true]},
+        "tests": [
+            {
+                "description": "true is valid",
+                "data": true,
+                "valid": true
+            },
+            {
+                "description": "integer one is invalid",
+                "data": 1,
+                "valid": false
+            },
+            {
+                "description": "float one is invalid",
+                "data": 1.0,
+                "valid": false
+            }
+        ]
+    },
+    {
+        "description": "enum with 0 does not match false",
+        "schema": {"enum": [0]},
+        "tests": [
+            {
+                "description": "false is invalid",
+                "data": false,
+                "valid": false
+            },
+            {
+                "description": "integer zero is valid",
+                "data": 0,
+                "valid": true
+            },
+            {
+                "description": "float zero is valid",
+                "data": 0.0,
+                "valid": true
+            }
+        ]
+    },
+    {
+        "description": "enum with 1 does not match true",
+        "schema": {"enum": [1]},
+        "tests": [
+            {
+                "description": "true is invalid",
+                "data": true,
+                "valid": false
+            },
+            {
+                "description": "integer one is valid",
+                "data": 1,
+                "valid": true
+            },
+            {
+                "description": "float one is valid",
+                "data": 1.0,
+                "valid": true
+            }
+        ]
+    }
+]
diff -pruN 3.0.2-4/json/tests/latest/exclusiveMaximum.json 3.2.0-5/json/tests/latest/exclusiveMaximum.json
--- 3.0.2-4/json/tests/latest/exclusiveMaximum.json	1970-01-01 00:00:00.000000000 +0000
+++ 3.2.0-5/json/tests/latest/exclusiveMaximum.json	2019-11-18 12:36:14.000000000 +0000
@@ -0,0 +1,30 @@
+[
+    {
+        "description": "exclusiveMaximum validation",
+        "schema": {
+            "exclusiveMaximum": 3.0
+        },
+        "tests": [
+            {
+                "description": "below the exclusiveMaximum is valid",
+                "data": 2.2,
+                "valid": true
+            },
+            {
+                "description": "boundary point is invalid",
+                "data": 3.0,
+                "valid": false
+            },
+            {
+                "description": "above the exclusiveMaximum is invalid",
+                "data": 3.5,
+                "valid": false
+            },
+            {
+                "description": "ignores non-numbers",
+                "data": "x",
+                "valid": true
+            }
+        ]
+    }
+]
diff -pruN 3.0.2-4/json/tests/latest/exclusiveMinimum.json 3.2.0-5/json/tests/latest/exclusiveMinimum.json
--- 3.0.2-4/json/tests/latest/exclusiveMinimum.json	1970-01-01 00:00:00.000000000 +0000
+++ 3.2.0-5/json/tests/latest/exclusiveMinimum.json	2019-11-18 12:36:14.000000000 +0000
@@ -0,0 +1,30 @@
+[
+    {
+        "description": "exclusiveMinimum validation",
+        "schema": {
+            "exclusiveMinimum": 1.1
+        },
+        "tests": [
+            {
+                "description": "above the exclusiveMinimum is valid",
+                "data": 1.2,
+                "valid": true
+            },
+            {
+                "description": "boundary point is invalid",
+                "data": 1.1,
+                "valid": false
+            },
+            {
+                "description": "below the exclusiveMinimum is invalid",
+                "data": 0.6,
+                "valid": false
+            },
+            {
+                "description": "ignores non-numbers",
+                "data": "x",
+                "valid": true
+            }
+        ]
+    }
+]
diff -pruN 3.0.2-4/json/tests/latest/format.json 3.2.0-5/json/tests/latest/format.json
--- 3.0.2-4/json/tests/latest/format.json	1970-01-01 00:00:00.000000000 +0000
+++ 3.2.0-5/json/tests/latest/format.json	2019-11-18 12:36:14.000000000 +0000
@@ -0,0 +1,614 @@
+[
+    {
+        "description": "validation of e-mail addresses",
+        "schema": {"format": "email"},
+        "tests": [
+            {
+                "description": "ignores integers",
+                "data": 12,
+                "valid": true
+            },
+            {
+                "description": "ignores floats",
+                "data": 13.7,
+                "valid": true
+            },
+            {
+                "description": "ignores objects",
+                "data": {},
+                "valid": true
+            },
+            {
+                "description": "ignores arrays",
+                "data": [],
+                "valid": true
+            },
+            {
+                "description": "ignores booleans",
+                "data": false,
+                "valid": true
+            },
+            {
+                "description": "ignores null",
+                "data": null,
+                "valid": true
+            }
+        ]
+    },
+    {
+        "description": "validation of IDN e-mail addresses",
+        "schema": {"format": "idn-email"},
+        "tests": [
+            {
+                "description": "ignores integers",
+                "data": 12,
+                "valid": true
+            },
+            {
+                "description": "ignores floats",
+                "data": 13.7,
+                "valid": true
+            },
+            {
+                "description": "ignores objects",
+                "data": {},
+                "valid": true
+            },
+            {
+                "description": "ignores arrays",
+                "data": [],
+                "valid": true
+            },
+            {
+                "description": "ignores booleans",
+                "data": false,
+                "valid": true
+            },
+            {
+                "description": "ignores null",
+                "data": null,
+                "valid": true
+            }
+        ]
+    },
+    {
+        "description": "validation of regexes",
+        "schema": {"format": "regex"},
+        "tests": [
+            {
+                "description": "ignores integers",
+                "data": 12,
+                "valid": true
+            },
+            {
+                "description": "ignores floats",
+                "data": 13.7,
+                "valid": true
+            },
+            {
+                "description": "ignores objects",
+                "data": {},
+                "valid": true
+            },
+            {
+                "description": "ignores arrays",
+                "data": [],
+                "valid": true
+            },
+            {
+                "description": "ignores booleans",
+                "data": false,
+                "valid": true
+            },
+            {
+                "description": "ignores null",
+                "data": null,
+                "valid": true
+            }
+        ]
+    },
+    {
+        "description": "validation of IP addresses",
+        "schema": {"format": "ipv4"},
+        "tests": [
+            {
+                "description": "ignores integers",
+                "data": 12,
+                "valid": true
+            },
+            {
+                "description": "ignores floats",
+                "data": 13.7,
+                "valid": true
+            },
+            {
+                "description": "ignores objects",
+                "data": {},
+                "valid": true
+            },
+            {
+                "description": "ignores arrays",
+                "data": [],
+                "valid": true
+            },
+            {
+                "description": "ignores booleans",
+                "data": false,
+                "valid": true
+            },
+            {
+                "description": "ignores null",
+                "data": null,
+                "valid": true
+            }
+        ]
+    },
+    {
+        "description": "validation of IPv6 addresses",
+        "schema": {"format": "ipv6"},
+        "tests": [
+            {
+                "description": "ignores integers",
+                "data": 12,
+                "valid": true
+            },
+            {
+                "description": "ignores floats",
+                "data": 13.7,
+                "valid": true
+            },
+            {
+                "description": "ignores objects",
+                "data": {},
+                "valid": true
+            },
+            {
+                "description": "ignores arrays",
+                "data": [],
+                "valid": true
+            },
+            {
+                "description": "ignores booleans",
+                "data": false,
+                "valid": true
+            },
+            {
+                "description": "ignores null",
+                "data": null,
+                "valid": true
+            }
+        ]
+    },
+    {
+        "description": "validation of IDN hostnames",
+        "schema": {"format": "idn-hostname"},
+        "tests": [
+            {
+                "description": "ignores integers",
+                "data": 12,
+                "valid": true
+            },
+            {
+                "description": "ignores floats",
+                "data": 13.7,
+                "valid": true
+            },
+            {
+                "description": "ignores objects",
+                "data": {},
+                "valid": true
+            },
+            {
+                "description": "ignores arrays",
+                "data": [],
+                "valid": true
+            },
+            {
+                "description": "ignores booleans",
+                "data": false,
+                "valid": true
+            },
+            {
+                "description": "ignores null",
+                "data": null,
+                "valid": true
+            }
+        ]
+    },
+    {
+        "description": "validation of hostnames",
+        "schema": {"format": "hostname"},
+        "tests": [
+            {
+                "description": "ignores integers",
+                "data": 12,
+                "valid": true
+            },
+            {
+                "description": "ignores floats",
+                "data": 13.7,
+                "valid": true
+            },
+            {
+                "description": "ignores objects",
+                "data": {},
+                "valid": true
+            },
+            {
+                "description": "ignores arrays",
+                "data": [],
+                "valid": true
+            },
+            {
+                "description": "ignores booleans",
+                "data": false,
+                "valid": true
+            },
+            {
+                "description": "ignores null",
+                "data": null,
+                "valid": true
+            }
+        ]
+    },
+    {
+        "description": "validation of date strings",
+        "schema": {"format": "date"},
+        "tests": [
+            {
+                "description": "ignores integers",
+                "data": 12,
+                "valid": true
+            },
+            {
+                "description": "ignores floats",
+                "data": 13.7,
+                "valid": true
+            },
+            {
+                "description": "ignores objects",
+                "data": {},
+                "valid": true
+            },
+            {
+                "description": "ignores arrays",
+                "data": [],
+                "valid": true
+            },
+            {
+                "description": "ignores booleans",
+                "data": false,
+                "valid": true
+            },
+            {
+                "description": "ignores null",
+                "data": null,
+                "valid": true
+            }
+        ]
+    },
+    {
+        "description": "validation of date-time strings",
+        "schema": {"format": "date-time"},
+        "tests": [
+            {
+                "description": "ignores integers",
+                "data": 12,
+                "valid": true
+            },
+            {
+                "description": "ignores floats",
+                "data": 13.7,
+                "valid": true
+            },
+            {
+                "description": "ignores objects",
+                "data": {},
+                "valid": true
+            },
+            {
+                "description": "ignores arrays",
+                "data": [],
+                "valid": true
+            },
+            {
+                "description": "ignores booleans",
+                "data": false,
+                "valid": true
+            },
+            {
+                "description": "ignores null",
+                "data": null,
+                "valid": true
+            }
+        ]
+    },
+    {
+        "description": "validation of time strings",
+        "schema": {"format": "time"},
+        "tests": [
+            {
+                "description": "ignores integers",
+                "data": 12,
+                "valid": true
+            },
+            {
+                "description": "ignores floats",
+                "data": 13.7,
+                "valid": true
+            },
+            {
+                "description": "ignores objects",
+                "data": {},
+                "valid": true
+            },
+            {
+                "description": "ignores arrays",
+                "data": [],
+                "valid": true
+            },
+            {
+                "description": "ignores booleans",
+                "data": false,
+                "valid": true
+            },
+            {
+                "description": "ignores null",
+                "data": null,
+                "valid": true
+            }
+        ]
+    },
+    {
+        "description": "validation of JSON pointers",
+        "schema": {"format": "json-pointer"},
+        "tests": [
+            {
+                "description": "ignores integers",
+                "data": 12,
+                "valid": true
+            },
+            {
+                "description": "ignores floats",
+                "data": 13.7,
+                "valid": true
+            },
+            {
+                "description": "ignores objects",
+                "data": {},
+                "valid": true
+            },
+            {
+                "description": "ignores arrays",
+                "data": [],
+                "valid": true
+            },
+            {
+                "description": "ignores booleans",
+                "data": false,
+                "valid": true
+            },
+            {
+                "description": "ignores null",
+                "data": null,
+                "valid": true
+            }
+        ]
+    },
+    {
+        "description": "validation of relative JSON pointers",
+        "schema": {"format": "relative-json-pointer"},
+        "tests": [
+            {
+                "description": "ignores integers",
+                "data": 12,
+                "valid": true
+            },
+            {
+                "description": "ignores floats",
+                "data": 13.7,
+                "valid": true
+            },
+            {
+                "description": "ignores objects",
+                "data": {},
+                "valid": true
+            },
+            {
+                "description": "ignores arrays",
+                "data": [],
+                "valid": true
+            },
+            {
+                "description": "ignores booleans",
+                "data": false,
+                "valid": true
+            },
+            {
+                "description": "ignores null",
+                "data": null,
+                "valid": true
+            }
+        ]
+    },
+    {
+        "description": "validation of IRIs",
+        "schema": {"format": "iri"},
+        "tests": [
+            {
+                "description": "ignores integers",
+                "data": 12,
+                "valid": true
+            },
+            {
+                "description": "ignores floats",
+                "data": 13.7,
+                "valid": true
+            },
+            {
+                "description": "ignores objects",
+                "data": {},
+                "valid": true
+            },
+            {
+                "description": "ignores arrays",
+                "data": [],
+                "valid": true
+            },
+            {
+                "description": "ignores booleans",
+                "data": false,
+                "valid": true
+            },
+            {
+                "description": "ignores null",
+                "data": null,
+                "valid": true
+            }
+        ]
+    },
+    {
+        "description": "validation of IRI references",
+        "schema": {"format": "iri-reference"},
+        "tests": [
+            {
+                "description": "ignores integers",
+                "data": 12,
+                "valid": true
+            },
+            {
+                "description": "ignores floats",
+                "data": 13.7,
+                "valid": true
+            },
+            {
+                "description": "ignores objects",
+                "data": {},
+                "valid": true
+            },
+            {
+                "description": "ignores arrays",
+                "data": [],
+                "valid": true
+            },
+            {
+                "description": "ignores booleans",
+                "data": false,
+                "valid": true
+            },
+            {
+                "description": "ignores null",
+                "data": null,
+                "valid": true
+            }
+        ]
+    },
+    {
+        "description": "validation of URIs",
+        "schema": {"format": "uri"},
+        "tests": [
+            {
+                "description": "ignores integers",
+                "data": 12,
+                "valid": true
+            },
+            {
+                "description": "ignores floats",
+                "data": 13.7,
+                "valid": true
+            },
+            {
+                "description": "ignores objects",
+                "data": {},
+                "valid": true
+            },
+            {
+                "description": "ignores arrays",
+                "data": [],
+                "valid": true
+            },
+            {
+                "description": "ignores booleans",
+                "data": false,
+                "valid": true
+            },
+            {
+                "description": "ignores null",
+                "data": null,
+                "valid": true
+            }
+        ]
+    },
+    {
+        "description": "validation of URI references",
+        "schema": {"format": "uri-reference"},
+        "tests": [
+            {
+                "description": "ignores integers",
+                "data": 12,
+                "valid": true
+            },
+            {
+                "description": "ignores floats",
+                "data": 13.7,
+                "valid": true
+            },
+            {
+                "description": "ignores objects",
+                "data": {},
+                "valid": true
+            },
+            {
+                "description": "ignores arrays",
+                "data": [],
+                "valid": true
+            },
+            {
+                "description": "ignores booleans",
+                "data": false,
+                "valid": true
+            },
+            {
+                "description": "ignores null",
+                "data": null,
+                "valid": true
+            }
+        ]
+    },
+    {
+        "description": "validation of URI templates",
+        "schema": {"format": "uri-template"},
+        "tests": [
+            {
+                "description": "ignores integers",
+                "data": 12,
+                "valid": true
+            },
+            {
+                "description": "ignores floats",
+                "data": 13.7,
+                "valid": true
+            },
+            {
+                "description": "ignores objects",
+                "data": {},
+                "valid": true
+            },
+            {
+                "description": "ignores arrays",
+                "data": [],
+                "valid": true
+            },
+            {
+                "description": "ignores booleans",
+                "data": false,
+                "valid": true
+            },
+            {
+                "description": "ignores null",
+                "data": null,
+                "valid": true
+            }
+        ]
+    }
+]
diff -pruN 3.0.2-4/json/tests/latest/if-then-else.json 3.2.0-5/json/tests/latest/if-then-else.json
--- 3.0.2-4/json/tests/latest/if-then-else.json	1970-01-01 00:00:00.000000000 +0000
+++ 3.2.0-5/json/tests/latest/if-then-else.json	2019-11-18 12:36:14.000000000 +0000
@@ -0,0 +1,188 @@
+[
+    {
+        "description": "ignore if without then or else",
+        "schema": {
+            "if": {
+                "const": 0
+            }
+        },
+        "tests": [
+            {
+                "description": "valid when valid against lone if",
+                "data": 0,
+                "valid": true
+            },
+            {
+                "description": "valid when invalid against lone if",
+                "data": "hello",
+                "valid": true
+            }
+        ]
+    },
+    {
+        "description": "ignore then without if",
+        "schema": {
+            "then": {
+                "const": 0
+            }
+        },
+        "tests": [
+            {
+                "description": "valid when valid against lone then",
+                "data": 0,
+                "valid": true
+            },
+            {
+                "description": "valid when invalid against lone then",
+                "data": "hello",
+                "valid": true
+            }
+        ]
+    },
+    {
+        "description": "ignore else without if",
+        "schema": {
+            "else": {
+                "const": 0
+            }
+        },
+        "tests": [
+            {
+                "description": "valid when valid against lone else",
+                "data": 0,
+                "valid": true
+            },
+            {
+                "description": "valid when invalid against lone else",
+                "data": "hello",
+                "valid": true
+            }
+        ]
+    },
+    {
+        "description": "if and then without else",
+        "schema": {
+            "if": {
+                "exclusiveMaximum": 0
+            },
+            "then": {
+                "minimum": -10
+            }
+        },
+        "tests": [
+            {
+                "description": "valid through then",
+                "data": -1,
+                "valid": true
+            },
+            {
+                "description": "invalid through then",
+                "data": -100,
+                "valid": false
+            },
+            {
+                "description": "valid when if test fails",
+                "data": 3,
+                "valid": true
+            }
+        ]
+    },
+    {
+        "description": "if and else without then",
+        "schema": {
+            "if": {
+                "exclusiveMaximum": 0
+            },
+            "else": {
+                "multipleOf": 2
+            }
+        },
+        "tests": [
+            {
+                "description": "valid when if test passes",
+                "data": -1,
+                "valid": true
+            },
+            {
+                "description": "valid through else",
+                "data": 4,
+                "valid": true
+            },
+            {
+                "description": "invalid through else",
+                "data": 3,
+                "valid": false
+            }
+        ]
+    },
+    {
+        "description": "validate against correct branch, then vs else",
+        "schema": {
+            "if": {
+                "exclusiveMaximum": 0
+            },
+            "then": {
+                "minimum": -10
+            },
+            "else": {
+                "multipleOf": 2
+            }
+        },
+        "tests": [
+            {
+                "description": "valid through then",
+                "data": -1,
+                "valid": true
+            },
+            {
+                "description": "invalid through then",
+                "data": -100,
+                "valid": false
+            },
+            {
+                "description": "valid through else",
+                "data": 4,
+                "valid": true
+            },
+            {
+                "description": "invalid through else",
+                "data": 3,
+                "valid": false
+            }
+        ]
+    },
+    {
+        "description": "non-interference across combined schemas",
+        "schema": {
+            "allOf": [
+                {
+                    "if": {
+                        "exclusiveMaximum": 0
+                    }
+                },
+                {
+                    "then": {
+                        "minimum": -10
+                    }
+                },
+                {
+                    "else": {
+                        "multipleOf": 2
+                    }
+                }
+            ]
+        },
+        "tests": [
+            {
+                "description": "valid, but would have been invalid through then",
+                "data": -100,
+                "valid": true
+            },
+            {
+                "description": "valid, but would have been invalid through else",
+                "data": 3,
+                "valid": true
+            }
+        ]
+    }
+]
diff -pruN 3.0.2-4/json/tests/latest/items.json 3.2.0-5/json/tests/latest/items.json
--- 3.0.2-4/json/tests/latest/items.json	1970-01-01 00:00:00.000000000 +0000
+++ 3.2.0-5/json/tests/latest/items.json	2019-11-18 12:36:14.000000000 +0000
@@ -0,0 +1,250 @@
+[
+    {
+        "description": "a schema given for items",
+        "schema": {
+            "items": {"type": "integer"}
+        },
+        "tests": [
+            {
+                "description": "valid items",
+                "data": [ 1, 2, 3 ],
+                "valid": true
+            },
+            {
+                "description": "wrong type of items",
+                "data": [1, "x"],
+                "valid": false
+            },
+            {
+                "description": "ignores non-arrays",
+                "data": {"foo" : "bar"},
+                "valid": true
+            },
+            {
+                "description": "JavaScript pseudo-array is valid",
+                "data": {
+                    "0": "invalid",
+                    "length": 1
+                },
+                "valid": true
+            }
+        ]
+    },
+    {
+        "description": "an array of schemas for items",
+        "schema": {
+            "items": [
+                {"type": "integer"},
+                {"type": "string"}
+            ]
+        },
+        "tests": [
+            {
+                "description": "correct types",
+                "data": [ 1, "foo" ],
+                "valid": true
+            },
+            {
+                "description": "wrong types",
+                "data": [ "foo", 1 ],
+                "valid": false
+            },
+            {
+                "description": "incomplete array of items",
+                "data": [ 1 ],
+                "valid": true
+            },
+            {
+                "description": "array with additional items",
+                "data": [ 1, "foo", true ],
+                "valid": true
+            },
+            {
+                "description": "empty array",
+                "data": [ ],
+                "valid": true
+            },
+            {
+                "description": "JavaScript pseudo-array is valid",
+                "data": {
+                    "0": "invalid",
+                    "1": "valid",
+                    "length": 2
+                },
+                "valid": true
+            }
+        ]
+    },
+    {
+        "description": "items with boolean schema (true)",
+        "schema": {"items": true},
+        "tests": [
+            {
+                "description": "any array is valid",
+                "data": [ 1, "foo", true ],
+                "valid": true
+            },
+            {
+                "description": "empty array is valid",
+                "data": [],
+                "valid": true
+            }
+        ]
+    },
+    {
+        "description": "items with boolean schema (false)",
+        "schema": {"items": false},
+        "tests": [
+            {
+                "description": "any non-empty array is invalid",
+                "data": [ 1, "foo", true ],
+                "valid": false
+            },
+            {
+                "description": "empty array is valid",
+                "data": [],
+                "valid": true
+            }
+        ]
+    },
+    {
+        "description": "items with boolean schemas",
+        "schema": {
+            "items": [true, false]
+        },
+        "tests": [
+            {
+                "description": "array with one item is valid",
+                "data": [ 1 ],
+                "valid": true
+            },
+            {
+                "description": "array with two items is invalid",
+                "data": [ 1, "foo" ],
+                "valid": false
+            },
+            {
+                "description": "empty array is valid",
+                "data": [],
+                "valid": true
+            }
+        ]
+    },
+    {
+        "description": "items and subitems",
+        "schema": {
+            "$defs": {
+                "item": {
+                    "type": "array",
+                    "additionalItems": false,
+                    "items": [
+                        { "$ref": "#/$defs/sub-item" },
+                        { "$ref": "#/$defs/sub-item" }
+                    ]
+                },
+                "sub-item": {
+                    "type": "object",
+                    "required": ["foo"]
+                }
+            },
+            "type": "array",
+            "additionalItems": false,
+            "items": [
+                { "$ref": "#/$defs/item" },
+                { "$ref": "#/$defs/item" },
+                { "$ref": "#/$defs/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 -pruN 3.0.2-4/json/tests/latest/maximum.json 3.2.0-5/json/tests/latest/maximum.json
--- 3.0.2-4/json/tests/latest/maximum.json	1970-01-01 00:00:00.000000000 +0000
+++ 3.2.0-5/json/tests/latest/maximum.json	2019-11-18 12:36:14.000000000 +0000
@@ -0,0 +1,28 @@
+[
+    {
+        "description": "maximum validation",
+        "schema": {"maximum": 3.0},
+        "tests": [
+            {
+                "description": "below the maximum is valid",
+                "data": 2.6,
+                "valid": true
+            },
+            {
+                "description": "boundary point is valid",
+                "data": 3.0,
+                "valid": true
+            },
+            {
+                "description": "above the maximum is invalid",
+                "data": 3.5,
+                "valid": false
+            },
+            {
+                "description": "ignores non-numbers",
+                "data": "x",
+                "valid": true
+            }
+        ]
+    }
+]
diff -pruN 3.0.2-4/json/tests/latest/maxItems.json 3.2.0-5/json/tests/latest/maxItems.json
--- 3.0.2-4/json/tests/latest/maxItems.json	1970-01-01 00:00:00.000000000 +0000
+++ 3.2.0-5/json/tests/latest/maxItems.json	2019-11-18 12:36:14.000000000 +0000
@@ -0,0 +1,28 @@
+[
+    {
+        "description": "maxItems validation",
+        "schema": {"maxItems": 2},
+        "tests": [
+            {
+                "description": "shorter is valid",
+                "data": [1],
+                "valid": true
+            },
+            {
+                "description": "exact length is valid",
+                "data": [1, 2],
+                "valid": true
+            },
+            {
+                "description": "too long is invalid",
+                "data": [1, 2, 3],
+                "valid": false
+            },
+            {
+                "description": "ignores non-arrays",
+                "data": "foobar",
+                "valid": true
+            }
+        ]
+    }
+]
diff -pruN 3.0.2-4/json/tests/latest/maxLength.json 3.2.0-5/json/tests/latest/maxLength.json
--- 3.0.2-4/json/tests/latest/maxLength.json	1970-01-01 00:00:00.000000000 +0000
+++ 3.2.0-5/json/tests/latest/maxLength.json	2019-11-18 12:36:14.000000000 +0000
@@ -0,0 +1,33 @@
+[
+    {
+        "description": "maxLength validation",
+        "schema": {"maxLength": 2},
+        "tests": [
+            {
+                "description": "shorter is valid",
+                "data": "f",
+                "valid": true
+            },
+            {
+                "description": "exact length is valid",
+                "data": "fo",
+                "valid": true
+            },
+            {
+                "description": "too long is invalid",
+                "data": "foo",
+                "valid": false
+            },
+            {
+                "description": "ignores non-strings",
+                "data": 100,
+                "valid": true
+            },
+            {
+                "description": "two supplementary Unicode code points is long enough",
+                "data": "\uD83D\uDCA9\uD83D\uDCA9",
+                "valid": true
+            }
+        ]
+    }
+]
diff -pruN 3.0.2-4/json/tests/latest/maxProperties.json 3.2.0-5/json/tests/latest/maxProperties.json
--- 3.0.2-4/json/tests/latest/maxProperties.json	1970-01-01 00:00:00.000000000 +0000
+++ 3.2.0-5/json/tests/latest/maxProperties.json	2019-11-18 12:36:14.000000000 +0000
@@ -0,0 +1,38 @@
+[
+    {
+        "description": "maxProperties validation",
+        "schema": {"maxProperties": 2},
+        "tests": [
+            {
+                "description": "shorter is valid",
+                "data": {"foo": 1},
+                "valid": true
+            },
+            {
+                "description": "exact length is valid",
+                "data": {"foo": 1, "bar": 2},
+                "valid": true
+            },
+            {
+                "description": "too long is invalid",
+                "data": {"foo": 1, "bar": 2, "baz": 3},
+                "valid": false
+            },
+            {
+                "description": "ignores arrays",
+                "data": [1, 2, 3],
+                "valid": true
+            },
+            {
+                "description": "ignores strings",
+                "data": "foobar",
+                "valid": true
+            },
+            {
+                "description": "ignores other non-objects",
+                "data": 12,
+                "valid": true
+            }
+        ]
+    }
+]
diff -pruN 3.0.2-4/json/tests/latest/minimum.json 3.2.0-5/json/tests/latest/minimum.json
--- 3.0.2-4/json/tests/latest/minimum.json	1970-01-01 00:00:00.000000000 +0000
+++ 3.2.0-5/json/tests/latest/minimum.json	2019-11-18 12:36:14.000000000 +0000
@@ -0,0 +1,59 @@
+[
+    {
+        "description": "minimum validation",
+        "schema": {"minimum": 1.1},
+        "tests": [
+            {
+                "description": "above the minimum is valid",
+                "data": 2.6,
+                "valid": true
+            },
+            {
+                "description": "boundary point is valid",
+                "data": 1.1,
+                "valid": true
+            },
+            {
+                "description": "below the minimum is invalid",
+                "data": 0.6,
+                "valid": false
+            },
+            {
+                "description": "ignores non-numbers",
+                "data": "x",
+                "valid": true
+            }
+        ]
+    },
+    {
+        "description": "minimum validation with signed integer",
+        "schema": {"minimum": -2},
+        "tests": [
+            {
+                "description": "negative above the minimum is valid",
+                "data": -1,
+                "valid": true
+            },
+            {
+                "description": "positive above the minimum is valid",
+                "data": 0,
+                "valid": true
+            },
+            {
+                "description": "boundary point is valid",
+                "data": -2,
+                "valid": true
+            },
+            {
+                "description": "below the minimum is invalid",
+                "data": -3,
+                "valid": false
+            },
+            {
+                "description": "ignores non-numbers",
+                "data": "x",
+                "valid": true
+            }
+        ]
+    }
+]
diff -pruN 3.0.2-4/json/tests/latest/minItems.json 3.2.0-5/json/tests/latest/minItems.json
--- 3.0.2-4/json/tests/latest/minItems.json	1970-01-01 00:00:00.000000000 +0000
+++ 3.2.0-5/json/tests/latest/minItems.json	2019-11-18 12:36:14.000000000 +0000
@@ -0,0 +1,28 @@
+[
+    {
+        "description": "minItems validation",
+        "schema": {"minItems": 1},
+        "tests": [
+            {
+                "description": "longer is valid",
+                "data": [1, 2],
+                "valid": true
+            },
+            {
+                "description": "exact length is valid",
+                "data": [1],
+                "valid": true
+            },
+            {
+                "description": "too short is invalid",
+                "data": [],
+                "valid": false
+            },
+            {
+                "description": "ignores non-arrays",
+                "data": "",
+                "valid": true
+            }
+        ]
+    }
+]
diff -pruN 3.0.2-4/json/tests/latest/minLength.json 3.2.0-5/json/tests/latest/minLength.json
--- 3.0.2-4/json/tests/latest/minLength.json	1970-01-01 00:00:00.000000000 +0000
+++ 3.2.0-5/json/tests/latest/minLength.json	2019-11-18 12:36:14.000000000 +0000
@@ -0,0 +1,33 @@
+[
+    {
+        "description": "minLength validation",
+        "schema": {"minLength": 2},
+        "tests": [
+            {
+                "description": "longer is valid",
+                "data": "foo",
+                "valid": true
+            },
+            {
+                "description": "exact length is valid",
+                "data": "fo",
+                "valid": true
+            },
+            {
+                "description": "too short is invalid",
+                "data": "f",
+                "valid": false
+            },
+            {
+                "description": "ignores non-strings",
+                "data": 1,
+                "valid": true
+            },
+            {
+                "description": "one supplementary Unicode code point is not long enough",
+                "data": "\uD83D\uDCA9",
+                "valid": false
+            }
+        ]
+    }
+]
diff -pruN 3.0.2-4/json/tests/latest/minProperties.json 3.2.0-5/json/tests/latest/minProperties.json
--- 3.0.2-4/json/tests/latest/minProperties.json	1970-01-01 00:00:00.000000000 +0000
+++ 3.2.0-5/json/tests/latest/minProperties.json	2019-11-18 12:36:14.000000000 +0000
@@ -0,0 +1,38 @@
+[
+    {
+        "description": "minProperties validation",
+        "schema": {"minProperties": 1},
+        "tests": [
+            {
+                "description": "longer is valid",
+                "data": {"foo": 1, "bar": 2},
+                "valid": true
+            },
+            {
+                "description": "exact length is valid",
+                "data": {"foo": 1},
+                "valid": true
+            },
+            {
+                "description": "too short is invalid",
+                "data": {},
+                "valid": false
+            },
+            {
+                "description": "ignores arrays",
+                "data": [],
+                "valid": true
+            },
+            {
+                "description": "ignores strings",
+                "data": "",
+                "valid": true
+            },
+            {
+                "description": "ignores other non-objects",
+                "data": 12,
+                "valid": true
+            }
+        ]
+    }
+]
diff -pruN 3.0.2-4/json/tests/latest/multipleOf.json 3.2.0-5/json/tests/latest/multipleOf.json
--- 3.0.2-4/json/tests/latest/multipleOf.json	1970-01-01 00:00:00.000000000 +0000
+++ 3.2.0-5/json/tests/latest/multipleOf.json	2019-11-18 12:36:14.000000000 +0000
@@ -0,0 +1,60 @@
+[
+    {
+        "description": "by int",
+        "schema": {"multipleOf": 2},
+        "tests": [
+            {
+                "description": "int by int",
+                "data": 10,
+                "valid": true
+            },
+            {
+                "description": "int by int fail",
+                "data": 7,
+                "valid": false
+            },
+            {
+                "description": "ignores non-numbers",
+                "data": "foo",
+                "valid": true
+            }
+        ]
+    },
+    {
+        "description": "by number",
+        "schema": {"multipleOf": 1.5},
+        "tests": [
+            {
+                "description": "zero is multiple of anything",
+                "data": 0,
+                "valid": true
+            },
+            {
+                "description": "4.5 is multiple of 1.5",
+                "data": 4.5,
+                "valid": true
+            },
+            {
+                "description": "35 is not multiple of 1.5",
+                "data": 35,
+                "valid": false
+            }
+        ]
+    },
+    {
+        "description": "by small number",
+        "schema": {"multipleOf": 0.0001},
+        "tests": [
+            {
+                "description": "0.0075 is multiple of 0.0001",
+                "data": 0.0075,
+                "valid": true
+            },
+            {
+                "description": "0.00751 is not multiple of 0.0001",
+                "data": 0.00751,
+                "valid": false
+            }
+        ]
+    }
+]
diff -pruN 3.0.2-4/json/tests/latest/not.json 3.2.0-5/json/tests/latest/not.json
--- 3.0.2-4/json/tests/latest/not.json	1970-01-01 00:00:00.000000000 +0000
+++ 3.2.0-5/json/tests/latest/not.json	2019-11-18 12:36:14.000000000 +0000
@@ -0,0 +1,117 @@
+[
+    {
+        "description": "not",
+        "schema": {
+            "not": {"type": "integer"}
+        },
+        "tests": [
+            {
+                "description": "allowed",
+                "data": "foo",
+                "valid": true
+            },
+            {
+                "description": "disallowed",
+                "data": 1,
+                "valid": false
+            }
+        ]
+    },
+    {
+        "description": "not multiple types",
+        "schema": {
+            "not": {"type": ["integer", "boolean"]}
+        },
+        "tests": [
+            {
+                "description": "valid",
+                "data": "foo",
+                "valid": true
+            },
+            {
+                "description": "mismatch",
+                "data": 1,
+                "valid": false
+            },
+            {
+                "description": "other mismatch",
+                "data": true,
+                "valid": false
+            }
+        ]
+    },
+    {
+        "description": "not more complex schema",
+        "schema": {
+            "not": {
+                "type": "object",
+                "properties": {
+                    "foo": {
+                        "type": "string"
+                    }
+                }
+             }
+        },
+        "tests": [
+            {
+                "description": "match",
+                "data": 1,
+                "valid": true
+            },
+            {
+                "description": "other match",
+                "data": {"foo": 1},
+                "valid": true
+            },
+            {
+                "description": "mismatch",
+                "data": {"foo": "bar"},
+                "valid": false
+            }
+        ]
+    },
+    {
+        "description": "forbidden property",
+        "schema": {
+            "properties": {
+                "foo": { 
+                    "not": {}
+                }
+            }
+        },
+        "tests": [
+            {
+                "description": "property present",
+                "data": {"foo": 1, "bar": 2},
+                "valid": false
+            },
+            {
+                "description": "property absent",
+                "data": {"bar": 1, "baz": 2},
+                "valid": true
+            }
+        ]
+    },
+    {
+        "description": "not with boolean schema true",
+        "schema": {"not": true},
+        "tests": [
+            {
+                "description": "any value is invalid",
+                "data": "foo",
+                "valid": false
+            }
+        ]
+    },
+    {
+        "description": "not with boolean schema false",
+        "schema": {"not": false},
+        "tests": [
+            {
+                "description": "any value is valid",
+                "data": "foo",
+                "valid": true
+            }
+        ]
+    }
+]
diff -pruN 3.0.2-4/json/tests/latest/oneOf.json 3.2.0-5/json/tests/latest/oneOf.json
--- 3.0.2-4/json/tests/latest/oneOf.json	1970-01-01 00:00:00.000000000 +0000
+++ 3.2.0-5/json/tests/latest/oneOf.json	2019-11-18 12:36:14.000000000 +0000
@@ -0,0 +1,206 @@
+[
+    {
+        "description": "oneOf",
+        "schema": {
+            "oneOf": [
+                {
+                    "type": "integer"
+                },
+                {
+                    "minimum": 2
+                }
+            ]
+        },
+        "tests": [
+            {
+                "description": "first oneOf valid",
+                "data": 1,
+                "valid": true
+            },
+            {
+                "description": "second oneOf valid",
+                "data": 2.5,
+                "valid": true
+            },
+            {
+                "description": "both oneOf valid",
+                "data": 3,
+                "valid": false
+            },
+            {
+                "description": "neither oneOf valid",
+                "data": 1.5,
+                "valid": false
+            }
+        ]
+    },
+    {
+        "description": "oneOf with base schema",
+        "schema": {
+            "type": "string",
+            "oneOf" : [
+                {
+                    "minLength": 2
+                },
+                {
+                    "maxLength": 4
+                }
+            ]
+        },
+        "tests": [
+            {
+                "description": "mismatch base schema",
+                "data": 3,
+                "valid": false
+            },
+            {
+                "description": "one oneOf valid",
+                "data": "foobar",
+                "valid": true
+            },
+            {
+                "description": "both oneOf valid",
+                "data": "foo",
+                "valid": false
+            }
+        ]
+    },
+    {
+        "description": "oneOf with boolean schemas, all true",
+        "schema": {"oneOf": [true, true, true]},
+        "tests": [
+            {
+                "description": "any value is invalid",
+                "data": "foo",
+                "valid": false
+            }
+        ]
+    },
+    {
+        "description": "oneOf with boolean schemas, one true",
+        "schema": {"oneOf": [true, false, false]},
+        "tests": [
+            {
+                "description": "any value is valid",
+                "data": "foo",
+                "valid": true
+            }
+        ]
+    },
+    {
+        "description": "oneOf with boolean schemas, more than one true",
+        "schema": {"oneOf": [true, true, false]},
+        "tests": [
+            {
+                "description": "any value is invalid",
+                "data": "foo",
+                "valid": false
+            }
+        ]
+    },
+    {
+        "description": "oneOf with boolean schemas, all false",
+        "schema": {"oneOf": [false, false, false]},
+        "tests": [
+            {
+                "description": "any value is invalid",
+                "data": "foo",
+                "valid": false
+            }
+        ]
+    },
+    {
+        "description": "oneOf complex types",
+        "schema": {
+            "oneOf": [
+                {
+                    "properties": {
+                        "bar": {"type": "integer"}
+                    },
+                    "required": ["bar"]
+                },
+                {
+                    "properties": {
+                        "foo": {"type": "string"}
+                    },
+                    "required": ["foo"]
+                }
+            ]
+        },
+        "tests": [
+            {
+                "description": "first oneOf valid (complex)",
+                "data": {"bar": 2},
+                "valid": true
+            },
+            {
+                "description": "second oneOf valid (complex)",
+                "data": {"foo": "baz"},
+                "valid": true
+            },
+            {
+                "description": "both oneOf valid (complex)",
+                "data": {"foo": "baz", "bar": 2},
+                "valid": false
+            },
+            {
+                "description": "neither oneOf valid (complex)",
+                "data": {"foo": 2, "bar": "quux"},
+                "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 -pruN 3.0.2-4/json/tests/latest/optional/bignum.json 3.2.0-5/json/tests/latest/optional/bignum.json
--- 3.0.2-4/json/tests/latest/optional/bignum.json	1970-01-01 00:00:00.000000000 +0000
+++ 3.2.0-5/json/tests/latest/optional/bignum.json	2019-11-18 12:36:14.000000000 +0000
@@ -0,0 +1,105 @@
+[
+    {
+        "description": "integer",
+        "schema": {"type": "integer"},
+        "tests": [
+            {
+                "description": "a bignum is an integer",
+                "data": 12345678910111213141516171819202122232425262728293031,
+                "valid": true
+            }
+        ]
+    },
+    {
+        "description": "number",
+        "schema": {"type": "number"},
+        "tests": [
+            {
+                "description": "a bignum is a number",
+                "data": 98249283749234923498293171823948729348710298301928331,
+                "valid": true
+            }
+        ]
+    },
+    {
+        "description": "integer",
+        "schema": {"type": "integer"},
+        "tests": [
+            {
+                "description": "a negative bignum is an integer",
+                "data": -12345678910111213141516171819202122232425262728293031,
+                "valid": true
+            }
+        ]
+    },
+    {
+        "description": "number",
+        "schema": {"type": "number"},
+        "tests": [
+            {
+                "description": "a negative bignum is a number",
+                "data": -98249283749234923498293171823948729348710298301928331,
+                "valid": true
+            }
+        ]
+    },
+    {
+        "description": "string",
+        "schema": {"type": "string"},
+        "tests": [
+            {
+                "description": "a bignum is not a string",
+                "data": 98249283749234923498293171823948729348710298301928331,
+                "valid": false
+            }
+        ]
+    },
+    {
+        "description": "integer comparison",
+        "schema": {"maximum": 18446744073709551615},
+        "tests": [
+            {
+                "description": "comparison works for high numbers",
+                "data": 18446744073709551600,
+                "valid": true
+            }
+        ]
+    },
+    {
+        "description": "float comparison with high precision",
+        "schema": {
+            "exclusiveMaximum": 972783798187987123879878123.18878137
+        },
+        "tests": [
+            {
+                "description": "comparison works for high numbers",
+                "data": 972783798187987123879878123.188781371,
+                "valid": false
+            }
+        ]
+    },
+    {
+        "description": "integer comparison",
+        "schema": {"minimum": -18446744073709551615},
+        "tests": [
+            {
+                "description": "comparison works for very negative numbers",
+                "data": -18446744073709551600,
+                "valid": true
+            }
+        ]
+    },
+    {
+        "description": "float comparison with high precision on negative numbers",
+        "schema": {
+            "exclusiveMinimum": -972783798187987123879878123.18878137
+        },
+        "tests": [
+            {
+                "description": "comparison works for very negative numbers",
+                "data": -972783798187987123879878123.188781371,
+                "valid": false
+            }
+        ]
+    }
+]
diff -pruN 3.0.2-4/json/tests/latest/optional/content.json 3.2.0-5/json/tests/latest/optional/content.json
--- 3.0.2-4/json/tests/latest/optional/content.json	1970-01-01 00:00:00.000000000 +0000
+++ 3.2.0-5/json/tests/latest/optional/content.json	2019-11-18 12:36:14.000000000 +0000
@@ -0,0 +1,77 @@
+[
+    {
+        "description": "validation of string-encoded content based on media type",
+        "schema": {
+            "contentMediaType": "application/json"
+        },
+        "tests": [
+            {
+                "description": "a valid JSON document",
+                "data": "{\"foo\": \"bar\"}",
+                "valid": true
+            },
+            {
+                "description": "an invalid JSON document",
+                "data": "{:}",
+                "valid": false
+            },
+            {
+                "description": "ignores non-strings",
+                "data": 100,
+                "valid": true
+            }
+        ]
+    },
+    {
+        "description": "validation of binary string-encoding",
+        "schema": {
+            "contentEncoding": "base64"
+        },
+        "tests": [
+            {
+                "description": "a valid base64 string",
+                "data": "eyJmb28iOiAiYmFyIn0K",
+                "valid": true
+            },
+            {
+                "description": "an invalid base64 string (% is not a valid character)",
+                "data": "eyJmb28iOi%iYmFyIn0K",
+                "valid": false
+            },
+            {
+                "description": "ignores non-strings",
+                "data": 100,
+                "valid": true
+            }
+        ]
+    },
+    {
+        "description": "validation of binary-encoded media type documents",
+        "schema": {
+            "contentMediaType": "application/json",
+            "contentEncoding": "base64"
+        },
+        "tests": [
+            {
+                "description": "a valid base64-encoded JSON document",
+                "data": "eyJmb28iOiAiYmFyIn0K",
+                "valid": true
+            },
+            {
+                "description": "a validly-encoded invalid JSON document",
+                "data": "ezp9Cg==",
+                "valid": false
+            },
+            {
+                "description": "an invalid base64 string that is valid JSON",
+                "data": "{}",
+                "valid": false
+            },
+            {
+                "description": "ignores non-strings",
+                "data": 100,
+                "valid": true
+            }
+        ]
+    }
+]
diff -pruN 3.0.2-4/json/tests/latest/optional/ecmascript-regex.json 3.2.0-5/json/tests/latest/optional/ecmascript-regex.json
--- 3.0.2-4/json/tests/latest/optional/ecmascript-regex.json	1970-01-01 00:00:00.000000000 +0000
+++ 3.2.0-5/json/tests/latest/optional/ecmascript-regex.json	2019-11-18 12:36:14.000000000 +0000
@@ -0,0 +1,213 @@
+[
+    {
+        "description": "ECMA 262 regex non-compliance",
+        "schema": { "format": "regex" },
+        "tests": [
+            {
+                "description": "ECMA 262 has no support for \\Z anchor from .NET",
+                "data": "^\\S(|(.|\\n)*\\S)\\Z",
+                "valid": false
+            }
+        ]
+    },
+    {
+        "description": "ECMA 262 regex $ does not match trailing newline",
+        "schema": {
+            "type": "string",
+            "pattern": "^abc$"
+        },
+        "tests": [
+            {
+                "description": "matches in Python, but should not in jsonschema",
+                "data": "abc\n",
+                "valid": false
+            },
+            {
+                "description": "should match",
+                "data": "abc",
+                "valid": true
+            }
+        ]
+    },
+    {
+        "description": "ECMA 262 regex converts \\a to ascii BEL",
+        "schema": {
+            "type": "string",
+            "pattern": "^\\a$"
+        },
+        "tests": [
+            {
+                "description": "does not match",
+                "data": "\\a",
+                "valid": false
+            },
+            {
+                "description": "matches",
+                "data": "\u0007",
+                "valid": true
+            }
+        ]
+    },
+    {
+        "description": "ECMA 262 regex escapes control codes with \\c and upper letter",
+        "schema": {
+            "type": "string",
+            "pattern": "^\\cC$"
+        },
+        "tests": [
+            {
+                "description": "does not match",
+                "data": "\\cC",
+                "valid": false
+            },
+            {
+                "description": "matches",
+                "data": "\u0003",
+                "valid": true
+            }
+        ]
+    },
+    {
+        "description": "ECMA 262 regex escapes control codes with \\c and lower letter",
+        "schema": {
+            "type": "string",
+            "pattern": "^\\cc$"
+        },
+        "tests": [
+            {
+                "description": "does not match",
+                "data": "\\cc",
+                "valid": false
+            },
+            {
+                "description": "matches",
+                "data": "\u0003",
+                "valid": true
+            }
+        ]
+    },
+    {
+        "description": "ECMA 262 \\d matches ascii digits only",
+        "schema": {
+            "type": "string",
+            "pattern": "^\\d$"
+        },
+        "tests": [
+            {
+                "description": "ASCII zero matches",
+                "data": "0",
+                "valid": true
+            },
+            {
+                "description": "NKO DIGIT ZERO does not match (unlike e.g. Python)",
+                "data": "߀",
+                "valid": false
+            },
+            {
+                "description": "NKO DIGIT ZERO (as \\u escape) does not match",
+                "data": "\u07c0",
+                "valid": false
+            }
+        ]
+    },
+    {
+        "description": "ECMA 262 \\D matches everything but ascii digits",
+        "schema": {
+            "type": "string",
+            "pattern": "^\\D$"
+        },
+        "tests": [
+            {
+                "description": "ASCII zero does not match",
+                "data": "0",
+                "valid": false
+            },
+            {
+                "description": "NKO DIGIT ZERO matches (unlike e.g. Python)",
+                "data": "߀",
+                "valid": true
+            },
+            {
+                "description": "NKO DIGIT ZERO (as \\u escape) matches",
+                "data": "\u07c0",
+                "valid": true
+            }
+        ]
+    },
+    {
+        "description": "ECMA 262 \\w matches ascii letters only",
+        "schema": {
+            "type": "string",
+            "pattern": "^\\w$"
+        },
+        "tests": [
+            {
+                "description": "ASCII 'a' matches",
+                "data": "a",
+                "valid": true
+            },
+            {
+                "description": "latin-1 e-acute does not match (unlike e.g. Python)",
+                "data": "é",
+                "valid": false
+            }
+        ]
+    },
+    {
+        "description": "ECMA 262 \\w matches everything but ascii letters",
+        "schema": {
+            "type": "string",
+            "pattern": "^\\W$"
+        },
+        "tests": [
+            {
+                "description": "ASCII 'a' does not match",
+                "data": "a",
+                "valid": false
+            },
+            {
+                "description": "latin-1 e-acute matches (unlike e.g. Python)",
+                "data": "é",
+                "valid": true
+            }
+        ]
+    },
+    {
+        "description": "ECMA 262 \\s matches ascii whitespace only",
+        "schema": {
+            "type": "string",
+            "pattern": "^\\s$"
+        },
+        "tests": [
+            {
+                "description": "ASCII space matches",
+                "data": " ",
+                "valid": true
+            },
+            {
+                "description": "latin-1 non-breaking-space does not match (unlike e.g. Python)",
+                "data": "\u00a0",
+                "valid": false
+            }
+        ]
+    },
+    {
+        "description": "ECMA 262 \\S matches everything but ascii whitespace",
+        "schema": {
+            "type": "string",
+            "pattern": "^\\S$"
+        },
+        "tests": [
+            {
+                "description": "ASCII space does not match",
+                "data": " ",
+                "valid": false
+            },
+            {
+                "description": "latin-1 non-breaking-space matches (unlike e.g. Python)",
+                "data": "\u00a0",
+                "valid": true
+            }
+        ]
+    }
+]
diff -pruN 3.0.2-4/json/tests/latest/optional/format/date.json 3.2.0-5/json/tests/latest/optional/format/date.json
--- 3.0.2-4/json/tests/latest/optional/format/date.json	1970-01-01 00:00:00.000000000 +0000
+++ 3.2.0-5/json/tests/latest/optional/format/date.json	2019-11-18 12:36:14.000000000 +0000
@@ -0,0 +1,23 @@
+[
+    {
+        "description": "validation of date strings",
+        "schema": {"format": "date"},
+        "tests": [
+            {
+                "description": "a valid date string",
+                "data": "1963-06-19",
+                "valid": true
+            },
+            {
+                "description": "an invalid date-time string",
+                "data": "06/19/1963",
+                "valid": false
+            },
+            {
+                "description": "only RFC3339 not all of ISO 8601 are valid",
+                "data": "2013-350",
+                "valid": false
+            }
+        ]
+    }
+]
diff -pruN 3.0.2-4/json/tests/latest/optional/format/date-time.json 3.2.0-5/json/tests/latest/optional/format/date-time.json
--- 3.0.2-4/json/tests/latest/optional/format/date-time.json	1970-01-01 00:00:00.000000000 +0000
+++ 3.2.0-5/json/tests/latest/optional/format/date-time.json	2019-11-18 12:36:14.000000000 +0000
@@ -0,0 +1,53 @@
+[
+    {
+        "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 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 -pruN 3.0.2-4/json/tests/latest/optional/format/email.json 3.2.0-5/json/tests/latest/optional/format/email.json
--- 3.0.2-4/json/tests/latest/optional/format/email.json	1970-01-01 00:00:00.000000000 +0000
+++ 3.2.0-5/json/tests/latest/optional/format/email.json	2019-11-18 12:36:14.000000000 +0000
@@ -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 -pruN 3.0.2-4/json/tests/latest/optional/format/hostname.json 3.2.0-5/json/tests/latest/optional/format/hostname.json
--- 3.0.2-4/json/tests/latest/optional/format/hostname.json	1970-01-01 00:00:00.000000000 +0000
+++ 3.2.0-5/json/tests/latest/optional/format/hostname.json	2019-11-18 12:36:14.000000000 +0000
@@ -0,0 +1,33 @@
+[
+    {
+        "description": "validation of host names",
+        "schema": {"format": "hostname"},
+        "tests": [
+            {
+                "description": "a valid host name",
+                "data": "www.example.com",
+                "valid": true
+            },
+            {
+                "description": "a valid punycoded IDN hostname",
+                "data": "xn--4gbwdl.xn--wgbh1c",
+                "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
+            }
+        ]
+    }
+]
diff -pruN 3.0.2-4/json/tests/latest/optional/format/idn-email.json 3.2.0-5/json/tests/latest/optional/format/idn-email.json
--- 3.0.2-4/json/tests/latest/optional/format/idn-email.json	1970-01-01 00:00:00.000000000 +0000
+++ 3.2.0-5/json/tests/latest/optional/format/idn-email.json	2019-11-18 12:36:14.000000000 +0000
@@ -0,0 +1,18 @@
+[
+    {
+        "description": "validation of an internationalized e-mail addresses",
+        "schema": {"format": "idn-email"},
+        "tests": [
+            {
+                "description": "a valid idn e-mail (example@example.test in Hangul)",
+                "data": "실례@실례.테스트",
+                "valid": true
+            },
+            {
+                "description": "an invalid idn e-mail address",
+                "data": "2962",
+                "valid": false
+            }
+        ]
+    }
+]
diff -pruN 3.0.2-4/json/tests/latest/optional/format/idn-hostname.json 3.2.0-5/json/tests/latest/optional/format/idn-hostname.json
--- 3.0.2-4/json/tests/latest/optional/format/idn-hostname.json	1970-01-01 00:00:00.000000000 +0000
+++ 3.2.0-5/json/tests/latest/optional/format/idn-hostname.json	2019-11-18 12:36:14.000000000 +0000
@@ -0,0 +1,28 @@
+[
+    {
+        "description": "validation of internationalized host names",
+        "schema": {"format": "idn-hostname"},
+        "tests": [
+            {
+                "description": "a valid host name (example.test in Hangul)",
+                "data": "실례.테스트",
+                "valid": true
+            },
+            {
+                "description": "illegal first char U+302E Hangul single dot tone mark",
+                "data": "〮실례.테스트",
+                "valid": false
+            },
+            {
+                "description": "contains illegal char U+302E Hangul single dot tone mark",
+                "data": "실〮례.테스트",
+                "valid": false
+            },
+            {
+                "description": "a host name with a component too long",
+                "data": "실실실실실실실실실실실실실실실실실실실실실실실실실실실실실실실실실실실실실실실실실실실실실실실실실실실실례례테스트례례례례례례례례례례례례례례례례례테스트례례례례례례례례례례례례례례례례례례례테스트례례례례례례례례례례례례테스트례례실례.테스트",
+                "valid": false
+            }
+        ]
+    }
+]
diff -pruN 3.0.2-4/json/tests/latest/optional/format/ipv4.json 3.2.0-5/json/tests/latest/optional/format/ipv4.json
--- 3.0.2-4/json/tests/latest/optional/format/ipv4.json	1970-01-01 00:00:00.000000000 +0000
+++ 3.2.0-5/json/tests/latest/optional/format/ipv4.json	2019-11-18 12:36:14.000000000 +0000
@@ -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 -pruN 3.0.2-4/json/tests/latest/optional/format/ipv6.json 3.2.0-5/json/tests/latest/optional/format/ipv6.json
--- 3.0.2-4/json/tests/latest/optional/format/ipv6.json	1970-01-01 00:00:00.000000000 +0000
+++ 3.2.0-5/json/tests/latest/optional/format/ipv6.json	2019-11-18 12:36:14.000000000 +0000
@@ -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 -pruN 3.0.2-4/json/tests/latest/optional/format/iri.json 3.2.0-5/json/tests/latest/optional/format/iri.json
--- 3.0.2-4/json/tests/latest/optional/format/iri.json	1970-01-01 00:00:00.000000000 +0000
+++ 3.2.0-5/json/tests/latest/optional/format/iri.json	2019-11-18 12:36:14.000000000 +0000
@@ -0,0 +1,53 @@
+[
+    {
+        "description": "validation of IRIs",
+        "schema": {"format": "iri"},
+        "tests": [
+            {
+                "description": "a valid IRI with anchor tag",
+                "data": "http://ƒøø.ßår/?∂éœ=πîx#πîüx",
+                "valid": true
+            },
+            {
+                "description": "a valid IRI with anchor tag and parantheses",
+                "data": "http://ƒøø.com/blah_(wîkïpédiå)_blah#ßité-1",
+                "valid": true
+            },
+            {
+                "description": "a valid IRI with URL-encoded stuff",
+                "data": "http://ƒøø.ßår/?q=Test%20URL-encoded%20stuff",
+                "valid": true
+            },
+            {
+                "description": "a valid IRI with many special characters",
+                "data": "http://-.~_!$&'()*+,;=:%40:80%2f::::::@example.com",
+                "valid": true
+            },
+            {
+                "description": "a valid IRI based on IPv6",
+                "data": "http://[2001:0db8:85a3:0000:0000:8a2e:0370:7334]",
+                "valid": true
+            },
+            {
+                "description": "an invalid IRI based on IPv6",
+                "data": "http://2001:0db8:85a3:0000:0000:8a2e:0370:7334",
+                "valid": false
+            },
+            {
+                "description": "an invalid relative IRI Reference",
+                "data": "/abc",
+                "valid": false
+            },
+            {
+                "description": "an invalid IRI",
+                "data": "\\\\WINDOWS\\filëßåré",
+                "valid": false
+            },
+            {
+                "description": "an invalid IRI though valid IRI reference",
+                "data": "âππ",
+                "valid": false
+            }
+        ]
+    }
+]
diff -pruN 3.0.2-4/json/tests/latest/optional/format/iri-reference.json 3.2.0-5/json/tests/latest/optional/format/iri-reference.json
--- 3.0.2-4/json/tests/latest/optional/format/iri-reference.json	1970-01-01 00:00:00.000000000 +0000
+++ 3.2.0-5/json/tests/latest/optional/format/iri-reference.json	2019-11-18 12:36:14.000000000 +0000
@@ -0,0 +1,43 @@
+[
+    {
+        "description": "validation of IRI References",
+        "schema": {"format": "iri-reference"},
+        "tests": [
+            {
+                "description": "a valid IRI",
+                "data": "http://ƒøø.ßår/?∂éœ=πîx#πîüx",
+                "valid": true
+            },
+            {
+                "description": "a valid protocol-relative IRI Reference",
+                "data": "//ƒøø.ßår/?∂éœ=πîx#πîüx",
+                "valid": true
+            },
+            {
+                "description": "a valid relative IRI Reference",
+                "data": "/âππ",
+                "valid": true
+            },
+            {
+                "description": "an invalid IRI Reference",
+                "data": "\\\\WINDOWS\\filëßåré",
+                "valid": false
+            },
+            {
+                "description": "a valid IRI Reference",
+                "data": "âππ",
+                "valid": true
+            },
+            {
+                "description": "a valid IRI fragment",
+                "data": "#ƒrägmênt",
+                "valid": true
+            },
+            {
+                "description": "an invalid IRI fragment",
+                "data": "#ƒräg\\mênt",
+                "valid": false
+            }
+        ]
+    }
+]
diff -pruN 3.0.2-4/json/tests/latest/optional/format/json-pointer.json 3.2.0-5/json/tests/latest/optional/format/json-pointer.json
--- 3.0.2-4/json/tests/latest/optional/format/json-pointer.json	1970-01-01 00:00:00.000000000 +0000
+++ 3.2.0-5/json/tests/latest/optional/format/json-pointer.json	2019-11-18 12:36:14.000000000 +0000
@@ -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 -pruN 3.0.2-4/json/tests/latest/optional/format/regex.json 3.2.0-5/json/tests/latest/optional/format/regex.json
--- 3.0.2-4/json/tests/latest/optional/format/regex.json	1970-01-01 00:00:00.000000000 +0000
+++ 3.2.0-5/json/tests/latest/optional/format/regex.json	2019-11-18 12:36:14.000000000 +0000
@@ -0,0 +1,18 @@
+[
+    {
+        "description": "validation of regular expressions",
+        "schema": {"format": "regex"},
+        "tests": [
+            {
+                "description": "a valid regular expression",
+                "data": "([abc])+\\s+$",
+                "valid": true
+            },
+            {
+                "description": "a regular expression with unclosed parens is invalid",
+                "data": "^(abc]",
+                "valid": false
+            }
+        ]
+    }
+]
diff -pruN 3.0.2-4/json/tests/latest/optional/format/relative-json-pointer.json 3.2.0-5/json/tests/latest/optional/format/relative-json-pointer.json
--- 3.0.2-4/json/tests/latest/optional/format/relative-json-pointer.json	1970-01-01 00:00:00.000000000 +0000
+++ 3.2.0-5/json/tests/latest/optional/format/relative-json-pointer.json	2019-11-18 12:36:14.000000000 +0000
@@ -0,0 +1,33 @@
+[
+    {
+        "description": "validation of Relative JSON Pointers (RJP)",
+        "schema": {"format": "relative-json-pointer"},
+        "tests": [
+            {
+                "description": "a valid upwards RJP",
+                "data": "1",
+                "valid": true
+            },
+            {
+                "description": "a valid downwards RJP",  
+                "data": "0/foo/bar",
+                "valid": true
+            },
+            {
+                "description": "a valid up and then down RJP, with array index",
+                "data": "2/0/baz/1/zip",
+                "valid": true
+            },
+            {
+                "description": "a valid RJP taking the member or index name",
+                "data": "0#",
+                "valid": true
+            },
+            {
+                "description": "an invalid RJP that is a valid JSON Pointer",
+                "data": "/foo/bar",
+                "valid": false
+            }
+        ]
+    }
+]
diff -pruN 3.0.2-4/json/tests/latest/optional/format/time.json 3.2.0-5/json/tests/latest/optional/format/time.json
--- 3.0.2-4/json/tests/latest/optional/format/time.json	1970-01-01 00:00:00.000000000 +0000
+++ 3.2.0-5/json/tests/latest/optional/format/time.json	2019-11-18 12:36:14.000000000 +0000
@@ -0,0 +1,23 @@
+[
+    {
+        "description": "validation of time strings",
+        "schema": {"format": "time"},
+        "tests": [
+            {
+                "description": "a valid time string",
+                "data": "08:30:06.283185Z",
+                "valid": true
+            },
+            {
+                "description": "an invalid time string",
+                "data": "08:30:06 PST",
+                "valid": false
+            },
+            {
+                "description": "only RFC3339 not all of ISO 8601 are valid",
+                "data": "01:01:01,1111",
+                "valid": false
+            }
+        ]
+    }
+]
diff -pruN 3.0.2-4/json/tests/latest/optional/format/uri.json 3.2.0-5/json/tests/latest/optional/format/uri.json
--- 3.0.2-4/json/tests/latest/optional/format/uri.json	1970-01-01 00:00:00.000000000 +0000
+++ 3.2.0-5/json/tests/latest/optional/format/uri.json	2019-11-18 12:36:14.000000000 +0000
@@ -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 -pruN 3.0.2-4/json/tests/latest/optional/format/uri-reference.json 3.2.0-5/json/tests/latest/optional/format/uri-reference.json
--- 3.0.2-4/json/tests/latest/optional/format/uri-reference.json	1970-01-01 00:00:00.000000000 +0000
+++ 3.2.0-5/json/tests/latest/optional/format/uri-reference.json	2019-11-18 12:36:14.000000000 +0000
@@ -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 -pruN 3.0.2-4/json/tests/latest/optional/format/uri-template.json 3.2.0-5/json/tests/latest/optional/format/uri-template.json
--- 3.0.2-4/json/tests/latest/optional/format/uri-template.json	1970-01-01 00:00:00.000000000 +0000
+++ 3.2.0-5/json/tests/latest/optional/format/uri-template.json	2019-11-18 12:36:14.000000000 +0000
@@ -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 -pruN 3.0.2-4/json/tests/latest/optional/zeroTerminatedFloats.json 3.2.0-5/json/tests/latest/optional/zeroTerminatedFloats.json
--- 3.0.2-4/json/tests/latest/optional/zeroTerminatedFloats.json	1970-01-01 00:00:00.000000000 +0000
+++ 3.2.0-5/json/tests/latest/optional/zeroTerminatedFloats.json	2019-11-18 12:36:14.000000000 +0000
@@ -0,0 +1,15 @@
+[
+    {
+        "description": "some languages do not distinguish between different types of numeric value",
+        "schema": {
+            "type": "integer"
+        },
+        "tests": [
+            {
+                "description": "a float without fractional part is an integer",
+                "data": 1.0,
+                "valid": true
+            }
+        ]
+    }
+]
diff -pruN 3.0.2-4/json/tests/latest/pattern.json 3.2.0-5/json/tests/latest/pattern.json
--- 3.0.2-4/json/tests/latest/pattern.json	1970-01-01 00:00:00.000000000 +0000
+++ 3.2.0-5/json/tests/latest/pattern.json	2019-11-18 12:36:14.000000000 +0000
@@ -0,0 +1,34 @@
+[
+    {
+        "description": "pattern validation",
+        "schema": {"pattern": "^a*$"},
+        "tests": [
+            {
+                "description": "a matching pattern is valid",
+                "data": "aaa",
+                "valid": true
+            },
+            {
+                "description": "a non-matching pattern is invalid",
+                "data": "abc",
+                "valid": false
+            },
+            {
+                "description": "ignores non-strings",
+                "data": true,
+                "valid": true
+            }
+        ]
+    },
+    {
+        "description": "pattern is not anchored",
+        "schema": {"pattern": "a+"},
+        "tests": [
+            {
+                "description": "matches a substring",
+                "data": "xxaayy",
+                "valid": true
+            }
+        ]
+    }
+]
diff -pruN 3.0.2-4/json/tests/latest/patternProperties.json 3.2.0-5/json/tests/latest/patternProperties.json
--- 3.0.2-4/json/tests/latest/patternProperties.json	1970-01-01 00:00:00.000000000 +0000
+++ 3.2.0-5/json/tests/latest/patternProperties.json	2019-11-18 12:36:14.000000000 +0000
@@ -0,0 +1,151 @@
+[
+    {
+        "description":
+            "patternProperties validates properties matching a regex",
+        "schema": {
+            "patternProperties": {
+                "f.*o": {"type": "integer"}
+            }
+        },
+        "tests": [
+            {
+                "description": "a single valid match is valid",
+                "data": {"foo": 1},
+                "valid": true
+            },
+            {
+                "description": "multiple valid matches is valid",
+                "data": {"foo": 1, "foooooo" : 2},
+                "valid": true
+            },
+            {
+                "description": "a single invalid match is invalid",
+                "data": {"foo": "bar", "fooooo": 2},
+                "valid": false
+            },
+            {
+                "description": "multiple invalid matches is invalid",
+                "data": {"foo": "bar", "foooooo" : "baz"},
+                "valid": false
+            },
+            {
+                "description": "ignores arrays",
+                "data": ["foo"],
+                "valid": true
+            },
+            {
+                "description": "ignores strings",
+                "data": "foo",
+                "valid": true
+            },
+            {
+                "description": "ignores other non-objects",
+                "data": 12,
+                "valid": true
+            }
+        ]
+    },
+    {
+        "description": "multiple simultaneous patternProperties are validated",
+        "schema": {
+            "patternProperties": {
+                "a*": {"type": "integer"},
+                "aaa*": {"maximum": 20}
+            }
+        },
+        "tests": [
+            {
+                "description": "a single valid match is valid",
+                "data": {"a": 21},
+                "valid": true
+            },
+            {
+                "description": "a simultaneous match is valid",
+                "data": {"aaaa": 18},
+                "valid": true
+            },
+            {
+                "description": "multiple matches is valid",
+                "data": {"a": 21, "aaaa": 18},
+                "valid": true
+            },
+            {
+                "description": "an invalid due to one is invalid",
+                "data": {"a": "bar"},
+                "valid": false
+            },
+            {
+                "description": "an invalid due to the other is invalid",
+                "data": {"aaaa": 31},
+                "valid": false
+            },
+            {
+                "description": "an invalid due to both is invalid",
+                "data": {"aaa": "foo", "aaaa": 31},
+                "valid": false
+            }
+        ]
+    },
+    {
+        "description": "regexes are not anchored by default and are case sensitive",
+        "schema": {
+            "patternProperties": {
+                "[0-9]{2,}": { "type": "boolean" },
+                "X_": { "type": "string" }
+            }
+        },
+        "tests": [
+            {
+                "description": "non recognized members are ignored",
+                "data": { "answer 1": "42" },
+                "valid": true
+            },
+            {
+                "description": "recognized members are accounted for",
+                "data": { "a31b": null },
+                "valid": false
+            },
+            {
+                "description": "regexes are case sensitive",
+                "data": { "a_x_3": 3 },
+                "valid": true
+            },
+            {
+                "description": "regexes are case sensitive, 2",
+                "data": { "a_X_3": 3 },
+                "valid": false
+            }
+        ]
+    },
+    {
+        "description": "patternProperties with boolean schemas",
+        "schema": {
+            "patternProperties": {
+                "f.*": true,
+                "b.*": false
+            }
+        },
+        "tests": [
+            {
+                "description": "object with property matching schema true is valid",
+                "data": {"foo": 1},
+                "valid": true
+            },
+            {
+                "description": "object with property matching schema false is invalid",
+                "data": {"bar": 2},
+                "valid": false
+            },
+            {
+                "description": "object with both properties is invalid",
+                "data": {"foo": 1, "bar": 2},
+                "valid": false
+            },
+            {
+                "description": "empty object is valid",
+                "data": {},
+                "valid": true
+            }
+        ]
+    }
+]
diff -pruN 3.0.2-4/json/tests/latest/properties.json 3.2.0-5/json/tests/latest/properties.json
--- 3.0.2-4/json/tests/latest/properties.json	1970-01-01 00:00:00.000000000 +0000
+++ 3.2.0-5/json/tests/latest/properties.json	2019-11-18 12:36:14.000000000 +0000
@@ -0,0 +1,167 @@
+[
+    {
+        "description": "object properties validation",
+        "schema": {
+            "properties": {
+                "foo": {"type": "integer"},
+                "bar": {"type": "string"}
+            }
+        },
+        "tests": [
+            {
+                "description": "both properties present and valid is valid",
+                "data": {"foo": 1, "bar": "baz"},
+                "valid": true
+            },
+            {
+                "description": "one property invalid is invalid",
+                "data": {"foo": 1, "bar": {}},
+                "valid": false
+            },
+            {
+                "description": "both properties invalid is invalid",
+                "data": {"foo": [], "bar": {}},
+                "valid": false
+            },
+            {
+                "description": "doesn't invalidate other properties",
+                "data": {"quux": []},
+                "valid": true
+            },
+            {
+                "description": "ignores arrays",
+                "data": [],
+                "valid": true
+            },
+            {
+                "description": "ignores other non-objects",
+                "data": 12,
+                "valid": true
+            }
+        ]
+    },
+    {
+        "description":
+            "properties, patternProperties, additionalProperties interaction",
+        "schema": {
+            "properties": {
+                "foo": {"type": "array", "maxItems": 3},
+                "bar": {"type": "array"}
+            },
+            "patternProperties": {"f.o": {"minItems": 2}},
+            "additionalProperties": {"type": "integer"}
+        },
+        "tests": [
+            {
+                "description": "property validates property",
+                "data": {"foo": [1, 2]},
+                "valid": true
+            },
+            {
+                "description": "property invalidates property",
+                "data": {"foo": [1, 2, 3, 4]},
+                "valid": false
+            },
+            {
+                "description": "patternProperty invalidates property",
+                "data": {"foo": []},
+                "valid": false
+            },
+            {
+                "description": "patternProperty validates nonproperty",
+                "data": {"fxo": [1, 2]},
+                "valid": true
+            },
+            {
+                "description": "patternProperty invalidates nonproperty",
+                "data": {"fxo": []},
+                "valid": false
+            },
+            {
+                "description": "additionalProperty ignores property",
+                "data": {"bar": []},
+                "valid": true
+            },
+            {
+                "description": "additionalProperty validates others",
+                "data": {"quux": 3},
+                "valid": true
+            },
+            {
+                "description": "additionalProperty invalidates others",
+                "data": {"quux": "foo"},
+                "valid": false
+            }
+        ]
+    },
+    {
+        "description": "properties with boolean schema",
+        "schema": {
+            "properties": {
+                "foo": true,
+                "bar": false
+            }
+        },
+        "tests": [
+            {
+                "description": "no property present is valid",
+                "data": {},
+                "valid": true
+            },
+            {
+                "description": "only 'true' property present is valid",
+                "data": {"foo": 1},
+                "valid": true
+            },
+            {
+                "description": "only 'false' property present is invalid",
+                "data": {"bar": 2},
+                "valid": false
+            },
+            {
+                "description": "both properties present is invalid",
+                "data": {"foo": 1, "bar": 2},
+                "valid": false
+            }
+        ]
+    },
+    {
+        "description": "properties with escaped characters",
+        "schema": {
+            "properties": {
+                "foo\nbar": {"type": "number"},
+                "foo\"bar": {"type": "number"},
+                "foo\\bar": {"type": "number"},
+                "foo\rbar": {"type": "number"},
+                "foo\tbar": {"type": "number"},
+                "foo\fbar": {"type": "number"}
+            }
+        },
+        "tests": [
+            {
+                "description": "object with all numbers is valid",
+                "data": {
+                    "foo\nbar": 1,
+                    "foo\"bar": 1,
+                    "foo\\bar": 1,
+                    "foo\rbar": 1,
+                    "foo\tbar": 1,
+                    "foo\fbar": 1
+                },
+                "valid": true
+            },
+            {
+                "description": "object with strings is invalid",
+                "data": {
+                    "foo\nbar": "1",
+                    "foo\"bar": "1",
+                    "foo\\bar": "1",
+                    "foo\rbar": "1",
+                    "foo\tbar": "1",
+                    "foo\fbar": "1"
+                },
+                "valid": false
+            }
+        ]
+    }
+]
diff -pruN 3.0.2-4/json/tests/latest/propertyNames.json 3.2.0-5/json/tests/latest/propertyNames.json
--- 3.0.2-4/json/tests/latest/propertyNames.json	1970-01-01 00:00:00.000000000 +0000
+++ 3.2.0-5/json/tests/latest/propertyNames.json	2019-11-18 12:36:14.000000000 +0000
@@ -0,0 +1,78 @@
+[
+    {
+        "description": "propertyNames validation",
+        "schema": {
+            "propertyNames": {"maxLength": 3}
+        },
+        "tests": [
+            {
+                "description": "all property names valid",
+                "data": {
+                    "f": {},
+                    "foo": {}
+                },
+                "valid": true
+            },
+            {
+                "description": "some property names invalid",
+                "data": {
+                    "foo": {},
+                    "foobar": {}
+                },
+                "valid": false
+            },
+            {
+                "description": "object without properties is valid",
+                "data": {},
+                "valid": true
+            },
+            {
+                "description": "ignores arrays",
+                "data": [1, 2, 3, 4],
+                "valid": true
+            },
+            {
+                "description": "ignores strings",
+                "data": "foobar",
+                "valid": true
+            },
+            {
+                "description": "ignores other non-objects",
+                "data": 12,
+                "valid": true
+            }
+        ]
+    },
+    {
+        "description": "propertyNames with boolean schema true",
+        "schema": {"propertyNames": true},
+        "tests": [
+            {
+                "description": "object with any properties is valid",
+                "data": {"foo": 1},
+                "valid": true
+            },
+            {
+                "description": "empty object is valid",
+                "data": {},
+                "valid": true
+            }
+        ]
+    },
+    {
+        "description": "propertyNames with boolean schema false",
+        "schema": {"propertyNames": false},
+        "tests": [
+            {
+                "description": "object with any properties is invalid",
+                "data": {"foo": 1},
+                "valid": false
+            },
+            {
+                "description": "empty object is valid",
+                "data": {},
+                "valid": true
+            }
+        ]
+    }
+]
diff -pruN 3.0.2-4/json/tests/latest/ref.json 3.2.0-5/json/tests/latest/ref.json
--- 3.0.2-4/json/tests/latest/ref.json	1970-01-01 00:00:00.000000000 +0000
+++ 3.2.0-5/json/tests/latest/ref.json	2019-11-18 12:36:14.000000000 +0000
@@ -0,0 +1,359 @@
+[
+    {
+        "description": "root pointer ref",
+        "schema": {
+            "properties": {
+                "foo": {"$ref": "#"}
+            },
+            "additionalProperties": false
+        },
+        "tests": [
+            {
+                "description": "match",
+                "data": {"foo": false},
+                "valid": true
+            },
+            {
+                "description": "recursive match",
+                "data": {"foo": {"foo": false}},
+                "valid": true
+            },
+            {
+                "description": "mismatch",
+                "data": {"bar": false},
+                "valid": false
+            },
+            {
+                "description": "recursive mismatch",
+                "data": {"foo": {"bar": false}},
+                "valid": false
+            }
+        ]
+    },
+    {
+        "description": "relative pointer ref to object",
+        "schema": {
+            "properties": {
+                "foo": {"type": "integer"},
+                "bar": {"$ref": "#/properties/foo"}
+            }
+        },
+        "tests": [
+            {
+                "description": "match",
+                "data": {"bar": 3},
+                "valid": true
+            },
+            {
+                "description": "mismatch",
+                "data": {"bar": true},
+                "valid": false
+            }
+        ]
+    },
+    {
+        "description": "relative pointer ref to array",
+        "schema": {
+            "items": [
+                {"type": "integer"},
+                {"$ref": "#/items/0"}
+            ]
+        },
+        "tests": [
+            {
+                "description": "match array",
+                "data": [1, 2],
+                "valid": true
+            },
+            {
+                "description": "mismatch array",
+                "data": [1, "foo"],
+                "valid": false
+            }
+        ]
+    },
+    {
+        "description": "escaped pointer ref",
+        "schema": {
+            "tilda~field": {"type": "integer"},
+            "slash/field": {"type": "integer"},
+            "percent%field": {"type": "integer"},
+            "properties": {
+                "tilda": {"$ref": "#/tilda~0field"},
+                "slash": {"$ref": "#/slash~1field"},
+                "percent": {"$ref": "#/percent%25field"}
+            }
+        },
+        "tests": [
+            {
+                "description": "slash invalid",
+                "data": {"slash": "aoeu"},
+                "valid": false
+            },
+            {
+                "description": "tilda invalid",
+                "data": {"tilda": "aoeu"},
+                "valid": false
+            },
+            {
+                "description": "percent invalid",
+                "data": {"percent": "aoeu"},
+                "valid": false
+            },
+            {
+                "description": "slash valid",
+                "data": {"slash": 123},
+                "valid": true
+            },
+            {
+                "description": "tilda valid",
+                "data": {"tilda": 123},
+                "valid": true
+            },
+            {
+                "description": "percent valid",
+                "data": {"percent": 123},
+                "valid": true
+            }
+        ]
+    },
+    {
+        "description": "nested refs",
+        "schema": {
+            "$defs": {
+                "a": {"type": "integer"},
+                "b": {"$ref": "#/$defs/a"},
+                "c": {"$ref": "#/$defs/b"}
+            },
+            "$ref": "#/$defs/c"
+        },
+        "tests": [
+            {
+                "description": "nested ref valid",
+                "data": 5,
+                "valid": true
+            },
+            {
+                "description": "nested ref invalid",
+                "data": "a",
+                "valid": false
+            }
+        ]
+    },
+    {
+        "description": "ref overrides any sibling keywords",
+        "schema": {
+            "$defs": {
+                "reffed": {
+                    "type": "array"
+                }
+            },
+            "properties": {
+                "foo": {
+                    "$ref": "#/$defs/reffed",
+                    "maxItems": 2
+                }
+            }
+        },
+        "tests": [
+            {
+                "description": "ref valid",
+                "data": { "foo": [] },
+                "valid": true
+            },
+            {
+                "description": "ref valid, maxItems ignored",
+                "data": { "foo": [ 1, 2, 3] },
+                "valid": true
+            },
+            {
+                "description": "ref invalid",
+                "data": { "foo": "string" },
+                "valid": false
+            }
+        ]
+    },
+    {
+        "description": "remote ref, containing refs itself",
+        "schema": {"$ref": "https://json-schema.org/draft/2019-09/schema"},
+        "tests": [
+            {
+                "description": "remote ref valid",
+                "data": {"minLength": 1},
+                "valid": true
+            },
+            {
+                "description": "remote ref invalid",
+                "data": {"minLength": -1},
+                "valid": false
+            }
+        ]
+    },
+    {
+        "description": "property named $ref that is not a reference",
+        "schema": {
+            "properties": {
+                "$ref": {"type": "string"}
+            }
+        },
+        "tests": [
+            {
+                "description": "property named $ref valid",
+                "data": {"$ref": "a"},
+                "valid": true
+            },
+            {
+                "description": "property named $ref invalid",
+                "data": {"$ref": 2},
+                "valid": false
+            }
+        ]
+    },
+    {
+        "description": "$ref to boolean schema true",
+        "schema": {
+            "$ref": "#/$defs/bool",
+            "$defs": {
+                "bool": true
+            }
+        },
+        "tests": [
+            {
+                "description": "any value is valid",
+                "data": "foo",
+                "valid": true
+            }
+        ]
+    },
+    {
+        "description": "$ref to boolean schema false",
+        "schema": {
+            "$ref": "#/$defs/bool",
+            "$defs": {
+                "bool": false
+            }
+        },
+        "tests": [
+            {
+                "description": "any value is invalid",
+                "data": "foo",
+                "valid": false
+            }
+        ]
+    },
+    {
+        "description": "Recursive references between schemas",
+        "schema": {
+            "$id": "http://localhost:1234/tree",
+            "description": "tree of nodes",
+            "type": "object",
+            "properties": {
+                "meta": {"type": "string"},
+                "nodes": {
+                    "type": "array",
+                    "items": {"$ref": "node"}
+                }
+            },
+            "required": ["meta", "nodes"],
+            "$defs": {
+                "node": {
+                    "$id": "http://localhost:1234/node",
+                    "description": "node",
+                    "type": "object",
+                    "properties": {
+                        "value": {"type": "number"},
+                        "subtree": {"$ref": "tree"}
+                    },
+                    "required": ["value"]
+                }
+            }
+        },
+        "tests": [
+            {
+                "description": "valid tree",
+                "data": { 
+                    "meta": "root",
+                    "nodes": [
+                        {
+                            "value": 1,
+                            "subtree": {
+                                "meta": "child",
+                                "nodes": [
+                                    {"value": 1.1},
+                                    {"value": 1.2}
+                                ]
+                            }
+                        },
+                        {
+                            "value": 2,
+                            "subtree": {
+                                "meta": "child",
+                                "nodes": [
+                                    {"value": 2.1},
+                                    {"value": 2.2}
+                                ]
+                            }
+                        }
+                    ]
+                },
+                "valid": true
+            },
+            {
+                "description": "invalid tree",
+                "data": { 
+                    "meta": "root",
+                    "nodes": [
+                        {
+                            "value": 1,
+                            "subtree": {
+                                "meta": "child",
+                                "nodes": [
+                                    {"value": "string is invalid"},
+                                    {"value": 1.2}
+                                ]
+                            }
+                        },
+                        {
+                            "value": 2,
+                            "subtree": {
+                                "meta": "child",
+                                "nodes": [
+                                    {"value": 2.1},
+                                    {"value": 2.2}
+                                ]
+                            }
+                        }
+                    ]
+                },
+                "valid": false
+            }
+        ]
+    },
+    {
+        "description": "refs with quote",
+        "schema": {
+            "properties": {
+                "foo\"bar": {"$ref": "#/$defs/foo%22bar"}
+            },
+            "$defs": {
+                "foo\"bar": {"type": "number"}
+            }
+        },
+        "tests": [
+            {
+                "description": "object with numbers is valid",
+                "data": {
+                    "foo\"bar": 1
+                },
+                "valid": true
+            },
+            {
+                "description": "object with strings is invalid",
+                "data": {
+                    "foo\"bar": "1"
+                },
+                "valid": false
+            }
+        ]
+    }
+]
diff -pruN 3.0.2-4/json/tests/latest/refRemote.json 3.2.0-5/json/tests/latest/refRemote.json
--- 3.0.2-4/json/tests/latest/refRemote.json	1970-01-01 00:00:00.000000000 +0000
+++ 3.2.0-5/json/tests/latest/refRemote.json	2019-11-18 12:36:14.000000000 +0000
@@ -0,0 +1,167 @@
+[
+    {
+        "description": "remote ref",
+        "schema": {"$ref": "http://localhost:1234/integer.json"},
+        "tests": [
+            {
+                "description": "remote ref valid",
+                "data": 1,
+                "valid": true
+            },
+            {
+                "description": "remote ref invalid",
+                "data": "a",
+                "valid": false
+            }
+        ]
+    },
+    {
+        "description": "fragment within remote ref",
+        "schema": {"$ref": "http://localhost:1234/subSchemas.json#/integer"},
+        "tests": [
+            {
+                "description": "remote fragment valid",
+                "data": 1,
+                "valid": true
+            },
+            {
+                "description": "remote fragment invalid",
+                "data": "a",
+                "valid": false
+            }
+        ]
+    },
+    {
+        "description": "ref within remote ref",
+        "schema": {
+            "$ref": "http://localhost:1234/subSchemas.json#/refToInteger"
+        },
+        "tests": [
+            {
+                "description": "ref within ref valid",
+                "data": 1,
+                "valid": true
+            },
+            {
+                "description": "ref within ref invalid",
+                "data": "a",
+                "valid": false
+            }
+        ]
+    },
+    {
+        "description": "base URI change",
+        "schema": {
+            "$id": "http://localhost:1234/",
+            "items": {
+                "$id": "folder/",
+                "items": {"$ref": "folderInteger.json"}
+            }
+        },
+        "tests": [
+            {
+                "description": "base URI change ref valid",
+                "data": [[1]],
+                "valid": true
+            },
+            {
+                "description": "base URI change ref invalid",
+                "data": [["a"]],
+                "valid": false
+            }
+        ]
+    },
+    {
+        "description": "base URI change - change folder",
+        "schema": {
+            "$id": "http://localhost:1234/scope_change_defs1.json",
+            "type" : "object",
+            "properties": {"list": {"$ref": "#/$defs/baz"}},
+            "$defs": {
+                "baz": {
+                    "$id": "folder/",
+                    "type": "array",
+                    "items": {"$ref": "folderInteger.json"}
+                }
+            }
+        },
+        "tests": [
+            {
+                "description": "number is valid",
+                "data": {"list": [1]},
+                "valid": true
+            },
+            {
+                "description": "string is invalid",
+                "data": {"list": ["a"]},
+                "valid": false
+            }
+        ]
+    },
+    {
+        "description": "base URI change - change folder in subschema",
+        "schema": {
+            "$id": "http://localhost:1234/scope_change_defs2.json",
+            "type" : "object",
+            "properties": {"list": {"$ref": "#/$defs/baz/$defs/bar"}},
+            "$defs": {
+                "baz": {
+                    "$id": "folder/",
+                    "$defs": {
+                        "bar": {
+                            "type": "array",
+                            "items": {"$ref": "folderInteger.json"}
+                        }
+                    }
+                }
+            }
+        },
+        "tests": [
+            {
+                "description": "number is valid",
+                "data": {"list": [1]},
+                "valid": true
+            },
+            {
+                "description": "string is invalid",
+                "data": {"list": ["a"]},
+                "valid": false
+            }
+        ]
+    },
+    {
+        "description": "root ref in remote ref",
+        "schema": {
+            "$id": "http://localhost:1234/object",
+            "type": "object",
+            "properties": {
+                "name": {"$ref": "name-defs.json#/$defs/orNull"}
+            }
+        },
+        "tests": [
+            {
+                "description": "string is valid",
+                "data": {
+                    "name": "foo"
+                },
+                "valid": true
+            },
+            {
+                "description": "null is valid",
+                "data": {
+                    "name": null
+                },
+                "valid": true
+            },
+            {
+                "description": "object is invalid",
+                "data": {
+                    "name": {
+                        "name": null
+                    }
+                },
+                "valid": false
+            }
+        ]
+    }
+]
diff -pruN 3.0.2-4/json/tests/latest/required.json 3.2.0-5/json/tests/latest/required.json
--- 3.0.2-4/json/tests/latest/required.json	1970-01-01 00:00:00.000000000 +0000
+++ 3.2.0-5/json/tests/latest/required.json	2019-11-18 12:36:14.000000000 +0000
@@ -0,0 +1,105 @@
+[
+    {
+        "description": "required validation",
+        "schema": {
+            "properties": {
+                "foo": {},
+                "bar": {}
+            },
+            "required": ["foo"]
+        },
+        "tests": [
+            {
+                "description": "present required property is valid",
+                "data": {"foo": 1},
+                "valid": true
+            },
+            {
+                "description": "non-present required property is invalid",
+                "data": {"bar": 1},
+                "valid": false
+            },
+            {
+                "description": "ignores arrays",
+                "data": [],
+                "valid": true
+            },
+            {
+                "description": "ignores strings",
+                "data": "",
+                "valid": true
+            },
+            {
+                "description": "ignores other non-objects",
+                "data": 12,
+                "valid": true
+            }
+        ]
+    },
+    {
+        "description": "required default validation",
+        "schema": {
+            "properties": {
+                "foo": {}
+            }
+        },
+        "tests": [
+            {
+                "description": "not required by default",
+                "data": {},
+                "valid": true
+            }
+        ]
+    },
+    {
+        "description": "required with empty array",
+        "schema": {
+            "properties": {
+                "foo": {}
+            },
+            "required": []
+        },
+        "tests": [
+            {
+                "description": "property not required",
+                "data": {},
+                "valid": true
+            }
+        ]
+    },
+    {
+        "description": "required with escaped characters",
+        "schema": {
+            "required": [
+                "foo\nbar",
+                "foo\"bar",
+                "foo\\bar",
+                "foo\rbar",
+                "foo\tbar",
+                "foo\fbar"
+            ]
+        },
+        "tests": [
+            {
+                "description": "object with all properties present is valid",
+                "data": {
+                    "foo\nbar": 1,
+                    "foo\"bar": 1,
+                    "foo\\bar": 1,
+                    "foo\rbar": 1,
+                    "foo\tbar": 1,
+                    "foo\fbar": 1
+                },
+                "valid": true
+            },
+            {
+                "description": "object with some properties missing is invalid",
+                "data": {
+                    "foo\nbar": "1",
+                    "foo\"bar": "1"
+                },
+                "valid": false
+            }
+        ]
+    }
+]
diff -pruN 3.0.2-4/json/tests/latest/type.json 3.2.0-5/json/tests/latest/type.json
--- 3.0.2-4/json/tests/latest/type.json	1970-01-01 00:00:00.000000000 +0000
+++ 3.2.0-5/json/tests/latest/type.json	2019-11-18 12:36:14.000000000 +0000
@@ -0,0 +1,464 @@
+[
+    {
+        "description": "integer type matches integers",
+        "schema": {"type": "integer"},
+        "tests": [
+            {
+                "description": "an integer is an integer",
+                "data": 1,
+                "valid": true
+            },
+            {
+                "description": "a float is not an integer",
+                "data": 1.1,
+                "valid": false
+            },
+            {
+                "description": "a string is not an integer",
+                "data": "foo",
+                "valid": false
+            },
+            {
+                "description": "a string is still not an integer, even if it looks like one",
+                "data": "1",
+                "valid": false
+            },
+            {
+                "description": "an object is not an integer",
+                "data": {},
+                "valid": false
+            },
+            {
+                "description": "an array is not an integer",
+                "data": [],
+                "valid": false
+            },
+            {
+                "description": "a boolean is not an integer",
+                "data": true,
+                "valid": false
+            },
+            {
+                "description": "null is not an integer",
+                "data": null,
+                "valid": false
+            }
+        ]
+    },
+    {
+        "description": "number type matches numbers",
+        "schema": {"type": "number"},
+        "tests": [
+            {
+                "description": "an integer is a number",
+                "data": 1,
+                "valid": true
+            },
+            {
+                "description": "a float is a number",
+                "data": 1.1,
+                "valid": true
+            },
+            {
+                "description": "a string is not a number",
+                "data": "foo",
+                "valid": false
+            },
+            {
+                "description": "a string is still not a number, even if it looks like one",
+                "data": "1",
+                "valid": false
+            },
+            {
+                "description": "an object is not a number",
+                "data": {},
+                "valid": false
+            },
+            {
+                "description": "an array is not a number",
+                "data": [],
+                "valid": false
+            },
+            {
+                "description": "a boolean is not a number",
+                "data": true,
+                "valid": false
+            },
+            {
+                "description": "null is not a number",
+                "data": null,
+                "valid": false
+            }
+        ]
+    },
+    {
+        "description": "string type matches strings",
+        "schema": {"type": "string"},
+        "tests": [
+            {
+                "description": "1 is not a string",
+                "data": 1,
+                "valid": false
+            },
+            {
+                "description": "a float is not a string",
+                "data": 1.1,
+                "valid": false
+            },
+            {
+                "description": "a string is a string",
+                "data": "foo",
+                "valid": true
+            },
+            {
+                "description": "a string is still a string, even if it looks like a number",
+                "data": "1",
+                "valid": true
+            },
+            {
+                "description": "an empty string is still a string",
+                "data": "",
+                "valid": true
+            },
+            {
+                "description": "an object is not a string",
+                "data": {},
+                "valid": false
+            },
+            {
+                "description": "an array is not a string",
+                "data": [],
+                "valid": false
+            },
+            {
+                "description": "a boolean is not a string",
+                "data": true,
+                "valid": false
+            },
+            {
+                "description": "null is not a string",
+                "data": null,
+                "valid": false
+            }
+        ]
+    },
+    {
+        "description": "object type matches objects",
+        "schema": {"type": "object"},
+        "tests": [
+            {
+                "description": "an integer is not an object",
+                "data": 1,
+                "valid": false
+            },
+            {
+                "description": "a float is not an object",
+                "data": 1.1,
+                "valid": false
+            },
+            {
+                "description": "a string is not an object",
+                "data": "foo",
+                "valid": false
+            },
+            {
+                "description": "an object is an object",
+                "data": {},
+                "valid": true
+            },
+            {
+                "description": "an array is not an object",
+                "data": [],
+                "valid": false
+            },
+            {
+                "description": "a boolean is not an object",
+                "data": true,
+                "valid": false
+            },
+            {
+                "description": "null is not an object",
+                "data": null,
+                "valid": false
+            }
+        ]
+    },
+    {
+        "description": "array type matches arrays",
+        "schema": {"type": "array"},
+        "tests": [
+            {
+                "description": "an integer is not an array",
+                "data": 1,
+                "valid": false
+            },
+            {
+                "description": "a float is not an array",
+                "data": 1.1,
+                "valid": false
+            },
+            {
+                "description": "a string is not an array",
+                "data": "foo",
+                "valid": false
+            },
+            {
+                "description": "an object is not an array",
+                "data": {},
+                "valid": false
+            },
+            {
+                "description": "an array is an array",
+                "data": [],
+                "valid": true
+            },
+            {
+                "description": "a boolean is not an array",
+                "data": true,
+                "valid": false
+            },
+            {
+                "description": "null is not an array",
+                "data": null,
+                "valid": false
+            }
+        ]
+    },
+    {
+        "description": "boolean type matches booleans",
+        "schema": {"type": "boolean"},
+        "tests": [
+            {
+                "description": "an integer is not a boolean",
+                "data": 1,
+                "valid": false
+            },
+            {
+                "description": "zero is not a boolean",
+                "data": 0,
+                "valid": false
+            },
+            {
+                "description": "a float is not a boolean",
+                "data": 1.1,
+                "valid": false
+            },
+            {
+                "description": "a string is not a boolean",
+                "data": "foo",
+                "valid": false
+            },
+            {
+                "description": "an empty string is not a boolean",
+                "data": "",
+                "valid": false
+            },
+            {
+                "description": "an object is not a boolean",
+                "data": {},
+                "valid": false
+            },
+            {
+                "description": "an array is not a boolean",
+                "data": [],
+                "valid": false
+            },
+            {
+                "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
+            }
+        ]
+    },
+    {
+        "description": "null type matches only the null object",
+        "schema": {"type": "null"},
+        "tests": [
+            {
+                "description": "an integer is not null",
+                "data": 1,
+                "valid": false
+            },
+            {
+                "description": "a float is not null",
+                "data": 1.1,
+                "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
+            },
+            {
+                "description": "an array is not null",
+                "data": [],
+                "valid": false
+            },
+            {
+                "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
+            }
+        ]
+    },
+    {
+        "description": "multiple types can be specified in an array",
+        "schema": {"type": ["integer", "string"]},
+        "tests": [
+            {
+                "description": "an integer is valid",
+                "data": 1,
+                "valid": true
+            },
+            {
+                "description": "a string is valid",
+                "data": "foo",
+                "valid": true
+            },
+            {
+                "description": "a float is invalid",
+                "data": 1.1,
+                "valid": false
+            },
+            {
+                "description": "an object is invalid",
+                "data": {},
+                "valid": false
+            },
+            {
+                "description": "an array is invalid",
+                "data": [],
+                "valid": false
+            },
+            {
+                "description": "a boolean is invalid",
+                "data": true,
+                "valid": false
+            },
+            {
+                "description": "null is invalid",
+                "data": null,
+                "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 -pruN 3.0.2-4/json/tests/latest/uniqueItems.json 3.2.0-5/json/tests/latest/uniqueItems.json
--- 3.0.2-4/json/tests/latest/uniqueItems.json	1970-01-01 00:00:00.000000000 +0000
+++ 3.2.0-5/json/tests/latest/uniqueItems.json	2019-11-18 12:36:14.000000000 +0000
@@ -0,0 +1,173 @@
+[
+    {
+        "description": "uniqueItems validation",
+        "schema": {"uniqueItems": true},
+        "tests": [
+            {
+                "description": "unique array of integers is valid",
+                "data": [1, 2],
+                "valid": true
+            },
+            {
+                "description": "non-unique array of integers is invalid",
+                "data": [1, 1],
+                "valid": false
+            },
+            {
+                "description": "numbers are unique if mathematically unequal",
+                "data": [1.0, 1.00, 1],
+                "valid": false
+            },
+            {
+                "description": "false is not equal to zero",
+                "data": [0, false],
+                "valid": true
+            },
+            {
+                "description": "true is not equal to one",
+                "data": [1, true],
+                "valid": true
+            },
+            {
+                "description": "unique array of objects is valid",
+                "data": [{"foo": "bar"}, {"foo": "baz"}],
+                "valid": true
+            },
+            {
+                "description": "non-unique array of objects is invalid",
+                "data": [{"foo": "bar"}, {"foo": "bar"}],
+                "valid": false
+            },
+            {
+                "description": "unique array of nested objects is valid",
+                "data": [
+                    {"foo": {"bar" : {"baz" : true}}},
+                    {"foo": {"bar" : {"baz" : false}}}
+                ],
+                "valid": true
+            },
+            {
+                "description": "non-unique array of nested objects is invalid",
+                "data": [
+                    {"foo": {"bar" : {"baz" : true}}},
+                    {"foo": {"bar" : {"baz" : true}}}
+                ],
+                "valid": false
+            },
+            {
+                "description": "unique array of arrays is valid",
+                "data": [["foo"], ["bar"]],
+                "valid": true
+            },
+            {
+                "description": "non-unique array of arrays is invalid",
+                "data": [["foo"], ["foo"]],
+                "valid": false
+            },
+            {
+                "description": "1 and true are unique",
+                "data": [1, true],
+                "valid": true
+            },
+            {
+                "description": "0 and false are unique",
+                "data": [0, false],
+                "valid": true
+            },
+            {
+                "description": "unique heterogeneous types are valid",
+                "data": [{}, [1], true, null, 1],
+                "valid": true
+            },
+            {
+                "description": "non-unique heterogeneous types are invalid",
+                "data": [{}, [1], true, null, {}, 1],
+                "valid": false
+            }
+        ]
+    },
+    {
+        "description": "uniqueItems with an array of items",
+        "schema": {
+            "items": [{"type": "boolean"}, {"type": "boolean"}], 
+            "uniqueItems": true
+        },
+        "tests": [
+            {
+                "description": "[false, true] from items array is valid",
+                "data": [false, true],
+                "valid": true
+            },
+            {
+                "description": "[true, false] from items array is valid",
+                "data": [true, false],
+                "valid": true
+            },
+            {
+                "description": "[false, false] from items array is not valid",
+                "data": [false, false],
+                "valid": false
+            },
+            {
+                "description": "[true, true] from items array is not valid",
+                "data": [true, true],
+                "valid": false
+            },
+            {
+                "description": "unique array extended from [false, true] is valid",
+                "data": [false, true, "foo", "bar"],
+                "valid": true
+            },
+            {
+                "description": "unique array extended from [true, false] is valid",
+                "data": [true, false, "foo", "bar"],
+                "valid": true
+            },
+            {
+                "description": "non-unique array extended from [false, true] is not valid",
+                "data": [false, true, "foo", "foo"],
+                "valid": false
+            },
+            {
+                "description": "non-unique array extended from [true, false] is not valid",
+                "data": [true, false, "foo", "foo"],
+                "valid": false
+            }
+        ]
+    },
+    {
+        "description": "uniqueItems with an array of items and additionalItems=false",
+        "schema": {
+            "items": [{"type": "boolean"}, {"type": "boolean"}], 
+            "uniqueItems": true, 
+            "additionalItems": false
+        },
+        "tests": [
+            {
+                "description": "[false, true] from items array is valid",
+                "data": [false, true],
+                "valid": true
+            },
+            {
+                "description": "[true, false] from items array is valid",
+                "data": [true, false],
+                "valid": true
+            },
+            {
+                "description": "[false, false] from items array is not valid",
+                "data": [false, false],
+                "valid": false
+            },
+            {
+                "description": "[true, true] from items array is not valid",
+                "data": [true, true],
+                "valid": false
+            },
+            {
+                "description": "extra items are invalid even if unique",
+                "data": [false, true, null],
+                "valid": false
+            }
+        ]
+    }
+]
diff -pruN 3.0.2-4/json/tox.ini 3.2.0-5/json/tox.ini
--- 3.0.2-4/json/tox.ini	2019-08-02 00:53:34.000000000 +0000
+++ 3.2.0-5/json/tox.ini	2019-11-18 12:36:14.000000000 +0000
@@ -1,8 +1,9 @@
 [tox]
 minversion = 1.6
-envlist = py27
+envlist = sanity
 skipsdist = True
 
-[testenv]
+[testenv:sanity]
+# used just for validating the structure of the test case files themselves
 deps = jsonschema
 commands = {envpython} bin/jsonschema_suite check
diff -pruN 3.0.2-4/json/.travis.yml 3.2.0-5/json/.travis.yml
--- 3.0.2-4/json/.travis.yml	2019-08-02 00:53:34.000000000 +0000
+++ 3.2.0-5/json/.travis.yml	2019-11-18 12:36:14.000000000 +0000
@@ -1,9 +1,8 @@
 language: python
-python: "2.7"
+python: "3.7"
 node_js: "9"
 install:
   - pip install tox
-  - npm install
 script:
   - tox
-  - npm test
+  - npm install && npm test || true
diff -pruN 3.0.2-4/jsonschema/benchmarks/__init__.py 3.2.0-5/jsonschema/benchmarks/__init__.py
--- 3.0.2-4/jsonschema/benchmarks/__init__.py	2019-08-02 00:53:34.000000000 +0000
+++ 3.2.0-5/jsonschema/benchmarks/__init__.py	2019-11-18 12:36:14.000000000 +0000
@@ -0,0 +1,5 @@
+"""
+Benchmarks for validation.
+
+This package is *not* public API.
+"""
diff -pruN 3.0.2-4/jsonschema/benchmarks/issue232.py 3.2.0-5/jsonschema/benchmarks/issue232.py
--- 3.0.2-4/jsonschema/benchmarks/issue232.py	2019-08-02 00:53:34.000000000 +0000
+++ 3.2.0-5/jsonschema/benchmarks/issue232.py	2019-11-18 12:36:14.000000000 +0000
@@ -1,25 +1,26 @@
 #!/usr/bin/env python
 """
-A performance benchmark using the example from issue #232:
-
-https://github.com/Julian/jsonschema/pull/232
+A performance benchmark using the example from issue #232.
 
+See https://github.com/Julian/jsonschema/pull/232.
 """
 from twisted.python.filepath import FilePath
-from perf import Runner
+from pyperf import Runner
 from pyrsistent import m
 
-from jsonschema.tests._suite import Collection
+from jsonschema.tests._suite import Version
 import jsonschema
 
 
-collection = Collection(
+issue232 = Version(
     path=FilePath(__file__).sibling("issue232"),
     remotes=m(),
     name="issue232",
-    validator=jsonschema.Draft7Validator,
 )
 
 
 if __name__ == "__main__":
-    collection.benchmark(runner=Runner())
+    issue232.benchmark(
+        runner=Runner(),
+        Validator=jsonschema.Draft4Validator,
+    )
diff -pruN 3.0.2-4/jsonschema/benchmarks/json_schema_test_suite.py 3.2.0-5/jsonschema/benchmarks/json_schema_test_suite.py
--- 3.0.2-4/jsonschema/benchmarks/json_schema_test_suite.py	2019-08-02 00:53:34.000000000 +0000
+++ 3.2.0-5/jsonschema/benchmarks/json_schema_test_suite.py	2019-11-18 12:36:14.000000000 +0000
@@ -5,7 +5,7 @@ A performance benchmark using the offici
 This benchmarks jsonschema using every valid example in the
 JSON-Schema-Test-Suite. It will take some time to complete.
 """
-from perf import Runner
+from pyperf import Runner
 
 from jsonschema.tests._suite import Suite
 
diff -pruN 3.0.2-4/jsonschema/cli.py 3.2.0-5/jsonschema/cli.py
--- 3.0.2-4/jsonschema/cli.py	2019-08-02 00:53:34.000000000 +0000
+++ 3.2.0-5/jsonschema/cli.py	2019-11-18 12:36:14.000000000 +0000
@@ -1,3 +1,6 @@
+"""
+The ``jsonschema`` command line.
+"""
 from __future__ import absolute_import
 import argparse
 import json
@@ -28,7 +31,7 @@ parser.add_argument(
     dest="instances",
     type=_json_file,
     help=(
-        "a path to a JSON instance (i.e. filename.json)"
+        "a path to a JSON instance (i.e. filename.json) "
         "to validate (may be specified multiple times)"
     ),
 )
@@ -52,12 +55,12 @@ parser.add_argument(
 )
 parser.add_argument(
     "--version",
-    action='version',
+    action="version",
     version=__version__,
 )
 parser.add_argument(
     "schema",
-    help="the JSON Schema to validate with (i.e. filename.schema)",
+    help="the JSON Schema to validate with (i.e. schema.json)",
     type=_json_file,
 )
 
diff -pruN 3.0.2-4/jsonschema/compat.py 3.2.0-5/jsonschema/compat.py
--- 3.0.2-4/jsonschema/compat.py	2019-08-02 00:53:34.000000000 +0000
+++ 3.2.0-5/jsonschema/compat.py	2019-11-18 12:36:14.000000000 +0000
@@ -20,7 +20,7 @@ if PY3:
     from functools import lru_cache
     from io import StringIO as NativeIO
     from urllib.parse import (
-        unquote, urljoin, urlunsplit, SplitResult, urlsplit as _urlsplit
+        unquote, urljoin, urlunsplit, SplitResult, urlsplit
     )
     from urllib.request import pathname2url, urlopen
     str_types = str,
@@ -29,9 +29,7 @@ if PY3:
 else:
     from itertools import izip as zip  # noqa
     from io import BytesIO as NativeIO
-    from urlparse import (
-        urljoin, urlunsplit, SplitResult, urlsplit as _urlsplit # noqa
-    )
+    from urlparse import urljoin, urlunsplit, SplitResult, urlsplit
     from urllib import pathname2url, unquote  # noqa
     import urllib2  # noqa
     def urlopen(*args, **kwargs):
@@ -44,14 +42,6 @@ else:
     from functools32 import lru_cache
 
 
-# On python < 3.3 fragments are not handled properly with unknown schemes
-def urlsplit(url):
-    scheme, netloc, path, query, fragment = _urlsplit(url)
-    if "#" in path:
-        path, fragment = path.split("#", 1)
-    return SplitResult(scheme, netloc, path, query, fragment)
-
-
 def urldefrag(url):
     if "#" in url:
         s, n, p, q, frag = urlsplit(url)
diff -pruN 3.0.2-4/jsonschema/exceptions.py 3.2.0-5/jsonschema/exceptions.py
--- 3.0.2-4/jsonschema/exceptions.py	2019-08-02 00:53:34.000000000 +0000
+++ 3.2.0-5/jsonschema/exceptions.py	2019-11-18 12:36:14.000000000 +0000
@@ -1,3 +1,6 @@
+"""
+Validation errors, and some surrounding helpers.
+"""
 from collections import defaultdict, deque
 import itertools
 import pprint
@@ -129,17 +132,28 @@ class _Error(Exception):
 
 
 class ValidationError(_Error):
+    """
+    An instance was invalid under a provided schema.
+    """
+
     _word_for_schema_in_error_message = "schema"
     _word_for_instance_in_error_message = "instance"
 
 
 class SchemaError(_Error):
+    """
+    A schema was invalid under its corresponding metaschema.
+    """
+
     _word_for_schema_in_error_message = "metaschema"
     _word_for_instance_in_error_message = "schema"
 
 
 @attr.s(hash=True)
 class RefResolutionError(Exception):
+    """
+    A ref could not be resolved.
+    """
 
     _cause = attr.ib()
 
@@ -148,6 +162,10 @@ class RefResolutionError(Exception):
 
 
 class UndefinedTypeCheck(Exception):
+    """
+    A type checker was asked to check a type it did not have registered.
+    """
+
     def __init__(self, type):
         self.type = type
 
@@ -162,6 +180,10 @@ class UndefinedTypeCheck(Exception):
 
 
 class UnknownType(Exception):
+    """
+    A validator was asked to validate an instance against an unknown type.
+    """
+
     def __init__(self, type, instance, schema):
         self.type = type
         self.instance = instance
@@ -187,6 +209,10 @@ class UnknownType(Exception):
 
 
 class FormatError(Exception):
+    """
+    Validating a format failed.
+    """
+
     def __init__(self, message, cause=None):
         super(FormatError, self).__init__(message, cause)
         self.message = message
@@ -205,7 +231,6 @@ class FormatError(Exception):
 class ErrorTree(object):
     """
     ErrorTrees make it easier to check which validations failed.
-
     """
 
     _instance = _unset
@@ -225,7 +250,6 @@ class ErrorTree(object):
     def __contains__(self, index):
         """
         Check whether ``instance[index]`` has any errors.
-
         """
 
         return index in self._contents
@@ -238,7 +262,6 @@ class ErrorTree(object):
         is not known by this tree, whatever error would be raised by
         ``instance.__getitem__`` will be propagated (usually this is some
         subclass of `exceptions.LookupError`.
-
         """
 
         if self._instance is not _unset and index not in self:
@@ -246,22 +269,22 @@ class ErrorTree(object):
         return self._contents[index]
 
     def __setitem__(self, index, value):
+        """
+        Add an error to the tree at the given ``index``.
+        """
         self._contents[index] = value
 
     def __iter__(self):
         """
         Iterate (non-recursively) over the indices in the instance with errors.
-
         """
 
         return iter(self._contents)
 
     def __len__(self):
         """
-        Same as `total_errors`.
-
+        Return the `total_errors`.
         """
-
         return self.total_errors
 
     def __repr__(self):
@@ -271,7 +294,6 @@ class ErrorTree(object):
     def total_errors(self):
         """
         The total number of errors in the entire tree, including children.
-
         """
 
         child_errors = sum(len(tree) for _, tree in iteritems(self._contents))
@@ -279,6 +301,21 @@ class ErrorTree(object):
 
 
 def by_relevance(weak=WEAK_MATCHES, strong=STRONG_MATCHES):
+    """
+    Create a key function that can be used to sort errors by relevance.
+
+    Arguments:
+        weak (set):
+            a collection of validator names to consider to be "weak".
+            If there are two errors at the same level of the instance
+            and one is in the set of weak validator names, the other
+            error will take priority. By default, :validator:`anyOf` and
+            :validator:`oneOf` are considered weak validators and will
+            be superseded by other same-level validation errors.
+
+        strong (set):
+            a collection of validator names to consider to be "strong"
+    """
     def relevance(error):
         validator = error.validator
         return -len(error.path), validator not in weak, validator in strong
@@ -289,6 +326,43 @@ relevance = by_relevance()
 
 
 def best_match(errors, key=relevance):
+    """
+    Try to find an error that appears to be the best match among given errors.
+
+    In general, errors that are higher up in the instance (i.e. for which
+    `ValidationError.path` is shorter) are considered better matches,
+    since they indicate "more" is wrong with the instance.
+
+    If the resulting match is either :validator:`oneOf` or :validator:`anyOf`,
+    the *opposite* assumption is made -- i.e. the deepest error is picked,
+    since these validators only need to match once, and any other errors may
+    not be relevant.
+
+    Arguments:
+        errors (collections.Iterable):
+
+            the errors to select from. Do not provide a mixture of
+            errors from different validation attempts (i.e. from
+            different instances or schemas), since it won't produce
+            sensical output.
+
+        key (collections.Callable):
+
+            the key to use when sorting errors. See `relevance` and
+            transitively `by_relevance` for more details (the default is
+            to sort with the defaults of that function). Changing the
+            default is only useful if you want to change the function
+            that rates errors but still want the error context descent
+            done by this function.
+
+    Returns:
+        the best matching error, or ``None`` if the iterable was empty
+
+    .. note::
+
+        This function is a heuristic. Its return value may change for a given
+        set of inputs from version to version if better heuristics are added.
+    """
     errors = iter(errors)
     best = next(errors, None)
     if best is None:
diff -pruN 3.0.2-4/jsonschema/_format.py 3.2.0-5/jsonschema/_format.py
--- 3.0.2-4/jsonschema/_format.py	2019-08-02 00:53:34.000000000 +0000
+++ 3.2.0-5/jsonschema/_format.py	2019-11-18 12:36:14.000000000 +0000
@@ -28,7 +28,6 @@ class FormatChecker(object):
 
             The known formats to validate. This argument can be used to
             limit which formats will be used during validation.
-
     """
 
     checkers = {}
@@ -39,6 +38,9 @@ class FormatChecker(object):
         else:
             self.checkers = dict((k, self.checkers[k]) for k in formats)
 
+    def __repr__(self):
+        return "<FormatChecker checkers={}>".format(sorted(self.checkers))
+
     def checks(self, format, raises=()):
         """
         Register a decorated function as validating a new format.
@@ -57,7 +59,6 @@ class FormatChecker(object):
                 The exception object will be accessible as the
                 `jsonschema.exceptions.ValidationError.cause` attribute of the
                 resulting validation error.
-
         """
 
         def _checks(func):
@@ -85,7 +86,6 @@ class FormatChecker(object):
         Raises:
 
             FormatError: if the instance does not conform to ``format``
-
         """
 
         if format not in self.checkers:
@@ -119,7 +119,6 @@ class FormatChecker(object):
         Returns:
 
             bool: whether it conformed
-
         """
 
         try:
@@ -249,7 +248,27 @@ else:
 try:
     import rfc3987
 except ImportError:
-    pass
+    try:
+        from rfc3986_validator import validate_rfc3986
+    except ImportError:
+        pass
+    else:
+        @_checks_drafts(name="uri")
+        def is_uri(instance):
+            if not isinstance(instance, str_types):
+                return True
+            return validate_rfc3986(instance, rule="URI")
+
+        @_checks_drafts(
+            draft6="uri-reference",
+            draft7="uri-reference",
+            raises=ValueError,
+        )
+        def is_uri_reference(instance):
+            if not isinstance(instance, str_types):
+                return True
+            return validate_rfc3986(instance, rule="URI_reference")
+
 else:
     @_checks_drafts(draft7="iri", raises=ValueError)
     def is_iri(instance):
@@ -281,15 +300,19 @@ else:
 
 
 try:
-    import strict_rfc3339
+    from strict_rfc3339 import validate_rfc3339
 except ImportError:
-    pass
-else:
+    try:
+        from rfc3339_validator import validate_rfc3339
+    except ImportError:
+        validate_rfc3339 = None
+
+if validate_rfc3339:
     @_checks_drafts(name="date-time")
     def is_datetime(instance):
         if not isinstance(instance, str_types):
             return True
-        return strict_rfc3339.validate_rfc3339(instance)
+        return validate_rfc3339(instance)
 
     @_checks_drafts(draft7="time")
     def is_time(instance):
diff -pruN 3.0.2-4/jsonschema/__init__.py 3.2.0-5/jsonschema/__init__.py
--- 3.0.2-4/jsonschema/__init__.py	2019-08-02 00:53:34.000000000 +0000
+++ 3.2.0-5/jsonschema/__init__.py	2019-11-18 12:36:14.000000000 +0000
@@ -6,7 +6,6 @@ supported JSON Schema versions.
 
 Most commonly, `validate` is the quickest way to simply validate a given
 instance under a schema, and will create a validator for you.
-
 """
 
 from jsonschema.exceptions import (
@@ -28,6 +27,8 @@ from jsonschema.validators import (
     RefResolver,
     validate,
 )
-
-from pkg_resources import get_distribution
-__version__ = get_distribution(__name__).version
+try:
+    from importlib import metadata
+except ImportError: # for Python<3.8
+    import importlib_metadata as metadata
+__version__ = metadata.version("jsonschema")
diff -pruN 3.0.2-4/jsonschema/tests/_helpers.py 3.2.0-5/jsonschema/tests/_helpers.py
--- 3.0.2-4/jsonschema/tests/_helpers.py	1970-01-01 00:00:00.000000000 +0000
+++ 3.2.0-5/jsonschema/tests/_helpers.py	2019-11-18 12:36:14.000000000 +0000
@@ -0,0 +1,5 @@
+def bug(issue=None):
+    message = "A known bug."
+    if issue is not None:
+        message += " See issue #{issue}.".format(issue=issue)
+    return message
diff -pruN 3.0.2-4/jsonschema/tests/_suite.py 3.2.0-5/jsonschema/tests/_suite.py
--- 3.0.2-4/jsonschema/tests/_suite.py	2019-08-02 00:53:34.000000000 +0000
+++ 3.2.0-5/jsonschema/tests/_suite.py	2019-11-18 12:36:14.000000000 +0000
@@ -1,8 +1,8 @@
 """
 Python representations of the JSON Schema Test Suite tests.
-
 """
 
+from functools import partial
 import json
 import os
 import re
@@ -71,12 +71,12 @@ class Version(object):
 
     name = attr.ib()
 
-    def benchmark(self, runner):  # pragma: no cover
+    def benchmark(self, runner, **kwargs):  # pragma: no cover
         for suite in self.tests():
             for test in suite:
                 runner.bench_func(
-                    name=test.fully_qualified_name,
-                    func=test.validate_ignoring_errors,
+                    test.fully_qualified_name,
+                    partial(test.validate_ignoring_errors, **kwargs),
                 )
 
     def tests(self):
@@ -202,9 +202,11 @@ class _Test(object):
         reason = skip(self)
         return unittest.skipIf(reason is not None, reason)(fn)
 
-    def validate(self, Validator=None, **kwargs):
+    def validate(self, Validator, **kwargs):
         resolver = jsonschema.RefResolver.from_schema(
-            schema=self.schema, store=self._remotes,
+            schema=self.schema,
+            store=self._remotes,
+            id_of=Validator.ID_OF,
         )
         jsonschema.validate(
             instance=self.data,
@@ -214,9 +216,9 @@ class _Test(object):
             **kwargs
         )
 
-    def validate_ignoring_errors(self, **kwargs):  # pragma: no cover
+    def validate_ignoring_errors(self, Validator):  # pragma: no cover
         try:
-            self.validate(**kwargs)
+            self.validate(Validator=Validator)
         except jsonschema.ValidationError:
             pass
 
diff -pruN 3.0.2-4/jsonschema/tests/test_exceptions.py 3.2.0-5/jsonschema/tests/test_exceptions.py
--- 3.0.2-4/jsonschema/tests/test_exceptions.py	2019-08-02 00:53:34.000000000 +0000
+++ 3.2.0-5/jsonschema/tests/test_exceptions.py	2019-11-18 12:36:14.000000000 +0000
@@ -35,7 +35,6 @@ class TestBestMatch(TestCase):
         """
         A property you *must* match is probably better than one you have to
         match a part of.
-
         """
 
         validator = Draft4Validator(
@@ -56,7 +55,6 @@ class TestBestMatch(TestCase):
 
         I.e. since only one of the schemas must match, we look for the most
         relevant one.
-
         """
 
         validator = Draft4Validator(
@@ -82,7 +80,6 @@ class TestBestMatch(TestCase):
 
         I.e. since only one of the schemas must match, we look for the most
         relevant one.
-
         """
 
         validator = Draft4Validator(
@@ -104,7 +101,6 @@ class TestBestMatch(TestCase):
         """
         Now, if the error is allOf, we traverse but select the *most* relevant
         error from the context, because all schemas here must match anyways.
-
         """
 
         validator = Draft4Validator(
@@ -281,7 +277,6 @@ class TestErrorTree(TestCase):
         If a validator is dumb (like :validator:`required` in draft 3) and
         refers to a path that isn't in the instance, the tree still properly
         returns a subtree for that path.
-
         """
 
         error = exceptions.ValidationError(
@@ -441,7 +436,6 @@ class TestErrorInitReprStr(TestCase):
         Check for https://github.com/Julian/jsonschema/issues/164 which
         rendered exceptions unusable when a `ValidationError` involved
         instances with an `__eq__` method that returned truthy values.
-
         """
 
         class DontEQMeBro(object):
diff -pruN 3.0.2-4/jsonschema/tests/test_format.py 3.2.0-5/jsonschema/tests/test_format.py
--- 3.0.2-4/jsonschema/tests/test_format.py	2019-08-02 00:53:34.000000000 +0000
+++ 3.2.0-5/jsonschema/tests/test_format.py	2019-11-18 12:36:14.000000000 +0000
@@ -1,6 +1,5 @@
 """
 Tests for the parts of jsonschema related to the :validator:`format` property.
-
 """
 
 from unittest import TestCase
@@ -78,3 +77,13 @@ class TestFormatChecker(TestCase):
         checker = FormatChecker()
         with self.assertRaises(FormatError):
             checker.check(instance="not-an-ipv4", format="ipv4")
+
+    def test_repr(self):
+        checker = FormatChecker(formats=())
+        checker.checks("foo")(lambda thing: True)
+        checker.checks("bar")(lambda thing: True)
+        checker.checks("baz")(lambda thing: True)
+        self.assertEqual(
+            repr(checker),
+            "<FormatChecker checkers=['bar', 'baz', 'foo']>",
+        )
diff -pruN 3.0.2-4/jsonschema/tests/test_jsonschema_test_suite.py 3.2.0-5/jsonschema/tests/test_jsonschema_test_suite.py
--- 3.0.2-4/jsonschema/tests/test_jsonschema_test_suite.py	2019-08-02 00:53:34.000000000 +0000
+++ 3.2.0-5/jsonschema/tests/test_jsonschema_test_suite.py	2019-11-18 12:36:14.000000000 +0000
@@ -19,6 +19,7 @@ from jsonschema import (
     draft6_format_checker,
     draft7_format_checker,
 )
+from jsonschema.tests._helpers import bug
 from jsonschema.tests._suite import Suite
 from jsonschema.validators import _DEPRECATED_DEFAULT_TYPES, create
 
@@ -65,17 +66,10 @@ else:
         return
 
 
-def bug(issue=None):
-    message = "A known bug."
-    if issue is not None:
-        message += " See issue #{issue}.".format(issue=issue)
-    return message
-
-
 TestDraft3 = DRAFT3.to_unittest_testcase(
     DRAFT3.tests(),
-    DRAFT3.optional_tests_of(name="format"),
     DRAFT3.optional_tests_of(name="bignum"),
+    DRAFT3.optional_tests_of(name="format"),
     DRAFT3.optional_tests_of(name="zeroTerminatedFloats"),
     Validator=Draft3Validator,
     format_checker=draft3_format_checker,
@@ -93,8 +87,8 @@ TestDraft3 = DRAFT3.to_unittest_testcase
 
 TestDraft4 = DRAFT4.to_unittest_testcase(
     DRAFT4.tests(),
-    DRAFT4.optional_tests_of(name="format"),
     DRAFT4.optional_tests_of(name="bignum"),
+    DRAFT4.optional_tests_of(name="format"),
     DRAFT4.optional_tests_of(name="zeroTerminatedFloats"),
     Validator=Draft4Validator,
     format_checker=draft4_format_checker,
@@ -128,11 +122,6 @@ TestDraft4 = DRAFT4.to_unittest_testcase
         or skip(
             message=bug(),
             subject="refRemote",
-            case_description="base URI change - change folder",
-        )(test)
-        or skip(
-            message=bug(),
-            subject="refRemote",
             case_description="base URI change - change folder in subschema",
         )(test)
         or skip(
@@ -146,8 +135,8 @@ TestDraft4 = DRAFT4.to_unittest_testcase
 
 TestDraft6 = DRAFT6.to_unittest_testcase(
     DRAFT6.tests(),
-    DRAFT6.optional_tests_of(name="format"),
     DRAFT6.optional_tests_of(name="bignum"),
+    DRAFT6.optional_tests_of(name="format"),
     DRAFT6.optional_tests_of(name="zeroTerminatedFloats"),
     Validator=Draft6Validator,
     format_checker=draft6_format_checker,
@@ -181,11 +170,6 @@ TestDraft6 = DRAFT6.to_unittest_testcase
         or skip(
             message=bug(),
             subject="refRemote",
-            case_description="base URI change - change folder",
-        )(test)
-        or skip(
-            message=bug(),
-            subject="refRemote",
             case_description="base URI change - change folder in subschema",
         )(test)
         or skip(
@@ -201,6 +185,7 @@ TestDraft7 = DRAFT7.to_unittest_testcase
     DRAFT7.tests(),
     DRAFT7.format_tests(),
     DRAFT7.optional_tests_of(name="bignum"),
+    DRAFT7.optional_tests_of(name="content"),
     DRAFT7.optional_tests_of(name="zeroTerminatedFloats"),
     Validator=Draft7Validator,
     format_checker=draft7_format_checker,
@@ -234,11 +219,6 @@ TestDraft7 = DRAFT7.to_unittest_testcase
         or skip(
             message=bug(),
             subject="refRemote",
-            case_description="base URI change - change folder",
-        )(test)
-        or skip(
-            message=bug(),
-            subject="refRemote",
             case_description="base URI change - change folder in subschema",
         )(test)
         or skip(
@@ -246,6 +226,25 @@ TestDraft7 = DRAFT7.to_unittest_testcase
             subject="date-time",
             description="case-insensitive T and Z",
         )(test)
+        or skip(
+            message=bug(593),
+            subject="content",
+            case_description=(
+                "validation of string-encoded content based on media type"
+            ),
+        )(test)
+        or skip(
+            message=bug(593),
+            subject="content",
+            case_description="validation of binary string-encoding",
+        )(test)
+        or skip(
+            message=bug(593),
+            subject="content",
+            case_description=(
+                "validation of binary-encoded media type documents"
+            ),
+        )(test)
     ),
 )
 
diff -pruN 3.0.2-4/jsonschema/tests/test_validators.py 3.2.0-5/jsonschema/tests/test_validators.py
--- 3.0.2-4/jsonschema/tests/test_validators.py	2019-08-02 00:53:34.000000000 +0000
+++ 3.2.0-5/jsonschema/tests/test_validators.py	2019-11-18 12:36:14.000000000 +0000
@@ -14,7 +14,7 @@ import attr
 
 from jsonschema import FormatChecker, TypeChecker, exceptions, validators
 from jsonschema.compat import PY3, pathname2url
-import jsonschema
+from jsonschema.tests._helpers import bug
 
 
 def startswith(validator, startswith, instance, schema):
@@ -1154,7 +1154,6 @@ class ValidatorTestMixin(MetaSchemaTests
         """
         Legacy RefResolvers support only the context manager form of
         resolution.
-
         """
 
         class LegacyRefResolver(object):
@@ -1183,6 +1182,12 @@ class ValidatorTestMixin(MetaSchemaTests
     def test_string_a_bytestring_is_a_string(self):
         self.Validator({"type": "string"}).validate(b"foo")
 
+    def test_patterns_can_be_native_strings(self):
+        """
+        See https://github.com/Julian/jsonschema/issues/611.
+        """
+        self.Validator({"pattern": "foo"}).validate("foo")
+
     def test_it_can_validate_with_decimals(self):
         schema = {"items": {"type": "number"}}
         Validator = validators.extend(
@@ -1283,14 +1288,14 @@ class AntiDraft6LeakMixin(object):
             self.Validator.check_schema(False)
         self.assertIn("False is not of type", str(e.exception))
 
-    @unittest.skip("This test fails, but it shouldn't.")
+    @unittest.skip(bug(523))
     def test_True_is_not_a_schema_even_if_you_forget_to_check(self):
         resolver = validators.RefResolver("", {})
         with self.assertRaises(Exception) as e:
             self.Validator(True, resolver=resolver).validate(12)
         self.assertNotIsInstance(e.exception, exceptions.ValidationError)
 
-    @unittest.skip("This test fails, but it shouldn't.")
+    @unittest.skip(bug(523))
     def test_False_is_not_a_schema_even_if_you_forget_to_check(self):
         resolver = validators.RefResolver("", {})
         with self.assertRaises(Exception) as e:
@@ -1348,35 +1353,6 @@ class TestDraft7Validator(ValidatorTestM
     invalid = {"type": "integer"}, "foo"
 
 
-class TestBuiltinFormats(TestCase):
-    """
-    The built-in (specification-defined) formats do not raise type errors.
-
-    If an instance or value is not a string, it should be ignored.
-    """
-
-    # These tests belong upstream.
-    # See https://github.com/json-schema-org/JSON-Schema-Test-Suite/issues/246
-
-
-for Validator, checker in (
-    (validators.Draft3Validator, jsonschema.draft3_format_checker),
-    (validators.Draft4Validator, jsonschema.draft4_format_checker),
-    (validators.Draft6Validator, jsonschema.draft6_format_checker),
-    (validators.Draft7Validator, jsonschema.draft7_format_checker),
-):
-    for format in checker.checkers:
-        def test(self, checker=checker, format=format):
-            validator = Validator({"format": format}, format_checker=checker)
-            validator.validate(123)
-
-        name = "test_{}_{}_ignores_non_strings".format(
-            Validator.__name__, format,
-        )
-        test.__name__ = name
-        setattr(TestBuiltinFormats, name, test)
-
-
 class TestValidatorFor(SynchronousTestCase):
     def test_draft_3(self):
         schema = {"$schema": "http://json-schema.org/draft-03/schema"}
diff -pruN 3.0.2-4/jsonschema/_types.py 3.2.0-5/jsonschema/_types.py
--- 3.0.2-4/jsonschema/_types.py	2019-08-02 00:53:34.000000000 +0000
+++ 3.2.0-5/jsonschema/_types.py	2019-11-18 12:36:14.000000000 +0000
@@ -104,7 +104,7 @@ class TypeChecker(object):
 
                 The name of the type to check.
 
-            fn (callable):
+            fn (collections.Callable):
 
                 A function taking exactly two parameters - the type
                 checker calling the function and the instance to check.
diff -pruN 3.0.2-4/jsonschema/_utils.py 3.2.0-5/jsonschema/_utils.py
--- 3.0.2-4/jsonschema/_utils.py	2019-08-02 00:53:34.000000000 +0000
+++ 3.2.0-5/jsonschema/_utils.py	2019-11-18 12:36:14.000000000 +0000
@@ -9,7 +9,6 @@ from jsonschema.compat import MutableMap
 class URIDict(MutableMapping):
     """
     Dictionary which uses normalized URIs as keys.
-
     """
 
     def normalize(self, uri):
@@ -41,7 +40,6 @@ class URIDict(MutableMapping):
 class Unset(object):
     """
     An as-of-yet unset attribute or unprovided default parameter.
-
     """
 
     def __repr__(self):
@@ -51,7 +49,6 @@ class Unset(object):
 def load_schema(name):
     """
     Load a schema from ./schemas/``name``.json and return it.
-
     """
 
     data = pkgutil.get_data("jsonschema", "schemas/{0}.json".format(name))
@@ -61,7 +58,6 @@ def load_schema(name):
 def indent(string, times=1):
     """
     A dumb version of `textwrap.indent` from Python 3.3.
-
     """
 
     return "\n".join(" " * (4 * times) + line for line in string.splitlines())
@@ -78,7 +74,6 @@ def format_as_index(indices):
         indices (sequence):
 
             The indices to format.
-
     """
 
     if not indices:
@@ -94,7 +89,6 @@ def find_additional_properties(instance,
     / or ``patternProperties``.
 
     Assumes ``instance`` is dict-like already.
-
     """
 
     properties = schema.get("properties", {})
@@ -109,7 +103,6 @@ def find_additional_properties(instance,
 def extras_msg(extras):
     """
     Create an error message for extra items or properties.
-
     """
 
     if len(extras) == 1:
@@ -127,7 +120,6 @@ def types_msg(instance, types):
     be considered to be a description of that object and used as its type.
 
     Otherwise the message is simply the reprs of the given ``types``.
-
     """
 
     reprs = []
@@ -147,7 +139,6 @@ def flatten(suitable_for_isinstance):
         * an arbitrary nested tree of tuples
 
     Return a flattened tuple of the given argument.
-
     """
 
     types = set()
@@ -167,7 +158,6 @@ def ensure_list(thing):
     Wrap ``thing`` in a list if it's a single str.
 
     Otherwise, return it unchanged.
-
     """
 
     if isinstance(thing, str_types):
diff -pruN 3.0.2-4/jsonschema/validators.py 3.2.0-5/jsonschema/validators.py
--- 3.0.2-4/jsonschema/validators.py	2019-08-02 00:53:34.000000000 +0000
+++ 3.2.0-5/jsonschema/validators.py	2019-11-18 12:36:14.000000000 +0000
@@ -1,3 +1,6 @@
+"""
+Creation and extension of validators, with implementations for existing drafts.
+"""
 from __future__ import division
 
 from warnings import warn
@@ -38,9 +41,9 @@ class _DontDoThat(Exception):
     """
     Raised when a Validators with non-default type checker is misused.
 
-    Asking one for DEFAULT_TYPES doesn't make sense, since type checkers exist
-    for the unrepresentable cases where DEFAULT_TYPES can't represent the type
-    relationship.
+    Asking one for DEFAULT_TYPES doesn't make sense, since type checkers
+    exist for the unrepresentable cases where DEFAULT_TYPES can't
+    represent the type relationship.
     """
 
     def __str__(self):
@@ -114,7 +117,9 @@ def validates(version):
 
     Returns:
 
-        callable: a class decorator to decorate the validator with the version
+        collections.Callable:
+
+            a class decorator to decorate the validator with the version
     """
 
     def _validates(cls):
@@ -184,17 +189,17 @@ def create(
         version (str):
 
             an identifier for the version that this validator class will
-            validate. If provided, the returned validator class will have its
-            ``__name__`` set to include the version, and also will have
-            `jsonschema.validators.validates` automatically called for the
-            given version.
+            validate. If provided, the returned validator class will
+            have its ``__name__`` set to include the version, and also
+            will have `jsonschema.validators.validates` automatically
+            called for the given version.
 
         type_checker (jsonschema.TypeChecker):
 
             a type checker, used when applying the :validator:`type` validator.
 
-            If unprovided, a `jsonschema.TypeChecker` will be created with
-            a set of default types typical of JSON Schema drafts.
+            If unprovided, a `jsonschema.TypeChecker` will be created
+            with a set of default types typical of JSON Schema drafts.
 
         default_types (collections.Mapping):
 
@@ -202,11 +207,11 @@ def create(
 
                 Please use the type_checker argument instead.
 
-            If set, it provides mappings of JSON types to Python types that
-            will be converted to functions and redefined in this object's
-            `jsonschema.TypeChecker`.
+            If set, it provides mappings of JSON types to Python types
+            that will be converted to functions and redefined in this
+            object's `jsonschema.TypeChecker`.
 
-        id_of (callable):
+        id_of (collections.Callable):
 
             A function that given a schema, returns its ID.
 
@@ -381,14 +386,14 @@ def extend(validator, validators=(), ver
 
             .. note::
 
-                Any validator callables with the same name as an existing one
-                will (silently) replace the old validator callable entirely,
-                effectively overriding any validation done in the "parent"
-                validator class.
+                Any validator callables with the same name as an
+                existing one will (silently) replace the old validator
+                callable entirely, effectively overriding any validation
+                done in the "parent" validator class.
 
                 If you wish to instead extend the behavior of a parent's
-                validator callable, delegate and call it directly in the new
-                validator function by retrieving it using
+                validator callable, delegate and call it directly in
+                the new validator function by retrieving it using
                 ``OldValidator.VALIDATORS["validator_name"]``.
 
         version (str):
@@ -611,12 +616,12 @@ class RefResolver(object):
             A mapping from URI schemes to functions that should be used
             to retrieve them
 
-        urljoin_cache (functools.lru_cache):
+        urljoin_cache (:func:`functools.lru_cache`):
 
             A cache that will be used for caching the results of joining
             the resolution scope to subscopes.
 
-        remote_cache (functools.lru_cache):
+        remote_cache (:func:`functools.lru_cache`):
 
             A cache that will be used for caching the results of
             resolved remote URLs.
@@ -677,11 +682,26 @@ class RefResolver(object):
         return cls(base_uri=id_of(schema), referrer=schema, *args, **kwargs)
 
     def push_scope(self, scope):
+        """
+        Enter a given sub-scope.
+
+        Treats further dereferences as being performed underneath the
+        given scope.
+        """
         self._scopes_stack.append(
             self._urljoin_cache(self.resolution_scope, scope),
         )
 
     def pop_scope(self):
+        """
+        Exit the most recent entered scope.
+
+        Treats further dereferences as being performed underneath the
+        original scope.
+
+        Don't call this method more times than `push_scope` has been
+        called.
+        """
         try:
             self._scopes_stack.pop()
         except IndexError:
@@ -693,15 +713,24 @@ class RefResolver(object):
 
     @property
     def resolution_scope(self):
+        """
+        Retrieve the current resolution scope.
+        """
         return self._scopes_stack[-1]
 
     @property
     def base_uri(self):
+        """
+        Retrieve the current base URI, not including any fragment.
+        """
         uri, _ = urldefrag(self.resolution_scope)
         return uri
 
     @contextlib.contextmanager
     def in_scope(self, scope):
+        """
+        Temporarily enter the given scope for the duration of the context.
+        """
         self.push_scope(scope)
         try:
             yield
@@ -730,10 +759,16 @@ class RefResolver(object):
             self.pop_scope()
 
     def resolve(self, ref):
+        """
+        Resolve the given reference.
+        """
         url = self._urljoin_cache(self.resolution_scope, ref)
         return url, self._remote_cache(url)
 
     def resolve_from_url(self, url):
+        """
+        Resolve the given remote URL.
+        """
         url, fragment = urldefrag(url)
         try:
             document = self.store[url]
@@ -842,9 +877,9 @@ def validate(instance, schema, cls=None,
             ...
         ValidationError: [2, 3, 4] is too long
 
-    :func:`validate` will first verify that the provided schema is itself
-    valid, since not doing so can lead to less obvious error messages and fail
-    in less obvious or consistent ways.
+    :func:`validate` will first verify that the provided schema is
+    itself valid, since not doing so can lead to less obvious error
+    messages and fail in less obvious or consistent ways.
 
     If you know you have a valid schema already, especially if you
     intend to validate multiple instances with the same schema, you
@@ -866,16 +901,16 @@ def validate(instance, schema, cls=None,
 
             The class that will be used to validate the instance.
 
-    If the ``cls`` argument is not provided, two things will happen in
-    accordance with the specification. First, if the schema has a
-    :validator:`$schema` property containing a known meta-schema [#]_ then the
-    proper validator will be used.  The specification recommends that all
-    schemas contain :validator:`$schema` properties for this reason. If no
-    :validator:`$schema` property is found, the default validator class is
-    the latest released draft.
+    If the ``cls`` argument is not provided, two things will happen
+    in accordance with the specification. First, if the schema has a
+    :validator:`$schema` property containing a known meta-schema [#]_
+    then the proper validator will be used. The specification recommends
+    that all schemas contain :validator:`$schema` properties for this
+    reason. If no :validator:`$schema` property is found, the default
+    validator class is the latest released draft.
 
-    Any other provided positional and keyword arguments will be passed on when
-    instantiating the ``cls``.
+    Any other provided positional and keyword arguments will be passed
+    on when instantiating the ``cls``.
 
     Raises:
 
@@ -903,8 +938,8 @@ def validator_for(schema, default=_LATES
     """
     Retrieve the validator class appropriate for validating the given schema.
 
-    Uses the :validator:`$schema` property that should be present in the given
-    schema to look up the appropriate validator class.
+    Uses the :validator:`$schema` property that should be present in the
+    given schema to look up the appropriate validator class.
 
     Arguments:
 
@@ -914,11 +949,11 @@ def validator_for(schema, default=_LATES
 
         default:
 
-            the default to return if the appropriate validator class cannot be
-            determined.
+            the default to return if the appropriate validator class
+            cannot be determined.
 
-            If unprovided, the default is to return
-            the latest supported draft.
+            If unprovided, the default is to return the latest supported
+            draft.
     """
     if schema is True or schema is False or u"$schema" not in schema:
         return default
diff -pruN 3.0.2-4/README.rst 3.2.0-5/README.rst
--- 3.0.2-4/README.rst	2019-08-02 00:53:34.000000000 +0000
+++ 3.2.0-5/README.rst	2019-11-18 12:36:14.000000000 +0000
@@ -12,9 +12,9 @@ jsonschema
    :alt: Supported Python versions
    :target: https://pypi.org/project/jsonschema/
 
-.. |Travis| image:: https://travis-ci.org/Julian/jsonschema.svg?branch=master
+.. |Travis| image:: https://travis-ci.com/Julian/jsonschema.svg?branch=master
    :alt: Travis build status
-   :target: https://travis-ci.org/Julian/jsonschema
+   :target: https://travis-ci.com/Julian/jsonschema
 
 .. |AppVeyor| image:: https://ci.appveyor.com/api/projects/status/adtt0aiaihy6muyn/branch/master?svg=true
    :alt: AppVeyor build status
@@ -74,7 +74,7 @@ Features
 * `Lazy validation <https://python-jsonschema.readthedocs.io/en/latest/validate/#jsonschema.IValidator.iter_errors>`_
   that can iteratively report *all* validation errors.
 
-* `Programmatic querying <https://python-jsonschema.readthedocs.io/en/latest/errors/#module-jsonschema>`_
+* `Programmatic querying <https://python-jsonschema.readthedocs.io/en/latest/errors/>`_
   of which properties or items failed validation.
 
 
@@ -103,21 +103,16 @@ Online demo Notebook will look similar t
 
 .. image:: https://user-images.githubusercontent.com/1155573/56820861-5c1c1880-6823-11e9-802a-ce01c5ec574f.gif
     :alt: Open Live Demo
-    :width: 50 px
-    :scale: 10 %
-
+    :width: 480 px
 
 
 Release Notes
 -------------
 
-Version 3.0 brings support for Draft 7 (and 6). The interface for redefining
-types has also been majorly overhauled to support easier redefinition of the
-types a Validator will accept or allow.
-
-jsonschema is also now tested under Windows via AppVeyor.
-
-Thanks to all who contributed pull requests along the way.
+v3.1 brings support for ECMA 262 dialect regular expressions
+throughout schemas, as recommended by the specification. Big
+thanks to @Zac-HD for authoring support in a new `js-regex
+<https://pypi.org/project/js-regex/>`_ library.
 
 
 Running the Test Suite
@@ -137,19 +132,20 @@ favorite test runner. The tests live in
 Benchmarks
 ----------
 
-``jsonschema``'s benchmarks make use of `perf <https://perf.readthedocs.io>`_.
+``jsonschema``'s benchmarks make use of `pyperf
+<https://pyperf.readthedocs.io>`_.
 
-Running them can be done via ``tox -e perf``, or by invoking the ``perf``
+Running them can be done via ``tox -e perf``, or by invoking the ``pyperf``
 commands externally (after ensuring that both it and ``jsonschema`` itself are
 installed)::
 
-    $ python -m perf jsonschema/benchmarks/test_suite.py --hist --output results.json
+    $ python -m pyperf jsonschema/benchmarks/test_suite.py --hist --output results.json
 
 To compare to a previous run, use::
 
-    $ python -m perf compare_to --table reference.json results.json
+    $ python -m pyperf compare_to --table reference.json results.json
 
-See the ``perf`` documentation for more details.
+See the ``pyperf`` documentation for more details.
 
 
 Community
diff -pruN 3.0.2-4/setup.cfg 3.2.0-5/setup.cfg
--- 3.0.2-4/setup.cfg	2019-08-02 00:53:34.000000000 +0000
+++ 3.2.0-5/setup.cfg	2019-11-18 12:36:14.000000000 +0000
@@ -19,6 +19,7 @@ classifiers =
     Programming Language :: Python :: 3.5
     Programming Language :: Python :: 3.6
     Programming Language :: Python :: 3.7
+    Programming Language :: Python :: 3.8
     Programming Language :: Python :: Implementation :: CPython
     Programming Language :: Python :: Implementation :: PyPy
 
@@ -27,6 +28,7 @@ packages = find:
 setup_requires = setuptools_scm
 install_requires =
     attrs>=17.4.0
+    importlib_metadata;python_version<'3.8'
     pyrsistent>=0.14.0
     setuptools
     six>=1.11.0
@@ -39,6 +41,12 @@ format =
     rfc3987
     strict-rfc3339
     webcolors
+format_nongpl =
+    idna
+    jsonpointer>1.13
+    webcolors
+    rfc3986-validator>0.1.0
+    rfc3339-validator
 
 [options.entry_points]
 console_scripts =
@@ -47,10 +55,22 @@ console_scripts =
 [options.package_data]
 jsonschema = schemas/*.json
 
+[bdist_wheel]
+universal = 1
+
 [flake8]
+builtins = unicode
 exclude =
     jsonschema/__init__.py
     jsonschema/_reflect.py
 
-[wheel]
-universal = 1
+[pydocstyle]
+match = (?!(test_|_|compat|cli)).*\.py  # see PyCQA/pydocstyle#323
+add-select =
+    D410, # Trailing whitespace plz
+add-ignore =
+    D107,  # Hah, no
+    D200,  # 1-line docstrings don't need to be on one line
+    D202,  # One line is fine.
+    D412,  # Trailing whitespace plz
+    D413,  # No trailing whitespace plz
diff -pruN 3.0.2-4/tox.ini 3.2.0-5/tox.ini
--- 3.0.2-4/tox.ini	2019-08-02 00:53:34.000000000 +0000
+++ 3.2.0-5/tox.ini	2019-11-18 12:36:14.000000000 +0000
@@ -1,11 +1,13 @@
 [tox]
-skipsdist = True
 envlist =
-    py{35,36,37,py,py3}-{build,tests},
-    docs-{html,doctest,linkcheck,spelling,style},
-    readme,
-    safety,
-    style,
+    py{35,36,37,38,py,py3}-{build,tests,tests_nongpl},
+    demo
+    readme
+    safety
+    secrets
+    style
+    docs-{html,doctest,linkcheck,spelling,style}
+skipsdist = True
 
 [testenv]
 changedir = 
@@ -14,16 +16,20 @@ setenv =
     JSON_SCHEMA_TEST_SUITE = {toxinidir}/json
 whitelist_externals =
     python2.7
+    mkdir
+    rm
     sh
     virtualenv
 commands =
     perf,tests: {envbindir}/python -m pip install '{toxinidir}[format]'
+    tests_nongpl: {envbindir}/python -m pip install '{toxinidir}[format_nongpl]'
 
-    tests: {envbindir}/trial {posargs:jsonschema}
-    py{py,27,37}-tests: {envpython} -m doctest {toxinidir}/README.rst
+    tests,tests_nongpl: {envbindir}/trial {posargs:jsonschema}
+    tests: {envpython} -m doctest {toxinidir}/README.rst
 
-    perf: {envpython} {toxinidir}/jsonschema/benchmarks/json_schema_test_suite.py --inherit-environ JSON_SCHEMA_TEST_SUITE
-    perf: {envpython} {toxinidir}/jsonschema/benchmarks/issue232.py --inherit-environ JSON_SCHEMA_TEST_SUITE
+    perf: mkdir {envtmpdir}/benchmarks/
+    perf: {envpython} {toxinidir}/jsonschema/benchmarks/issue232.py --inherit-environ JSON_SCHEMA_TEST_SUITE --output {envtmpdir}/benchmarks/issue232.json
+    perf: {envpython} {toxinidir}/jsonschema/benchmarks/json_schema_test_suite.py --inherit-environ JSON_SCHEMA_TEST_SUITE --output {envtmpdir}/benchmarks/json_schema_test_suite.json
 
     # Check to make sure that releases build and install properly
     build: virtualenv --quiet --python=python2.7 {envtmpdir}/venv
@@ -35,36 +41,55 @@ commands =
     build: python2.7 {toxinidir}/setup.py --quiet sdist --dist-dir={envtmpdir}/sdist --format=gztar,zip
     build: sh -c '{envbindir}/pip install --quiet --upgrade --force-reinstall {envtmpdir}/sdist/jsonschema*.tar.gz'
     build: sh -c '{envbindir}/pip install --quiet --upgrade --force-reinstall {envtmpdir}/sdist/jsonschema*.zip'
+
+    build: {envbindir}/python -m pep517.check {toxinidir}
+
+    # FIXME: This has side effects! But it's not my fault... I can't
+    #        figure out yet how to get setuptools to not create this directory
+    #        here yet. But whatever, probably this will change to pep517.build
+    #        soon anways.
+    build: rm -rf {toxinidir}/jsonschema.egg-info
 deps =
-    -r{toxinidir}/test-requirements.txt
+    build: pep517
 
-    tests,coverage,codecov: twisted
-    tests: lxml
-    tests: sphinx
+    perf: pyperf
+
+    tests,tests_nongpl,coverage,codecov: -r{toxinidir}/test-requirements.txt
 
     coverage,codecov: coverage
     codecov: codecov
 
-    perf: perf
-    safety: safety
+[testenv:bandit]
+deps = bandit
+commands = {envbindir}/bandit --recursive {toxinidir}/jsonschema
+
+[testenv:demo]
+deps = jupyter
+commands =
+    {envbindir}/jupyter nbconvert --output-dir {envtmpdir} {toxinidir}/DEMO.ipynb
 
 [testenv:readme]
 changedir = {toxinidir}
 deps = readme_renderer
-commands = 
+commands =
     {envbindir}/python setup.py check --restructuredtext --strict
 
 [testenv:safety]
 deps = safety
-commands = 
+commands =
     {envbindir}/pip install '{toxinidir}[format]'
     {envbindir}/safety check
 
+[testenv:secrets]
+deps = detect-secrets
+commands = {envbindir}/detect-secrets scan {toxinidir}
+
 [testenv:style]
+basepython = pypy3
 deps =
     ebb-lint>=0.19.1.0
-    git+https://github.com/pyga/awpa@py37
-commands = {envbindir}/flake8 {posargs} {toxinidir}/jsonschema {toxinidir}/docs {toxinidir}/setup.py
+commands =
+    {envbindir}/flake8 {posargs} {toxinidir}/jsonschema {toxinidir}/docs {toxinidir}/setup.py
 
 [testenv:coverage]
 setenv =
@@ -77,66 +102,52 @@ commands =
     {envbindir}/coverage report --rcfile={toxinidir}/.coveragerc --show-missing
     {envbindir}/coverage html --directory={envtmpdir}/htmlcov --rcfile={toxinidir}/.coveragerc {posargs}
 
-[testenv:codecov]
-passenv = CODECOV* CI TRAVIS TRAVIS_*
-setenv = {[testenv:coverage]setenv}
-commands =
-    {envbindir}/python -m pip install '{toxinidir}[format]'
-    {envbindir}/coverage run --rcfile={toxinidir}/.coveragerc {envbindir}/trial jsonschema
-    {envbindir}/coverage xml -o {envtmpdir}/coverage.xml
-    codecov --required --disable gcov --file {envtmpdir}/coverage.xml
-
 [testenv:docs-html]
-basepython = pypy
-changedir = docs
-whitelist_externals = make
-commands = make -f {toxinidir}/docs/Makefile BUILDDIR={envtmpdir}/build SPHINXOPTS='-a -c {toxinidir}/docs/ -n -T -W {posargs}' html
+basepython = pypy3
+commands = {envpython} -m sphinx -b html {toxinidir}/docs/ {envtmpdir}/build {posargs:-a -n -q -T -W}
 deps =
     -r{toxinidir}/docs/requirements.txt
-    -e{toxinidir}
+    {toxinidir}
 
 [testenv:docs-doctest]
-basepython = pypy
-changedir = docs
-whitelist_externals = make
-commands = make -f {toxinidir}/docs/Makefile BUILDDIR={envtmpdir}/build SPHINXOPTS='-a -c {toxinidir}/docs/ -n -T -W {posargs}' doctest
+basepython = pypy3
+commands = {envpython} -m sphinx -b doctest {toxinidir}/docs/ {envtmpdir}/build {posargs:-a -n -q -T -W}
 deps =
     -r{toxinidir}/docs/requirements.txt
-    -e{toxinidir}
+    {toxinidir}
 
 [testenv:docs-linkcheck]
-basepython = pypy
-changedir = docs
-whitelist_externals = make
-commands = make -f {toxinidir}/docs/Makefile BUILDDIR={envtmpdir}/build SPHINXOPTS='-a -c {toxinidir}/docs/ -n -T -W {posargs}' linkcheck
+basepython = pypy3
+commands = {envpython} -m sphinx -b linkcheck {toxinidir}/docs/ {envtmpdir}/build {posargs:-a -n -q -T -W}
 deps =
     -r{toxinidir}/docs/requirements.txt
-    -e{toxinidir}
+    {toxinidir}
 
 [testenv:docs-spelling]
-basepython = pypy
-changedir = docs
-whitelist_externals = make
-commands = make -f {toxinidir}/docs/Makefile BUILDDIR={envtmpdir}/build SPHINXOPTS='-a -c {toxinidir}/docs/ -n -T -W {posargs}' spelling
+basepython = pypy3
+commands = {envpython} -m sphinx -b spelling {toxinidir}/docs/ {envtmpdir}/build {posargs:-a -n -q -T -W}
 deps =
     -r{toxinidir}/docs/requirements.txt
-    -e{toxinidir}
+    {toxinidir}
 
 [testenv:docs-style]
-basepython = pypy
-changedir = docs
+basepython = pypy3
 commands = doc8 {posargs} {toxinidir}/docs
 deps =
     doc8
     pygments
     pygments-github-lexers
 
-[doc8]
-ignore-path =
-    version.txt,
-    .*/,
-    _*/
+[testenv:codecov]
+passenv = CODECOV* CI TRAVIS TRAVIS_*
+setenv = {[testenv:coverage]setenv}
+commands =
+    {envbindir}/python -m pip install '{toxinidir}[format]'
+    {envbindir}/coverage run --rcfile={toxinidir}/.coveragerc {envbindir}/trial jsonschema
+    {envbindir}/coverage xml -o {envtmpdir}/coverage.xml
+    codecov --required --disable gcov --file {envtmpdir}/coverage.xml
 
 [travis]
 python =
-  pypy: pypy, docs, readme, safety, style
+  pypy: pypy, readme, safety, secrets
+  pypy3: pypy3, demo, docs, style
diff -pruN 3.0.2-4/.travis.yml 3.2.0-5/.travis.yml
--- 3.0.2-4/.travis.yml	2019-08-02 00:53:34.000000000 +0000
+++ 3.2.0-5/.travis.yml	2019-11-18 12:36:14.000000000 +0000
@@ -8,6 +8,7 @@ python:
   - 3.5
   - 3.6
   - 3.7
+  - 3.8
   - pypy
   - pypy3
 
