xref: /aosp_15_r20/external/json-schema-validator/src/test/suite/tests/draft2020-12/required.json (revision 78c4dd6aa35290980cdcd1623a7e337e8d021c7c)
1[
2    {
3        "description": "required validation",
4        "schema": {
5            "$schema": "https://json-schema.org/draft/2020-12/schema",
6            "properties": {
7                "foo": {},
8                "bar": {}
9            },
10            "required": ["foo"]
11        },
12        "tests": [
13            {
14                "description": "present required property is valid",
15                "data": {"foo": 1},
16                "valid": true
17            },
18            {
19                "description": "non-present required property is invalid",
20                "data": {"bar": 1},
21                "valid": false
22            },
23            {
24                "description": "ignores arrays",
25                "data": [],
26                "valid": true
27            },
28            {
29                "description": "ignores strings",
30                "data": "",
31                "valid": true
32            },
33            {
34                "description": "ignores other non-objects",
35                "data": 12,
36                "valid": true
37            }
38        ]
39    },
40    {
41        "description": "required default validation",
42        "schema": {
43            "$schema": "https://json-schema.org/draft/2020-12/schema",
44            "properties": {
45                "foo": {}
46            }
47        },
48        "tests": [
49            {
50                "description": "not required by default",
51                "data": {},
52                "valid": true
53            }
54        ]
55    },
56    {
57        "description": "required with empty array",
58        "schema": {
59            "$schema": "https://json-schema.org/draft/2020-12/schema",
60            "properties": {
61                "foo": {}
62            },
63            "required": []
64        },
65        "tests": [
66            {
67                "description": "property not required",
68                "data": {},
69                "valid": true
70            }
71        ]
72    },
73    {
74        "description": "required with escaped characters",
75        "schema": {
76            "$schema": "https://json-schema.org/draft/2020-12/schema",
77            "required": [
78                "foo\nbar",
79                "foo\"bar",
80                "foo\\bar",
81                "foo\rbar",
82                "foo\tbar",
83                "foo\fbar"
84            ]
85        },
86        "tests": [
87            {
88                "description": "object with all properties present is valid",
89                "data": {
90                    "foo\nbar": 1,
91                    "foo\"bar": 1,
92                    "foo\\bar": 1,
93                    "foo\rbar": 1,
94                    "foo\tbar": 1,
95                    "foo\fbar": 1
96                },
97                "valid": true
98            },
99            {
100                "description": "object with some properties missing is invalid",
101                "data": {
102                    "foo\nbar": "1",
103                    "foo\"bar": "1"
104                },
105                "valid": false
106            }
107        ]
108    },
109    {
110        "description": "required properties whose names are Javascript object property names",
111        "comment": "Ensure JS implementations don't universally consider e.g. __proto__ to always be present in an object.",
112        "schema": {
113            "$schema": "https://json-schema.org/draft/2020-12/schema",
114            "required": ["__proto__", "toString", "constructor"]
115        },
116        "tests": [
117            {
118                "description": "ignores arrays",
119                "data": [],
120                "valid": true
121            },
122            {
123                "description": "ignores other non-objects",
124                "data": 12,
125                "valid": true
126            },
127            {
128                "description": "none of the properties mentioned",
129                "data": {},
130                "valid": false
131            },
132            {
133                "description": "__proto__ present",
134                "data": { "__proto__": "foo" },
135                "valid": false
136            },
137            {
138                "description": "toString present",
139                "data": { "toString": { "length": 37 } },
140                "valid": false
141            },
142            {
143                "description": "constructor present",
144                "data": { "constructor": { "length": 37 } },
145                "valid": false
146            },
147            {
148                "description": "all present",
149                "data": {
150                    "__proto__": 12,
151                    "toString": { "length": "foo" },
152                    "constructor": 37
153                },
154                "valid": true
155            }
156        ]
157    }
158]
159