{
  "$id": "https://github.com/denoland/deno/blob/tests/specs/schema.json",
  "$schema": "http://json-schema.org/draft-07/schema",
  "description": "Schema file for the __test__.jsonc files",
  "required": [],
  "title": "Deno internal spec test schema",
  "type": "object",
  "definitions": {
    "single_test": {
      "type": "object",
      "required": ["args", "output"],
      "properties": {
        "args": {
          "default": "",
          "oneOf": [{
            "type": "string"
          }, {
            "type": "array",
            "items": {
              "type": "string"
            }
          }]
        },
        "cwd": {
          "type": "string"
        },
        "commandName": {
          "type": "string"
        },
        "envs": {
          "type": "object",
          "additionalProperties": {
            "type": "string"
          }
        },
        "flaky": {
          "type": "boolean"
        },
        "canonicalizedTempDir": {
          "type": "boolean"
        },
        "symlinkedTempDir": {
          "type": "boolean"
        },
        "if": {
          "type": "string",
          "examples": [
            "mac",
            "linux",
            "windows",
            "unix",
            "notMacIntel"
          ]
        },
        "output": {
          "type": "string"
        },
        "exitCode": {
          "type": "integer"
        },
        "ignore": {
          "type": "boolean"
        },
        "variants": {
          "type": "object",
          "patternProperties": {
            ".*": {
              "type": "object",
              "additionalProperties": { "type": "string" }
            }
          },
          "additionalProperties": false
        }
      }
    },
    "single_or_multi_step_test": {
      "oneOf": [{
        "required": ["steps"],
        "properties": {
          "tempDir": {
            "type": "boolean"
          },
          "canonicalizedTempDir": {
            "type": "boolean"
          },
          "flaky": {
            "type": "boolean"
          },
          "symlinkedTempDir": {
            "type": "boolean"
          },
          "base": {
            "type": "string"
          },
          "envs": {
            "type": "object",
            "additionalProperties": {
              "type": "string"
            }
          },
          "if": {
            "type": "string",
            "examples": [
              "mac",
              "linux",
              "windows",
              "unix",
              "notMacIntel"
            ]
          },
          "repeat": {
            "type": "number"
          },
          "timeout": {
            "type": "number",
            "description": "Timeout in seconds for each step. Defaults to 300 (5 minutes)."
          },
          "steps": {
            "type": "array",
            "items": {
              "$ref": "#/definitions/single_test"
            }
          },
          "ignore": {
            "type": "boolean"
          },
          "variants": {
            "type": "object",
            "patternProperties": {
              ".*": {
                "type": "object",
                "additionalProperties": { "type": "string" }
              }
            },
            "additionalProperties": false
          }
        }
      }, {
        "allOf": [{
          "properties": {
            "tempDir": {
              "type": "boolean"
            },
            "canonicalizedTempDir": {
              "type": "boolean"
            },
            "symlinkedTempDir": {
              "type": "boolean"
            },
            "base": {
              "type": "string"
            },
            "envs": {
              "type": "object",
              "additionalProperties": {
                "type": "string"
              }
            },
            "repeat": {
              "type": "number"
            },
            "timeout": {
              "type": "number",
              "description": "Timeout in seconds for each step. Defaults to 300 (5 minutes)."
            }
          }
        }, {
          "$ref": "#/definitions/single_test"
        }]
      }]
    },
    "multi_test": {
      "required": ["tests"],
      "properties": {
        "tempDir": {
          "type": "boolean"
        },
        "base": {
          "type": "string"
        },
        "envs": {
          "type": "object",
          "additionalProperties": {
            "type": "string"
          }
        },
        "repeat": {
          "type": "number"
        },
        "timeout": {
          "type": "number",
          "description": "Timeout in seconds for each step. Defaults to 300 (5 minutes)."
        },
        "tests": {
          "type": "object",
          "additionalProperties": {
            "$ref": "#/definitions/single_or_multi_step_test"
          }
        },
        "ignore": {
          "type": "boolean"
        },
        "variants": {
          "type": "object",
          "patternProperties": {
            ".*": {
              "type": "object",
              "additionalProperties": { "type": "string" }
            }
          },
          "additionalProperties": false
        }
      }
    }
  },
  "oneOf": [{
    "$ref": "#/definitions/single_or_multi_step_test"
  }, {
    "$ref": "#/definitions/multi_test"
  }]
}
