json-schema 2.5.1 → 2.5.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/README.textile +2 -2
- data/lib/json-schema/attributes/properties.rb +1 -1
- data/lib/json-schema/validator.rb +14 -6
- metadata +6 -121
- data/test/data/all_of_ref_data.json +0 -3
- data/test/data/any_of_ref_data.json +0 -7
- data/test/data/bad_data_1.json +0 -3
- data/test/data/good_data_1.json +0 -3
- data/test/data/one_of_ref_links_data.json +0 -5
- data/test/schemas/address_microformat.json +0 -18
- data/test/schemas/all_of_ref_base_schema.json +0 -6
- data/test/schemas/all_of_ref_schema.json +0 -7
- data/test/schemas/any_of_ref_jane_schema.json +0 -4
- data/test/schemas/any_of_ref_jimmy_schema.json +0 -4
- data/test/schemas/any_of_ref_john_schema.json +0 -4
- data/test/schemas/any_of_ref_schema.json +0 -15
- data/test/schemas/definition_schema.json +0 -15
- data/test/schemas/extends_and_additionalProperties-1-filename.schema.json +0 -34
- data/test/schemas/extends_and_additionalProperties-1-ref.schema.json +0 -34
- data/test/schemas/extends_and_additionalProperties-2-filename.schema.json +0 -33
- data/test/schemas/extends_and_additionalProperties-2-ref.schema.json +0 -33
- data/test/schemas/good_schema_1.json +0 -10
- data/test/schemas/good_schema_2.json +0 -10
- data/test/schemas/good_schema_extends1.json +0 -10
- data/test/schemas/good_schema_extends2.json +0 -13
- data/test/schemas/inner.schema.json +0 -21
- data/test/schemas/one_of_ref_links_schema.json +0 -16
- data/test/schemas/ref john with spaces schema.json +0 -11
- data/test/schemas/relative_definition_schema.json +0 -8
- data/test/schemas/self_link_schema.json +0 -17
- data/test/schemas/up_link_schema.json +0 -17
- data/test/test_all_of_ref_schema.rb +0 -35
- data/test/test_any_of_ref_schema.rb +0 -35
- data/test/test_bad_schema_ref.rb +0 -39
- data/test/test_common_test_suite.rb +0 -66
- data/test/test_custom_format.rb +0 -116
- data/test/test_definition.rb +0 -15
- data/test/test_extended_schema.rb +0 -62
- data/test/test_extends_and_additionalProperties.rb +0 -52
- data/test/test_files_v3.rb +0 -43
- data/test/test_fragment_resolution.rb +0 -30
- data/test/test_fragment_validation_with_ref.rb +0 -34
- data/test/test_full_validation.rb +0 -208
- data/test/test_helper.rb +0 -47
- data/test/test_initialize_data.rb +0 -118
- data/test/test_jsonschema_draft1.rb +0 -141
- data/test/test_jsonschema_draft2.rb +0 -113
- data/test/test_jsonschema_draft3.rb +0 -450
- data/test/test_jsonschema_draft4.rb +0 -657
- data/test/test_list_option.rb +0 -21
- data/test/test_load_ref_schema.rb +0 -40
- data/test/test_merge_missing_values.rb +0 -45
- data/test/test_minitems.rb +0 -16
- data/test/test_one_of.rb +0 -85
- data/test/test_ruby_schema.rb +0 -59
- data/test/test_schema_loader.rb +0 -74
- data/test/test_schema_type_attribute.rb +0 -20
- data/test/test_schema_validation.rb +0 -185
- data/test/test_stringify.rb +0 -48
- data/test/test_uri_related.rb +0 -67
- data/test/test_validator.rb +0 -53
@@ -1,657 +0,0 @@
|
|
1
|
-
# encoding: utf-8
|
2
|
-
require File.expand_path('../test_helper', __FILE__)
|
3
|
-
|
4
|
-
class JSONSchemaDraft4Test < Minitest::Test
|
5
|
-
def schema_version
|
6
|
-
:draft4
|
7
|
-
end
|
8
|
-
|
9
|
-
def exclusive_minimum
|
10
|
-
{ 'exclusiveMinimum' => true }
|
11
|
-
end
|
12
|
-
|
13
|
-
def exclusive_maximum
|
14
|
-
{ 'exclusiveMaximum' => true }
|
15
|
-
end
|
16
|
-
|
17
|
-
def ipv4_format
|
18
|
-
'ipv4'
|
19
|
-
end
|
20
|
-
|
21
|
-
include ArrayValidation::ItemsTests
|
22
|
-
include ArrayValidation::AdditionalItemsTests
|
23
|
-
include ArrayValidation::UniqueItemsTests
|
24
|
-
|
25
|
-
include EnumValidation::General
|
26
|
-
include EnumValidation::V3_V4
|
27
|
-
|
28
|
-
include NumberValidation::MinMaxTests
|
29
|
-
include NumberValidation::MultipleOfTests
|
30
|
-
|
31
|
-
include ObjectValidation::AdditionalPropertiesTests
|
32
|
-
include ObjectValidation::PatternPropertiesTests
|
33
|
-
|
34
|
-
include StrictValidation
|
35
|
-
|
36
|
-
include StringValidation::ValueTests
|
37
|
-
include StringValidation::FormatTests
|
38
|
-
|
39
|
-
include TypeValidation::SimpleTypeTests
|
40
|
-
|
41
|
-
def test_required
|
42
|
-
# Set up the default datatype
|
43
|
-
schema = {
|
44
|
-
"$schema" => "http://json-schema.org/draft-04/schema#",
|
45
|
-
"required" => ["a"],
|
46
|
-
"properties" => {
|
47
|
-
"a" => {}
|
48
|
-
}
|
49
|
-
}
|
50
|
-
data = {}
|
51
|
-
|
52
|
-
refute_valid schema, data
|
53
|
-
data['a'] = "Hello"
|
54
|
-
assert_valid schema, data
|
55
|
-
|
56
|
-
schema = {
|
57
|
-
"$schema" => "http://json-schema.org/draft-04/schema#",
|
58
|
-
"properties" => {
|
59
|
-
"a" => {"type" => "integer"}
|
60
|
-
}
|
61
|
-
}
|
62
|
-
|
63
|
-
data = {}
|
64
|
-
assert_valid schema, data
|
65
|
-
end
|
66
|
-
|
67
|
-
def test_min_properties
|
68
|
-
schema = { 'minProperties' => 2 }
|
69
|
-
|
70
|
-
assert_valid schema, {'a' => 1, 'b' => 2}
|
71
|
-
assert_valid schema, {'a' => 1, 'b' => 2, 'c' => 3}
|
72
|
-
|
73
|
-
refute_valid schema, {'a' => 1}
|
74
|
-
refute_valid schema, {}
|
75
|
-
end
|
76
|
-
|
77
|
-
def test_max_properties
|
78
|
-
schema = { 'maxProperties' => 2 }
|
79
|
-
|
80
|
-
assert_valid schema, {'a' => 1, 'b' => 2}
|
81
|
-
assert_valid schema, {'a' => 1}
|
82
|
-
assert_valid schema, {}
|
83
|
-
|
84
|
-
refute_valid schema, {'a' => 1, 'b' => 2, 'c' => 3}
|
85
|
-
end
|
86
|
-
|
87
|
-
def test_strict_properties
|
88
|
-
schema = {
|
89
|
-
"$schema" => "http://json-schema.org/draft-04/schema#",
|
90
|
-
"properties" => {
|
91
|
-
"a" => {"type" => "string"},
|
92
|
-
"b" => {"type" => "string"}
|
93
|
-
}
|
94
|
-
}
|
95
|
-
|
96
|
-
data = {"a" => "a"}
|
97
|
-
assert(!JSON::Validator.validate(schema,data,:strict => true))
|
98
|
-
|
99
|
-
data = {"b" => "b"}
|
100
|
-
assert(!JSON::Validator.validate(schema,data,:strict => true))
|
101
|
-
|
102
|
-
data = {"a" => "a", "b" => "b"}
|
103
|
-
assert(JSON::Validator.validate(schema,data,:strict => true))
|
104
|
-
|
105
|
-
data = {"a" => "a", "b" => "b", "c" => "c"}
|
106
|
-
assert(!JSON::Validator.validate(schema,data,:strict => true))
|
107
|
-
end
|
108
|
-
|
109
|
-
def test_strict_properties_additional_props
|
110
|
-
schema = {
|
111
|
-
"$schema" => "http://json-schema.org/draft-04/schema#",
|
112
|
-
"properties" => {
|
113
|
-
"a" => {"type" => "string"},
|
114
|
-
"b" => {"type" => "string"}
|
115
|
-
},
|
116
|
-
"additionalProperties" => {"type" => "integer"}
|
117
|
-
}
|
118
|
-
|
119
|
-
data = {"a" => "a"}
|
120
|
-
assert(!JSON::Validator.validate(schema,data,:strict => true))
|
121
|
-
|
122
|
-
data = {"b" => "b"}
|
123
|
-
assert(!JSON::Validator.validate(schema,data,:strict => true))
|
124
|
-
|
125
|
-
data = {"a" => "a", "b" => "b"}
|
126
|
-
assert(JSON::Validator.validate(schema,data,:strict => true))
|
127
|
-
|
128
|
-
data = {"a" => "a", "b" => "b", "c" => "c"}
|
129
|
-
assert(!JSON::Validator.validate(schema,data,:strict => true))
|
130
|
-
|
131
|
-
data = {"a" => "a", "b" => "b", "c" => 3}
|
132
|
-
assert(JSON::Validator.validate(schema,data,:strict => true))
|
133
|
-
end
|
134
|
-
|
135
|
-
def test_strict_properties_pattern_props
|
136
|
-
schema = {
|
137
|
-
"$schema" => "http://json-schema.org/draft-03/schema#",
|
138
|
-
"properties" => {
|
139
|
-
"a" => {"type" => "string"},
|
140
|
-
"b" => {"type" => "string"}
|
141
|
-
},
|
142
|
-
"patternProperties" => {"\\d+ taco" => {"type" => "integer"}}
|
143
|
-
}
|
144
|
-
|
145
|
-
data = {"a" => "a"}
|
146
|
-
assert(!JSON::Validator.validate(schema,data,:strict => true))
|
147
|
-
|
148
|
-
data = {"b" => "b"}
|
149
|
-
assert(!JSON::Validator.validate(schema,data,:strict => true))
|
150
|
-
|
151
|
-
data = {"a" => "a", "b" => "b"}
|
152
|
-
assert(JSON::Validator.validate(schema,data,:strict => true))
|
153
|
-
|
154
|
-
data = {"a" => "a", "b" => "b", "c" => "c"}
|
155
|
-
assert(!JSON::Validator.validate(schema,data,:strict => true))
|
156
|
-
|
157
|
-
data = {"a" => "a", "b" => "b", "c" => 3}
|
158
|
-
assert(!JSON::Validator.validate(schema,data,:strict => true))
|
159
|
-
|
160
|
-
data = {"a" => "a", "b" => "b", "23 taco" => 3}
|
161
|
-
assert(JSON::Validator.validate(schema,data,:strict => true))
|
162
|
-
|
163
|
-
data = {"a" => "a", "b" => "b", "23 taco" => "cheese"}
|
164
|
-
assert(!JSON::Validator.validate(schema,data,:strict => true))
|
165
|
-
end
|
166
|
-
|
167
|
-
def test_list_option
|
168
|
-
schema = {
|
169
|
-
"$schema" => "http://json-schema.org/draft-04/schema#",
|
170
|
-
"type" => "object",
|
171
|
-
"required" => ["a"],
|
172
|
-
"properties" => { "a" => {"type" => "integer"} }
|
173
|
-
}
|
174
|
-
|
175
|
-
data = [{"a" => 1},{"a" => 2},{"a" => 3}]
|
176
|
-
assert(JSON::Validator.validate(schema,data,:list => true))
|
177
|
-
refute_valid schema, data
|
178
|
-
|
179
|
-
data = {"a" => 1}
|
180
|
-
assert(!JSON::Validator.validate(schema,data,:list => true))
|
181
|
-
|
182
|
-
data = [{"a" => 1},{"b" => 2},{"a" => 3}]
|
183
|
-
assert(!JSON::Validator.validate(schema,data,:list => true))
|
184
|
-
end
|
185
|
-
|
186
|
-
def test_default_with_strict_and_anyof
|
187
|
-
schema = {
|
188
|
-
"anyOf" => [
|
189
|
-
{
|
190
|
-
"type" => "object",
|
191
|
-
"properties" => {
|
192
|
-
"foo" => {
|
193
|
-
"enum" => ["view", "search"],
|
194
|
-
"default" => "view"
|
195
|
-
}
|
196
|
-
}
|
197
|
-
},
|
198
|
-
{
|
199
|
-
"type" => "object",
|
200
|
-
"properties" => {
|
201
|
-
"bar" => {
|
202
|
-
"type" => "string"
|
203
|
-
}
|
204
|
-
}
|
205
|
-
}
|
206
|
-
]
|
207
|
-
}
|
208
|
-
|
209
|
-
data = {
|
210
|
-
"bar" => "baz"
|
211
|
-
}
|
212
|
-
|
213
|
-
assert(JSON::Validator.validate(schema, data, :insert_defaults => true, :strict => true))
|
214
|
-
end
|
215
|
-
|
216
|
-
def test_default_with_anyof
|
217
|
-
schema = {
|
218
|
-
"anyOf" => [
|
219
|
-
{
|
220
|
-
"type" => "object",
|
221
|
-
"properties" => {
|
222
|
-
"foo" => {
|
223
|
-
"enum" => ["view", "search"],
|
224
|
-
"default" => "view"
|
225
|
-
}
|
226
|
-
}
|
227
|
-
},
|
228
|
-
{
|
229
|
-
"type" => "object",
|
230
|
-
"properties" => {
|
231
|
-
"bar" => {
|
232
|
-
"type" => "string"
|
233
|
-
}
|
234
|
-
}
|
235
|
-
}
|
236
|
-
]
|
237
|
-
}
|
238
|
-
|
239
|
-
data = {}
|
240
|
-
|
241
|
-
assert(JSON::Validator.validate(schema, data, :insert_defaults => true, :strict => true))
|
242
|
-
assert(data['foo'] == 'view')
|
243
|
-
end
|
244
|
-
|
245
|
-
def test_default_with_strict_and_oneof
|
246
|
-
schema = {
|
247
|
-
"oneOf" => [
|
248
|
-
{
|
249
|
-
"type" => "object",
|
250
|
-
"properties" => {
|
251
|
-
"bar" => {
|
252
|
-
"type" => "string"
|
253
|
-
}
|
254
|
-
}
|
255
|
-
},
|
256
|
-
{
|
257
|
-
"type" => "object",
|
258
|
-
"properties" => {
|
259
|
-
"foo" => {
|
260
|
-
"enum" => ["view", "search"],
|
261
|
-
"default" => "view"
|
262
|
-
}
|
263
|
-
}
|
264
|
-
}
|
265
|
-
]
|
266
|
-
}
|
267
|
-
|
268
|
-
data = {
|
269
|
-
"bar" => "baz"
|
270
|
-
}
|
271
|
-
|
272
|
-
assert(JSON::Validator.validate(schema, data, :insert_defaults => true, :strict => true))
|
273
|
-
assert(!data.key?('foo'))
|
274
|
-
end
|
275
|
-
|
276
|
-
def test_self_reference
|
277
|
-
schema = {
|
278
|
-
"$schema" => "http://json-schema.org/draft-04/schema#",
|
279
|
-
"type" => "object",
|
280
|
-
"properties" => { "a" => {"type" => "integer"}, "b" => {"$ref" => "#"}}
|
281
|
-
}
|
282
|
-
|
283
|
-
assert_valid schema, {"a" => 5, "b" => {"b" => {"a" => 1}}}
|
284
|
-
refute_valid schema, {"a" => 5, "b" => {"b" => {"a" => 'taco'}}}
|
285
|
-
end
|
286
|
-
|
287
|
-
def test_format_datetime
|
288
|
-
schema = {
|
289
|
-
"$schema" => "http://json-schema.org/draft-04/schema#",
|
290
|
-
"type" => "object",
|
291
|
-
"properties" => { "a" => {"type" => "string", "format" => "date-time"}}
|
292
|
-
}
|
293
|
-
|
294
|
-
assert_valid schema, {"a" => "2010-01-01T12:00:00Z"}
|
295
|
-
assert_valid schema, {"a" => "2010-01-01T12:00:00.1Z"}
|
296
|
-
refute_valid schema, {"a" => "2010-01-01T12:00:00,1Z"}
|
297
|
-
refute_valid schema, {"a" => "2010-01-01T12:00:00+0000"}
|
298
|
-
assert_valid schema, {"a" => "2010-01-01T12:00:00+00:00"}
|
299
|
-
refute_valid schema, {"a" => "2010-01-32T12:00:00Z"}
|
300
|
-
refute_valid schema, {"a" => "2010-13-01T12:00:00Z"}
|
301
|
-
assert_valid schema, {"a" => "2010-01-01T24:00:00Z"}
|
302
|
-
refute_valid schema, {"a" => "2010-01-01T12:60:00Z"}
|
303
|
-
assert_valid schema, {"a" => "2010-01-01T12:00:60Z"}
|
304
|
-
assert_valid schema, {"a" => "2010-01-01T12:00:00z"}
|
305
|
-
refute_valid schema, {"a" => "2010-01-0112:00:00Z"}
|
306
|
-
end
|
307
|
-
|
308
|
-
def test_format_uri
|
309
|
-
data1 = {"a" => "http://gitbuh.com"}
|
310
|
-
data2 = {"a" => "::boo"}
|
311
|
-
data3 = {"a" => "http://ja.wikipedia.org/wiki/メインページ"}
|
312
|
-
|
313
|
-
schema = {
|
314
|
-
"$schema" => "http://json-schema.org/draft-04/schema#",
|
315
|
-
"type" => "object",
|
316
|
-
"properties" => { "a" => {"type" => "string", "format" => "uri"}}
|
317
|
-
}
|
318
|
-
|
319
|
-
assert(JSON::Validator.validate(schema,data1))
|
320
|
-
assert(!JSON::Validator.validate(schema,data2))
|
321
|
-
assert(JSON::Validator.validate(schema,data3))
|
322
|
-
end
|
323
|
-
|
324
|
-
def test_schema
|
325
|
-
schema = {
|
326
|
-
"$schema" => "http://json-schema.org/THIS-IS-NOT-A-SCHEMA",
|
327
|
-
"type" => "object"
|
328
|
-
}
|
329
|
-
|
330
|
-
data = {"a" => "taco"}
|
331
|
-
assert(!JSON::Validator.validate(schema,data))
|
332
|
-
|
333
|
-
schema = {
|
334
|
-
"$schema" => "http://json-schema.org/draft-04/schema#",
|
335
|
-
"type" => "object"
|
336
|
-
}
|
337
|
-
assert_valid schema, data
|
338
|
-
end
|
339
|
-
|
340
|
-
def test_dependency
|
341
|
-
schema = {
|
342
|
-
"$schema" => "http://json-schema.org/draft-04/schema#",
|
343
|
-
"type" => "object",
|
344
|
-
"properties" => {
|
345
|
-
"a" => {"type" => "integer"},
|
346
|
-
"b" => {"type" => "integer"}
|
347
|
-
},
|
348
|
-
"dependencies" => {
|
349
|
-
"a" => ["b"]
|
350
|
-
}
|
351
|
-
}
|
352
|
-
|
353
|
-
data = {"a" => 1, "b" => 2}
|
354
|
-
assert_valid schema, data
|
355
|
-
data = {"a" => 1}
|
356
|
-
refute_valid schema, data
|
357
|
-
|
358
|
-
schema = {
|
359
|
-
"$schema" => "http://json-schema.org/draft-04/schema#",
|
360
|
-
"type" => "object",
|
361
|
-
"properties" => {
|
362
|
-
"a" => {"type" => "integer"},
|
363
|
-
"b" => {"type" => "integer"},
|
364
|
-
"c" => {"type" => "integer"}
|
365
|
-
},
|
366
|
-
"dependencies" => {
|
367
|
-
"a" => ["b","c"]
|
368
|
-
}
|
369
|
-
}
|
370
|
-
|
371
|
-
data = {"a" => 1, "c" => 2}
|
372
|
-
refute_valid schema, data
|
373
|
-
data = {"a" => 1, "b" => 2, "c" => 3}
|
374
|
-
assert_valid schema, data
|
375
|
-
end
|
376
|
-
|
377
|
-
def test_schema_dependency
|
378
|
-
schema = {
|
379
|
-
"type"=> "object",
|
380
|
-
"properties"=> {
|
381
|
-
"name"=> { "type"=> "string" },
|
382
|
-
"credit_card"=> { "type"=> "number" }
|
383
|
-
},
|
384
|
-
"required"=> ["name"],
|
385
|
-
"dependencies"=> {
|
386
|
-
"credit_card"=> {
|
387
|
-
"properties"=> {
|
388
|
-
"billing_address"=> { "type"=> "string" }
|
389
|
-
},
|
390
|
-
"required"=> ["billing_address"]
|
391
|
-
}
|
392
|
-
}
|
393
|
-
}
|
394
|
-
data = {
|
395
|
-
"name" => "John Doe",
|
396
|
-
"credit_card" => 5555555555555555
|
397
|
-
}
|
398
|
-
assert(!JSON::Validator.validate(schema,data), 'test schema dependency with invalid data')
|
399
|
-
data['billing_address'] = "Somewhere over the rainbow"
|
400
|
-
assert(JSON::Validator.validate(schema,data), 'test schema dependency with valid data')
|
401
|
-
end
|
402
|
-
|
403
|
-
def test_default
|
404
|
-
schema = {
|
405
|
-
"$schema" => "http://json-schema.org/draft-04/schema#",
|
406
|
-
"type" => "object",
|
407
|
-
"properties" => {
|
408
|
-
"a" => {"type" => "integer", "default" => 42},
|
409
|
-
"b" => {"type" => "integer"}
|
410
|
-
}
|
411
|
-
}
|
412
|
-
|
413
|
-
data = {:b => 2}
|
414
|
-
assert_valid schema, data
|
415
|
-
assert_nil(data["a"])
|
416
|
-
assert(JSON::Validator.validate(schema,data, :insert_defaults => true))
|
417
|
-
assert_equal(42, data["a"])
|
418
|
-
assert_equal(2, data[:b])
|
419
|
-
|
420
|
-
schema = {
|
421
|
-
"$schema" => "http://json-schema.org/draft-04/schema#",
|
422
|
-
"type" => "object",
|
423
|
-
"required" => ["a"],
|
424
|
-
"properties" => {
|
425
|
-
"a" => {"type" => "integer", "default" => 42},
|
426
|
-
"b" => {"type" => "integer"}
|
427
|
-
}
|
428
|
-
}
|
429
|
-
|
430
|
-
data = {:b => 2}
|
431
|
-
refute_valid schema, data
|
432
|
-
assert_nil(data["a"])
|
433
|
-
assert(JSON::Validator.validate(schema,data, :insert_defaults => true))
|
434
|
-
assert_equal(42, data["a"])
|
435
|
-
assert_equal(2, data[:b])
|
436
|
-
|
437
|
-
schema = {
|
438
|
-
"$schema" => "http://json-schema.org/draft-04/schema#",
|
439
|
-
"type" => "object",
|
440
|
-
"required" => ["a"],
|
441
|
-
"properties" => {
|
442
|
-
"a" => {"type" => "integer", "default" => 42, "readonly" => true},
|
443
|
-
"b" => {"type" => "integer"}
|
444
|
-
}
|
445
|
-
}
|
446
|
-
|
447
|
-
data = {:b => 2}
|
448
|
-
refute_valid schema, data
|
449
|
-
assert_nil(data["a"])
|
450
|
-
assert(!JSON::Validator.validate(schema,data, :insert_defaults => true))
|
451
|
-
assert_nil(data["a"])
|
452
|
-
assert_equal(2, data[:b])
|
453
|
-
|
454
|
-
schema = {
|
455
|
-
"$schema" => "http://json-schema.org/draft-04/schema#",
|
456
|
-
"type" => "object",
|
457
|
-
"properties" => {
|
458
|
-
"a" => {"type" => "integer", "default" => "42"},
|
459
|
-
"b" => {"type" => "integer"}
|
460
|
-
}
|
461
|
-
}
|
462
|
-
|
463
|
-
data = {:b => 2}
|
464
|
-
assert_valid schema, data
|
465
|
-
assert_nil(data["a"])
|
466
|
-
assert(!JSON::Validator.validate(schema,data, :insert_defaults => true))
|
467
|
-
assert_equal("42",data["a"])
|
468
|
-
assert_equal(2, data[:b])
|
469
|
-
|
470
|
-
end
|
471
|
-
|
472
|
-
|
473
|
-
def test_all_of
|
474
|
-
schema = {
|
475
|
-
"$schema" => "http://json-schema.org/draft-04/schema#",
|
476
|
-
"allOf" => [
|
477
|
-
{
|
478
|
-
"properties" => {"a" => {"type" => "string"}},
|
479
|
-
"required" => ["a"]
|
480
|
-
},
|
481
|
-
{
|
482
|
-
"properties" => {"b" => {"type" => "integer"}}
|
483
|
-
}
|
484
|
-
]
|
485
|
-
}
|
486
|
-
|
487
|
-
data = {"a" => "hello", "b" => 5}
|
488
|
-
assert_valid schema, data
|
489
|
-
|
490
|
-
data = {"a" => "hello"}
|
491
|
-
assert_valid schema, data
|
492
|
-
|
493
|
-
data = {"a" => "hello", "b" => "taco"}
|
494
|
-
refute_valid schema, data
|
495
|
-
|
496
|
-
data = {"b" => 5}
|
497
|
-
refute_valid schema, data
|
498
|
-
end
|
499
|
-
|
500
|
-
|
501
|
-
def test_any_of
|
502
|
-
schema = {
|
503
|
-
"$schema" => "http://json-schema.org/draft-04/schema#",
|
504
|
-
"anyOf" => [
|
505
|
-
{
|
506
|
-
"properties" => {"a" => {"type" => "string"}},
|
507
|
-
"required" => ["a"]
|
508
|
-
},
|
509
|
-
{
|
510
|
-
"properties" => {"b" => {"type" => "integer"}}
|
511
|
-
}
|
512
|
-
]
|
513
|
-
}
|
514
|
-
|
515
|
-
data = {"a" => "hello", "b" => 5}
|
516
|
-
assert_valid schema, data
|
517
|
-
|
518
|
-
data = {"a" => "hello"}
|
519
|
-
assert_valid schema, data
|
520
|
-
|
521
|
-
data = {"a" => "hello", "b" => "taco"}
|
522
|
-
assert_valid schema, data
|
523
|
-
|
524
|
-
data = {"b" => 5}
|
525
|
-
assert_valid schema, data
|
526
|
-
|
527
|
-
data = {"a" => 5, "b" => "taco"}
|
528
|
-
refute_valid schema, data
|
529
|
-
end
|
530
|
-
|
531
|
-
|
532
|
-
def test_one_of
|
533
|
-
schema = {
|
534
|
-
"$schema" => "http://json-schema.org/draft-04/schema#",
|
535
|
-
"oneOf" => [
|
536
|
-
{
|
537
|
-
"properties" => {"a" => {"type" => "string"}},
|
538
|
-
"required" => ["a"]
|
539
|
-
},
|
540
|
-
{
|
541
|
-
"properties" => {"b" => {"type" => "integer"}}
|
542
|
-
}
|
543
|
-
]
|
544
|
-
}
|
545
|
-
|
546
|
-
data = {"a" => "hello", "b" => 5}
|
547
|
-
refute_valid schema, data
|
548
|
-
|
549
|
-
# This passes because b is not required, thus matches both schemas
|
550
|
-
data = {"a" => "hello"}
|
551
|
-
refute_valid schema, data
|
552
|
-
|
553
|
-
data = {"a" => "hello", "b" => "taco"}
|
554
|
-
assert_valid schema, data
|
555
|
-
|
556
|
-
data = {"b" => 5}
|
557
|
-
assert_valid schema, data
|
558
|
-
|
559
|
-
data = {"a" => 5, "b" => "taco"}
|
560
|
-
refute_valid schema, data
|
561
|
-
end
|
562
|
-
|
563
|
-
|
564
|
-
def test_not
|
565
|
-
# Start with a simple not
|
566
|
-
schema = {
|
567
|
-
"$schema" => "http://json-schema.org/draft-04/schema#",
|
568
|
-
"properties" => {
|
569
|
-
"a" => {"not" => { "type" => ["string", "boolean"]}}
|
570
|
-
}
|
571
|
-
}
|
572
|
-
|
573
|
-
data = {"a" => 1}
|
574
|
-
assert_valid schema, data
|
575
|
-
|
576
|
-
data = {"a" => "hi!"}
|
577
|
-
refute_valid schema, data
|
578
|
-
|
579
|
-
data = {"a" => true}
|
580
|
-
refute_valid schema, data
|
581
|
-
|
582
|
-
# Sub-schema not
|
583
|
-
schema = {
|
584
|
-
"$schema" => "http://json-schema.org/draft-04/schema#",
|
585
|
-
"properties" => {
|
586
|
-
"a" => {"not" => {"anyOf" => [
|
587
|
-
{
|
588
|
-
"type" => ["string","boolean"]
|
589
|
-
},
|
590
|
-
{
|
591
|
-
"type" => "object",
|
592
|
-
"properties" => {
|
593
|
-
"b" => {"type" => "boolean"}
|
594
|
-
}
|
595
|
-
}
|
596
|
-
]}
|
597
|
-
}
|
598
|
-
}
|
599
|
-
}
|
600
|
-
|
601
|
-
data = {"a" => 1}
|
602
|
-
assert_valid schema, data
|
603
|
-
|
604
|
-
data = {"a" => "hi!"}
|
605
|
-
refute_valid schema, data
|
606
|
-
|
607
|
-
data = {"a" => true}
|
608
|
-
refute_valid schema, data
|
609
|
-
|
610
|
-
data = {"a" => {"b" => true}}
|
611
|
-
refute_valid schema, data
|
612
|
-
|
613
|
-
data = {"a" => {"b" => 5}}
|
614
|
-
assert_valid schema, data
|
615
|
-
end
|
616
|
-
|
617
|
-
def test_not_fully_validate
|
618
|
-
# Start with a simple not
|
619
|
-
schema = {
|
620
|
-
"$schema" => "http://json-schema.org/draft-04/schema#",
|
621
|
-
"properties" => {
|
622
|
-
"a" => {"not" => { "type" => ["string", "boolean"]}}
|
623
|
-
}
|
624
|
-
}
|
625
|
-
|
626
|
-
data = {"a" => 1}
|
627
|
-
errors = JSON::Validator.fully_validate(schema,data)
|
628
|
-
assert_equal(0, errors.length)
|
629
|
-
|
630
|
-
data = {"a" => "taco"}
|
631
|
-
errors = JSON::Validator.fully_validate(schema,data)
|
632
|
-
assert_equal(1, errors.length)
|
633
|
-
end
|
634
|
-
|
635
|
-
def test_definitions
|
636
|
-
schema = {
|
637
|
-
"$schema" => "http://json-schema.org/draft-04/schema#",
|
638
|
-
"type" => "array",
|
639
|
-
"items" => { "$ref" => "#/definitions/positiveInteger"},
|
640
|
-
"definitions" => {
|
641
|
-
"positiveInteger" => {
|
642
|
-
"type" => "integer",
|
643
|
-
"minimum" => 0,
|
644
|
-
"exclusiveMinimum" => true
|
645
|
-
}
|
646
|
-
}
|
647
|
-
}
|
648
|
-
|
649
|
-
data = [1,2,3]
|
650
|
-
assert_valid schema, data
|
651
|
-
|
652
|
-
data = [-1,2,3]
|
653
|
-
refute_valid schema, data
|
654
|
-
end
|
655
|
-
end
|
656
|
-
|
657
|
-
|