197bd480fSBaptiste Daroussin[
297bd480fSBaptiste Daroussin    {
397bd480fSBaptiste Daroussin        "description":
497bd480fSBaptiste Daroussin            "patternProperties validates properties matching a regex",
597bd480fSBaptiste Daroussin        "schema": {
697bd480fSBaptiste Daroussin            "patternProperties": {
797bd480fSBaptiste Daroussin                "f.*o": {"type": "integer"}
897bd480fSBaptiste Daroussin            }
997bd480fSBaptiste Daroussin        },
1097bd480fSBaptiste Daroussin        "tests": [
1197bd480fSBaptiste Daroussin            {
1297bd480fSBaptiste Daroussin                "description": "a single valid match is valid",
1397bd480fSBaptiste Daroussin                "data": {"foo": 1},
1497bd480fSBaptiste Daroussin                "valid": true
1597bd480fSBaptiste Daroussin            },
1697bd480fSBaptiste Daroussin            {
1797bd480fSBaptiste Daroussin                "description": "multiple valid matches is valid",
1897bd480fSBaptiste Daroussin                "data": {"foo": 1, "foooooo" : 2},
1997bd480fSBaptiste Daroussin                "valid": true
2097bd480fSBaptiste Daroussin            },
2197bd480fSBaptiste Daroussin            {
2297bd480fSBaptiste Daroussin                "description": "a single invalid match is invalid",
2397bd480fSBaptiste Daroussin                "data": {"foo": "bar", "fooooo": 2},
2497bd480fSBaptiste Daroussin                "valid": false
2597bd480fSBaptiste Daroussin            },
2697bd480fSBaptiste Daroussin            {
27*273c26a3SBaptiste Daroussin                "description": "a single invalid match is invalid",
28*273c26a3SBaptiste Daroussin                "data": {"fooooo": 2, "foo": "bar"},
29*273c26a3SBaptiste Daroussin                "valid": false
30*273c26a3SBaptiste Daroussin            },
31*273c26a3SBaptiste Daroussin            {
3297bd480fSBaptiste Daroussin                "description": "multiple invalid matches is invalid",
3397bd480fSBaptiste Daroussin                "data": {"foo": "bar", "foooooo" : "baz"},
3497bd480fSBaptiste Daroussin                "valid": false
3597bd480fSBaptiste Daroussin            },
3697bd480fSBaptiste Daroussin            {
3797bd480fSBaptiste Daroussin                "description": "ignores non-objects",
3897bd480fSBaptiste Daroussin                "data": 12,
3997bd480fSBaptiste Daroussin                "valid": true
4097bd480fSBaptiste Daroussin            }
4197bd480fSBaptiste Daroussin        ]
4297bd480fSBaptiste Daroussin    },
4397bd480fSBaptiste Daroussin    {
4497bd480fSBaptiste Daroussin        "description": "multiple simultaneous patternProperties are validated",
4597bd480fSBaptiste Daroussin        "schema": {
4697bd480fSBaptiste Daroussin            "patternProperties": {
4797bd480fSBaptiste Daroussin                "a*": {"type": "integer"},
4897bd480fSBaptiste Daroussin                "aaa*": {"maximum": 20}
4997bd480fSBaptiste Daroussin            }
5097bd480fSBaptiste Daroussin        },
5197bd480fSBaptiste Daroussin        "tests": [
5297bd480fSBaptiste Daroussin            {
5397bd480fSBaptiste Daroussin                "description": "a single valid match is valid",
5497bd480fSBaptiste Daroussin                "data": {"a": 21},
5597bd480fSBaptiste Daroussin                "valid": true
5697bd480fSBaptiste Daroussin            },
5797bd480fSBaptiste Daroussin            {
5897bd480fSBaptiste Daroussin                "description": "a simultaneous match is valid",
5997bd480fSBaptiste Daroussin                "data": {"aaaa": 18},
6097bd480fSBaptiste Daroussin                "valid": true
6197bd480fSBaptiste Daroussin            },
6297bd480fSBaptiste Daroussin            {
6397bd480fSBaptiste Daroussin                "description": "multiple matches is valid",
6497bd480fSBaptiste Daroussin                "data": {"a": 21, "aaaa": 18},
6597bd480fSBaptiste Daroussin                "valid": true
6697bd480fSBaptiste Daroussin            },
6797bd480fSBaptiste Daroussin            {
6897bd480fSBaptiste Daroussin                "description": "an invalid due to one is invalid",
6997bd480fSBaptiste Daroussin                "data": {"a": "bar"},
7097bd480fSBaptiste Daroussin                "valid": false
7197bd480fSBaptiste Daroussin            },
7297bd480fSBaptiste Daroussin            {
7397bd480fSBaptiste Daroussin                "description": "an invalid due to the other is invalid",
7497bd480fSBaptiste Daroussin                "data": {"aaaa": 31},
7597bd480fSBaptiste Daroussin                "valid": false
7697bd480fSBaptiste Daroussin            },
7797bd480fSBaptiste Daroussin            {
7897bd480fSBaptiste Daroussin                "description": "an invalid due to both is invalid",
7997bd480fSBaptiste Daroussin                "data": {"aaa": "foo", "aaaa": 31},
8097bd480fSBaptiste Daroussin                "valid": false
8197bd480fSBaptiste Daroussin            }
8297bd480fSBaptiste Daroussin        ]
8397bd480fSBaptiste Daroussin    },
8497bd480fSBaptiste Daroussin    {
8597bd480fSBaptiste Daroussin        "description": "regexes are not anchored by default and are case sensitive",
8697bd480fSBaptiste Daroussin        "schema": {
8797bd480fSBaptiste Daroussin            "patternProperties": {
8897bd480fSBaptiste Daroussin                "[0-9]{2,}": { "type": "boolean" },
8997bd480fSBaptiste Daroussin                "X_": { "type": "string" }
9097bd480fSBaptiste Daroussin            }
9197bd480fSBaptiste Daroussin        },
9297bd480fSBaptiste Daroussin        "tests": [
9397bd480fSBaptiste Daroussin            {
9497bd480fSBaptiste Daroussin                "description": "non recognized members are ignored",
9597bd480fSBaptiste Daroussin                "data": { "answer 1": "42" },
9697bd480fSBaptiste Daroussin                "valid": true
9797bd480fSBaptiste Daroussin            },
9897bd480fSBaptiste Daroussin            {
9997bd480fSBaptiste Daroussin                "description": "recognized members are accounted for",
10097bd480fSBaptiste Daroussin                "data": { "a31b": null },
10197bd480fSBaptiste Daroussin                "valid": false
10297bd480fSBaptiste Daroussin            },
10397bd480fSBaptiste Daroussin            {
10497bd480fSBaptiste Daroussin                "description": "regexes are case sensitive",
10597bd480fSBaptiste Daroussin                "data": { "a_x_3": 3 },
10697bd480fSBaptiste Daroussin                "valid": true
10797bd480fSBaptiste Daroussin            },
10897bd480fSBaptiste Daroussin            {
10997bd480fSBaptiste Daroussin                "description": "regexes are case sensitive, 2",
11097bd480fSBaptiste Daroussin                "data": { "a_X_3": 3 },
11197bd480fSBaptiste Daroussin                "valid": false
11297bd480fSBaptiste Daroussin            }
11397bd480fSBaptiste Daroussin        ]
11497bd480fSBaptiste Daroussin    }
11597bd480fSBaptiste Daroussin]
116