[
	{
		"description": "root pointer ref",
		"schema": {
			"properties": {
				"foo": {
					"$ref": "#"
				}
			},
			"additionalProperties": false
		},
		"skip": {
			"v3-roundtrip": "generation only supported in version https://json-schema.org/draft/2020-12/schema"
		},
		"tests": [
			{
				"description": "match",
				"data": {
					"foo": false
				},
				"valid": true,
				"skip": {
					"v3-roundtrip": "could not extract schema"
				}
			},
			{
				"description": "recursive match",
				"data": {
					"foo": {
						"foo": false
					}
				},
				"valid": true,
				"skip": {
					"v3-roundtrip": "could not extract schema"
				}
			},
			{
				"description": "mismatch",
				"data": {
					"bar": false
				},
				"valid": false,
				"skip": {
					"v3-roundtrip": "could not extract schema"
				}
			},
			{
				"description": "recursive mismatch",
				"data": {
					"foo": {
						"bar": false
					}
				},
				"valid": false,
				"skip": {
					"v3-roundtrip": "could not extract schema"
				}
			}
		]
	},
	{
		"description": "relative pointer ref to object",
		"schema": {
			"properties": {
				"foo": {
					"type": "integer"
				},
				"bar": {
					"$ref": "#/properties/foo"
				}
			}
		},
		"skip": {
			"v3-roundtrip": "generation only supported in version https://json-schema.org/draft/2020-12/schema"
		},
		"tests": [
			{
				"description": "match",
				"data": {
					"bar": 3
				},
				"valid": true,
				"skip": {
					"v3-roundtrip": "could not extract schema"
				}
			},
			{
				"description": "mismatch",
				"data": {
					"bar": true
				},
				"valid": false,
				"skip": {
					"v3-roundtrip": "could not extract schema"
				}
			}
		]
	},
	{
		"description": "relative pointer ref to array",
		"schema": {
			"items": [
				{
					"type": "integer"
				},
				{
					"$ref": "#/items/0"
				}
			]
		},
		"skip": {
			"v3-roundtrip": "generation only supported in version https://json-schema.org/draft/2020-12/schema"
		},
		"tests": [
			{
				"description": "match array",
				"data": [
					1,
					2
				],
				"valid": true,
				"skip": {
					"v3-roundtrip": "could not extract schema"
				}
			},
			{
				"description": "mismatch array",
				"data": [
					1,
					"foo"
				],
				"valid": false,
				"skip": {
					"v3-roundtrip": "could not extract schema"
				}
			}
		]
	},
	{
		"description": "escaped pointer ref",
		"schema": {
			"definitions": {
				"tilde~field": {
					"type": "integer"
				},
				"slash/field": {
					"type": "integer"
				},
				"percent%field": {
					"type": "integer"
				}
			},
			"properties": {
				"tilde": {
					"$ref": "#/definitions/tilde~0field"
				},
				"slash": {
					"$ref": "#/definitions/slash~1field"
				},
				"percent": {
					"$ref": "#/definitions/percent%25field"
				}
			}
		},
		"skip": {
			"v3-roundtrip": "generation only supported in version https://json-schema.org/draft/2020-12/schema"
		},
		"tests": [
			{
				"description": "slash invalid",
				"data": {
					"slash": "aoeu"
				},
				"valid": false,
				"skip": {
					"v3-roundtrip": "could not extract schema"
				}
			},
			{
				"description": "tilde invalid",
				"data": {
					"tilde": "aoeu"
				},
				"valid": false,
				"skip": {
					"v3-roundtrip": "could not extract schema"
				}
			},
			{
				"description": "percent invalid",
				"data": {
					"percent": "aoeu"
				},
				"valid": false,
				"skip": {
					"v3-roundtrip": "could not extract schema"
				}
			},
			{
				"description": "slash valid",
				"data": {
					"slash": 123
				},
				"valid": true,
				"skip": {
					"v3-roundtrip": "could not extract schema"
				}
			},
			{
				"description": "tilde valid",
				"data": {
					"tilde": 123
				},
				"valid": true,
				"skip": {
					"v3-roundtrip": "could not extract schema"
				}
			},
			{
				"description": "percent valid",
				"data": {
					"percent": 123
				},
				"valid": true,
				"skip": {
					"v3-roundtrip": "could not extract schema"
				}
			}
		]
	},
	{
		"description": "nested refs",
		"schema": {
			"definitions": {
				"a": {
					"type": "integer"
				},
				"b": {
					"$ref": "#/definitions/a"
				},
				"c": {
					"$ref": "#/definitions/b"
				}
			},
			"allOf": [
				{
					"$ref": "#/definitions/c"
				}
			]
		},
		"skip": {
			"v3-roundtrip": "generation only supported in version https://json-schema.org/draft/2020-12/schema"
		},
		"tests": [
			{
				"description": "nested ref valid",
				"data": 5,
				"valid": true,
				"skip": {
					"v3-roundtrip": "could not extract schema"
				}
			},
			{
				"description": "nested ref invalid",
				"data": "a",
				"valid": false,
				"skip": {
					"v3-roundtrip": "could not extract schema"
				}
			}
		]
	},
	{
		"description": "ref overrides any sibling keywords",
		"schema": {
			"definitions": {
				"reffed": {
					"type": "array"
				}
			},
			"properties": {
				"foo": {
					"$ref": "#/definitions/reffed",
					"maxItems": 2
				}
			}
		},
		"skip": {
			"v3-roundtrip": "generation only supported in version https://json-schema.org/draft/2020-12/schema"
		},
		"tests": [
			{
				"description": "ref valid",
				"data": {
					"foo": []
				},
				"valid": true,
				"skip": {
					"v3-roundtrip": "could not extract schema"
				}
			},
			{
				"description": "ref valid, maxItems ignored",
				"data": {
					"foo": [
						1,
						2,
						3
					]
				},
				"valid": true,
				"skip": {
					"v3-roundtrip": "could not extract schema"
				}
			},
			{
				"description": "ref invalid",
				"data": {
					"foo": "string"
				},
				"valid": false,
				"skip": {
					"v3-roundtrip": "could not extract schema"
				}
			}
		]
	},
	{
		"description": "$ref prevents a sibling id from changing the base uri",
		"schema": {
			"id": "http://localhost:1234/sibling_id/base/",
			"definitions": {
				"foo": {
					"id": "http://localhost:1234/sibling_id/foo.json",
					"type": "string"
				},
				"base_foo": {
					"$comment": "this canonical uri is http://localhost:1234/sibling_id/base/foo.json",
					"id": "foo.json",
					"type": "number"
				}
			},
			"allOf": [
				{
					"$comment": "$ref resolves to http://localhost:1234/sibling_id/base/foo.json, not http://localhost:1234/sibling_id/foo.json",
					"id": "http://localhost:1234/sibling_id/",
					"$ref": "foo.json"
				}
			]
		},
		"skip": {
			"v3-roundtrip": "generation only supported in version https://json-schema.org/draft/2020-12/schema"
		},
		"tests": [
			{
				"description": "$ref resolves to /definitions/base_foo, data does not validate",
				"data": "a",
				"valid": false,
				"skip": {
					"v3-roundtrip": "could not extract schema"
				}
			},
			{
				"description": "$ref resolves to /definitions/base_foo, data validates",
				"data": 1,
				"valid": true,
				"skip": {
					"v3-roundtrip": "could not extract schema"
				}
			}
		]
	},
	{
		"description": "remote ref, containing refs itself",
		"schema": {
			"$ref": "http://json-schema.org/draft-04/schema#"
		},
		"skip": {
			"v3": "extract error: cannot compile resulting schema: package \"json-schema.org/draft-04/schema\" imported but not defined in :\n    generated.cue:1:8\nimport \"json-schema.org/draft-04/schema\" not found:\n    generated.cue:3:1\n",
			"v3-roundtrip": "inital extract failed"
		},
		"tests": [
			{
				"description": "remote ref valid",
				"data": {
					"minLength": 1
				},
				"valid": true,
				"skip": {
					"v3": "could not extract schema",
					"v3-roundtrip": "could not extract schema"
				}
			},
			{
				"description": "remote ref invalid",
				"data": {
					"minLength": -1
				},
				"valid": false,
				"skip": {
					"v3": "could not extract schema",
					"v3-roundtrip": "could not extract schema"
				}
			}
		]
	},
	{
		"description": "property named $ref that is not a reference",
		"schema": {
			"properties": {
				"$ref": {
					"type": "string"
				}
			}
		},
		"skip": {
			"v3-roundtrip": "generation only supported in version https://json-schema.org/draft/2020-12/schema"
		},
		"tests": [
			{
				"description": "property named $ref valid",
				"data": {
					"$ref": "a"
				},
				"valid": true,
				"skip": {
					"v3-roundtrip": "could not extract schema"
				}
			},
			{
				"description": "property named $ref invalid",
				"data": {
					"$ref": 2
				},
				"valid": false,
				"skip": {
					"v3-roundtrip": "could not extract schema"
				}
			}
		]
	},
	{
		"description": "property named $ref, containing an actual $ref",
		"schema": {
			"properties": {
				"$ref": {
					"$ref": "#/definitions/is-string"
				}
			},
			"definitions": {
				"is-string": {
					"type": "string"
				}
			}
		},
		"skip": {
			"v3-roundtrip": "generation only supported in version https://json-schema.org/draft/2020-12/schema"
		},
		"tests": [
			{
				"description": "property named $ref valid",
				"data": {
					"$ref": "a"
				},
				"valid": true,
				"skip": {
					"v3-roundtrip": "could not extract schema"
				}
			},
			{
				"description": "property named $ref invalid",
				"data": {
					"$ref": 2
				},
				"valid": false,
				"skip": {
					"v3-roundtrip": "could not extract schema"
				}
			}
		]
	},
	{
		"description": "Recursive references between schemas",
		"schema": {
			"id": "http://localhost:1234/tree",
			"description": "tree of nodes",
			"type": "object",
			"properties": {
				"meta": {
					"type": "string"
				},
				"nodes": {
					"type": "array",
					"items": {
						"$ref": "node"
					}
				}
			},
			"required": [
				"meta",
				"nodes"
			],
			"definitions": {
				"node": {
					"id": "http://localhost:1234/node",
					"description": "node",
					"type": "object",
					"properties": {
						"value": {
							"type": "number"
						},
						"subtree": {
							"$ref": "tree"
						}
					},
					"required": [
						"value"
					]
				}
			}
		},
		"skip": {
			"v3-roundtrip": "generation only supported in version https://json-schema.org/draft/2020-12/schema"
		},
		"tests": [
			{
				"description": "valid tree",
				"data": {
					"meta": "root",
					"nodes": [
						{
							"value": 1,
							"subtree": {
								"meta": "child",
								"nodes": [
									{
										"value": 1.1
									},
									{
										"value": 1.2
									}
								]
							}
						},
						{
							"value": 2,
							"subtree": {
								"meta": "child",
								"nodes": [
									{
										"value": 2.1
									},
									{
										"value": 2.2
									}
								]
							}
						}
					]
				},
				"valid": true,
				"skip": {
					"v3-roundtrip": "could not extract schema"
				}
			},
			{
				"description": "invalid tree",
				"data": {
					"meta": "root",
					"nodes": [
						{
							"value": 1,
							"subtree": {
								"meta": "child",
								"nodes": [
									{
										"value": "string is invalid"
									},
									{
										"value": 1.2
									}
								]
							}
						},
						{
							"value": 2,
							"subtree": {
								"meta": "child",
								"nodes": [
									{
										"value": 2.1
									},
									{
										"value": 2.2
									}
								]
							}
						}
					]
				},
				"valid": false,
				"skip": {
					"v3-roundtrip": "could not extract schema"
				}
			}
		]
	},
	{
		"description": "refs with quote",
		"schema": {
			"properties": {
				"foo\"bar": {
					"$ref": "#/definitions/foo%22bar"
				}
			},
			"definitions": {
				"foo\"bar": {
					"type": "number"
				}
			}
		},
		"skip": {
			"v3-roundtrip": "generation only supported in version https://json-schema.org/draft/2020-12/schema"
		},
		"tests": [
			{
				"description": "object with numbers is valid",
				"data": {
					"foo\"bar": 1
				},
				"valid": true,
				"skip": {
					"v3-roundtrip": "could not extract schema"
				}
			},
			{
				"description": "object with strings is invalid",
				"data": {
					"foo\"bar": "1"
				},
				"valid": false,
				"skip": {
					"v3-roundtrip": "could not extract schema"
				}
			}
		]
	},
	{
		"description": "Location-independent identifier",
		"schema": {
			"allOf": [
				{
					"$ref": "#foo"
				}
			],
			"definitions": {
				"A": {
					"id": "#foo",
					"type": "integer"
				}
			}
		},
		"skip": {
			"v3": "extract error: $id URI may not contain a fragment (and 3 more errors)",
			"v3-roundtrip": "inital extract failed"
		},
		"tests": [
			{
				"description": "match",
				"data": 1,
				"valid": true,
				"skip": {
					"v3": "could not extract schema",
					"v3-roundtrip": "could not extract schema"
				}
			},
			{
				"description": "mismatch",
				"data": "a",
				"valid": false,
				"skip": {
					"v3": "could not extract schema",
					"v3-roundtrip": "could not extract schema"
				}
			}
		]
	},
	{
		"description": "Location-independent identifier with base URI change in subschema",
		"schema": {
			"id": "http://localhost:1234/root",
			"allOf": [
				{
					"$ref": "http://localhost:1234/nested.json#foo"
				}
			],
			"definitions": {
				"A": {
					"id": "nested.json",
					"definitions": {
						"B": {
							"id": "#foo",
							"type": "integer"
						}
					}
				}
			}
		},
		"skip": {
			"v3": "extract error: $id URI may not contain a fragment (and 3 more errors)",
			"v3-roundtrip": "inital extract failed"
		},
		"tests": [
			{
				"description": "match",
				"data": 1,
				"valid": true,
				"skip": {
					"v3": "could not extract schema",
					"v3-roundtrip": "could not extract schema"
				}
			},
			{
				"description": "mismatch",
				"data": "a",
				"valid": false,
				"skip": {
					"v3": "could not extract schema",
					"v3-roundtrip": "could not extract schema"
				}
			}
		]
	},
	{
		"description": "naive replacement of $ref with its destination is not correct",
		"schema": {
			"definitions": {
				"a_string": {
					"type": "string"
				}
			},
			"enum": [
				{
					"$ref": "#/definitions/a_string"
				}
			]
		},
		"skip": {
			"v3-roundtrip": "generation only supported in version https://json-schema.org/draft/2020-12/schema"
		},
		"tests": [
			{
				"description": "do not evaluate the $ref inside the enum, matching any string",
				"data": "this is a string",
				"valid": false,
				"skip": {
					"v3-roundtrip": "could not extract schema"
				}
			},
			{
				"description": "match the enum exactly",
				"data": {
					"$ref": "#/definitions/a_string"
				},
				"valid": true,
				"skip": {
					"v3-roundtrip": "could not extract schema"
				}
			}
		]
	},
	{
		"description": "id must be resolved against nearest parent, not just immediate parent",
		"schema": {
			"id": "http://example.com/a.json",
			"definitions": {
				"x": {
					"id": "http://example.com/b/c.json",
					"not": {
						"definitions": {
							"y": {
								"id": "d.json",
								"type": "number"
							}
						}
					}
				}
			},
			"allOf": [
				{
					"$ref": "http://example.com/b/d.json"
				}
			]
		},
		"skip": {
			"v3-roundtrip": "generation only supported in version https://json-schema.org/draft/2020-12/schema"
		},
		"tests": [
			{
				"description": "number is valid",
				"data": 1,
				"valid": true,
				"skip": {
					"v3-roundtrip": "could not extract schema"
				}
			},
			{
				"description": "non-number is invalid",
				"data": "a",
				"valid": false,
				"skip": {
					"v3-roundtrip": "could not extract schema"
				}
			}
		]
	},
	{
		"description": "id with file URI still resolves pointers - *nix",
		"schema": {
			"id": "file:///folder/file.json",
			"definitions": {
				"foo": {
					"type": "number"
				}
			},
			"allOf": [
				{
					"$ref": "#/definitions/foo"
				}
			]
		},
		"skip": {
			"v3-roundtrip": "generation only supported in version https://json-schema.org/draft/2020-12/schema"
		},
		"tests": [
			{
				"description": "number is valid",
				"data": 1,
				"valid": true,
				"skip": {
					"v3-roundtrip": "could not extract schema"
				}
			},
			{
				"description": "non-number is invalid",
				"data": "a",
				"valid": false,
				"skip": {
					"v3-roundtrip": "could not extract schema"
				}
			}
		]
	},
	{
		"description": "id with file URI still resolves pointers - windows",
		"schema": {
			"id": "file:///c:/folder/file.json",
			"definitions": {
				"foo": {
					"type": "number"
				}
			},
			"allOf": [
				{
					"$ref": "#/definitions/foo"
				}
			]
		},
		"skip": {
			"v3-roundtrip": "generation only supported in version https://json-schema.org/draft/2020-12/schema"
		},
		"tests": [
			{
				"description": "number is valid",
				"data": 1,
				"valid": true,
				"skip": {
					"v3-roundtrip": "could not extract schema"
				}
			},
			{
				"description": "non-number is invalid",
				"data": "a",
				"valid": false,
				"skip": {
					"v3-roundtrip": "could not extract schema"
				}
			}
		]
	},
	{
		"description": "empty tokens in $ref json-pointer",
		"schema": {
			"definitions": {
				"": {
					"definitions": {
						"": {
							"type": "number"
						}
					}
				}
			},
			"allOf": [
				{
					"$ref": "#/definitions//definitions/"
				}
			]
		},
		"skip": {
			"v3-roundtrip": "generation only supported in version https://json-schema.org/draft/2020-12/schema"
		},
		"tests": [
			{
				"description": "number is valid",
				"data": 1,
				"valid": true,
				"skip": {
					"v3-roundtrip": "could not extract schema"
				}
			},
			{
				"description": "non-number is invalid",
				"data": "a",
				"valid": false,
				"skip": {
					"v3-roundtrip": "could not extract schema"
				}
			}
		]
	}
]
