[
  {
    "description": "single dependency (required)",
    "database": {
      "schemas": [
        {
          "$schema": "https://json-schema.org/draft/2020-12/schema",
          "$id": "schema1",
          "dependencies": {
            "bar": [
              "foo"
            ]
          },
          "extensible": true
        }
      ]
    },
    "tests": [
      {
        "description": "neither",
        "data": {},
        "schema_id": "schema1",
        "action": "validate",
        "expect": {
          "success": true
        }
      },
      {
        "description": "nondependant",
        "data": {
          "foo": 1
        },
        "schema_id": "schema1",
        "action": "validate",
        "expect": {
          "success": true
        }
      },
      {
        "description": "with dependency",
        "data": {
          "foo": 1,
          "bar": 2
        },
        "schema_id": "schema1",
        "action": "validate",
        "expect": {
          "success": true
        }
      },
      {
        "description": "missing dependency",
        "data": {
          "bar": 2
        },
        "schema_id": "schema1",
        "action": "validate",
        "expect": {
          "success": false
        }
      },
      {
        "description": "ignores arrays",
        "data": [
          "bar"
        ],
        "schema_id": "schema1",
        "action": "validate",
        "expect": {
          "success": true
        }
      },
      {
        "description": "ignores strings",
        "data": "foobar",
        "schema_id": "schema1",
        "action": "validate",
        "expect": {
          "success": true
        }
      },
      {
        "description": "ignores other non-objects",
        "data": 12,
        "schema_id": "schema1",
        "action": "validate",
        "expect": {
          "success": true
        }
      }
    ]
  },
  {
    "description": "empty dependents",
    "database": {
      "schemas": [
        {
          "$schema": "https://json-schema.org/draft/2020-12/schema",
          "$id": "schema2",
          "dependencies": {
            "bar": []
          },
          "extensible": true
        }
      ]
    },
    "tests": [
      {
        "description": "empty object",
        "data": {},
        "schema_id": "schema2",
        "action": "validate",
        "expect": {
          "success": true
        }
      },
      {
        "description": "object with one property",
        "data": {
          "bar": 2
        },
        "schema_id": "schema2",
        "action": "validate",
        "expect": {
          "success": true
        }
      },
      {
        "description": "non-object is valid",
        "data": 1,
        "schema_id": "schema2",
        "action": "validate",
        "expect": {
          "success": true
        }
      }
    ]
  },
  {
    "description": "multiple dependents required",
    "database": {
      "schemas": [
        {
          "$schema": "https://json-schema.org/draft/2020-12/schema",
          "$id": "schema3",
          "dependencies": {
            "quux": [
              "foo",
              "bar"
            ]
          },
          "extensible": true
        }
      ]
    },
    "tests": [
      {
        "description": "neither",
        "data": {},
        "schema_id": "schema3",
        "action": "validate",
        "expect": {
          "success": true
        }
      },
      {
        "description": "nondependants",
        "data": {
          "foo": 1,
          "bar": 2
        },
        "schema_id": "schema3",
        "action": "validate",
        "expect": {
          "success": true
        }
      },
      {
        "description": "with dependencies",
        "data": {
          "foo": 1,
          "bar": 2,
          "quux": 3
        },
        "schema_id": "schema3",
        "action": "validate",
        "expect": {
          "success": true
        }
      },
      {
        "description": "missing dependency",
        "data": {
          "foo": 1,
          "quux": 2
        },
        "schema_id": "schema3",
        "action": "validate",
        "expect": {
          "success": false
        }
      },
      {
        "description": "missing other dependency",
        "data": {
          "bar": 1,
          "quux": 2
        },
        "schema_id": "schema3",
        "action": "validate",
        "expect": {
          "success": false
        }
      },
      {
        "description": "missing both dependencies",
        "data": {
          "quux": 1
        },
        "schema_id": "schema3",
        "action": "validate",
        "expect": {
          "success": false
        }
      }
    ]
  },
  {
    "description": "dependencies with escaped characters",
    "database": {
      "schemas": [
        {
          "$schema": "https://json-schema.org/draft/2020-12/schema",
          "$id": "schema4",
          "dependencies": {
            "foo\nbar": [
              "foo\rbar"
            ],
            "foo\"bar": [
              "foo'bar"
            ]
          },
          "extensible": true
        }
      ]
    },
    "tests": [
      {
        "description": "CRLF",
        "data": {
          "foo\nbar": 1,
          "foo\rbar": 2
        },
        "schema_id": "schema4",
        "action": "validate",
        "expect": {
          "success": true
        }
      },
      {
        "description": "quoted quotes",
        "data": {
          "foo'bar": 1,
          "foo\"bar": 2
        },
        "schema_id": "schema4",
        "action": "validate",
        "expect": {
          "success": true
        }
      },
      {
        "description": "CRLF missing dependent",
        "data": {
          "foo\nbar": 1,
          "foo": 2
        },
        "schema_id": "schema4",
        "action": "validate",
        "expect": {
          "success": false
        }
      },
      {
        "description": "quoted quotes missing dependent",
        "data": {
          "foo\"bar": 2
        },
        "schema_id": "schema4",
        "action": "validate",
        "expect": {
          "success": false
        }
      }
    ]
  },
  {
    "description": "extensible: true allows extra properties in dependentRequired",
    "database": {
      "schemas": [
        {
          "$schema": "https://json-schema.org/draft/2020-12/schema",
          "$id": "schema5",
          "dependencies": {
            "bar": [
              "foo"
            ]
          },
          "extensible": true
        }
      ]
    },
    "tests": [
      {
        "description": "extra property is valid",
        "data": {
          "foo": 1,
          "bar": 2,
          "baz": 3
        },
        "schema_id": "schema5",
        "action": "validate",
        "expect": {
          "success": true
        }
      }
    ]
  },
  {
    "description": "single dependency (schemas, STRICT)",
    "database": {
      "schemas": [
        {
          "$schema": "https://json-schema.org/draft/2020-12/schema",
          "$id": "schema_schema1",
          "properties": {
            "foo": true,
            "bar": true
          },
          "dependencies": {
            "bar": {
              "properties": {
                "foo": {
                  "type": "integer"
                },
                "bar": {
                  "type": "integer"
                }
              }
            }
          }
        }
      ]
    },
    "tests": [
      {
        "description": "valid",
        "data": {
          "foo": 1,
          "bar": 2
        },
        "schema_id": "schema_schema1",
        "action": "validate",
        "expect": {
          "success": true
        }
      },
      {
        "description": "no dependency",
        "data": {
          "foo": "quux"
        },
        "schema_id": "schema_schema1",
        "action": "validate",
        "expect": {
          "success": true
        }
      },
      {
        "description": "wrong type",
        "data": {
          "foo": "quux",
          "bar": 2
        },
        "schema_id": "schema_schema1",
        "action": "validate",
        "expect": {
          "success": false
        }
      },
      {
        "description": "wrong type other",
        "data": {
          "foo": 2,
          "bar": "quux"
        },
        "schema_id": "schema_schema1",
        "action": "validate",
        "expect": {
          "success": false
        }
      },
      {
        "description": "wrong type both",
        "data": {
          "foo": "quux",
          "bar": "quux"
        },
        "schema_id": "schema_schema1",
        "action": "validate",
        "expect": {
          "success": false
        }
      },
      {
        "description": "ignores arrays (invalid in strict mode)",
        "data": [
          "bar"
        ],
        "schema_id": "schema_schema1",
        "action": "validate",
        "expect": {
          "success": false,
          "errors": [
            {
              "code": "STRICT_ITEM_VIOLATION"
            }
          ]
        }
      },
      {
        "description": "ignores strings",
        "data": "foobar",
        "schema_id": "schema_schema1",
        "action": "validate",
        "expect": {
          "success": true
        }
      },
      {
        "description": "ignores other non-objects",
        "data": 12,
        "schema_id": "schema_schema1",
        "action": "validate",
        "expect": {
          "success": true
        }
      }
    ]
  },
  {
    "description": "single dependency (schemas, EXTENSIBLE)",
    "database": {
      "schemas": [
        {
          "$schema": "https://json-schema.org/draft/2020-12/schema",
          "$id": "schema_schema2",
          "properties": {
            "foo": true,
            "bar": true
          },
          "dependencies": {
            "bar": {
              "properties": {
                "foo": {
                  "type": "integer"
                },
                "bar": {
                  "type": "integer"
                }
              }
            }
          },
          "extensible": true
        }
      ]
    },
    "tests": [
      {
        "description": "ignores arrays (valid in extensible mode)",
        "data": [
          "bar"
        ],
        "schema_id": "schema_schema2",
        "action": "validate",
        "expect": {
          "success": true
        }
      }
    ]
  },
  {
    "description": "boolean subschemas",
    "database": {
      "schemas": [
        {
          "$schema": "https://json-schema.org/draft/2020-12/schema",
          "$id": "schema_schema3",
          "properties": {
            "foo": true,
            "bar": true
          },
          "dependencies": {
            "foo": true,
            "bar": false
          }
        }
      ]
    },
    "tests": [
      {
        "description": "object with property having schema true is valid",
        "data": {
          "foo": 1
        },
        "schema_id": "schema_schema3",
        "action": "validate",
        "expect": {
          "success": true
        }
      },
      {
        "description": "object with property having schema false is invalid",
        "data": {
          "bar": 2
        },
        "schema_id": "schema_schema3",
        "action": "validate",
        "expect": {
          "success": false
        }
      },
      {
        "description": "object with both properties is invalid",
        "data": {
          "foo": 1,
          "bar": 2
        },
        "schema_id": "schema_schema3",
        "action": "validate",
        "expect": {
          "success": false
        }
      },
      {
        "description": "empty object is valid",
        "data": {},
        "schema_id": "schema_schema3",
        "action": "validate",
        "expect": {
          "success": true
        }
      }
    ]
  },
  {
    "description": "dependencies with escaped characters",
    "database": {
      "schemas": [
        {
          "$schema": "https://json-schema.org/draft/2020-12/schema",
          "$id": "schema_schema4",
          "properties": {
            "foo\tbar": true,
            "foo'bar": true,
            "a": true,
            "b": true,
            "c": true
          },
          "dependencies": {
            "foo\tbar": {
              "minProperties": 4,
              "extensible": true
            },
            "foo'bar": {
              "required": [
                "foo\"bar"
              ]
            }
          }
        }
      ]
    },
    "tests": [
      {
        "description": "quoted tab",
        "data": {
          "foo\tbar": 1,
          "a": 2,
          "b": 3,
          "c": 4
        },
        "schema_id": "schema_schema4",
        "action": "validate",
        "expect": {
          "success": true
        }
      },
      {
        "description": "quoted quote",
        "data": {
          "foo'bar": {
            "foo\"bar": 1
          }
        },
        "schema_id": "schema_schema4",
        "action": "validate",
        "expect": {
          "success": false
        }
      },
      {
        "description": "quoted tab invalid under dependent schema",
        "data": {
          "foo\tbar": 1,
          "a": 2
        },
        "schema_id": "schema_schema4",
        "action": "validate",
        "expect": {
          "success": false
        }
      },
      {
        "description": "quoted quote invalid under dependent schema",
        "data": {
          "foo'bar": 1
        },
        "schema_id": "schema_schema4",
        "action": "validate",
        "expect": {
          "success": false
        }
      }
    ]
  },
  {
    "description": "dependent subschema incompatible with root (STRICT)",
    "database": {
      "schemas": [
        {
          "$schema": "https://json-schema.org/draft/2020-12/schema",
          "$id": "schema_schema5",
          "properties": {
            "foo": {},
            "baz": true
          },
          "dependencies": {
            "foo": {
              "properties": {
                "bar": {}
              }
            }
          }
        }
      ]
    },
    "tests": [
      {
        "description": "matches root",
        "data": {
          "foo": 1
        },
        "schema_id": "schema_schema5",
        "action": "validate",
        "expect": {
          "success": false
        }
      },
      {
        "description": "matches dependency (invalid in strict mode - bar not allowed if foo missing)",
        "data": {
          "bar": 1
        },
        "schema_id": "schema_schema5",
        "action": "validate",
        "expect": {
          "success": false,
          "errors": [
            {
              "code": "STRICT_PROPERTY_VIOLATION"
            }
          ]
        }
      },
      {
        "description": "matches both",
        "data": {
          "foo": 1,
          "bar": 2
        },
        "schema_id": "schema_schema5",
        "action": "validate",
        "expect": {
          "success": false
        }
      },
      {
        "description": "no dependency",
        "data": {
          "baz": 1
        },
        "schema_id": "schema_schema5",
        "action": "validate",
        "expect": {
          "success": true
        }
      }
    ]
  },
  {
    "description": "dependent subschema incompatible with root (EXTENSIBLE)",
    "database": {
      "schemas": [
        {
          "$schema": "https://json-schema.org/draft/2020-12/schema",
          "$id": "schema_schema6",
          "properties": {
            "foo": {},
            "baz": true
          },
          "dependencies": {
            "foo": {
              "properties": {
                "bar": {}
              },
              "additionalProperties": false
            }
          },
          "extensible": true
        }
      ]
    },
    "tests": [
      {
        "description": "matches dependency (valid in extensible mode)",
        "data": {
          "bar": 1
        },
        "schema_id": "schema_schema6",
        "action": "validate",
        "expect": {
          "success": true
        }
      }
    ]
  }
]