1[ 2 { 3 "description": "required validation", 4 "schema": { 5 "$schema": "https://json-schema.org/draft/2020-12/schema", 6 "properties": { 7 "foo": {}, 8 "bar": {} 9 }, 10 "required": ["foo"] 11 }, 12 "tests": [ 13 { 14 "description": "present required property is valid", 15 "data": {"foo": 1}, 16 "valid": true 17 }, 18 { 19 "description": "non-present required property is invalid", 20 "data": {"bar": 1}, 21 "valid": false 22 }, 23 { 24 "description": "ignores arrays", 25 "data": [], 26 "valid": true 27 }, 28 { 29 "description": "ignores strings", 30 "data": "", 31 "valid": true 32 }, 33 { 34 "description": "ignores other non-objects", 35 "data": 12, 36 "valid": true 37 } 38 ] 39 }, 40 { 41 "description": "required default validation", 42 "schema": { 43 "$schema": "https://json-schema.org/draft/2020-12/schema", 44 "properties": { 45 "foo": {} 46 } 47 }, 48 "tests": [ 49 { 50 "description": "not required by default", 51 "data": {}, 52 "valid": true 53 } 54 ] 55 }, 56 { 57 "description": "required with empty array", 58 "schema": { 59 "$schema": "https://json-schema.org/draft/2020-12/schema", 60 "properties": { 61 "foo": {} 62 }, 63 "required": [] 64 }, 65 "tests": [ 66 { 67 "description": "property not required", 68 "data": {}, 69 "valid": true 70 } 71 ] 72 }, 73 { 74 "description": "required with escaped characters", 75 "schema": { 76 "$schema": "https://json-schema.org/draft/2020-12/schema", 77 "required": [ 78 "foo\nbar", 79 "foo\"bar", 80 "foo\\bar", 81 "foo\rbar", 82 "foo\tbar", 83 "foo\fbar" 84 ] 85 }, 86 "tests": [ 87 { 88 "description": "object with all properties present is valid", 89 "data": { 90 "foo\nbar": 1, 91 "foo\"bar": 1, 92 "foo\\bar": 1, 93 "foo\rbar": 1, 94 "foo\tbar": 1, 95 "foo\fbar": 1 96 }, 97 "valid": true 98 }, 99 { 100 "description": "object with some properties missing is invalid", 101 "data": { 102 "foo\nbar": "1", 103 "foo\"bar": "1" 104 }, 105 "valid": false 106 } 107 ] 108 }, 109 { 110 "description": "required properties whose names are Javascript object property names", 111 "comment": "Ensure JS implementations don't universally consider e.g. __proto__ to always be present in an object.", 112 "schema": { 113 "$schema": "https://json-schema.org/draft/2020-12/schema", 114 "required": ["__proto__", "toString", "constructor"] 115 }, 116 "tests": [ 117 { 118 "description": "ignores arrays", 119 "data": [], 120 "valid": true 121 }, 122 { 123 "description": "ignores other non-objects", 124 "data": 12, 125 "valid": true 126 }, 127 { 128 "description": "none of the properties mentioned", 129 "data": {}, 130 "valid": false 131 }, 132 { 133 "description": "__proto__ present", 134 "data": { "__proto__": "foo" }, 135 "valid": false 136 }, 137 { 138 "description": "toString present", 139 "data": { "toString": { "length": 37 } }, 140 "valid": false 141 }, 142 { 143 "description": "constructor present", 144 "data": { "constructor": { "length": 37 } }, 145 "valid": false 146 }, 147 { 148 "description": "all present", 149 "data": { 150 "__proto__": 12, 151 "toString": { "length": "foo" }, 152 "constructor": 37 153 }, 154 "valid": true 155 } 156 ] 157 } 158] 159