1268896Sbapt[
2268896Sbapt    {
3268896Sbapt        "description":
4268896Sbapt            "patternProperties validates properties matching a regex",
5268896Sbapt        "schema": {
6268896Sbapt            "patternProperties": {
7268896Sbapt                "f.*o": {"type": "integer"}
8268896Sbapt            }
9268896Sbapt        },
10268896Sbapt        "tests": [
11268896Sbapt            {
12268896Sbapt                "description": "a single valid match is valid",
13268896Sbapt                "data": {"foo": 1},
14268896Sbapt                "valid": true
15268896Sbapt            },
16268896Sbapt            {
17268896Sbapt                "description": "multiple valid matches is valid",
18268896Sbapt                "data": {"foo": 1, "foooooo" : 2},
19268896Sbapt                "valid": true
20268896Sbapt            },
21268896Sbapt            {
22268896Sbapt                "description": "a single invalid match is invalid",
23268896Sbapt                "data": {"foo": "bar", "fooooo": 2},
24268896Sbapt                "valid": false
25268896Sbapt            },
26268896Sbapt            {
27268896Sbapt                "description": "multiple invalid matches is invalid",
28268896Sbapt                "data": {"foo": "bar", "foooooo" : "baz"},
29268896Sbapt                "valid": false
30268896Sbapt            },
31268896Sbapt            {
32268896Sbapt                "description": "ignores non-objects",
33268896Sbapt                "data": 12,
34268896Sbapt                "valid": true
35268896Sbapt            }
36268896Sbapt        ]
37268896Sbapt    },
38268896Sbapt    {
39268896Sbapt        "description": "multiple simultaneous patternProperties are validated",
40268896Sbapt        "schema": {
41268896Sbapt            "patternProperties": {
42268896Sbapt                "a*": {"type": "integer"},
43268896Sbapt                "aaa*": {"maximum": 20}
44268896Sbapt            }
45268896Sbapt        },
46268896Sbapt        "tests": [
47268896Sbapt            {
48268896Sbapt                "description": "a single valid match is valid",
49268896Sbapt                "data": {"a": 21},
50268896Sbapt                "valid": true
51268896Sbapt            },
52268896Sbapt            {
53268896Sbapt                "description": "a simultaneous match is valid",
54268896Sbapt                "data": {"aaaa": 18},
55268896Sbapt                "valid": true
56268896Sbapt            },
57268896Sbapt            {
58268896Sbapt                "description": "multiple matches is valid",
59268896Sbapt                "data": {"a": 21, "aaaa": 18},
60268896Sbapt                "valid": true
61268896Sbapt            },
62268896Sbapt            {
63268896Sbapt                "description": "an invalid due to one is invalid",
64268896Sbapt                "data": {"a": "bar"},
65268896Sbapt                "valid": false
66268896Sbapt            },
67268896Sbapt            {
68268896Sbapt                "description": "an invalid due to the other is invalid",
69268896Sbapt                "data": {"aaaa": 31},
70268896Sbapt                "valid": false
71268896Sbapt            },
72268896Sbapt            {
73268896Sbapt                "description": "an invalid due to both is invalid",
74268896Sbapt                "data": {"aaa": "foo", "aaaa": 31},
75268896Sbapt                "valid": false
76268896Sbapt            }
77268896Sbapt        ]
78268896Sbapt    },
79268896Sbapt    {
80268896Sbapt        "description": "regexes are not anchored by default and are case sensitive",
81268896Sbapt        "schema": {
82268896Sbapt            "patternProperties": {
83268896Sbapt                "[0-9]{2,}": { "type": "boolean" },
84268896Sbapt                "X_": { "type": "string" }
85268896Sbapt            }
86268896Sbapt        },
87268896Sbapt        "tests": [
88268896Sbapt            {
89268896Sbapt                "description": "non recognized members are ignored",
90268896Sbapt                "data": { "answer 1": "42" },
91268896Sbapt                "valid": true
92268896Sbapt            },
93268896Sbapt            {
94268896Sbapt                "description": "recognized members are accounted for",
95268896Sbapt                "data": { "a31b": null },
96268896Sbapt                "valid": false
97268896Sbapt            },
98268896Sbapt            {
99268896Sbapt                "description": "regexes are case sensitive",
100268896Sbapt                "data": { "a_x_3": 3 },
101268896Sbapt                "valid": true
102268896Sbapt            },
103268896Sbapt            {
104268896Sbapt                "description": "regexes are case sensitive, 2",
105268896Sbapt                "data": { "a_X_3": 3 },
106268896Sbapt                "valid": false
107268896Sbapt            }
108268896Sbapt        ]
109268896Sbapt    }
110268896Sbapt]
111