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
@@ -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