[
    {
        "description": "order of evaluation: $id and $ref",
        "schema": {
            "$comment": "$id must be evaluated before $ref to get the proper $ref destination",
            "$id": "/ref1/base.json",
            "allOf": [ { "$ref": "int.json" } ],
            "definitions": {
                "bigint": {
                    "$comment": "canonical uri: /ref1/int.json",
                    "$id": "int.json",
                    "maximum": 10
                },
                "smallint": {
                    "$comment": "canonical uri: /int.json",
                    "$id": "/int.json",
                    "maximum": 2
                }
            }
        },
        "tests": [
            {
                "description": "data is valid against first definition",
                "data": 5,
                "valid": true
            },
            {
                "description": "data is invalid against first definition",
                "data": 50,
                "valid": false
            }
        ]
    },
    {
        "description": "order of evaluation: $id and $anchor and $ref",
        "schema": {
            "$comment": "$id must be evaluated before $ref to get the proper $ref destination",
            "$id": "/ref2/base.json",
            "allOf": [ { "$ref": "#bigint" } ],
            "definitions": {
                "bigint": {
                    "$comment": "canonical uri: /ref2/base.json#/definitions/bigint; another valid uri for this location: /ref2/base.json#bigint",
                    "$id": "#bigint",
                    "maximum": 10
                },
                "smallint": {
                    "$id": "/ref2/",
                    "definitions": {
                        "bigint": {
                            "$comment": "canonical uri: /ref2/#/definitions/smallint; another valid uri for this location: /ref2/#bigint, /ref2/base.json#/definitions/smallint/definitions/bigint",
                            "$id": "#bigint",
                            "maximum": 2
                        }
                    }
                }
            }
        },
        "tests": [
            {
                "description": "data is valid against first definition",
                "data": 5,
                "valid": true
            },
            {
                "description": "data is invalid against first definition",
                "data": 50,
                "valid": false
            }
        ]
    },
    {
        "description": "naive replacement of $ref with its destination is not correct",
        "schema": {
            "definitions": {
                "a_string": { "type": "string" }
            },
            "enum": [
                { "$ref": "#/definitions/a_string" }
            ]
        },
        "tests": [
            {
                "description": "do not evaluate the $ref inside the enum",
                "data": "this is a string",
                "valid": false
            },
            {
                "description": "match the enum exactly",
                "data": { "$ref": "#/definitions/a_string" },
                "valid": true
            }
        ]
    },
    {
        "description": "invalid $ref: invalid anchor fragment",
        "schema": {
            "definitions": {
                "foo": {
                    "$ref": "https://foo.com/bar.json#-not-an-anchor"
                }
            }
        },
        "tests": [
            {
                "description": "an invalid anchor fragment",
                "data": 1,
                "valid": false
            }
        ]
    },
    {
        "description": "invalid $ref: invalid json-pointer fragment",
        "schema": {
            "definitions": {
                "foo": {
                    "$ref": "https://foo.com/bar.json#/~2/not/json/pointer"
                }
            }
        },
        "tests": [
            {
                "description": "an invalid json-pointer fragment",
                "data": 1,
                "valid": false
            }
        ]
    },
    {
        "description": "base URI change - change folder in subschema with path from root",
        "comment": "based on test suite draft7/refRemote.json 'base URI change - change folder in subschema'",
        "schema": {
            "$id": "http://localhost:1234/scope_change_defs.json",
            "type" : "object",
            "properties": {
                "list": { "$ref": "#/definitions/baz/definitions/bar" }
            },
            "definitions": {
                "folderInteger": {
                    "$id": "baseUriChangeFolderInSubschema/folderInteger.json",
                    "type": "integer"
                },
                "baz": {
                    "$id": "baseUriChangeFolderInSubschema/",
                    "definitions": {
                        "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
            }
        ]
     }
]