[

{
    "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 non-objects",
            "data": [1, 2, 3],
            "valid": true
        },
        {
            "description": "patternProperties are not additional properties",
            "data": {"foo":1, "vroom": 2},
            "valid": true
        }
    ]
},
{
    "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
        }
    ]
}

]