1[ 2 { 3 "description": 4 "patternProperties validates properties matching a regex", 5 "schema": { 6 "patternProperties": { 7 "f.*o": {"type": "integer"} 8 } 9 }, 10 "tests": [ 11 { 12 "description": "a single valid match is valid", 13 "data": {"foo": 1}, 14 "valid": true 15 }, 16 { 17 "description": "multiple valid matches is valid", 18 "data": {"foo": 1, "foooooo" : 2}, 19 "valid": true 20 }, 21 { 22 "description": "a single invalid match is invalid", 23 "data": {"foo": "bar", "fooooo": 2}, 24 "valid": false 25 }, 26 { 27 "description": "a single invalid match is invalid", 28 "data": {"fooooo": 2, "foo": "bar"}, 29 "valid": false 30 }, 31 { 32 "description": "multiple invalid matches is invalid", 33 "data": {"foo": "bar", "foooooo" : "baz"}, 34 "valid": false 35 }, 36 { 37 "description": "ignores non-objects", 38 "data": 12, 39 "valid": true 40 } 41 ] 42 }, 43 { 44 "description": "multiple simultaneous patternProperties are validated", 45 "schema": { 46 "patternProperties": { 47 "a*": {"type": "integer"}, 48 "aaa*": {"maximum": 20} 49 } 50 }, 51 "tests": [ 52 { 53 "description": "a single valid match is valid", 54 "data": {"a": 21}, 55 "valid": true 56 }, 57 { 58 "description": "a simultaneous match is valid", 59 "data": {"aaaa": 18}, 60 "valid": true 61 }, 62 { 63 "description": "multiple matches is valid", 64 "data": {"a": 21, "aaaa": 18}, 65 "valid": true 66 }, 67 { 68 "description": "an invalid due to one is invalid", 69 "data": {"a": "bar"}, 70 "valid": false 71 }, 72 { 73 "description": "an invalid due to the other is invalid", 74 "data": {"aaaa": 31}, 75 "valid": false 76 }, 77 { 78 "description": "an invalid due to both is invalid", 79 "data": {"aaa": "foo", "aaaa": 31}, 80 "valid": false 81 } 82 ] 83 }, 84 { 85 "description": "regexes are not anchored by default and are case sensitive", 86 "schema": { 87 "patternProperties": { 88 "[0-9]{2,}": { "type": "boolean" }, 89 "X_": { "type": "string" } 90 } 91 }, 92 "tests": [ 93 { 94 "description": "non recognized members are ignored", 95 "data": { "answer 1": "42" }, 96 "valid": true 97 }, 98 { 99 "description": "recognized members are accounted for", 100 "data": { "a31b": null }, 101 "valid": false 102 }, 103 { 104 "description": "regexes are case sensitive", 105 "data": { "a_x_3": 3 }, 106 "valid": true 107 }, 108 { 109 "description": "regexes are case sensitive, 2", 110 "data": { "a_X_3": 3 }, 111 "valid": false 112 } 113 ] 114 } 115] 116