Skip to content

Commit b6d0649

Browse files
committed
Add tests for contains with objects
1 parent da687ca commit b6d0649

File tree

3 files changed

+196
-6
lines changed

3 files changed

+196
-6
lines changed

tests/draft-future/contains.json

Lines changed: 93 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -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,6 +82,21 @@
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
},
@@ -73,6 +113,16 @@
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
},
@@ -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,6 +160,7 @@
100160
{
101161
"description": "items + contains",
102162
"schema": {
163+
"additionalProperties": { "multipleOf": 2 },
103164
"items": { "multipleOf": 2 },
104165
"contains": { "multipleOf": 3 }
105166
},
@@ -123,6 +184,26 @@
123184
"description": "matches neither items nor contains",
124185
"data": [1, 5],
125186
"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 },
206+
"valid": false
126207
}
127208
]
128209
},
@@ -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: 54 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,16 @@
1414
"description": "two items still valid against lone maxContains",
1515
"data": [1, 2],
1616
"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 },
26+
"valid": true
1727
}
1828
]
1929
},
@@ -25,7 +35,7 @@
2535
},
2636
"tests": [
2737
{
28-
"description": "empty data",
38+
"description": "empty array",
2939
"data": [],
3040
"valid": false
3141
},
@@ -48,6 +58,31 @@
4858
"description": "some elements match, invalid maxContains",
4959
"data": [1, 2, 1],
5060
"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 },
85+
"valid": false
5186
}
5287
]
5388
},
@@ -60,19 +95,34 @@
6095
},
6196
"tests": [
6297
{
63-
"description": "actual < minContains < maxContains",
98+
"description": "array with actual < minContains < maxContains",
6499
"data": [],
65100
"valid": false
66101
},
67102
{
68-
"description": "minContains < actual < maxContains",
103+
"description": "array with minContains < actual < maxContains",
69104
"data": [1, 1],
70105
"valid": true
71106
},
72107
{
73-
"description": "minContains < maxContains < actual",
108+
"description": "array with minContains < maxContains < actual",
74109
"data": [1, 1, 1, 1],
75110
"valid": false
111+
},
112+
{
113+
"description": "object with actual < minContains < maxContains",
114+
"data": {},
115+
"valid": false
116+
},
117+
{
118+
"description": "object with minContains < actual < maxContains",
119+
"data": { "a": 1, "b": 1 },
120+
"valid": true
121+
},
122+
{
123+
"description": "object with minContains < maxContains < actual",
124+
"data": { "a": 1, "b": 1, "c": 1, "d": 1 },
125+
"valid": false
76126
}
77127
]
78128
}

tests/draft-future/unevaluatedProperties.json

Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -951,5 +951,54 @@
951951
"valid": true
952952
}
953953
]
954+
},
955+
{
956+
"description": "unevaluatedProperties depends on adjacent contains",
957+
"schema": {
958+
"properties": {
959+
"foo": { "type": "number" }
960+
},
961+
"contains": { "type": "string" },
962+
"unevaluatedProperties": false
963+
},
964+
"tests": [
965+
{
966+
"description": "bar is evaluated by contains",
967+
"data": { "foo": 1, "bar": "foo" },
968+
"valid": true
969+
},
970+
{
971+
"description": "contains fails, bar is not evaluated",
972+
"data": { "foo": 1, "bar": 2 },
973+
"valid": false
974+
},
975+
{
976+
"description": "contains passes, bar is not evaluated",
977+
"data": { "foo": 1, "bar": 2, "baz": "foo" },
978+
"valid": false
979+
}
980+
]
981+
},
982+
{
983+
"description": "unevaluatedProperties depends on multiple nested contains",
984+
"schema": {
985+
"allOf": [
986+
{ "contains": { "multipleOf": 2 } },
987+
{ "contains": { "multipleOf": 3 } }
988+
],
989+
"unevaluatedProperties": { "multipleOf": 5 }
990+
},
991+
"tests": [
992+
{
993+
"description": "5 not evaluated, passes unevaluatedItems",
994+
"data": { "a": 2, "b": 3, "c": 4, "d": 5, "e": 6 },
995+
"valid": true
996+
},
997+
{
998+
"description": "7 not evaluated, fails unevaluatedItems",
999+
"data": { "a": 2, "b": 3, "c": 4, "d": 7, "e": 8 },
1000+
"valid": false
1001+
}
1002+
]
9541003
}
9551004
]

0 commit comments

Comments
 (0)