Skip to content

Commit 0aefbb3

Browse files
authored
Merge pull request #491 from jdesrosiers/object-contains-tests
Object contains tests
2 parents 336ef8d + b6d0649 commit 0aefbb3

File tree

4 files changed

+242
-52
lines changed

4 files changed

+242
-52
lines changed

tests/draft-future/contains.json

Lines changed: 100 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
{
33
"description": "contains keyword validation",
44
"schema": {
5-
"contains": {"minimum": 5}
5+
"contains": { "minimum": 5 }
66
},
77
"tests": [
88
{
@@ -31,8 +31,33 @@
3131
"valid": false
3232
},
3333
{
34-
"description": "not array is valid",
34+
"description": "object with property matching schema (5) is valid",
35+
"data": { "a": 3, "b": 4, "c": 5 },
36+
"valid": true
37+
},
38+
{
39+
"description": "object with property matching schema (6) is valid",
40+
"data": { "a": 3, "b": 4, "c": 6 },
41+
"valid": true
42+
},
43+
{
44+
"description": "object with two properties matching schema (5, 6) is valid",
45+
"data": { "a": 3, "b": 4, "c": 5, "d": 6 },
46+
"valid": true
47+
},
48+
{
49+
"description": "object without properties matching schema is invalid",
50+
"data": { "a": 2, "b": 3, "c": 4 },
51+
"valid": false
52+
},
53+
{
54+
"description": "empty object is invalid",
3555
"data": {},
56+
"valid": false
57+
},
58+
{
59+
"description": "not array or object is valid",
60+
"data": 42,
3661
"valid": true
3762
}
3863
]
@@ -57,12 +82,27 @@
5782
"description": "array without item 5 is invalid",
5883
"data": [1, 2, 3, 4],
5984
"valid": false
85+
},
86+
{
87+
"description": "object with property 5 is valid",
88+
"data": { "a": 3, "b": 4, "c": 5 },
89+
"valid": true
90+
},
91+
{
92+
"description": "object with two properties 5 is valid",
93+
"data": { "a": 3, "b": 4, "c": 5, "d": 5 },
94+
"valid": true
95+
},
96+
{
97+
"description": "object without property 5 is invalid",
98+
"data": { "a": 1, "b": 2, "c": 3, "d": 4 },
99+
"valid": false
60100
}
61101
]
62102
},
63103
{
64104
"description": "contains keyword with boolean schema true",
65-
"schema": {"contains": true},
105+
"schema": { "contains": true },
66106
"tests": [
67107
{
68108
"description": "any non-empty array is valid",
@@ -73,12 +113,22 @@
73113
"description": "empty array is invalid",
74114
"data": [],
75115
"valid": false
116+
},
117+
{
118+
"description": "any non-empty object is valid",
119+
"data": { "a": "foo" },
120+
"valid": true
121+
},
122+
{
123+
"description": "empty object is invalid",
124+
"data": {},
125+
"valid": false
76126
}
77127
]
78128
},
79129
{
80130
"description": "contains keyword with boolean schema false",
81-
"schema": {"contains": false},
131+
"schema": { "contains": false },
82132
"tests": [
83133
{
84134
"description": "any non-empty array is invalid",
@@ -91,7 +141,17 @@
91141
"valid": false
92142
},
93143
{
94-
"description": "non-arrays are valid",
144+
"description": "any non-empty object is invalid",
145+
"data": ["foo"],
146+
"valid": false
147+
},
148+
{
149+
"description": "empty object is invalid",
150+
"data": {},
151+
"valid": false
152+
},
153+
{
154+
"description": "non-arrays/objects are valid",
95155
"data": "contains does not apply to strings",
96156
"valid": true
97157
}
@@ -100,28 +160,49 @@
100160
{
101161
"description": "items + contains",
102162
"schema": {
163+
"additionalProperties": { "multipleOf": 2 },
103164
"items": { "multipleOf": 2 },
104165
"contains": { "multipleOf": 3 }
105166
},
106167
"tests": [
107168
{
108169
"description": "matches items, does not match contains",
109-
"data": [ 2, 4, 8 ],
170+
"data": [2, 4, 8],
110171
"valid": false
111172
},
112173
{
113174
"description": "does not match items, matches contains",
114-
"data": [ 3, 6, 9 ],
175+
"data": [3, 6, 9],
115176
"valid": false
116177
},
117178
{
118179
"description": "matches both items and contains",
119-
"data": [ 6, 12 ],
180+
"data": [6, 12],
120181
"valid": true
121182
},
122183
{
123184
"description": "matches neither items nor contains",
124-
"data": [ 1, 5 ],
185+
"data": [1, 5],
186+
"valid": false
187+
},
188+
{
189+
"description": "matches additionalProperties, does not match contains",
190+
"data": { "a": 2, "b": 4, "c": 8 },
191+
"valid": false
192+
},
193+
{
194+
"description": "does not match additionalProperties, matches contains",
195+
"data": { "a": 3, "b": 6, "c": 9 },
196+
"valid": false
197+
},
198+
{
199+
"description": "matches both additionalProperties and contains",
200+
"data": { "a": 6, "b": 12 },
201+
"valid": true
202+
},
203+
{
204+
"description": "matches neither additionalProperties nor contains",
205+
"data": { "a": 1, "b": 5 },
125206
"valid": false
126207
}
127208
]
@@ -144,6 +225,16 @@
144225
"description": "empty array is invalid",
145226
"data": [],
146227
"valid": false
228+
},
229+
{
230+
"description": "any non-empty object is valid",
231+
"data": { "a": "foo" },
232+
"valid": true
233+
},
234+
{
235+
"description": "empty object is invalid",
236+
"data": {},
237+
"valid": false
147238
}
148239
]
149240
}

tests/draft-future/maxContains.json

Lines changed: 66 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -7,71 +7,121 @@
77
"tests": [
88
{
99
"description": "one item valid against lone maxContains",
10-
"data": [ 1 ],
10+
"data": [1],
1111
"valid": true
1212
},
1313
{
1414
"description": "two items still valid against lone maxContains",
15-
"data": [ 1, 2 ],
15+
"data": [1, 2],
16+
"valid": true
17+
},
18+
{
19+
"description": "one property valid against lone maxContains",
20+
"data": { "a": 1 },
21+
"valid": true
22+
},
23+
{
24+
"description": "two properties still valid against lone maxContains",
25+
"data": { "a": 1, "b": 2 },
1626
"valid": true
1727
}
1828
]
1929
},
2030
{
2131
"description": "maxContains with contains",
2232
"schema": {
23-
"contains": {"const": 1},
33+
"contains": { "const": 1 },
2434
"maxContains": 1
2535
},
2636
"tests": [
2737
{
28-
"description": "empty data",
29-
"data": [ ],
38+
"description": "empty array",
39+
"data": [],
3040
"valid": false
3141
},
3242
{
3343
"description": "all elements match, valid maxContains",
34-
"data": [ 1 ],
44+
"data": [1],
3545
"valid": true
3646
},
3747
{
3848
"description": "all elements match, invalid maxContains",
39-
"data": [ 1, 1 ],
49+
"data": [1, 1],
4050
"valid": false
4151
},
4252
{
4353
"description": "some elements match, valid maxContains",
44-
"data": [ 1, 2 ],
54+
"data": [1, 2],
4555
"valid": true
4656
},
4757
{
4858
"description": "some elements match, invalid maxContains",
49-
"data": [ 1, 2, 1 ],
59+
"data": [1, 2, 1],
60+
"valid": false
61+
},
62+
{
63+
"description": "empty object",
64+
"data": {},
65+
"valid": false
66+
},
67+
{
68+
"description": "all properties match, valid maxContains",
69+
"data": { "a": 1 },
70+
"valid": true
71+
},
72+
{
73+
"description": "all properties match, invalid maxContains",
74+
"data": { "a": 1, "b": 1 },
75+
"valid": false
76+
},
77+
{
78+
"description": "some properties match, valid maxContains",
79+
"data": { "a": 1, "b": 2 },
80+
"valid": true
81+
},
82+
{
83+
"description": "some properties match, invalid maxContains",
84+
"data": { "a": 1, "b": 2, "c": 1 },
5085
"valid": false
5186
}
5287
]
5388
},
5489
{
5590
"description": "minContains < maxContains",
5691
"schema": {
57-
"contains": {"const": 1},
92+
"contains": { "const": 1 },
5893
"minContains": 1,
5994
"maxContains": 3
6095
},
6196
"tests": [
6297
{
63-
"description": "actual < minContains < maxContains",
64-
"data": [ ],
98+
"description": "array with actual < minContains < maxContains",
99+
"data": [],
100+
"valid": false
101+
},
102+
{
103+
"description": "array with minContains < actual < maxContains",
104+
"data": [1, 1],
105+
"valid": true
106+
},
107+
{
108+
"description": "array with minContains < maxContains < actual",
109+
"data": [1, 1, 1, 1],
110+
"valid": false
111+
},
112+
{
113+
"description": "object with actual < minContains < maxContains",
114+
"data": {},
65115
"valid": false
66116
},
67117
{
68-
"description": "minContains < actual < maxContains",
69-
"data": [ 1, 1 ],
118+
"description": "object with minContains < actual < maxContains",
119+
"data": { "a": 1, "b": 1 },
70120
"valid": true
71121
},
72122
{
73-
"description": "minContains < maxContains < actual",
74-
"data": [ 1, 1, 1, 1 ],
123+
"description": "object with minContains < maxContains < actual",
124+
"data": { "a": 1, "b": 1, "c": 1, "d": 1 },
75125
"valid": false
76126
}
77127
]

0 commit comments

Comments
 (0)