[
    {
        "description": "a schema given for items",
        "schema": {
            "$schema": "https://json-schema.org/draft/2020-12/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": "items with boolean schema (true)",
        "schema": {
            "$schema": "https://json-schema.org/draft/2020-12/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": {
            "$schema": "https://json-schema.org/draft/2020-12/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 and subitems",
        "schema": {
            "$schema": "https://json-schema.org/draft/2020-12/schema",
            "$defs": {
                "item": {
                    "type": "array",
                    "items": false,
                    "prefixItems": [
                        { "$ref": "#/$defs/sub-item" },
                        { "$ref": "#/$defs/sub-item" }
                    ]
                },
                "sub-item": {
                    "type": "object",
                    "required": ["foo"]
                }
            },
            "type": "array",
            "items": false,
            "prefixItems": [
                { "$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": {
            "$schema": "https://json-schema.org/draft/2020-12/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
            }
        ]
    },
    {
        "description": "prefixItems with no additional items allowed",
        "schema": {
            "$schema": "https://json-schema.org/draft/2020-12/schema",
            "prefixItems": [{}, {}, {}],
            "items": false
        },
        "tests": [
            {
                "description": "empty array",
                "data": [ ],
                "valid": true
            },
            {
                "description": "fewer number of items present (1)",
                "data": [ 1 ],
                "valid": true
            },
            {
                "description": "fewer number of items present (2)",
                "data": [ 1, 2 ],
                "valid": true
            },
            {
                "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": "items does not look in applicators, valid case",
        "schema": {
            "$schema": "https://json-schema.org/draft/2020-12/schema",
            "allOf": [
                { "prefixItems": [ { "minimum": 3 } ] }
            ],
            "items": { "minimum": 5 }
        },
        "tests": [
            {
                "description": "prefixItems in allOf does not constrain items, invalid case",
                "data": [ 3, 5 ],
                "valid": false
            },
            {
                "description": "prefixItems in allOf does not constrain items, valid case",
                "data": [ 5, 5 ],
                "valid": true
            }
        ]
    },
    {
        "description": "prefixItems validation adjusts the starting index for items",
        "schema": {
            "$schema": "https://json-schema.org/draft/2020-12/schema",
            "prefixItems": [ { "type": "string" } ],
            "items": { "type": "integer" }
        },
        "tests": [
            {
                "description": "valid items",
                "data": [ "x", 2, 3 ],
                "valid": true
            },
            {
                "description": "wrong type of second item",
                "data": [ "x", "y" ],
                "valid": false
            }
        ]
    },
    {
        "description": "items with heterogeneous array",
        "schema": {
            "$schema": "https://json-schema.org/draft/2020-12/schema",
            "prefixItems": [{}],
            "items": false
        },
        "tests": [
            {
                "description": "heterogeneous invalid instance",
                "data": [ "foo", "bar", 37 ],
                "valid": false
            },
            {
                "description": "valid instance",
                "data": [ null ],
                "valid": true
            }
        ]
    },
    {
        "description": "items with null instance elements",
        "schema": {
            "$schema": "https://json-schema.org/draft/2020-12/schema",
            "items": {
                "type": "null"
            }
        },
        "tests": [
            {
                "description": "allows null elements",
                "data": [ null ],
                "valid": true
            }
        ]
    }
]
