json-schema 2.4.1 → 2.5.0

Sign up to get free protection for your applications and to get access to all the features.
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