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