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
@@ -33,7 +33,7 @@ module JSON
33
33
  'uri' => UriFormat
34
34
  }
35
35
  @formats = @default_formats.clone
36
- @uri = URI.parse("http://json-schema.org/draft-01/schema#")
36
+ @uri = Addressable::URI.parse("http://json-schema.org/draft-01/schema#")
37
37
  @names = ["draft1"]
38
38
  @metaschema_name = "draft-01.json"
39
39
  end
@@ -34,7 +34,7 @@ module JSON
34
34
  'uri' => UriFormat
35
35
  }
36
36
  @formats = @default_formats.clone
37
- @uri = URI.parse("http://json-schema.org/draft-02/schema#")
37
+ @uri = Addressable::URI.parse("http://json-schema.org/draft-02/schema#")
38
38
  @names = ["draft2"]
39
39
  @metaschema_name = "draft-02.json"
40
40
  end
@@ -38,7 +38,7 @@ module JSON
38
38
  'uri' => UriFormat
39
39
  }
40
40
  @formats = @default_formats.clone
41
- @uri = URI.parse("http://json-schema.org/draft-03/schema#")
41
+ @uri = Addressable::URI.parse("http://json-schema.org/draft-03/schema#")
42
42
  @names = ["draft3", "http://json-schema.org/draft-03/schema#"]
43
43
  @metaschema_name = "draft-03.json"
44
44
  end
@@ -43,7 +43,7 @@ module JSON
43
43
  'uri' => UriFormat
44
44
  }
45
45
  @formats = @default_formats.clone
46
- @uri = URI.parse("http://json-schema.org/draft-04/schema#")
46
+ @uri = Addressable::URI.parse("http://json-schema.org/draft-04/schema#")
47
47
  @names = ["draft4", "http://json-schema.org/draft-04/schema#"]
48
48
  @metaschema_name = "draft-04.json"
49
49
  end
@@ -4,7 +4,7 @@ module JSON
4
4
  class HyperDraft4 < Draft4
5
5
  def initialize
6
6
  super
7
- @uri = URI.parse("http://json-schema.org/draft-04/hyper-schema#")
7
+ @uri = Addressable::URI.parse("http://json-schema.org/draft-04/hyper-schema#")
8
8
  end
9
9
 
10
10
  JSON::Validator.register_validator(self.new)
@@ -0,0 +1,18 @@
1
+ {
2
+ "description": "An Address following the convention of http://microformats.org/wiki/hcard",
3
+ "type": "object",
4
+ "properties": {
5
+ "post-office-box": { "type": "string" },
6
+ "extended-address": { "type": "string" },
7
+ "street-address": { "type": "string" },
8
+ "locality":{ "type": "string" },
9
+ "region": { "type": "string" },
10
+ "postal-code": { "type": "string" },
11
+ "country-name": { "type": "string"}
12
+ },
13
+ "required": ["locality", "region", "country-name"],
14
+ "dependencies": {
15
+ "post-office-box": "street-address",
16
+ "extended-address": "street-address"
17
+ }
18
+ }
@@ -0,0 +1,15 @@
1
+ {
2
+ "$schema": "http://json-schema.org/draft-04/schema#",
3
+ "description": "schema with definition",
4
+ "type": "object",
5
+ "properties": {
6
+ "a": {
7
+ "$ref": "#/definitions/foo"
8
+ }
9
+ },
10
+ "definitions": {
11
+ "foo": {
12
+ "type": "integer"
13
+ }
14
+ }
15
+ }
@@ -0,0 +1,11 @@
1
+ {
2
+ "$schema" : "http://json-schema.org/draft-04/schema#",
3
+ "type" : "object",
4
+ "required" : ["first"],
5
+ "properties": {
6
+ "first": {
7
+ "type": "string",
8
+ "enum": ["john"]
9
+ }
10
+ }
11
+ }
@@ -0,0 +1,8 @@
1
+ {
2
+ "$schema": "http://json-schema.org/draft-04/schema#",
3
+ "properties": {
4
+ "a": {
5
+ "$ref": "definition_schema.json#/definitions/foo"
6
+ }
7
+ }
8
+ }
@@ -1,24 +1,23 @@
1
- require 'test/unit'
2
- require File.dirname(__FILE__) + '/../lib/json-schema'
1
+ require File.expand_path('../test_helper', __FILE__)
2
+
3
+ class AllOfRefSchemaTest < Minitest::Test
4
+ def schema
5
+ schema_fixture_path('all_of_ref_schema.json')
6
+ end
7
+
8
+ def data
9
+ data_fixture_path('all_of_ref_data.json')
10
+ end
3
11
 
4
- class AllOfRefSchemaTest < Test::Unit::TestCase
5
12
  def test_all_of_ref_schema_fails
6
- schema = File.join(File.dirname(__FILE__),"schemas/all_of_ref_schema.json")
7
- data = File.join(File.dirname(__FILE__),"data/all_of_ref_data.json")
8
- errors = JSON::Validator.fully_validate(schema,data, :errors_as_objects => true)
9
- assert(!errors.empty?, "should have failed to validate")
13
+ refute_valid schema, data
10
14
  end
11
15
 
12
16
  def test_all_of_ref_schema_succeeds
13
- schema = File.join(File.dirname(__FILE__),"schemas/all_of_ref_schema.json")
14
- data = %({"name": 42})
15
- errors = JSON::Validator.fully_validate(schema,data, :errors_as_objects => true)
16
- assert(errors.empty?, "should have validated")
17
+ assert_valid schema, %({"name": 42})
17
18
  end
18
19
 
19
20
  def test_all_of_ref_subschema_errors
20
- schema = File.join(File.dirname(__FILE__), 'schemas/all_of_ref_schema.json')
21
- data = File.join(File.dirname(__FILE__), 'data/all_of_ref_data.json')
22
21
  errors = JSON::Validator.fully_validate(schema, data, :errors_as_objects => true)
23
22
  nested_errors = errors[0][:errors]
24
23
  assert_equal([:allof_0], nested_errors.keys, 'should have nested errors for each allOf subschema')
@@ -26,8 +25,6 @@ class AllOfRefSchemaTest < Test::Unit::TestCase
26
25
  end
27
26
 
28
27
  def test_all_of_ref_message
29
- schema = File.join(File.dirname(__FILE__), 'schemas/all_of_ref_schema.json')
30
- data = File.join(File.dirname(__FILE__), 'data/all_of_ref_data.json')
31
28
  errors = JSON::Validator.fully_validate(schema, data)
32
29
  expected_message = """The property '#/' of type Hash did not match all of the required schemas. The schema specific errors were:
33
30
 
@@ -1,16 +1,15 @@
1
- require 'test/unit'
2
- require File.dirname(__FILE__) + '/../lib/json-schema'
1
+ require File.expand_path('../test_helper', __FILE__)
2
+
3
+ class AnyOfRefSchemaTest < Minitest::Test
4
+ def schema
5
+ schema_fixture_path('any_of_ref_schema.json')
6
+ end
3
7
 
4
- class AnyOfRefSchemaTest < Test::Unit::TestCase
5
8
  def test_any_of_ref_schema
6
- schema = File.join(File.dirname(__FILE__),"schemas/any_of_ref_schema.json")
7
- data = File.join(File.dirname(__FILE__),"data/any_of_ref_data.json")
8
- errors = JSON::Validator.fully_validate(schema,data, :errors_as_objects => true)
9
- assert(errors.empty?, errors.map{|e| e[:message] }.join("\n"))
9
+ assert_valid schema, data_fixture_path('any_of_ref_data.json')
10
10
  end
11
11
 
12
12
  def test_any_of_ref_subschema_errors
13
- schema = File.join(File.dirname(__FILE__),'schemas/any_of_ref_schema.json')
14
13
  data = %({"names": ["jack"]})
15
14
  errors = JSON::Validator.fully_validate(schema, data, :errors_as_objects => true)
16
15
  nested_errors = errors[0][:errors]
@@ -21,7 +20,6 @@ class AnyOfRefSchemaTest < Test::Unit::TestCase
21
20
  end
22
21
 
23
22
  def test_any_of_ref_message
24
- schema = File.join(File.dirname(__FILE__),'schemas/any_of_ref_schema.json')
25
23
  data = %({"names": ["jack"]})
26
24
  errors = JSON::Validator.fully_validate(schema, data)
27
25
  expected_message = """The property '#/names/0' of type String did not match one or more of the required schemas. The schema specific errors were:
@@ -1,33 +1,39 @@
1
- require 'test/unit'
1
+ require File.expand_path('../test_helper', __FILE__)
2
2
  require 'socket'
3
- require File.dirname(__FILE__) + '/../lib/json-schema'
4
3
 
5
- class BadSchemaRefTest < Test::Unit::TestCase
4
+
5
+ class BadSchemaRefTest < Minitest::Test
6
+ def setup
7
+ WebMock.allow_net_connect!
8
+ end
9
+
10
+ def teardown
11
+ WebMock.disable_net_connect!
12
+ end
6
13
 
7
14
  def test_bad_uri_ref
8
15
  schema = {
9
- "$schema" => "http://json-schema.org/draft-04/schema#",
10
- "type" => "array",
11
- "items" => { "$ref" => "../google.json"}
16
+ "$schema" => "http://json-schema.org/draft-04/schema#",
17
+ "type" => "array",
18
+ "items" => { "$ref" => "../google.json"}
12
19
  }
13
20
 
14
21
  data = [1,2,3]
15
- assert_raise(URI::BadURIError) do
22
+ assert_raises(Errno::ENOENT) do
16
23
  JSON::Validator.validate(schema,data)
17
24
  end
18
25
  end
19
26
 
20
27
  def test_bad_host_ref
21
28
  schema = {
22
- "$schema" => "http://json-schema.org/draft-04/schema#",
23
- "type" => "array",
24
- "items" => { "$ref" => "http://ppcheesecheseunicornnuuuurrrrr.com/json.schema"}
29
+ "$schema" => "http://json-schema.org/draft-04/schema#",
30
+ "type" => "array",
31
+ "items" => { "$ref" => "http://ppcheesecheseunicornnuuuurrrrr.example.invalid/json.schema"}
25
32
  }
26
33
 
27
34
  data = [1,2,3]
28
- assert_raise(SocketError, OpenURI::HTTPError) do
35
+ assert_raises(SocketError, OpenURI::HTTPError) do
29
36
  JSON::Validator.validate(schema,data)
30
37
  end
31
38
  end
32
-
33
39
  end
@@ -1,47 +1,63 @@
1
- require 'test/unit'
2
- require File.expand_path('../../lib/json-schema', __FILE__)
1
+ require File.expand_path('../test_helper', __FILE__)
2
+ require 'json'
3
3
 
4
- class CommonTestSuiteTest < Test::Unit::TestCase
4
+ class CommonTestSuiteTest < Minitest::Test
5
5
  TEST_DIR = File.expand_path('../test-suite/tests', __FILE__)
6
6
 
7
- # These are test files which we know fail spectacularly, either because
8
- # we don't support that functionality or because they require external
9
- # dependencies
10
- IGNORED_TESTS = [
11
- "draft3/disallow.json",
12
- "draft3/optional/format.json",
13
- "draft3/optional/jsregex.json",
14
- "draft3/refRemote.json",
15
- "draft4/optional/format.json",
16
- "draft4/refRemote.json",
17
- ]
7
+ # These are test files which we know fail spectacularly, either because we
8
+ # don't support that functionality or because they require external
9
+ # dependencies. To allow finer-grained control over which tests to run,
10
+ # you can replace `:all` with an array containing the names of individual
11
+ # tests to skip.
12
+ IGNORED_TESTS = Hash.new { |h,k| h[k] = [] }.merge({
13
+ "draft3/optional/jsregex.json" => :all,
14
+ "draft3/optional/format.json" => [
15
+ "validation of regular expressions",
16
+ "validation of e-mail addresses",
17
+ "validation of URIs",
18
+ "validation of host names",
19
+ "validation of CSS colors"
20
+ ],
21
+ "draft4/optional/format.json" => [
22
+ "validation of URIs",
23
+ "validation of e-mail addresses",
24
+ "validation of host names"
25
+ ]
26
+ })
27
+
28
+ def setup
29
+ Dir["#{TEST_DIR}/../remotes/**/*.json"].each do |path|
30
+ schema = path.sub(%r{^.*/remotes/}, '')
31
+ stub_request(:get, "http://localhost:1234/#{schema}").
32
+ to_return(:body => File.read(path), :status => 200)
33
+ end
34
+ end
18
35
 
19
36
  Dir["#{TEST_DIR}/*"].each do |suite|
20
37
  version = File.basename(suite).to_sym
21
38
  Dir["#{suite}/**/*.json"].each do |tfile|
22
- test_list = JSON::Validator.parse(File.read(tfile))
39
+ test_list = JSON.parse(File.read(tfile))
23
40
  rel_file = tfile[TEST_DIR.length+1..-1]
24
41
 
25
42
  test_list.each do |test|
26
43
  schema = test["schema"]
27
44
  base_description = test["description"]
28
- v = nil
29
45
 
30
46
  test["tests"].each do |t|
31
- err_id = "#{rel_file}: #{base_description}/#{t['description']}"
32
-
33
- unless IGNORED_TESTS.include?(rel_file)
34
- define_method("test_#{err_id}") do
35
- assert_nothing_raised("Exception raised running #{err_id}") do
36
- v = JSON::Validator.fully_validate(schema,
37
- t["data"],
38
- :validate_schema => true,
39
- :version => version
40
- )
41
- end
47
+ next if IGNORED_TESTS[rel_file] == :all
48
+ next if IGNORED_TESTS[rel_file].any? { |ignored|
49
+ base_description == ignored || "#{base_description}/#{t['description']}" == ignored
50
+ }
42
51
 
43
- assert_equal t["valid"], v.empty?, "Common test suite case failed: #{err_id}\n#{v}"
44
- end
52
+ err_id = "#{rel_file}: #{base_description}/#{t['description']}"
53
+ define_method("test_#{err_id}") do
54
+ errors = JSON::Validator.fully_validate(schema,
55
+ t["data"],
56
+ :parse_data => false,
57
+ :validate_schema => true,
58
+ :version => version
59
+ )
60
+ assert_equal t["valid"], errors.empty?, "Common test suite case failed: #{err_id}"
45
61
  end
46
62
  end
47
63
  end
@@ -1,8 +1,7 @@
1
1
  # encoding: utf-8
2
- require 'test/unit'
3
- require File.dirname(__FILE__) + '/../lib/json-schema'
2
+ require File.expand_path('../test_helper', __FILE__)
4
3
 
5
- class JSONSchemaCustomFormatTest < Test::Unit::TestCase
4
+ class JSONSchemaCustomFormatTest < Minitest::Test
6
5
  def setup
7
6
  @all_versions = ['draft1', 'draft2', 'draft3', 'draft4']
8
7
  @format_proc = lambda { |value| raise JSON::Schema::CustomFormatError.new("must be 42") unless value == "42" }
@@ -0,0 +1,15 @@
1
+ require File.expand_path('../test_helper', __FILE__)
2
+
3
+ class RelativeDefinitionTest < Minitest::Test
4
+
5
+ def test_definition_schema
6
+ assert_valid schema_fixture_path('definition_schema.json'), {"a" => 5}
7
+ end
8
+
9
+ def test_relative_definition
10
+ schema = schema_fixture_path('relative_definition_schema.json')
11
+ assert_valid schema, {"a" => 5}
12
+ refute_valid schema, {"a" => "foo"}
13
+ end
14
+
15
+ end
@@ -1,11 +1,12 @@
1
- require 'test/unit'
2
- require File.dirname(__FILE__) + '/../lib/json-schema'
1
+ require File.expand_path('../test_helper', __FILE__)
3
2
 
4
3
  class BitwiseAndAttribute < JSON::Schema::Attribute
5
4
  def self.validate(current_schema, data, fragments, processor, validator, options = {})
6
- if data.is_a?(Integer) && data & current_schema.schema['bitwise-and'].to_i == 0
7
- message = "The property '#{build_fragment(fragments)}' did not evaluate to true when bitwise-AND'd with #{current_schema.schema['bitwise-or']}"
8
- raise JSON::Schema::ValidationError.new(message, fragments, self, current_schema)
5
+ return unless data.is_a?(Integer)
6
+
7
+ if data & current_schema.schema['bitwise-and'].to_i == 0
8
+ message = "The property '#{build_fragment(fragments)}' did not evaluate to true when bitwise-AND'd with #{current_schema.schema['bitwise-and']}"
9
+ validation_error(processor, message, fragments, current_schema, self, options[:record_errors])
9
10
  end
10
11
  end
11
12
  end
@@ -15,16 +16,16 @@ class ExtendedSchema < JSON::Schema::Validator
15
16
  super
16
17
  extend_schema_definition("http://json-schema.org/draft-03/schema#")
17
18
  @attributes["bitwise-and"] = BitwiseAndAttribute
18
- @uri = URI.parse("http://test.com/test.json")
19
+ @uri = Addressable::URI.parse("http://test.com/test.json")
19
20
  end
20
-
21
+
21
22
  JSON::Validator.register_validator(self.new)
22
23
  end
23
24
 
24
- class JSONSchemaTestExtendedSchema < Test::Unit::TestCase
25
- def test_schema_from_file
25
+ class TestExtendedSchema < Minitest::Test
26
+ def test_extended_schema_validation
26
27
  schema = {
27
- "$schema" => "http://json-schema.org/draft-03/schema#",
28
+ "$schema" => "http://test.com/test.json",
28
29
  "properties" => {
29
30
  "a" => {
30
31
  "bitwise-and" => 1
@@ -34,16 +35,16 @@ class JSONSchemaTestExtendedSchema < Test::Unit::TestCase
34
35
  }
35
36
  }
36
37
  }
37
-
38
- data = {"a" => 0, "b" => "taco"}
39
- assert(JSON::Validator.validate(schema,data))
40
- data = {"a" => 1, "b" => "taco"}
41
- assert(JSON::Validator.validate(schema,data))
42
- data = {"a" => 1, "b" => 5}
43
- assert(!JSON::Validator.validate(schema,data))
44
-
38
+
39
+ assert_valid schema, {"a" => 1, "b" => "taco"}
40
+ refute_valid schema, {"a" => 0, "b" => "taco"}
41
+ refute_valid schema, {"a" => 1, "b" => 5}
42
+ end
43
+
44
+ def test_unextended_schema
45
+ # Verify that using the original schema disregards the `bitwise-and` property
45
46
  schema = {
46
- "$schema" => "http://test.com/test.json",
47
+ "$schema" => "http://json-schema.org/draft-03/schema#",
47
48
  "properties" => {
48
49
  "a" => {
49
50
  "bitwise-and" => 1
@@ -53,16 +54,9 @@ class JSONSchemaTestExtendedSchema < Test::Unit::TestCase
53
54
  }
54
55
  }
55
56
  }
56
-
57
- data = {
58
- "a" => 0
59
- }
60
-
61
- data = {"a" => 1, "b" => "taco"}
62
- assert(JSON::Validator.validate(schema,data))
63
- data = {"a" => 0, "b" => "taco"}
64
- assert(!JSON::Validator.validate(schema,data))
65
- data = {"a" => 1, "b" => 5}
66
- assert(!JSON::Validator.validate(schema,data))
57
+
58
+ assert_valid schema, {"a" => 0, "b" => "taco"}
59
+ assert_valid schema, {"a" => 1, "b" => "taco"}
60
+ refute_valid schema, {"a" => 1, "b" => 5}
67
61
  end
68
- end
62
+ end
@@ -1,47 +1,49 @@
1
- require 'test/unit'
2
- require File.dirname(__FILE__) + '/../lib/json-schema'
1
+ require File.expand_path('../test_helper', __FILE__)
3
2
 
4
- class ExtendsNestedTest < Test::Unit::TestCase
3
+ class ExtendsNestedTest < Minitest::Test
5
4
 
6
- def assert_validity(valid, schema_name, data, msg=nil)
7
- file = File.expand_path("../schemas/#{schema_name}.schema.json",__FILE__)
8
- errors = JSON::Validator.fully_validate file, data
9
- msg.sub! /\.$/, '' if msg
10
- send (valid ? :assert_equal : :assert_not_equal), [], errors, \
11
- "Schema should be #{valid ? :valid : :invalid}#{msg ? ".\n[#{schema_name}] #{msg}" : ''}"
12
- end
5
+ def assert_validity(valid, schema_name, data, msg)
6
+ msg = "Schema should be #{valid ? :valid : :invalid}.\n(#{schema_name}) #{msg}"
7
+ schema = schema_fixture_path("#{schema_name}.schema.json")
8
+ errors = JSON::Validator.fully_validate(schema, data)
13
9
 
14
- def assert_valid(schema_name, data, msg=nil) assert_validity true, schema_name, data, msg end
15
- def refute_valid(schema_name, data, msg=nil) assert_validity false, schema_name, data, msg end
10
+ if valid
11
+ assert_equal([], errors, msg)
12
+ else
13
+ refute_equal([], errors, msg)
14
+ end
15
+ end
16
16
 
17
17
  %w[
18
- extends_and_additionalProperties-1-filename extends_and_additionalProperties-1-ref
19
- extends_and_additionalProperties-2-filename extends_and_additionalProperties-2-ref
18
+ extends_and_additionalProperties-1-filename
19
+ extends_and_additionalProperties-1-ref
20
+ extends_and_additionalProperties-2-filename
21
+ extends_and_additionalProperties-2-ref
20
22
  ].each do |schema_name|
21
- test_prefix= 'test_' + schema_name.gsub('-','_')
22
- class_eval <<-EOB
23
+ test_prefix = 'test_' + schema_name.gsub('-','_')
23
24
 
25
+ class_eval <<-EOB
24
26
  def #{test_prefix}_valid_outer
25
- assert_valid '#{schema_name}', {"outerC"=>true}, "Outer defn is broken, maybe the outer extends overrode it?"
27
+ assert_validity true, '#{schema_name}', {"outerC"=>true}, "Outer defn is broken, maybe the outer extends overrode it"
26
28
  end
27
29
 
28
30
  def #{test_prefix}_valid_outer_extended
29
- assert_valid '#{schema_name}', {"innerA"=>true}, "Extends at the root level isn't working."
31
+ assert_validity true, '#{schema_name}', {"innerA"=>true}, "Extends at the root level isn't working"
30
32
  end
31
33
 
32
34
  def #{test_prefix}_valid_inner
33
- assert_valid '#{schema_name}', {"outerB"=>[{"innerA"=>true}]}, "Extends isn't working in the array element defn."
35
+ assert_validity true, '#{schema_name}', {"outerB"=>[{"innerA"=>true}]}, "Extends isn't working in the array element defn"
34
36
  end
35
37
 
36
38
  def #{test_prefix}_invalid_inner
37
- refute_valid '#{schema_name}', {"outerB"=>[{"whaaaaat"=>true}]}, "Array element defn allowing anything when it should only allow what's in inner.schema"
39
+ assert_validity false, '#{schema_name}', {"outerB"=>[{"whaaaaat"=>true}]}, "Array element defn allowing anything when it should only allow what's in inner.schema"
38
40
  end
39
41
  EOB
40
42
 
41
43
  if schema_name['extends_and_additionalProperties-1']
42
44
  class_eval <<-EOB
43
45
  def #{test_prefix}_invalid_outer
44
- refute_valid '#{schema_name}', {"whaaaaat"=>true}, "Outer defn allowing anything when it shouldn't."
46
+ assert_validity false, '#{schema_name}', {"whaaaaat"=>true}, "Outer defn allowing anything when it shouldn't"
45
47
  end
46
48
  EOB
47
49
  end