json-schema 2.4.1 → 2.5.0

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.
Files changed (88) hide show
  1. checksums.yaml +6 -14
  2. data/README.textile +58 -7
  3. data/lib/json-schema.rb +3 -1
  4. data/lib/json-schema/attributes/additionalitems.rb +14 -11
  5. data/lib/json-schema/attributes/additionalproperties.rb +33 -43
  6. data/lib/json-schema/attributes/anyof.rb +4 -0
  7. data/lib/json-schema/attributes/dependencies.rb +31 -19
  8. data/lib/json-schema/attributes/disallow.rb +2 -3
  9. data/lib/json-schema/attributes/divisibleby.rb +11 -7
  10. data/lib/json-schema/attributes/enum.rb +14 -16
  11. data/lib/json-schema/attributes/format.rb +4 -7
  12. data/lib/json-schema/attributes/formats/date_time_v4.rb +5 -8
  13. data/lib/json-schema/attributes/formats/ip.rb +41 -0
  14. data/lib/json-schema/attributes/formats/uri.rb +10 -8
  15. data/lib/json-schema/attributes/items.rb +15 -16
  16. data/lib/json-schema/attributes/limit.rb +179 -0
  17. data/lib/json-schema/attributes/maxdecimal.rb +7 -6
  18. data/lib/json-schema/attributes/multipleof.rb +4 -11
  19. data/lib/json-schema/attributes/not.rb +1 -1
  20. data/lib/json-schema/attributes/oneof.rb +15 -6
  21. data/lib/json-schema/attributes/pattern.rb +7 -6
  22. data/lib/json-schema/attributes/patternproperties.rb +9 -12
  23. data/lib/json-schema/attributes/properties.rb +55 -39
  24. data/lib/json-schema/attributes/properties_optional.rb +13 -12
  25. data/lib/json-schema/attributes/ref.rb +4 -4
  26. data/lib/json-schema/attributes/required.rb +16 -13
  27. data/lib/json-schema/attributes/type.rb +13 -18
  28. data/lib/json-schema/attributes/type_v4.rb +11 -18
  29. data/lib/json-schema/attributes/uniqueitems.rb +5 -7
  30. data/lib/json-schema/schema.rb +8 -8
  31. data/lib/json-schema/schema/#validator.rb# +37 -0
  32. data/lib/json-schema/schema/reader.rb +113 -0
  33. data/lib/json-schema/util/uri.rb +16 -0
  34. data/lib/json-schema/validator.rb +123 -128
  35. data/lib/json-schema/validators/draft1.rb +1 -1
  36. data/lib/json-schema/validators/draft2.rb +1 -1
  37. data/lib/json-schema/validators/draft3.rb +1 -1
  38. data/lib/json-schema/validators/draft4.rb +1 -1
  39. data/lib/json-schema/validators/hyper-draft4.rb +1 -1
  40. data/test/schemas/address_microformat.json +18 -0
  41. data/test/schemas/definition_schema.json +15 -0
  42. data/test/schemas/ref john with spaces schema.json +11 -0
  43. data/test/schemas/relative_definition_schema.json +8 -0
  44. data/test/test_all_of_ref_schema.rb +12 -15
  45. data/test/test_any_of_ref_schema.rb +7 -9
  46. data/test/test_bad_schema_ref.rb +18 -12
  47. data/test/test_common_test_suite.rb +45 -29
  48. data/test/test_custom_format.rb +2 -3
  49. data/test/test_definition.rb +15 -0
  50. data/test/test_extended_schema.rb +25 -31
  51. data/test/test_extends_and_additionalProperties.rb +23 -21
  52. data/test/test_files_v3.rb +14 -23
  53. data/test/test_fragment_resolution.rb +6 -7
  54. data/test/test_fragment_validation_with_ref.rb +2 -8
  55. data/test/test_full_validation.rb +2 -3
  56. data/test/test_helper.rb +46 -1
  57. data/test/test_initialize_data.rb +118 -0
  58. data/test/test_jsonschema_draft1.rb +48 -600
  59. data/test/test_jsonschema_draft2.rb +48 -699
  60. data/test/test_jsonschema_draft3.rb +91 -861
  61. data/test/test_jsonschema_draft4.rb +173 -812
  62. data/test/test_list_option.rb +6 -7
  63. data/test/{test_merge_misisng_values.rb → test_merge_missing_values.rb} +2 -3
  64. data/test/test_minitems.rb +2 -4
  65. data/test/test_one_of.rb +9 -19
  66. data/test/test_ruby_schema.rb +5 -14
  67. data/test/test_schema_loader.rb +74 -0
  68. data/test/test_schema_type_attribute.rb +2 -3
  69. data/test/test_schema_validation.rb +4 -5
  70. data/test/test_stringify.rb +2 -3
  71. data/test/test_uri_related.rb +67 -0
  72. data/test/test_validator.rb +53 -0
  73. metadata +129 -51
  74. data/lib/json-schema/attributes/dependencies_v4.rb +0 -27
  75. data/lib/json-schema/attributes/formats/ip4.rb +0 -20
  76. data/lib/json-schema/attributes/formats/ip6.rb +0 -20
  77. data/lib/json-schema/attributes/maximum.rb +0 -17
  78. data/lib/json-schema/attributes/maximum_inclusive.rb +0 -17
  79. data/lib/json-schema/attributes/maxitems.rb +0 -14
  80. data/lib/json-schema/attributes/maxlength.rb +0 -16
  81. data/lib/json-schema/attributes/maxproperties.rb +0 -14
  82. data/lib/json-schema/attributes/minimum.rb +0 -17
  83. data/lib/json-schema/attributes/minimum_inclusive.rb +0 -17
  84. data/lib/json-schema/attributes/minitems.rb +0 -14
  85. data/lib/json-schema/attributes/minlength.rb +0 -16
  86. data/lib/json-schema/attributes/minproperties.rb +0 -14
  87. data/lib/json-schema/attributes/properties_v4.rb +0 -58
  88. data/lib/json-schema/uri/file.rb +0 -36
@@ -1,169 +1,37 @@
1
- require 'test/unit'
2
- require File.dirname(__FILE__) + '/../lib/json-schema'
1
+ require File.expand_path('../test_helper', __FILE__)
3
2
 
4
- class JSONSchemaDraft2Test < Test::Unit::TestCase
5
- def test_types
6
- # Set up the default datatype
7
- schema = {
8
- "properties" => {
9
- "a" => {}
10
- }
11
- }
12
- data = {
13
- "a" => nil
14
- }
15
-
16
- # Test integers
17
- schema["properties"]["a"]["type"] = "integer"
18
- data["a"] = 5
19
- assert(JSON::Validator.validate(schema,data,:version => :draft2))
20
-
21
- data["a"] = 5.2
22
- assert(!JSON::Validator.validate(schema,data,:version => :draft2))
23
-
24
- data['a'] = 'string'
25
- assert(!JSON::Validator.validate(schema,data,:version => :draft2))
26
-
27
- data['a'] = true
28
- assert(!JSON::Validator.validate(schema,data,:version => :draft2))
29
-
30
-
31
- # Test numbers
32
- schema["properties"]["a"]["type"] = "number"
33
- data["a"] = 5
34
- assert(JSON::Validator.validate(schema,data,:version => :draft2))
35
-
36
- data["a"] = 5.2
37
- assert(JSON::Validator.validate(schema,data,:version => :draft2))
38
-
39
- data['a'] = 'string'
40
- assert(!JSON::Validator.validate(schema,data,:version => :draft2))
41
-
42
- data['a'] = true
43
- assert(!JSON::Validator.validate(schema,data,:version => :draft2))
44
-
45
-
46
- # Test strings
47
- schema["properties"]["a"]["type"] = "string"
48
- data["a"] = 5
49
- assert(!JSON::Validator.validate(schema,data,:version => :draft2))
50
-
51
- data["a"] = 5.2
52
- assert(!JSON::Validator.validate(schema,data,:version => :draft2))
53
-
54
- data['a'] = 'string'
55
- assert(JSON::Validator.validate(schema,data,:version => :draft2))
56
-
57
- data['a'] = true
58
- assert(!JSON::Validator.validate(schema,data,:version => :draft2))
59
-
60
-
61
- # Test booleans
62
- schema["properties"]["a"]["type"] = "boolean"
63
- data["a"] = 5
64
- assert(!JSON::Validator.validate(schema,data,:version => :draft2))
65
-
66
- data["a"] = 5.2
67
- assert(!JSON::Validator.validate(schema,data,:version => :draft2))
68
-
69
- data['a'] = 'string'
70
- assert(!JSON::Validator.validate(schema,data,:version => :draft2))
71
-
72
- data['a'] = true
73
- assert(JSON::Validator.validate(schema,data,:version => :draft2))
74
-
75
- data['a'] = false
76
- assert(JSON::Validator.validate(schema,data,:version => :draft2))
77
-
78
-
79
- # Test object
80
- schema["properties"]["a"]["type"] = "object"
81
- data["a"] = {}
82
- assert(JSON::Validator.validate(schema,data,:version => :draft2))
83
-
84
- data["a"] = 5.2
85
- assert(!JSON::Validator.validate(schema,data,:version => :draft2))
86
-
87
- data['a'] = 'string'
88
- assert(!JSON::Validator.validate(schema,data,:version => :draft2))
89
-
90
- data['a'] = true
91
- assert(!JSON::Validator.validate(schema,data,:version => :draft2))
92
-
93
-
94
- # Test array
95
- schema["properties"]["a"]["type"] = "array"
96
- data["a"] = []
97
- assert(JSON::Validator.validate(schema,data,:version => :draft2))
98
-
99
- data["a"] = 5.2
100
- assert(!JSON::Validator.validate(schema,data,:version => :draft2))
101
-
102
- data['a'] = 'string'
103
- assert(!JSON::Validator.validate(schema,data,:version => :draft2))
104
-
105
- data['a'] = true
106
- assert(!JSON::Validator.validate(schema,data,:version => :draft2))
107
-
108
-
109
- # Test null
110
- schema["properties"]["a"]["type"] = "null"
111
- data["a"] = nil
112
- assert(JSON::Validator.validate(schema,data,:version => :draft2))
113
-
114
- data["a"] = 5.2
115
- assert(!JSON::Validator.validate(schema,data,:version => :draft2))
116
-
117
- data['a'] = 'string'
118
- assert(!JSON::Validator.validate(schema,data,:version => :draft2))
119
-
120
- data['a'] = true
121
- assert(!JSON::Validator.validate(schema,data,:version => :draft2))
122
-
123
-
124
- # Test any
125
- schema["properties"]["a"]["type"] = "any"
126
- data["a"] = 5
127
- assert(JSON::Validator.validate(schema,data,:version => :draft2))
128
-
129
- data["a"] = 5.2
130
- assert(JSON::Validator.validate(schema,data,:version => :draft2))
131
-
132
- data['a'] = 'string'
133
- assert(JSON::Validator.validate(schema,data,:version => :draft2))
134
-
135
- data['a'] = true
136
- assert(JSON::Validator.validate(schema,data,:version => :draft2))
137
-
138
-
139
- # Test a union type
140
- schema["properties"]["a"]["type"] = ["integer","string"]
141
- data["a"] = 5
142
- assert(JSON::Validator.validate(schema,data,:version => :draft2))
143
-
144
- data["a"] = 'boo'
145
- assert(JSON::Validator.validate(schema,data,:version => :draft2))
3
+ class JSONSchemaDraft2Test < Minitest::Test
4
+ def schema_version
5
+ :draft2
6
+ end
146
7
 
147
- data["a"] = false
148
- assert(!JSON::Validator.validate(schema,data,:version => :draft2))
8
+ def exclusive_minimum
9
+ { 'minimumCanEqual' => false }
10
+ end
149
11
 
150
- # Test a union type with schemas
151
- schema["properties"]["a"]["type"] = [{ "type" => "string" }, {"type" => "object", "properties" => {"b" => {"type" => "integer"}}}]
12
+ def exclusive_maximum
13
+ { 'maximumCanEqual' => false }
14
+ end
152
15
 
153
- data["a"] = "test"
154
- assert(JSON::Validator.validate(schema,data,:version => :draft2))
16
+ def multiple_of
17
+ 'divisibleBy'
18
+ end
155
19
 
156
- data["a"] = 5
157
- assert(!JSON::Validator.validate(schema,data,:version => :draft2))
20
+ include ArrayValidation::ItemsTests
21
+ include ArrayValidation::UniqueItemsTests
158
22
 
159
- data["a"] = {"b" => 5}
160
- assert(JSON::Validator.validate(schema,data,:version => :draft2))
23
+ include NumberValidation::MinMaxTests
24
+ include NumberValidation::MultipleOfTests
161
25
 
162
- data["a"] = {"b" => "taco"}
163
- assert(!JSON::Validator.validate(schema,data,:version => :draft2))
164
- end
26
+ include ObjectValidation::AdditionalPropertiesTests
165
27
 
28
+ include StringValidation::ValueTests
29
+ include StringValidation::FormatTests
30
+ include StringValidation::DateAndTimeFormatTests
166
31
 
32
+ include TypeValidation::SimpleTypeTests
33
+ include TypeValidation::AnyTypeTests
34
+ include TypeValidation::SchemaUnionTypeTests
167
35
 
168
36
  def test_optional
169
37
  # Set up the default datatype
@@ -174,9 +42,9 @@ class JSONSchemaDraft2Test < Test::Unit::TestCase
174
42
  }
175
43
  data = {}
176
44
 
177
- assert(!JSON::Validator.validate(schema,data,:version => :draft2))
45
+ refute_valid schema, data
178
46
  data['a'] = "Hello"
179
- assert(JSON::Validator.validate(schema,data,:version => :draft2))
47
+ assert_valid schema, data
180
48
 
181
49
  schema = {
182
50
  "properties" => {
@@ -185,309 +53,9 @@ class JSONSchemaDraft2Test < Test::Unit::TestCase
185
53
  }
186
54
 
187
55
  data = {}
188
- assert(JSON::Validator.validate(schema,data,:version => :draft2))
189
-
56
+ assert_valid schema, data
190
57
  end
191
58
 
192
-
193
-
194
- def test_minimum
195
- # Set up the default datatype
196
- schema = {
197
- "properties" => {
198
- "a" => {"minimum" => 5}
199
- }
200
- }
201
-
202
- data = {
203
- "a" => nil
204
- }
205
-
206
-
207
- # Test an integer
208
- data["a"] = 5
209
- assert(JSON::Validator.validate(schema,data,:version => :draft2))
210
-
211
- data["a"] = 4
212
- assert(!JSON::Validator.validate(schema,data,:version => :draft2))
213
-
214
- # Test a float
215
- data["a"] = 5.0
216
- assert(JSON::Validator.validate(schema,data,:version => :draft2))
217
-
218
- data["a"] = 4.9
219
- assert(!JSON::Validator.validate(schema,data,:version => :draft2))
220
-
221
- # Test a non-number
222
- data["a"] = "a string"
223
- assert(JSON::Validator.validate(schema,data,:version => :draft2))
224
-
225
- # Test exclusiveMinimum
226
- schema["properties"]["a"]["minimumCanEqual"] = false
227
-
228
- data["a"] = 6
229
- assert(JSON::Validator.validate(schema,data,:version => :draft2))
230
-
231
- data["a"] = 5
232
- assert(!JSON::Validator.validate(schema,data,:version => :draft2))
233
-
234
- # Test with float
235
- data["a"] = 5.00000001
236
- assert(JSON::Validator.validate(schema,data,:version => :draft2))
237
-
238
- data["a"] = 5.0
239
- assert(!JSON::Validator.validate(schema,data,:version => :draft2))
240
- end
241
-
242
-
243
-
244
- def test_maximum
245
- # Set up the default datatype
246
- schema = {
247
- "properties" => {
248
- "a" => {"maximum" => 5}
249
- }
250
- }
251
-
252
- data = {
253
- "a" => nil
254
- }
255
-
256
-
257
- # Test an integer
258
- data["a"] = 5
259
- assert(JSON::Validator.validate(schema,data,:version => :draft2))
260
-
261
- data["a"] = 6
262
- assert(!JSON::Validator.validate(schema,data,:version => :draft2))
263
-
264
- # Test a float
265
- data["a"] = 5.0
266
- assert(JSON::Validator.validate(schema,data,:version => :draft2))
267
-
268
- data["a"] = 5.1
269
- assert(!JSON::Validator.validate(schema,data,:version => :draft2))
270
-
271
- # Test a non-number
272
- data["a"] = "a string"
273
- assert(JSON::Validator.validate(schema,data,:version => :draft2))
274
-
275
- # Test exclusiveMinimum
276
- schema["properties"]["a"]["maximumCanEqual"] = false
277
-
278
- data["a"] = 4
279
- assert(JSON::Validator.validate(schema,data,:version => :draft2))
280
-
281
- data["a"] = 5
282
- assert(!JSON::Validator.validate(schema,data,:version => :draft2))
283
-
284
- # Test with float
285
- data["a"] = 4.9999999
286
- assert(JSON::Validator.validate(schema,data,:version => :draft2))
287
-
288
- data["a"] = 5.0
289
- assert(!JSON::Validator.validate(schema,data,:version => :draft2))
290
- end
291
-
292
-
293
- def test_min_items
294
- # Set up the default datatype
295
- schema = {
296
- "properties" => {
297
- "a" => {"minItems" => 1}
298
- }
299
- }
300
-
301
- data = {
302
- "a" => nil
303
- }
304
-
305
- # Test with an array
306
- data["a"] = ["boo"]
307
- assert(JSON::Validator.validate(schema,data,:version => :draft2))
308
-
309
- data["a"] = []
310
- assert(!JSON::Validator.validate(schema,data,:version => :draft2))
311
-
312
- # Test with a non-array
313
- data["a"] = "boo"
314
- assert(JSON::Validator.validate(schema,data,:version => :draft2))
315
- end
316
-
317
-
318
-
319
- def test_max_items
320
- # Set up the default datatype
321
- schema = {
322
- "properties" => {
323
- "a" => {"maxItems" => 1}
324
- }
325
- }
326
-
327
- data = {
328
- "a" => nil
329
- }
330
-
331
- # Test with an array
332
- data["a"] = ["boo"]
333
- assert(JSON::Validator.validate(schema,data,:version => :draft2))
334
-
335
- data["a"] = ["boo","taco"]
336
- assert(!JSON::Validator.validate(schema,data,:version => :draft2))
337
-
338
- # Test with a non-array
339
- data["a"] = "boo"
340
- assert(JSON::Validator.validate(schema,data,:version => :draft2))
341
- end
342
-
343
-
344
-
345
- def test_unique_items
346
- # Set up the default datatype
347
- schema = {
348
- "properties" => {
349
- "a" => {"uniqueItems" => true}
350
- }
351
- }
352
-
353
- data = {
354
- "a" => nil
355
- }
356
-
357
- # Test with nulls
358
- data["a"] = [nil,5]
359
- assert(JSON::Validator.validate(schema,data,:version => :draft2))
360
-
361
- data["a"] = [nil,nil]
362
- assert(!JSON::Validator.validate(schema,data,:version => :draft2))
363
-
364
- # Test with booleans
365
- data["a"] = [true,4]
366
- assert(JSON::Validator.validate(schema,data,:version => :draft2))
367
-
368
- data["a"] = [true,false]
369
- assert(JSON::Validator.validate(schema,data,:version => :draft2))
370
-
371
- data["a"] = [true,true]
372
- assert(!JSON::Validator.validate(schema,data,:version => :draft2))
373
-
374
- # Test with numbers
375
- data["a"] = [4,true]
376
- assert(JSON::Validator.validate(schema,data,:version => :draft2))
377
-
378
- data["a"] = [4,4.1]
379
- assert(JSON::Validator.validate(schema,data,:version => :draft2))
380
-
381
- data["a"] = [4,4]
382
- assert(!JSON::Validator.validate(schema,data,:version => :draft2))
383
-
384
- # Test with strings
385
- data["a"] = ['a',true]
386
- assert(JSON::Validator.validate(schema,data,:version => :draft2))
387
-
388
- data["a"] = ['a','ab']
389
- assert(JSON::Validator.validate(schema,data,:version => :draft2))
390
-
391
- data["a"] = ['a','a']
392
- assert(!JSON::Validator.validate(schema,data,:version => :draft2))
393
-
394
- # Test with arrays
395
- data["a"] = [[1],true]
396
- assert(JSON::Validator.validate(schema,data,:version => :draft2))
397
-
398
- data["a"] = [[1,2],[1,3]]
399
- assert(JSON::Validator.validate(schema,data,:version => :draft2))
400
-
401
- data["a"] = [[1,2,3],[1,2,3]]
402
- assert(!JSON::Validator.validate(schema,data,:version => :draft2))
403
-
404
- # Test with objects
405
- data["a"] = [{"a" => 1},true]
406
- assert(JSON::Validator.validate(schema,data,:version => :draft2))
407
-
408
- data["a"] = [{"a" => 1},{"a" => 2}]
409
- assert(JSON::Validator.validate(schema,data,:version => :draft2))
410
-
411
- data["a"] = [{"a" => 1, "b" => 2}, {"a" => 1, "b" => 2}]
412
- assert(!JSON::Validator.validate(schema,data,:version => :draft2))
413
- end
414
-
415
-
416
- def test_pattern
417
- # Set up the default datatype
418
- schema = {
419
- "properties" => {
420
- "a" => {"pattern" => "\\d+ taco"}
421
- }
422
- }
423
-
424
- data = {
425
- "a" => nil
426
- }
427
-
428
- # Test strings
429
- data["a"] = "156 taco bell"
430
- assert(JSON::Validator.validate(schema,data,:version => :draft2))
431
-
432
- # Test a non-string
433
- data["a"] = 5
434
- assert(JSON::Validator.validate(schema,data,:version => :draft2))
435
-
436
- data["a"] = "taco"
437
- assert(!JSON::Validator.validate(schema,data,:version => :draft2))
438
- end
439
-
440
-
441
- def test_min_length
442
- # Set up the default datatype
443
- schema = {
444
- "properties" => {
445
- "a" => {"minLength" => 1}
446
- }
447
- }
448
-
449
- data = {
450
- "a" => nil
451
- }
452
-
453
- # Try out strings
454
- data["a"] = "t"
455
- assert(JSON::Validator.validate(schema,data,:version => :draft2))
456
-
457
- data["a"] = ""
458
- assert(!JSON::Validator.validate(schema,data,:version => :draft2))
459
-
460
- # Try out non-string
461
- data["a"] = 5
462
- assert(JSON::Validator.validate(schema,data,:version => :draft2))
463
- end
464
-
465
-
466
- def test_max_length
467
- # Set up the default datatype
468
- schema = {
469
- "properties" => {
470
- "a" => {"maxLength" => 1}
471
- }
472
- }
473
-
474
- data = {
475
- "a" => nil
476
- }
477
-
478
- # Try out strings
479
- data["a"] = "t"
480
- assert(JSON::Validator.validate(schema,data,:version => :draft2))
481
-
482
- data["a"] = "tt"
483
- assert(!JSON::Validator.validate(schema,data,:version => :draft2))
484
-
485
- # Try out non-string
486
- data["a"] = 5
487
- assert(JSON::Validator.validate(schema,data,:version => :draft2))
488
- end
489
-
490
-
491
59
  def test_enum
492
60
  # Set up the default datatype
493
61
  schema = {
@@ -502,60 +70,26 @@ class JSONSchemaDraft2Test < Test::Unit::TestCase
502
70
 
503
71
  # Make sure all of the above are valid...
504
72
  data["a"] = 1
505
- assert(JSON::Validator.validate(schema,data,:version => :draft2))
73
+ assert_valid schema, data
506
74
 
507
75
  data["a"] = 'boo'
508
- assert(JSON::Validator.validate(schema,data,:version => :draft2))
76
+ assert_valid schema, data
509
77
 
510
78
  data["a"] = [1,2,3]
511
- assert(JSON::Validator.validate(schema,data,:version => :draft2))
79
+ assert_valid schema, data
512
80
 
513
81
  data["a"] = {"a" => "b"}
514
- assert(JSON::Validator.validate(schema,data,:version => :draft2))
82
+ assert_valid schema, data
515
83
 
516
84
  # Test something that doesn't exist
517
85
  data["a"] = 'taco'
518
- assert(!JSON::Validator.validate(schema,data,:version => :draft2))
86
+ refute_valid schema, data
519
87
 
520
88
  # Try it without the key
521
89
  data = {}
522
- assert(JSON::Validator.validate(schema,data,:version => :draft2))
523
- end
524
-
525
-
526
- def test_divisible_by
527
- # Set up the default datatype
528
- schema = {
529
- "properties" => {
530
- "a" => {"divisibleBy" => 1.1}
531
- }
532
- }
533
-
534
- data = {
535
- "a" => nil
536
- }
537
-
538
- data["a"] = 3.3
539
- assert(JSON::Validator.validate(schema,data,:version => :draft2))
540
-
541
- data["a"] = 3.4
542
- assert(!JSON::Validator.validate(schema,data,:version => :draft2))
543
-
544
- schema["properties"]["a"]["divisibleBy"] = 2.0
545
-
546
- data["a"] = 4.0
547
- assert(JSON::Validator.validate(schema,data,:version => :draft2))
548
-
549
- data["a"] = 'boo'
550
- assert(JSON::Validator.validate(schema,data,:version => :draft2))
551
-
552
- data["a"] = 5
553
- schema["properties"]["a"]["divisibleBy"] = 0
554
- assert(!JSON::Validator.validate(schema,data,:version => :draft2))
90
+ assert_valid schema, data
555
91
  end
556
92
 
557
-
558
-
559
93
  def test_disallow
560
94
  # Set up the default datatype
561
95
  schema = {
@@ -570,172 +104,21 @@ class JSONSchemaDraft2Test < Test::Unit::TestCase
570
104
 
571
105
 
572
106
  data["a"] = 'string'
573
- assert(JSON::Validator.validate(schema,data,:version => :draft2))
107
+ assert_valid schema, data
574
108
 
575
109
  data["a"] = 5
576
- assert(!JSON::Validator.validate(schema,data,:version => :draft2))
110
+ refute_valid schema, data
577
111
 
578
112
 
579
113
  schema["properties"]["a"]["disallow"] = ["integer","string"]
580
114
  data["a"] = 'string'
581
- assert(!JSON::Validator.validate(schema,data,:version => :draft2))
115
+ refute_valid schema, data
582
116
 
583
117
  data["a"] = 5
584
- assert(!JSON::Validator.validate(schema,data,:version => :draft2))
118
+ refute_valid schema, data
585
119
 
586
120
  data["a"] = false
587
- assert(JSON::Validator.validate(schema,data,:version => :draft2))
588
-
589
- end
590
-
591
-
592
-
593
- def test_additional_properties
594
- # Test no additional properties allowed
595
- schema = {
596
- "properties" => {
597
- "a" => { "type" => "integer" }
598
- },
599
- "additionalProperties" => false
600
- }
601
-
602
- data = {
603
- "a" => 10
604
- }
605
-
606
- assert(JSON::Validator.validate(schema,data,:version => :draft2))
607
- data["b"] = 5
608
- assert(!JSON::Validator.validate(schema,data,:version => :draft2))
609
-
610
- # Test additional properties match a schema
611
- schema["additionalProperties"] = { "type" => "string" }
612
- data["b"] = "taco"
613
- assert(JSON::Validator.validate(schema,data,:version => :draft2))
614
- data["b"] = 5
615
- assert(!JSON::Validator.validate(schema,data,:version => :draft2))
616
- end
617
-
618
-
619
- def test_items
620
- schema = {
621
- "items" => { "type" => "integer" }
622
- }
623
-
624
- data = [1,2,4]
625
- assert(JSON::Validator.validate(schema,data,:version => :draft2))
626
- data = [1,2,"string"]
627
- assert(!JSON::Validator.validate(schema,data,:version => :draft2))
628
-
629
- schema = {
630
- "items" => [
631
- {"type" => "integer"},
632
- {"type" => "string"}
633
- ]
634
- }
635
-
636
- data = [1,"string"]
637
- assert(JSON::Validator.validate(schema,data,:version => :draft2))
638
- data = [1,"string",3]
639
- assert(JSON::Validator.validate(schema,data,:version => :draft2))
640
- data = ["string",1]
641
- assert(!JSON::Validator.validate(schema,data,:version => :draft2))
642
-
643
- end
644
-
645
-
646
- def test_format_ipv4
647
- schema = {
648
- "type" => "object",
649
- "properties" => { "a" => {"type" => "string", "format" => "ip-address"}}
650
- }
651
-
652
- data = {"a" => "1.1.1.1"}
653
- assert(JSON::Validator.validate(schema,data,:version => :draft2))
654
- data = {"a" => "1.1.1"}
655
- assert(!JSON::Validator.validate(schema,data,:version => :draft2))
656
- data = {"a" => "1.1.1.300"}
657
- assert(!JSON::Validator.validate(schema,data,:version => :draft2))
658
- data = {"a" => 5}
659
- assert(!JSON::Validator.validate(schema,data,:version => :draft2))
660
- data = {"a" => "1.1.1"}
661
- assert(!JSON::Validator.validate(schema,data,:version => :draft2))
662
- data = {"a" => "1.1.1.1b"}
663
- assert(!JSON::Validator.validate(schema,data,:version => :draft2))
664
- data = {"a" => "b1.1.1.1"}
665
- end
666
-
667
-
668
- def test_format_ipv6
669
- schema = {
670
- "type" => "object",
671
- "properties" => { "a" => {"type" => "string", "format" => "ipv6"}}
672
- }
673
-
674
- data = {"a" => "1111:2222:8888:9999:aaaa:cccc:eeee:ffff"}
675
- assert(JSON::Validator.validate(schema,data,:version => :draft2))
676
- data = {"a" => "1111:0:8888:0:0:0:eeee:ffff"}
677
- assert(JSON::Validator.validate(schema,data,:version => :draft2))
678
- data = {"a" => "1111:2222:8888::eeee:ffff"}
679
- assert(JSON::Validator.validate(schema,data,:version => :draft2))
680
- data = {"a" => "1111:2222:8888:99999:aaaa:cccc:eeee:ffff"}
681
- assert(!JSON::Validator.validate(schema,data,:version => :draft2))
682
- data = {"a" => "1111:2222:8888:9999:aaaa:cccc:eeee:gggg"}
683
- assert(!JSON::Validator.validate(schema,data,:version => :draft2))
684
- data = {"a" => "1111:2222::9999::cccc:eeee:ffff"}
685
- assert(!JSON::Validator.validate(schema,data,:version => :draft2))
686
- data = {"a" => "1111:2222:8888:9999:aaaa:cccc:eeee:ffff:bbbb"}
687
- assert(!JSON::Validator.validate(schema,data,:version => :draft2))
688
- assert(JSON::Validator.validate(schema, {"a" => "::1"}, :version => :draft2), 'validate with shortcut')
689
- assert(!JSON::Validator.validate(schema, {"a" => "42"}, :version => :draft2), 'not validate a simple number')
690
- end
691
-
692
- def test_format_time
693
- schema = {
694
- "type" => "object",
695
- "properties" => { "a" => {"type" => "string", "format" => "time"}}
696
- }
697
-
698
- data = {"a" => "12:00:00"}
699
- assert(JSON::Validator.validate(schema,data,:version => :draft2))
700
- data = {"a" => "12:00"}
701
- assert(!JSON::Validator.validate(schema,data,:version => :draft2))
702
- data = {"a" => "12:00:60"}
703
- assert(!JSON::Validator.validate(schema,data,:version => :draft2))
704
- data = {"a" => "12:60:00"}
705
- assert(!JSON::Validator.validate(schema,data,:version => :draft2))
706
- data = {"a" => "24:00:00"}
707
- assert(!JSON::Validator.validate(schema,data,:version => :draft2))
708
- data = {"a" => "0:00:00"}
709
- assert(!JSON::Validator.validate(schema,data,:version => :draft2))
710
- data = {"a" => "-12:00:00"}
711
- assert(!JSON::Validator.validate(schema,data,:version => :draft2))
712
- data = {"a" => "12:00:00b"}
713
- assert(!JSON::Validator.validate(schema,data,:version => :draft2))
714
- data = {"a" => "12:00:00\nabc"}
715
- assert(!JSON::Validator.validate(schema,data,:version => :draft2))
716
- end
717
-
718
-
719
- def test_format_date
720
- schema = {
721
- "type" => "object",
722
- "properties" => { "a" => {"type" => "string", "format" => "date"}}
723
- }
724
-
725
- data = {"a" => "2010-01-01"}
726
- assert(JSON::Validator.validate(schema,data,:version => :draft2))
727
- data = {"a" => "2010-01-32"}
728
- assert(!JSON::Validator.validate(schema,data,:version => :draft2))
729
- data = {"a" => "n2010-01-01"}
730
- assert(!JSON::Validator.validate(schema,data,:version => :draft2))
731
- data = {"a" => "2010-1-01"}
732
- assert(!JSON::Validator.validate(schema,data,:version => :draft2))
733
- data = {"a" => "2010-01-1"}
734
- assert(!JSON::Validator.validate(schema,data,:version => :draft2))
735
- data = {"a" => "2010-01-01n"}
736
- assert(!JSON::Validator.validate(schema,data,:version => :draft2))
737
- data = {"a" => "2010-01-01\nabc"}
738
- assert(!JSON::Validator.validate(schema,data,:version => :draft2))
121
+ assert_valid schema, data
739
122
  end
740
123
 
741
124
  def test_format_datetime
@@ -744,49 +127,15 @@ class JSONSchemaDraft2Test < Test::Unit::TestCase
744
127
  "properties" => { "a" => {"type" => "string", "format" => "date-time"}}
745
128
  }
746
129
 
747
- data = {"a" => "2010-01-01T12:00:00Z"}
748
- assert(JSON::Validator.validate(schema,data,:version => :draft2))
749
- data = {"a" => "2010-01-32T12:00:00Z"}
750
- assert(!JSON::Validator.validate(schema,data,:version => :draft2))
751
- data = {"a" => "2010-13-01T12:00:00Z"}
752
- assert(!JSON::Validator.validate(schema,data,:version => :draft2))
753
- data = {"a" => "2010-01-01T24:00:00Z"}
754
- assert(!JSON::Validator.validate(schema,data,:version => :draft2))
755
- data = {"a" => "2010-01-01T12:60:00Z"}
756
- assert(!JSON::Validator.validate(schema,data,:version => :draft2))
757
- data = {"a" => "2010-01-01T12:00:60Z"}
758
- assert(!JSON::Validator.validate(schema,data,:version => :draft2))
759
- data = {"a" => "2010-01-01T12:00:00z"}
760
- assert(!JSON::Validator.validate(schema,data,:version => :draft2))
761
- data = {"a" => "2010-01-0112:00:00Z"}
762
- assert(!JSON::Validator.validate(schema,data,:version => :draft2))
763
- data = {"a" => "2010-01-01T12:00:00Z\nabc"}
764
- assert(!JSON::Validator.validate(schema,data,:version => :draft2))
765
- end
766
-
767
- def test_format_unknown
768
- schema = {
769
- "type" => "object",
770
- "properties" => { "a" => {"type" => "string", "format" => "unknown"}}
771
- }
772
-
773
- data = {"a" => "I can write what I want here"}
774
- assert(JSON::Validator.validate(schema,data,:version => :draft2))
775
- data = {"a" => ""}
776
- assert(JSON::Validator.validate(schema,data,:version => :draft2))
777
- end
778
-
779
-
780
- def test_format_union
781
- data1 = {"a" => "boo"}
782
- data2 = {"a" => nil}
783
-
784
- schema = {
785
- "type" => "object",
786
- "properties" => { "a" => {"type" => ["string","null"], "format" => "ip-address"}}
787
- }
788
- assert(!JSON::Validator.validate(schema,data1,:version => :draft2))
789
- assert(JSON::Validator.validate(schema,data2,:version => :draft2))
130
+ assert_valid schema, {"a" => "2010-01-01T12:00:00Z"}
131
+ refute_valid schema, {"a" => "2010-01-32T12:00:00Z"}
132
+ refute_valid schema, {"a" => "2010-13-01T12:00:00Z"}
133
+ refute_valid schema, {"a" => "2010-01-01T24:00:00Z"}
134
+ refute_valid schema, {"a" => "2010-01-01T12:60:00Z"}
135
+ refute_valid schema, {"a" => "2010-01-01T12:00:60Z"}
136
+ refute_valid schema, {"a" => "2010-01-01T12:00:00z"}
137
+ refute_valid schema, {"a" => "2010-01-0112:00:00Z"}
138
+ refute_valid schema, {"a" => "2010-01-01T12:00:00Z\nabc"}
790
139
  end
791
140
 
792
141
  end