xref: /freebsd/contrib/libucl/tests/schema/patternProperties.json (revision 39ee7a7a6bdd1557b1c3532abf60d139798ac88b)
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": "multiple invalid matches is invalid",
28                "data": {"foo": "bar", "foooooo" : "baz"},
29                "valid": false
30            },
31            {
32                "description": "ignores non-objects",
33                "data": 12,
34                "valid": true
35            }
36        ]
37    },
38    {
39        "description": "multiple simultaneous patternProperties are validated",
40        "schema": {
41            "patternProperties": {
42                "a*": {"type": "integer"},
43                "aaa*": {"maximum": 20}
44            }
45        },
46        "tests": [
47            {
48                "description": "a single valid match is valid",
49                "data": {"a": 21},
50                "valid": true
51            },
52            {
53                "description": "a simultaneous match is valid",
54                "data": {"aaaa": 18},
55                "valid": true
56            },
57            {
58                "description": "multiple matches is valid",
59                "data": {"a": 21, "aaaa": 18},
60                "valid": true
61            },
62            {
63                "description": "an invalid due to one is invalid",
64                "data": {"a": "bar"},
65                "valid": false
66            },
67            {
68                "description": "an invalid due to the other is invalid",
69                "data": {"aaaa": 31},
70                "valid": false
71            },
72            {
73                "description": "an invalid due to both is invalid",
74                "data": {"aaa": "foo", "aaaa": 31},
75                "valid": false
76            }
77        ]
78    },
79    {
80        "description": "regexes are not anchored by default and are case sensitive",
81        "schema": {
82            "patternProperties": {
83                "[0-9]{2,}": { "type": "boolean" },
84                "X_": { "type": "string" }
85            }
86        },
87        "tests": [
88            {
89                "description": "non recognized members are ignored",
90                "data": { "answer 1": "42" },
91                "valid": true
92            },
93            {
94                "description": "recognized members are accounted for",
95                "data": { "a31b": null },
96                "valid": false
97            },
98            {
99                "description": "regexes are case sensitive",
100                "data": { "a_x_3": 3 },
101                "valid": true
102            },
103            {
104                "description": "regexes are case sensitive, 2",
105                "data": { "a_X_3": 3 },
106                "valid": false
107            }
108        ]
109    }
110]
111