xref: /aosp_15_r20/external/json-schema-validator/src/test/suite/tests/draft2020-12/patternProperties.json (revision 78c4dd6aa35290980cdcd1623a7e337e8d021c7c)
1[
2    {
3        "description":
4            "patternProperties validates properties matching a regex",
5        "schema": {
6            "$schema": "https://json-schema.org/draft/2020-12/schema",
7            "patternProperties": {
8                "f.*o": {"type": "integer"}
9            }
10        },
11        "tests": [
12            {
13                "description": "a single valid match is valid",
14                "data": {"foo": 1},
15                "valid": true
16            },
17            {
18                "description": "multiple valid matches is valid",
19                "data": {"foo": 1, "foooooo" : 2},
20                "valid": true
21            },
22            {
23                "description": "a single invalid match is invalid",
24                "data": {"foo": "bar", "fooooo": 2},
25                "valid": false
26            },
27            {
28                "description": "multiple invalid matches is invalid",
29                "data": {"foo": "bar", "foooooo" : "baz"},
30                "valid": false
31            },
32            {
33                "description": "ignores arrays",
34                "data": ["foo"],
35                "valid": true
36            },
37            {
38                "description": "ignores strings",
39                "data": "foo",
40                "valid": true
41            },
42            {
43                "description": "ignores other non-objects",
44                "data": 12,
45                "valid": true
46            }
47        ]
48    },
49    {
50        "description": "multiple simultaneous patternProperties are validated",
51        "schema": {
52            "$schema": "https://json-schema.org/draft/2020-12/schema",
53            "patternProperties": {
54                "a*": {"type": "integer"},
55                "aaa*": {"maximum": 20}
56            }
57        },
58        "tests": [
59            {
60                "description": "a single valid match is valid",
61                "data": {"a": 21},
62                "valid": true
63            },
64            {
65                "description": "a simultaneous match is valid",
66                "data": {"aaaa": 18},
67                "valid": true
68            },
69            {
70                "description": "multiple matches is valid",
71                "data": {"a": 21, "aaaa": 18},
72                "valid": true
73            },
74            {
75                "description": "an invalid due to one is invalid",
76                "data": {"a": "bar"},
77                "valid": false
78            },
79            {
80                "description": "an invalid due to the other is invalid",
81                "data": {"aaaa": 31},
82                "valid": false
83            },
84            {
85                "description": "an invalid due to both is invalid",
86                "data": {"aaa": "foo", "aaaa": 31},
87                "valid": false
88            }
89        ]
90    },
91    {
92        "description": "regexes are not anchored by default and are case sensitive",
93        "schema": {
94            "$schema": "https://json-schema.org/draft/2020-12/schema",
95            "patternProperties": {
96                "[0-9]{2,}": { "type": "boolean" },
97                "X_": { "type": "string" }
98            }
99        },
100        "tests": [
101            {
102                "description": "non recognized members are ignored",
103                "data": { "answer 1": "42" },
104                "valid": true
105            },
106            {
107                "description": "recognized members are accounted for",
108                "data": { "a31b": null },
109                "valid": false
110            },
111            {
112                "description": "regexes are case sensitive",
113                "data": { "a_x_3": 3 },
114                "valid": true
115            },
116            {
117                "description": "regexes are case sensitive, 2",
118                "data": { "a_X_3": 3 },
119                "valid": false
120            }
121        ]
122    },
123    {
124        "description": "patternProperties with boolean schemas",
125        "schema": {
126            "$schema": "https://json-schema.org/draft/2020-12/schema",
127            "patternProperties": {
128                "f.*": true,
129                "b.*": false
130            }
131        },
132        "tests": [
133            {
134                "description": "object with property matching schema true is valid",
135                "data": {"foo": 1},
136                "valid": true
137            },
138            {
139                "description": "object with property matching schema false is invalid",
140                "data": {"bar": 2},
141                "valid": false
142            },
143            {
144                "description": "object with both properties is invalid",
145                "data": {"foo": 1, "bar": 2},
146                "valid": false
147            },
148            {
149                "description": "object with a property matching both true and false is invalid",
150                "data": {"foobar":1},
151                "valid": false
152            },
153            {
154                "description": "empty object is valid",
155                "data": {},
156                "valid": true
157            }
158        ]
159    },
160    {
161        "description": "patternProperties with null valued instance properties",
162        "schema": {
163            "$schema": "https://json-schema.org/draft/2020-12/schema",
164            "patternProperties": {
165                "^.*bar$": {"type": "null"}
166            }
167        },
168        "tests": [
169            {
170                "description": "allows null values",
171                "data": {"foobar": null},
172                "valid": true
173            }
174        ]
175    }
176]
177