1[ 2 { 3 "description": "allOf", 4 "schema": { 5 "allOf": [ 6 { 7 "properties": { 8 "bar": {"type": "integer"} 9 }, 10 "required": ["bar"] 11 }, 12 { 13 "properties": { 14 "foo": {"type": "string"} 15 }, 16 "required": ["foo"] 17 } 18 ] 19 }, 20 "tests": [ 21 { 22 "description": "allOf", 23 "data": {"foo": "baz", "bar": 2}, 24 "valid": true 25 }, 26 { 27 "description": "mismatch second", 28 "data": {"foo": "baz"}, 29 "valid": false 30 }, 31 { 32 "description": "mismatch first", 33 "data": {"bar": 2}, 34 "valid": false 35 }, 36 { 37 "description": "wrong type", 38 "data": {"foo": "baz", "bar": "quux"}, 39 "valid": false 40 } 41 ] 42 }, 43 { 44 "description": "allOf with base schema", 45 "schema": { 46 "properties": {"bar": {"type": "integer"}}, 47 "required": ["bar"], 48 "allOf" : [ 49 { 50 "properties": { 51 "foo": {"type": "string"} 52 }, 53 "required": ["foo"] 54 }, 55 { 56 "properties": { 57 "baz": {"type": "null"} 58 }, 59 "required": ["baz"] 60 } 61 ] 62 }, 63 "tests": [ 64 { 65 "description": "valid", 66 "data": {"foo": "quux", "bar": 2, "baz": null}, 67 "valid": true 68 }, 69 { 70 "description": "mismatch base schema", 71 "data": {"foo": "quux", "baz": null}, 72 "valid": false 73 }, 74 { 75 "description": "mismatch first allOf", 76 "data": {"bar": 2, "baz": null}, 77 "valid": false 78 }, 79 { 80 "description": "mismatch second allOf", 81 "data": {"foo": "quux", "bar": 2}, 82 "valid": false 83 }, 84 { 85 "description": "mismatch both", 86 "data": {"bar": 2}, 87 "valid": false 88 } 89 ] 90 }, 91 { 92 "description": "allOf simple types", 93 "schema": { 94 "allOf": [ 95 {"maximum": 30}, 96 {"minimum": 20} 97 ] 98 }, 99 "tests": [ 100 { 101 "description": "valid", 102 "data": 25, 103 "valid": true 104 }, 105 { 106 "description": "mismatch one", 107 "data": 35, 108 "valid": false 109 } 110 ] 111 }, 112 { 113 "description": "allOf with one empty schema", 114 "schema": { 115 "allOf": [ 116 {} 117 ] 118 }, 119 "tests": [ 120 { 121 "description": "any data is valid", 122 "data": 1, 123 "valid": true 124 } 125 ] 126 }, 127 { 128 "description": "allOf with two empty schemas", 129 "schema": { 130 "allOf": [ 131 {}, 132 {} 133 ] 134 }, 135 "tests": [ 136 { 137 "description": "any data is valid", 138 "data": 1, 139 "valid": true 140 } 141 ] 142 }, 143 { 144 "description": "allOf with the first empty schema", 145 "schema": { 146 "allOf": [ 147 {}, 148 { "type": "number" } 149 ] 150 }, 151 "tests": [ 152 { 153 "description": "number is valid", 154 "data": 1, 155 "valid": true 156 }, 157 { 158 "description": "string is invalid", 159 "data": "foo", 160 "valid": false 161 } 162 ] 163 }, 164 { 165 "description": "allOf with the last empty schema", 166 "schema": { 167 "allOf": [ 168 { "type": "number" }, 169 {} 170 ] 171 }, 172 "tests": [ 173 { 174 "description": "number is valid", 175 "data": 1, 176 "valid": true 177 }, 178 { 179 "description": "string is invalid", 180 "data": "foo", 181 "valid": false 182 } 183 ] 184 }, 185 { 186 "description": "nested allOf, to check validation semantics", 187 "schema": { 188 "allOf": [ 189 { 190 "allOf": [ 191 { 192 "type": "null" 193 } 194 ] 195 } 196 ] 197 }, 198 "tests": [ 199 { 200 "description": "null is valid", 201 "data": null, 202 "valid": true 203 }, 204 { 205 "description": "anything non-null is invalid", 206 "data": 123, 207 "valid": false 208 } 209 ] 210 }, 211 { 212 "description": "allOf combined with anyOf, oneOf", 213 "schema": { 214 "allOf": [ { "multipleOf": 2 } ], 215 "anyOf": [ { "multipleOf": 3 } ], 216 "oneOf": [ { "multipleOf": 5 } ] 217 }, 218 "tests": [ 219 { 220 "description": "allOf: false, anyOf: false, oneOf: false", 221 "data": 1, 222 "valid": false 223 }, 224 { 225 "description": "allOf: false, anyOf: false, oneOf: true", 226 "data": 5, 227 "valid": false 228 }, 229 { 230 "description": "allOf: false, anyOf: true, oneOf: false", 231 "data": 3, 232 "valid": false 233 }, 234 { 235 "description": "allOf: false, anyOf: true, oneOf: true", 236 "data": 15, 237 "valid": false 238 }, 239 { 240 "description": "allOf: true, anyOf: false, oneOf: false", 241 "data": 2, 242 "valid": false 243 }, 244 { 245 "description": "allOf: true, anyOf: false, oneOf: true", 246 "data": 10, 247 "valid": false 248 }, 249 { 250 "description": "allOf: true, anyOf: true, oneOf: false", 251 "data": 6, 252 "valid": false 253 }, 254 { 255 "description": "allOf: true, anyOf: true, oneOf: true", 256 "data": 30, 257 "valid": true 258 } 259 ] 260 } 261] 262