[
    {
        "description": "propertyDependencies doesn't act on non-objects",
        "schema": {
            "propertyDependencies": {
                "foo": {"bar": false}
            }
        },
        "tests": [
            {
                "description": "ignores booleans",
                "data": true,
                "valid": true
            },
            {
                "description": "ignores integers",
                "data": 123,
                "valid": true
            },
            {
                "description": "ignores floats",
                "data": 1.0,
                "valid": true
            },
            {
                "description": "ignores strings",
                "data": "abc",
                "valid": true
            },
            {
                "description": "ignores arrays",
                "data": [],
                "valid": true
            },
            {
                "description": "ignores null",
                "data": null,
                "valid": true
            }
        ]
    },
    {
        "description": "propertyDependencies doesn't act on non-string property values",
        "schema": {
            "propertyDependencies": {
                "foo": {"bar": false}
            }
        },
        "tests": [
            {
                "description": "ignores booleans",
                "data": {"foo": false},
                "valid": true
            },
            {
                "description": "ignores integers",
                "data": {"foo": 2},
                "valid": true
            },
            {
                "description": "ignores floats",
                "data": {"foo": 1.1},
                "valid": true
            },
            {
                "description": "ignores objects",
                "data": {"foo": {}},
                "valid": true
            },
            {
                "description": "ignores objects wth a key of the expected value",
                "data": {"foo": {"bar": "baz"}},
                "valid": true
            },
            {
                "description": "ignores objects with the expected value nested in structure",
                "data": {"foo": {"baz": "bar"}},
                "valid": true
            },
            {
                "description": "ignores arrays",
                "data": {"foo": []},
                "valid": true
            },
            {
                "description": "ignores null",
                "data": {"foo": null},
                "valid": true
            }
        ]
    },
    {
        "description": "multiple options selects the right one",
        "schema": {
            "propertyDependencies": {
                "foo": {
                    "bar": {
                        "minProperties": 2,
                        "maxProperties": 2
                    },
                    "baz": {"maxProperties": 1},
                    "qux": true,
                    "quux": false
                }
            }
        },
        "tests": [
            {
                "description": "bar with exactly 2 properties is valid",
                "data": {
                    "foo": "bar",
                    "other-foo": "other-bar"
                },
                "valid": true
            },
            {
                "description": "bar with more than 2 properties is invalid",
                "data": {
                    "foo": "bar",
                    "other-foo": "other-bar",
                    "too": "many"
                },
                "valid": false
            },
            {
                "description": "bar with fewer than 2 properties is invalid",
                "data": {"foo": "bar"},
                "valid": false
            },
            {
                "description": "baz alone is valid",
                "data": {"foo": "baz"},
                "valid": true
            },
            {
                "description": "baz with other properties is invalid",
                "data": {
                    "foo": "baz",
                    "other-foo": "other-bar"
                },
                "valid": false
            },
            {
                "description": "anything allowed with qux",
                "data": {
                    "foo": "qux",
                    "blah": ["some other property"],
                    "more": "properties"
                },
                "valid": true
            },
            {
                "description": "quux is disallowed",
                "data": {
                    "foo": "quux"
                },
                "valid": false
            }
        ]
    }
]
