[
    {
        "description": "not",
        "schema": {
            "$schema": "https://json-schema.org/draft/2020-12/schema",
            "not": {"type": "integer"}
        },
        "tests": [
            {
                "description": "allowed",
                "data": "foo",
                "valid": true
            },
            {
                "description": "disallowed",
                "data": 1,
                "valid": false
            }
        ]
    },
    {
        "description": "not multiple types",
        "schema": {
            "$schema": "https://json-schema.org/draft/2020-12/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": {
            "$schema": "https://json-schema.org/draft/2020-12/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": {
            "$schema": "https://json-schema.org/draft/2020-12/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": "forbid everything with empty schema",
        "schema": {
            "$schema": "https://json-schema.org/draft/2020-12/schema",
            "not": {}
        },
        "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
            }
        ]
    },
    {
        "description": "forbid everything with boolean schema true",
        "schema": {
            "$schema": "https://json-schema.org/draft/2020-12/schema",
            "not": true
        },
        "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
            }
        ]
    },
    {
        "description": "allow everything with boolean schema false",
        "schema": {
            "$schema": "https://json-schema.org/draft/2020-12/schema",
            "not": false
        },
        "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": "double negation",
        "schema": {
            "$schema": "https://json-schema.org/draft/2020-12/schema",
            "not": { "not": {} }
        },
        "tests": [
            {
                "description": "any value is valid",
                "data": "foo",
                "valid": true
            }
        ]
    },
    {
        "description": "collect annotations inside a 'not', even if collection is disabled",
        "schema": {
            "$schema": "https://json-schema.org/draft/2020-12/schema",
            "not": {
                "$comment": "this subschema must still produce annotations internally, even though the 'not' will ultimately discard them",
                "anyOf": [
                    true,
                    { "properties": { "foo": true } }
                ],
                "unevaluatedProperties": false
            }
        },
        "tests": [
            {
                "description": "unevaluated property",
                "data": { "bar": 1 },
                "valid": true
            },
            {
                "description": "annotations are still collected inside a 'not'",
                "data": { "foo": 1 },
                "valid": false
            }
        ]
     }
]
