[ { "description": "patternProperties validates properties matching a regex", "database": { "schemas": [ { "patternProperties": { "f.*o": { "type": "integer" } }, "items": {}, "$id": "patternProperties_0_0" } ] }, "tests": [ { "description": "a single valid match is valid", "data": { "foo": 1 }, "schema_id": "patternProperties_0_0", "action": "validate", "expect": { "success": true } }, { "description": "multiple valid matches is valid", "data": { "foo": 1, "foooooo": 2 }, "schema_id": "patternProperties_0_0", "action": "validate", "expect": { "success": true } }, { "description": "a single invalid match is invalid", "data": { "foo": "bar", "fooooo": 2 }, "schema_id": "patternProperties_0_0", "action": "validate", "expect": { "success": false } }, { "description": "multiple invalid matches is invalid", "data": { "foo": "bar", "foooooo": "baz" }, "schema_id": "patternProperties_0_0", "action": "validate", "expect": { "success": false } }, { "description": "ignores arrays", "data": [ "foo" ], "schema_id": "patternProperties_0_0", "action": "validate", "expect": { "success": true } }, { "description": "ignores strings", "data": "foo", "schema_id": "patternProperties_0_0", "action": "validate", "expect": { "success": true } }, { "description": "ignores other non-objects", "data": 12, "schema_id": "patternProperties_0_0", "action": "validate", "expect": { "success": true } }, { "description": "extra property not matching pattern is INVALID (strict by default)", "data": { "foo": 1, "extra": 2 }, "schema_id": "patternProperties_0_0", "action": "validate", "expect": { "success": false } } ] }, { "description": "multiple simultaneous patternProperties are validated", "database": { "schemas": [ { "patternProperties": { "a*": { "type": "integer" }, "aaa*": { "maximum": 20 } }, "$id": "patternProperties_1_0" } ] }, "tests": [ { "description": "a single valid match is valid", "data": { "a": 21 }, "schema_id": "patternProperties_1_0", "action": "validate", "expect": { "success": true } }, { "description": "a simultaneous match is valid", "data": { "aaaa": 18 }, "schema_id": "patternProperties_1_0", "action": "validate", "expect": { "success": true } }, { "description": "multiple matches is valid", "data": { "a": 21, "aaaa": 18 }, "schema_id": "patternProperties_1_0", "action": "validate", "expect": { "success": true } }, { "description": "an invalid due to one is invalid", "data": { "a": "bar" }, "schema_id": "patternProperties_1_0", "action": "validate", "expect": { "success": false } }, { "description": "an invalid due to the other is invalid", "data": { "aaaa": 31 }, "schema_id": "patternProperties_1_0", "action": "validate", "expect": { "success": false } }, { "description": "an invalid due to both is invalid", "data": { "aaa": "foo", "aaaa": 31 }, "schema_id": "patternProperties_1_0", "action": "validate", "expect": { "success": false } } ] }, { "description": "regexes are not anchored by default and are case sensitive", "database": { "schemas": [ { "patternProperties": { "[0-9]{2,}": { "type": "boolean" }, "X_": { "type": "string" } }, "extensible": true, "$id": "patternProperties_2_0" } ] }, "tests": [ { "description": "non recognized members are ignored", "data": { "answer 1": "42" }, "schema_id": "patternProperties_2_0", "action": "validate", "expect": { "success": true } }, { "description": "recognized members are accounted for", "data": { "a31b": null }, "schema_id": "patternProperties_2_0", "action": "validate", "expect": { "success": false } }, { "description": "regexes are case sensitive", "data": { "a_x_3": 3 }, "schema_id": "patternProperties_2_0", "action": "validate", "expect": { "success": true } }, { "description": "regexes are case sensitive, 2", "data": { "a_X_3": 3 }, "schema_id": "patternProperties_2_0", "action": "validate", "expect": { "success": false } } ] }, { "description": "patternProperties with boolean schemas", "database": { "schemas": [ { "patternProperties": { "f.*": true, "b.*": false }, "$id": "patternProperties_3_0" } ] }, "tests": [ { "description": "object with property matching schema true is valid", "data": { "foo": 1 }, "schema_id": "patternProperties_3_0", "action": "validate", "expect": { "success": true } }, { "description": "object with property matching schema false is invalid", "data": { "bar": 2 }, "schema_id": "patternProperties_3_0", "action": "validate", "expect": { "success": false } }, { "description": "object with both properties is invalid", "data": { "foo": 1, "bar": 2 }, "schema_id": "patternProperties_3_0", "action": "validate", "expect": { "success": false } }, { "description": "object with a property matching both true and false is invalid", "data": { "foobar": 1 }, "schema_id": "patternProperties_3_0", "action": "validate", "expect": { "success": false } }, { "description": "empty object is valid", "data": {}, "schema_id": "patternProperties_3_0", "action": "validate", "expect": { "success": true } } ] }, { "description": "patternProperties with null valued instance properties", "database": { "schemas": [ { "patternProperties": { "^.*bar$": { "type": "null" } }, "$id": "patternProperties_4_0" } ] }, "tests": [ { "description": "allows null values", "data": { "foobar": null }, "schema_id": "patternProperties_4_0", "action": "validate", "expect": { "success": true } } ] }, { "description": "extensible: true allows extra properties NOT matching pattern", "database": { "schemas": [ { "patternProperties": { "f.*o": { "type": "integer" } }, "extensible": true, "$id": "patternProperties_5_0" } ] }, "tests": [ { "description": "extra property not matching pattern is valid", "data": { "bar": 1 }, "schema_id": "patternProperties_5_0", "action": "validate", "expect": { "success": true } }, { "description": "property matching pattern MUST still be valid", "data": { "foo": "invalid string" }, "schema_id": "patternProperties_5_0", "action": "validate", "expect": { "success": false } } ] } ]