json-schema 2.5.1 → 2.5.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/README.textile +2 -2
- data/lib/json-schema/attributes/properties.rb +1 -1
- data/lib/json-schema/validator.rb +14 -6
- metadata +6 -121
- data/test/data/all_of_ref_data.json +0 -3
- data/test/data/any_of_ref_data.json +0 -7
- data/test/data/bad_data_1.json +0 -3
- data/test/data/good_data_1.json +0 -3
- data/test/data/one_of_ref_links_data.json +0 -5
- data/test/schemas/address_microformat.json +0 -18
- data/test/schemas/all_of_ref_base_schema.json +0 -6
- data/test/schemas/all_of_ref_schema.json +0 -7
- data/test/schemas/any_of_ref_jane_schema.json +0 -4
- data/test/schemas/any_of_ref_jimmy_schema.json +0 -4
- data/test/schemas/any_of_ref_john_schema.json +0 -4
- data/test/schemas/any_of_ref_schema.json +0 -15
- data/test/schemas/definition_schema.json +0 -15
- data/test/schemas/extends_and_additionalProperties-1-filename.schema.json +0 -34
- data/test/schemas/extends_and_additionalProperties-1-ref.schema.json +0 -34
- data/test/schemas/extends_and_additionalProperties-2-filename.schema.json +0 -33
- data/test/schemas/extends_and_additionalProperties-2-ref.schema.json +0 -33
- data/test/schemas/good_schema_1.json +0 -10
- data/test/schemas/good_schema_2.json +0 -10
- data/test/schemas/good_schema_extends1.json +0 -10
- data/test/schemas/good_schema_extends2.json +0 -13
- data/test/schemas/inner.schema.json +0 -21
- data/test/schemas/one_of_ref_links_schema.json +0 -16
- data/test/schemas/ref john with spaces schema.json +0 -11
- data/test/schemas/relative_definition_schema.json +0 -8
- data/test/schemas/self_link_schema.json +0 -17
- data/test/schemas/up_link_schema.json +0 -17
- data/test/test_all_of_ref_schema.rb +0 -35
- data/test/test_any_of_ref_schema.rb +0 -35
- data/test/test_bad_schema_ref.rb +0 -39
- data/test/test_common_test_suite.rb +0 -66
- data/test/test_custom_format.rb +0 -116
- data/test/test_definition.rb +0 -15
- data/test/test_extended_schema.rb +0 -62
- data/test/test_extends_and_additionalProperties.rb +0 -52
- data/test/test_files_v3.rb +0 -43
- data/test/test_fragment_resolution.rb +0 -30
- data/test/test_fragment_validation_with_ref.rb +0 -34
- data/test/test_full_validation.rb +0 -208
- data/test/test_helper.rb +0 -47
- data/test/test_initialize_data.rb +0 -118
- data/test/test_jsonschema_draft1.rb +0 -141
- data/test/test_jsonschema_draft2.rb +0 -113
- data/test/test_jsonschema_draft3.rb +0 -450
- data/test/test_jsonschema_draft4.rb +0 -657
- data/test/test_list_option.rb +0 -21
- data/test/test_load_ref_schema.rb +0 -40
- data/test/test_merge_missing_values.rb +0 -45
- data/test/test_minitems.rb +0 -16
- data/test/test_one_of.rb +0 -85
- data/test/test_ruby_schema.rb +0 -59
- data/test/test_schema_loader.rb +0 -74
- data/test/test_schema_type_attribute.rb +0 -20
- data/test/test_schema_validation.rb +0 -185
- data/test/test_stringify.rb +0 -48
- data/test/test_uri_related.rb +0 -67
- data/test/test_validator.rb +0 -53
data/test/test_helper.rb
DELETED
@@ -1,47 +0,0 @@
|
|
1
|
-
require 'minitest/autorun'
|
2
|
-
require 'webmock/minitest'
|
3
|
-
|
4
|
-
$:.unshift(File.expand_path('../../lib', __FILE__))
|
5
|
-
require 'json-schema'
|
6
|
-
|
7
|
-
Dir[File.join(File.expand_path('../support', __FILE__), '*.rb')].each do |support_file|
|
8
|
-
require support_file
|
9
|
-
end
|
10
|
-
|
11
|
-
class Minitest::Test
|
12
|
-
def schema_fixture_path(filename)
|
13
|
-
File.join(File.dirname(__FILE__), 'schemas', filename)
|
14
|
-
end
|
15
|
-
|
16
|
-
def data_fixture_path(filename)
|
17
|
-
File.join(File.dirname(__FILE__), 'data', filename)
|
18
|
-
end
|
19
|
-
|
20
|
-
def assert_valid(schema, data, options = {})
|
21
|
-
if !options.key?(:version) && respond_to?(:schema_version)
|
22
|
-
options = options.merge(:version => schema_version)
|
23
|
-
end
|
24
|
-
|
25
|
-
errors = JSON::Validator.fully_validate(schema, data, options)
|
26
|
-
assert_equal([], errors, "#{data.inspect} should be valid for schema:\n#{schema.inspect}")
|
27
|
-
end
|
28
|
-
|
29
|
-
def refute_valid(schema, data, options = {})
|
30
|
-
if !options.key?(:version) && respond_to?(:schema_version)
|
31
|
-
options = options.merge(:version => schema_version)
|
32
|
-
end
|
33
|
-
|
34
|
-
errors = JSON::Validator.fully_validate(schema, data, options)
|
35
|
-
refute_equal([], errors, "#{data.inspect} should be invalid for schema:\n#{schema.inspect}")
|
36
|
-
end
|
37
|
-
|
38
|
-
def parser_error
|
39
|
-
if defined?(::Yajl)
|
40
|
-
Yajl::ParseError
|
41
|
-
elsif defined?(::MultiJson)
|
42
|
-
MultiJson::ParseError
|
43
|
-
else
|
44
|
-
JSON::ParserError
|
45
|
-
end
|
46
|
-
end
|
47
|
-
end
|
@@ -1,118 +0,0 @@
|
|
1
|
-
require File.expand_path('../test_helper', __FILE__)
|
2
|
-
|
3
|
-
class InitializeDataTest < Minitest::Test
|
4
|
-
|
5
|
-
def test_parse_character_string
|
6
|
-
schema = {'type' => 'string'}
|
7
|
-
data = 'hello world'
|
8
|
-
|
9
|
-
assert(JSON::Validator.validate(schema, data))
|
10
|
-
|
11
|
-
assert(JSON::Validator.validate(schema, data, :parse_data => false))
|
12
|
-
|
13
|
-
assert_raises(parser_error) do
|
14
|
-
JSON::Validator.validate(schema, data, :json => true)
|
15
|
-
end
|
16
|
-
|
17
|
-
assert_raises(Errno::ENOENT) { JSON::Validator.validate(schema, data, :uri => true) }
|
18
|
-
end
|
19
|
-
|
20
|
-
def test_parse_integer_string
|
21
|
-
schema = {'type' => 'integer'}
|
22
|
-
data = '42'
|
23
|
-
|
24
|
-
assert(JSON::Validator.validate(schema, data))
|
25
|
-
|
26
|
-
refute(JSON::Validator.validate(schema, data, :parse_data => false))
|
27
|
-
|
28
|
-
assert(JSON::Validator.validate(schema, data, :json => true))
|
29
|
-
|
30
|
-
assert_raises(Errno::ENOENT) { JSON::Validator.validate(schema, data, :uri => true) }
|
31
|
-
end
|
32
|
-
|
33
|
-
def test_parse_hash_string
|
34
|
-
schema = { 'type' => 'object', 'properties' => { 'a' => { 'type' => 'string' } } }
|
35
|
-
data = '{"a": "b"}'
|
36
|
-
|
37
|
-
assert(JSON::Validator.validate(schema, data))
|
38
|
-
|
39
|
-
refute(JSON::Validator.validate(schema, data, :parse_data => false))
|
40
|
-
|
41
|
-
assert(JSON::Validator.validate(schema, data, :json => true))
|
42
|
-
|
43
|
-
assert_raises(Errno::ENOENT) { JSON::Validator.validate(schema, data, :uri => true) }
|
44
|
-
end
|
45
|
-
|
46
|
-
def test_parse_json_string
|
47
|
-
schema = {'type' => 'string'}
|
48
|
-
data = '"hello world"'
|
49
|
-
|
50
|
-
assert(JSON::Validator.validate(schema, data))
|
51
|
-
|
52
|
-
assert(JSON::Validator.validate(schema, data, :parse_data => false))
|
53
|
-
|
54
|
-
assert(JSON::Validator.validate(schema, data, :json => true))
|
55
|
-
|
56
|
-
assert_raises(Errno::ENOENT) { JSON::Validator.validate(schema, data, :uri => true) }
|
57
|
-
end
|
58
|
-
|
59
|
-
def test_parse_valid_uri_string
|
60
|
-
schema = {'type' => 'string'}
|
61
|
-
data = 'http://foo.bar/'
|
62
|
-
|
63
|
-
stub_request(:get, "foo.bar").to_return(:body => '"hello world"', :status => 200)
|
64
|
-
|
65
|
-
assert(JSON::Validator.validate(schema, data))
|
66
|
-
|
67
|
-
assert(JSON::Validator.validate(schema, data, :parse_data => false))
|
68
|
-
|
69
|
-
assert_raises(parser_error) do
|
70
|
-
JSON::Validator.validate(schema, data, :json => true)
|
71
|
-
end
|
72
|
-
|
73
|
-
assert(JSON::Validator.validate(schema, data, :uri => true))
|
74
|
-
end
|
75
|
-
|
76
|
-
def test_parse_invalid_uri_string
|
77
|
-
schema = {'type' => 'string'}
|
78
|
-
data = 'http://foo.bar/'
|
79
|
-
|
80
|
-
stub_request(:get, "foo.bar").to_timeout
|
81
|
-
|
82
|
-
assert(JSON::Validator.validate(schema, data))
|
83
|
-
|
84
|
-
assert(JSON::Validator.validate(schema, data, :parse_data => false))
|
85
|
-
|
86
|
-
assert_raises(parser_error) do
|
87
|
-
JSON::Validator.validate(schema, data, :json => true)
|
88
|
-
end
|
89
|
-
|
90
|
-
assert_raises(Timeout::Error) { JSON::Validator.validate(schema, data, :uri => true) }
|
91
|
-
end
|
92
|
-
|
93
|
-
def test_parse_integer
|
94
|
-
schema = {'type' => 'integer'}
|
95
|
-
data = 42
|
96
|
-
|
97
|
-
assert(JSON::Validator.validate(schema, data))
|
98
|
-
|
99
|
-
assert(JSON::Validator.validate(schema, data, :parse_data => false))
|
100
|
-
|
101
|
-
assert_raises(TypeError) { JSON::Validator.validate(schema, data, :json => true) }
|
102
|
-
|
103
|
-
assert_raises(TypeError) { JSON::Validator.validate(schema, data, :uri => true) }
|
104
|
-
end
|
105
|
-
|
106
|
-
def test_parse_hash
|
107
|
-
schema = { 'type' => 'object', 'properties' => { 'a' => { 'type' => 'string' } } }
|
108
|
-
data = { 'a' => 'b' }
|
109
|
-
|
110
|
-
assert(JSON::Validator.validate(schema, data))
|
111
|
-
|
112
|
-
assert(JSON::Validator.validate(schema, data, :parse_data => false))
|
113
|
-
|
114
|
-
assert_raises(TypeError) { JSON::Validator.validate(schema, data, :json => true) }
|
115
|
-
|
116
|
-
assert_raises(TypeError) { JSON::Validator.validate(schema, data, :uri => true) }
|
117
|
-
end
|
118
|
-
end
|
@@ -1,141 +0,0 @@
|
|
1
|
-
require File.expand_path('../test_helper', __FILE__)
|
2
|
-
|
3
|
-
class JSONSchemaDraft1Test < Minitest::Test
|
4
|
-
def schema_version
|
5
|
-
:draft1
|
6
|
-
end
|
7
|
-
|
8
|
-
def exclusive_minimum
|
9
|
-
{ 'minimumCanEqual' => false }
|
10
|
-
end
|
11
|
-
|
12
|
-
def exclusive_maximum
|
13
|
-
{ 'maximumCanEqual' => false }
|
14
|
-
end
|
15
|
-
|
16
|
-
include ArrayValidation::ItemsTests
|
17
|
-
|
18
|
-
include EnumValidation::General
|
19
|
-
include EnumValidation::V1_V2
|
20
|
-
|
21
|
-
include NumberValidation::MinMaxTests
|
22
|
-
|
23
|
-
include ObjectValidation::AdditionalPropertiesTests
|
24
|
-
|
25
|
-
include StrictValidation
|
26
|
-
|
27
|
-
include StringValidation::ValueTests
|
28
|
-
include StringValidation::FormatTests
|
29
|
-
include StringValidation::DateAndTimeFormatTests
|
30
|
-
|
31
|
-
include TypeValidation::SimpleTypeTests
|
32
|
-
include TypeValidation::AnyTypeTests
|
33
|
-
include TypeValidation::SchemaUnionTypeTests
|
34
|
-
|
35
|
-
def test_optional
|
36
|
-
# Set up the default datatype
|
37
|
-
schema = {
|
38
|
-
"properties" => {
|
39
|
-
"a" => {"type" => "string"}
|
40
|
-
}
|
41
|
-
}
|
42
|
-
data = {}
|
43
|
-
|
44
|
-
refute_valid schema, data
|
45
|
-
data['a'] = "Hello"
|
46
|
-
assert_valid schema, data
|
47
|
-
|
48
|
-
schema = {
|
49
|
-
"properties" => {
|
50
|
-
"a" => {"type" => "integer", "optional" => "true"}
|
51
|
-
}
|
52
|
-
}
|
53
|
-
|
54
|
-
data = {}
|
55
|
-
assert_valid schema, data
|
56
|
-
end
|
57
|
-
|
58
|
-
def test_max_decimal
|
59
|
-
# Set up the default datatype
|
60
|
-
schema = {
|
61
|
-
"properties" => {
|
62
|
-
"a" => {"maxDecimal" => 2}
|
63
|
-
}
|
64
|
-
}
|
65
|
-
|
66
|
-
data = {
|
67
|
-
"a" => nil
|
68
|
-
}
|
69
|
-
|
70
|
-
data["a"] = 3.35
|
71
|
-
assert_valid schema, data
|
72
|
-
|
73
|
-
data["a"] = 3.455
|
74
|
-
refute_valid schema, data
|
75
|
-
|
76
|
-
|
77
|
-
schema["properties"]["a"]["maxDecimal"] = 0
|
78
|
-
|
79
|
-
data["a"] = 4.0
|
80
|
-
refute_valid schema, data
|
81
|
-
|
82
|
-
data["a"] = 'boo'
|
83
|
-
assert_valid schema, data
|
84
|
-
|
85
|
-
data["a"] = 5
|
86
|
-
assert_valid schema, data
|
87
|
-
end
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
def test_disallow
|
92
|
-
# Set up the default datatype
|
93
|
-
schema = {
|
94
|
-
"properties" => {
|
95
|
-
"a" => {"disallow" => "integer"}
|
96
|
-
}
|
97
|
-
}
|
98
|
-
|
99
|
-
data = {
|
100
|
-
"a" => nil
|
101
|
-
}
|
102
|
-
|
103
|
-
|
104
|
-
data["a"] = 'string'
|
105
|
-
assert_valid schema, data
|
106
|
-
|
107
|
-
data["a"] = 5
|
108
|
-
refute_valid schema, data
|
109
|
-
|
110
|
-
|
111
|
-
schema["properties"]["a"]["disallow"] = ["integer","string"]
|
112
|
-
data["a"] = 'string'
|
113
|
-
refute_valid schema, data
|
114
|
-
|
115
|
-
data["a"] = 5
|
116
|
-
refute_valid schema, data
|
117
|
-
|
118
|
-
data["a"] = false
|
119
|
-
assert_valid schema, data
|
120
|
-
|
121
|
-
end
|
122
|
-
|
123
|
-
def test_format_datetime
|
124
|
-
schema = {
|
125
|
-
"type" => "object",
|
126
|
-
"properties" => { "a" => {"type" => "string", "format" => "date-time"}}
|
127
|
-
}
|
128
|
-
|
129
|
-
assert_valid schema, {"a" => "2010-01-01T12:00:00Z"}
|
130
|
-
refute_valid schema, {"a" => "2010-01-32T12:00:00Z"}
|
131
|
-
refute_valid schema, {"a" => "2010-13-01T12:00:00Z"}
|
132
|
-
refute_valid schema, {"a" => "2010-01-01T24:00:00Z"}
|
133
|
-
refute_valid schema, {"a" => "2010-01-01T12:60:00Z"}
|
134
|
-
refute_valid schema, {"a" => "2010-01-01T12:00:60Z"}
|
135
|
-
refute_valid schema, {"a" => "2010-01-01T12:00:00z"}
|
136
|
-
refute_valid schema, {"a" => "2010-01-0112:00:00Z"}
|
137
|
-
refute_valid schema, {"a" => "2010-01-01T12:00:00Z\nabc"}
|
138
|
-
end
|
139
|
-
|
140
|
-
end
|
141
|
-
|
@@ -1,113 +0,0 @@
|
|
1
|
-
require File.expand_path('../test_helper', __FILE__)
|
2
|
-
|
3
|
-
class JSONSchemaDraft2Test < Minitest::Test
|
4
|
-
def schema_version
|
5
|
-
:draft2
|
6
|
-
end
|
7
|
-
|
8
|
-
def exclusive_minimum
|
9
|
-
{ 'minimumCanEqual' => false }
|
10
|
-
end
|
11
|
-
|
12
|
-
def exclusive_maximum
|
13
|
-
{ 'maximumCanEqual' => false }
|
14
|
-
end
|
15
|
-
|
16
|
-
def multiple_of
|
17
|
-
'divisibleBy'
|
18
|
-
end
|
19
|
-
|
20
|
-
include ArrayValidation::ItemsTests
|
21
|
-
include ArrayValidation::UniqueItemsTests
|
22
|
-
|
23
|
-
include EnumValidation::General
|
24
|
-
include EnumValidation::V1_V2
|
25
|
-
|
26
|
-
include NumberValidation::MinMaxTests
|
27
|
-
include NumberValidation::MultipleOfTests
|
28
|
-
|
29
|
-
include ObjectValidation::AdditionalPropertiesTests
|
30
|
-
|
31
|
-
include StrictValidation
|
32
|
-
|
33
|
-
include StringValidation::ValueTests
|
34
|
-
include StringValidation::FormatTests
|
35
|
-
include StringValidation::DateAndTimeFormatTests
|
36
|
-
|
37
|
-
include TypeValidation::SimpleTypeTests
|
38
|
-
include TypeValidation::AnyTypeTests
|
39
|
-
include TypeValidation::SchemaUnionTypeTests
|
40
|
-
|
41
|
-
def test_optional
|
42
|
-
# Set up the default datatype
|
43
|
-
schema = {
|
44
|
-
"properties" => {
|
45
|
-
"a" => {"type" => "string"}
|
46
|
-
}
|
47
|
-
}
|
48
|
-
data = {}
|
49
|
-
|
50
|
-
refute_valid schema, data
|
51
|
-
data['a'] = "Hello"
|
52
|
-
assert_valid schema, data
|
53
|
-
|
54
|
-
schema = {
|
55
|
-
"properties" => {
|
56
|
-
"a" => {"type" => "integer", "optional" => "true"}
|
57
|
-
}
|
58
|
-
}
|
59
|
-
|
60
|
-
data = {}
|
61
|
-
assert_valid schema, data
|
62
|
-
end
|
63
|
-
|
64
|
-
def test_disallow
|
65
|
-
# Set up the default datatype
|
66
|
-
schema = {
|
67
|
-
"properties" => {
|
68
|
-
"a" => {"disallow" => "integer"}
|
69
|
-
}
|
70
|
-
}
|
71
|
-
|
72
|
-
data = {
|
73
|
-
"a" => nil
|
74
|
-
}
|
75
|
-
|
76
|
-
|
77
|
-
data["a"] = 'string'
|
78
|
-
assert_valid schema, data
|
79
|
-
|
80
|
-
data["a"] = 5
|
81
|
-
refute_valid schema, data
|
82
|
-
|
83
|
-
|
84
|
-
schema["properties"]["a"]["disallow"] = ["integer","string"]
|
85
|
-
data["a"] = 'string'
|
86
|
-
refute_valid schema, data
|
87
|
-
|
88
|
-
data["a"] = 5
|
89
|
-
refute_valid schema, data
|
90
|
-
|
91
|
-
data["a"] = false
|
92
|
-
assert_valid schema, data
|
93
|
-
end
|
94
|
-
|
95
|
-
def test_format_datetime
|
96
|
-
schema = {
|
97
|
-
"type" => "object",
|
98
|
-
"properties" => { "a" => {"type" => "string", "format" => "date-time"}}
|
99
|
-
}
|
100
|
-
|
101
|
-
assert_valid schema, {"a" => "2010-01-01T12:00:00Z"}
|
102
|
-
refute_valid schema, {"a" => "2010-01-32T12:00:00Z"}
|
103
|
-
refute_valid schema, {"a" => "2010-13-01T12:00:00Z"}
|
104
|
-
refute_valid schema, {"a" => "2010-01-01T24:00:00Z"}
|
105
|
-
refute_valid schema, {"a" => "2010-01-01T12:60:00Z"}
|
106
|
-
refute_valid schema, {"a" => "2010-01-01T12:00:60Z"}
|
107
|
-
refute_valid schema, {"a" => "2010-01-01T12:00:00z"}
|
108
|
-
refute_valid schema, {"a" => "2010-01-0112:00:00Z"}
|
109
|
-
refute_valid schema, {"a" => "2010-01-01T12:00:00Z\nabc"}
|
110
|
-
end
|
111
|
-
|
112
|
-
end
|
113
|
-
|
@@ -1,450 +0,0 @@
|
|
1
|
-
# encoding: utf-8
|
2
|
-
require File.expand_path('../test_helper', __FILE__)
|
3
|
-
|
4
|
-
class JSONSchemaDraft3Test < Minitest::Test
|
5
|
-
def schema_version
|
6
|
-
:draft3
|
7
|
-
end
|
8
|
-
|
9
|
-
def exclusive_minimum
|
10
|
-
{ 'exclusiveMinimum' => true }
|
11
|
-
end
|
12
|
-
|
13
|
-
def exclusive_maximum
|
14
|
-
{ 'exclusiveMaximum' => true }
|
15
|
-
end
|
16
|
-
|
17
|
-
def multiple_of
|
18
|
-
'divisibleBy'
|
19
|
-
end
|
20
|
-
|
21
|
-
include ArrayValidation::ItemsTests
|
22
|
-
include ArrayValidation::AdditionalItemsTests
|
23
|
-
include ArrayValidation::UniqueItemsTests
|
24
|
-
|
25
|
-
include EnumValidation::General
|
26
|
-
include EnumValidation::V3_V4
|
27
|
-
|
28
|
-
include NumberValidation::MinMaxTests
|
29
|
-
include NumberValidation::MultipleOfTests
|
30
|
-
|
31
|
-
include ObjectValidation::AdditionalPropertiesTests
|
32
|
-
include ObjectValidation::PatternPropertiesTests
|
33
|
-
|
34
|
-
include StrictValidation
|
35
|
-
|
36
|
-
include StringValidation::ValueTests
|
37
|
-
include StringValidation::FormatTests
|
38
|
-
include StringValidation::DateAndTimeFormatTests
|
39
|
-
|
40
|
-
include TypeValidation::SimpleTypeTests
|
41
|
-
include TypeValidation::AnyTypeTests
|
42
|
-
include TypeValidation::SchemaUnionTypeTests
|
43
|
-
|
44
|
-
def test_types
|
45
|
-
# Set up the default datatype
|
46
|
-
schema = {
|
47
|
-
"$schema" => "http://json-schema.org/draft-03/schema#",
|
48
|
-
"properties" => {
|
49
|
-
"a" => {}
|
50
|
-
}
|
51
|
-
}
|
52
|
-
data = {
|
53
|
-
"a" => nil
|
54
|
-
}
|
55
|
-
|
56
|
-
# Test an array of unioned-type objects that prevent additionalProperties
|
57
|
-
schema["properties"]["a"] = {
|
58
|
-
'type' => 'array',
|
59
|
-
'items' => {
|
60
|
-
'type' => [
|
61
|
-
{ 'type' => 'object', 'properties' => { "b" => { "type" => "integer" } } },
|
62
|
-
{ 'type' => 'object', 'properties' => { "c" => { "type" => "string" } } }
|
63
|
-
],
|
64
|
-
'additionalProperties' => false
|
65
|
-
}
|
66
|
-
}
|
67
|
-
|
68
|
-
data["a"] = [{"b" => 5}, {"c" => "foo"}]
|
69
|
-
errors = JSON::Validator.fully_validate(schema, data)
|
70
|
-
assert(errors.empty?, errors.join("\n"))
|
71
|
-
|
72
|
-
# This should actually pass, because this matches the first schema in the union
|
73
|
-
data["a"] << {"c" => false}
|
74
|
-
assert_valid schema, data
|
75
|
-
end
|
76
|
-
|
77
|
-
def test_required
|
78
|
-
# Set up the default datatype
|
79
|
-
schema = {
|
80
|
-
"$schema" => "http://json-schema.org/draft-03/schema#",
|
81
|
-
"properties" => {
|
82
|
-
"a" => {"required" => true}
|
83
|
-
}
|
84
|
-
}
|
85
|
-
data = {}
|
86
|
-
|
87
|
-
refute_valid schema, data
|
88
|
-
data['a'] = "Hello"
|
89
|
-
assert_valid schema, data
|
90
|
-
|
91
|
-
schema = {
|
92
|
-
"$schema" => "http://json-schema.org/draft-03/schema#",
|
93
|
-
"properties" => {
|
94
|
-
"a" => {"type" => "integer"}
|
95
|
-
}
|
96
|
-
}
|
97
|
-
|
98
|
-
data = {}
|
99
|
-
assert_valid schema, data
|
100
|
-
end
|
101
|
-
|
102
|
-
def test_strict_properties_required_props
|
103
|
-
schema = {
|
104
|
-
"$schema" => "http://json-schema.org/draft-03/schema#",
|
105
|
-
"properties" => {
|
106
|
-
"a" => {"type" => "string", "required" => true},
|
107
|
-
"b" => {"type" => "string", "required" => false}
|
108
|
-
}
|
109
|
-
}
|
110
|
-
|
111
|
-
data = {"a" => "a"}
|
112
|
-
assert(JSON::Validator.validate(schema,data,:strict => true))
|
113
|
-
|
114
|
-
data = {"b" => "b"}
|
115
|
-
assert(!JSON::Validator.validate(schema,data,:strict => true))
|
116
|
-
|
117
|
-
data = {"a" => "a", "b" => "b"}
|
118
|
-
assert(JSON::Validator.validate(schema,data,:strict => true))
|
119
|
-
end
|
120
|
-
|
121
|
-
def test_strict_properties_additional_props
|
122
|
-
schema = {
|
123
|
-
"$schema" => "http://json-schema.org/draft-03/schema#",
|
124
|
-
"properties" => {
|
125
|
-
"a" => {"type" => "string"},
|
126
|
-
"b" => {"type" => "string"}
|
127
|
-
},
|
128
|
-
"additionalProperties" => {"type" => "integer"}
|
129
|
-
}
|
130
|
-
|
131
|
-
data = {"a" => "a"}
|
132
|
-
assert(!JSON::Validator.validate(schema,data,:strict => true))
|
133
|
-
|
134
|
-
data = {"b" => "b"}
|
135
|
-
assert(!JSON::Validator.validate(schema,data,:strict => true))
|
136
|
-
|
137
|
-
data = {"a" => "a", "b" => "b"}
|
138
|
-
assert(JSON::Validator.validate(schema,data,:strict => true))
|
139
|
-
|
140
|
-
data = {"a" => "a", "b" => "b", "c" => "c"}
|
141
|
-
assert(!JSON::Validator.validate(schema,data,:strict => true))
|
142
|
-
|
143
|
-
data = {"a" => "a", "b" => "b", "c" => 3}
|
144
|
-
assert(JSON::Validator.validate(schema,data,:strict => true))
|
145
|
-
end
|
146
|
-
|
147
|
-
def test_strict_properties_pattern_props
|
148
|
-
schema = {
|
149
|
-
"$schema" => "http://json-schema.org/draft-03/schema#",
|
150
|
-
"properties" => {
|
151
|
-
"a" => {"type" => "string"},
|
152
|
-
"b" => {"type" => "string"}
|
153
|
-
},
|
154
|
-
"patternProperties" => {"\\d+ taco" => {"type" => "integer"}}
|
155
|
-
}
|
156
|
-
|
157
|
-
data = {"a" => "a"}
|
158
|
-
assert(!JSON::Validator.validate(schema,data,:strict => true))
|
159
|
-
|
160
|
-
data = {"b" => "b"}
|
161
|
-
assert(!JSON::Validator.validate(schema,data,:strict => true))
|
162
|
-
|
163
|
-
data = {"a" => "a", "b" => "b"}
|
164
|
-
assert(JSON::Validator.validate(schema,data,:strict => true))
|
165
|
-
|
166
|
-
data = {"a" => "a", "b" => "b", "c" => "c"}
|
167
|
-
assert(!JSON::Validator.validate(schema,data,:strict => true))
|
168
|
-
|
169
|
-
data = {"a" => "a", "b" => "b", "c" => 3}
|
170
|
-
assert(!JSON::Validator.validate(schema,data,:strict => true))
|
171
|
-
|
172
|
-
data = {"a" => "a", "b" => "b", "23 taco" => 3}
|
173
|
-
assert(JSON::Validator.validate(schema,data,:strict => true))
|
174
|
-
|
175
|
-
data = {"a" => "a", "b" => "b", "23 taco" => "cheese"}
|
176
|
-
assert(!JSON::Validator.validate(schema,data,:strict => true))
|
177
|
-
end
|
178
|
-
|
179
|
-
def test_disallow
|
180
|
-
# Set up the default datatype
|
181
|
-
schema = {
|
182
|
-
"$schema" => "http://json-schema.org/draft-03/schema#",
|
183
|
-
"properties" => {
|
184
|
-
"a" => {"disallow" => "integer"}
|
185
|
-
}
|
186
|
-
}
|
187
|
-
|
188
|
-
data = {
|
189
|
-
"a" => nil
|
190
|
-
}
|
191
|
-
|
192
|
-
|
193
|
-
data["a"] = 'string'
|
194
|
-
assert_valid schema, data
|
195
|
-
|
196
|
-
data["a"] = 5
|
197
|
-
refute_valid schema, data
|
198
|
-
|
199
|
-
|
200
|
-
schema["properties"]["a"]["disallow"] = ["integer","string"]
|
201
|
-
data["a"] = 'string'
|
202
|
-
refute_valid schema, data
|
203
|
-
|
204
|
-
data["a"] = 5
|
205
|
-
refute_valid schema, data
|
206
|
-
|
207
|
-
data["a"] = false
|
208
|
-
assert_valid schema, data
|
209
|
-
|
210
|
-
end
|
211
|
-
|
212
|
-
|
213
|
-
|
214
|
-
def test_extends
|
215
|
-
schema = {
|
216
|
-
"$schema" => "http://json-schema.org/draft-03/schema#",
|
217
|
-
"properties" => {
|
218
|
-
"a" => { "type" => "integer"}
|
219
|
-
}
|
220
|
-
}
|
221
|
-
|
222
|
-
schema2 = {
|
223
|
-
"$schema" => "http://json-schema.org/draft-03/schema#",
|
224
|
-
"properties" => {
|
225
|
-
"a" => { "maximum" => 5 }
|
226
|
-
}
|
227
|
-
}
|
228
|
-
|
229
|
-
data = {
|
230
|
-
"a" => 10
|
231
|
-
}
|
232
|
-
|
233
|
-
assert_valid schema, data
|
234
|
-
assert(!JSON::Validator.validate(schema2,data))
|
235
|
-
|
236
|
-
schema["extends"] = schema2
|
237
|
-
|
238
|
-
refute_valid schema, data
|
239
|
-
end
|
240
|
-
|
241
|
-
def test_list_option
|
242
|
-
schema = {
|
243
|
-
"$schema" => "http://json-schema.org/draft-03/schema#",
|
244
|
-
"type" => "object",
|
245
|
-
"properties" => { "a" => {"type" => "integer", "required" => true} }
|
246
|
-
}
|
247
|
-
|
248
|
-
data = [{"a" => 1},{"a" => 2},{"a" => 3}]
|
249
|
-
assert(JSON::Validator.validate(schema,data,:list => true))
|
250
|
-
refute_valid schema, data
|
251
|
-
|
252
|
-
data = {"a" => 1}
|
253
|
-
assert(!JSON::Validator.validate(schema,data,:list => true))
|
254
|
-
|
255
|
-
data = [{"a" => 1},{"b" => 2},{"a" => 3}]
|
256
|
-
assert(!JSON::Validator.validate(schema,data,:list => true))
|
257
|
-
end
|
258
|
-
|
259
|
-
|
260
|
-
def test_self_reference
|
261
|
-
schema = {
|
262
|
-
"$schema" => "http://json-schema.org/draft-03/schema#",
|
263
|
-
"type" => "object",
|
264
|
-
"properties" => { "a" => {"type" => "integer"}, "b" => {"$ref" => "#"}}
|
265
|
-
}
|
266
|
-
|
267
|
-
assert_valid schema, {"a" => 5, "b" => {"b" => {"a" => 1}}}
|
268
|
-
refute_valid schema, {"a" => 5, "b" => {"b" => {"a" => 'taco'}}}
|
269
|
-
end
|
270
|
-
|
271
|
-
def test_format_datetime
|
272
|
-
schema = {
|
273
|
-
"$schema" => "http://json-schema.org/draft-03/schema#",
|
274
|
-
"type" => "object",
|
275
|
-
"properties" => { "a" => {"type" => "string", "format" => "date-time"}}
|
276
|
-
}
|
277
|
-
|
278
|
-
assert_valid schema, {"a" => "2010-01-01T12:00:00Z"}
|
279
|
-
assert_valid schema, {"a" => "2010-01-01T12:00:00.1Z"}
|
280
|
-
assert_valid schema, {"a" => "2010-01-01T12:00:00,1Z"}
|
281
|
-
refute_valid schema, {"a" => "2010-01-32T12:00:00Z"}
|
282
|
-
refute_valid schema, {"a" => "2010-13-01T12:00:00Z"}
|
283
|
-
refute_valid schema, {"a" => "2010-01-01T24:00:00Z"}
|
284
|
-
refute_valid schema, {"a" => "2010-01-01T12:60:00Z"}
|
285
|
-
refute_valid schema, {"a" => "2010-01-01T12:00:60Z"}
|
286
|
-
refute_valid schema, {"a" => "2010-01-01T12:00:00z"}
|
287
|
-
refute_valid schema, {"a" => "2010-01-0112:00:00Z"}
|
288
|
-
refute_valid schema, {"a" => "2010-01-01T12:00:00.1Z\nabc"}
|
289
|
-
|
290
|
-
# test with a specific timezone
|
291
|
-
assert_valid schema, {"a" => "2010-01-01T12:00:00+01"}
|
292
|
-
assert_valid schema, {"a" => "2010-01-01T12:00:00+01:00"}
|
293
|
-
assert_valid schema, {"a" => "2010-01-01T12:00:00+01:30"}
|
294
|
-
assert_valid schema, {"a" => "2010-01-01T12:00:00+0234"}
|
295
|
-
refute_valid schema, {"a" => "2010-01-01T12:00:00+01:"}
|
296
|
-
refute_valid schema, {"a" => "2010-01-01T12:00:00+0"}
|
297
|
-
# do not allow mixing Z and specific timezone
|
298
|
-
refute_valid schema, {"a" => "2010-01-01T12:00:00Z+01"}
|
299
|
-
refute_valid schema, {"a" => "2010-01-01T12:00:00+01Z"}
|
300
|
-
refute_valid schema, {"a" => "2010-01-01T12:00:00+01:30Z"}
|
301
|
-
refute_valid schema, {"a" => "2010-01-01T12:00:00+0Z"}
|
302
|
-
|
303
|
-
# test without any timezone
|
304
|
-
assert_valid schema, {"a" => "2010-01-01T12:00:00"}
|
305
|
-
assert_valid schema, {"a" => "2010-01-01T12:00:00.12345"}
|
306
|
-
assert_valid schema, {"a" => "2010-01-01T12:00:00,12345"}
|
307
|
-
assert_valid schema, {"a" => "2010-01-01T12:00:00.12345"}
|
308
|
-
end
|
309
|
-
|
310
|
-
def test_format_uri
|
311
|
-
data1 = {"a" => "http://gitbuh.com"}
|
312
|
-
data2 = {"a" => "::boo"}
|
313
|
-
data3 = {"a" => "http://ja.wikipedia.org/wiki/メインページ"}
|
314
|
-
|
315
|
-
schema = {
|
316
|
-
"$schema" => "http://json-schema.org/draft-03/schema#",
|
317
|
-
"type" => "object",
|
318
|
-
"properties" => { "a" => {"type" => "string", "format" => "uri"}}
|
319
|
-
}
|
320
|
-
|
321
|
-
assert(JSON::Validator.validate(schema,data1))
|
322
|
-
assert(!JSON::Validator.validate(schema,data2))
|
323
|
-
assert(JSON::Validator.validate(schema,data3))
|
324
|
-
end
|
325
|
-
|
326
|
-
|
327
|
-
|
328
|
-
def test_schema
|
329
|
-
schema = {
|
330
|
-
"$schema" => "http://json-schema.org/THIS-IS-NOT-A-SCHEMA",
|
331
|
-
"type" => "object"
|
332
|
-
}
|
333
|
-
|
334
|
-
data = {"a" => "taco"}
|
335
|
-
assert(!JSON::Validator.validate(schema, data))
|
336
|
-
|
337
|
-
schema = {
|
338
|
-
"$schema" => "http://json-schema.org/draft-03/schema#",
|
339
|
-
"type" => "object"
|
340
|
-
}
|
341
|
-
assert_valid schema, data
|
342
|
-
end
|
343
|
-
|
344
|
-
def test_dependency
|
345
|
-
schema = {
|
346
|
-
"$schema" => "http://json-schema.org/draft-03/schema#",
|
347
|
-
"type" => "object",
|
348
|
-
"properties" => {
|
349
|
-
"a" => {"type" => "integer"},
|
350
|
-
"b" => {"type" => "integer"}
|
351
|
-
},
|
352
|
-
"dependencies" => {
|
353
|
-
"a" => "b"
|
354
|
-
}
|
355
|
-
}
|
356
|
-
|
357
|
-
data = {"a" => 1, "b" => 2}
|
358
|
-
assert_valid schema, data
|
359
|
-
data = {"a" => 1}
|
360
|
-
refute_valid schema, data
|
361
|
-
|
362
|
-
schema = {
|
363
|
-
"$schema" => "http://json-schema.org/draft-03/schema#",
|
364
|
-
"type" => "object",
|
365
|
-
"properties" => {
|
366
|
-
"a" => {"type" => "integer"},
|
367
|
-
"b" => {"type" => "integer"},
|
368
|
-
"c" => {"type" => "integer"}
|
369
|
-
},
|
370
|
-
"dependencies" => {
|
371
|
-
"a" => ["b","c"]
|
372
|
-
}
|
373
|
-
}
|
374
|
-
|
375
|
-
data = {"a" => 1, "c" => 2}
|
376
|
-
refute_valid schema, data
|
377
|
-
data = {"a" => 1, "b" => 2, "c" => 3}
|
378
|
-
assert_valid schema, data
|
379
|
-
end
|
380
|
-
|
381
|
-
def test_default
|
382
|
-
schema = {
|
383
|
-
"$schema" => "http://json-schema.org/draft-03/schema#",
|
384
|
-
"type" => "object",
|
385
|
-
"properties" => {
|
386
|
-
"a" => {"type" => "integer", "default" => 42},
|
387
|
-
"b" => {"type" => "integer"}
|
388
|
-
}
|
389
|
-
}
|
390
|
-
|
391
|
-
data = {:b => 2}
|
392
|
-
assert_valid schema, data
|
393
|
-
assert_nil(data["a"])
|
394
|
-
assert(JSON::Validator.validate(schema,data, :insert_defaults => true))
|
395
|
-
assert_equal(42, data["a"])
|
396
|
-
assert_equal(2, data[:b])
|
397
|
-
|
398
|
-
schema = {
|
399
|
-
"$schema" => "http://json-schema.org/draft-03/schema#",
|
400
|
-
"type" => "object",
|
401
|
-
"properties" => {
|
402
|
-
"a" => {"type" => "integer", "default" => 42, "required" => true},
|
403
|
-
"b" => {"type" => "integer"}
|
404
|
-
}
|
405
|
-
}
|
406
|
-
|
407
|
-
data = {:b => 2}
|
408
|
-
refute_valid schema, data
|
409
|
-
assert_nil(data["a"])
|
410
|
-
assert(JSON::Validator.validate(schema,data, :insert_defaults => true))
|
411
|
-
assert_equal(42, data["a"])
|
412
|
-
assert_equal(2, data[:b])
|
413
|
-
|
414
|
-
schema = {
|
415
|
-
"$schema" => "http://json-schema.org/draft-03/schema#",
|
416
|
-
"type" => "object",
|
417
|
-
"properties" => {
|
418
|
-
"a" => {"type" => "integer", "default" => 42, "required" => true, "readonly" => true},
|
419
|
-
"b" => {"type" => "integer"}
|
420
|
-
}
|
421
|
-
}
|
422
|
-
|
423
|
-
data = {:b => 2}
|
424
|
-
refute_valid schema, data
|
425
|
-
assert_nil(data["a"])
|
426
|
-
assert(!JSON::Validator.validate(schema,data, :insert_defaults => true))
|
427
|
-
assert_nil(data["a"])
|
428
|
-
assert_equal(2, data[:b])
|
429
|
-
|
430
|
-
schema = {
|
431
|
-
"$schema" => "http://json-schema.org/draft-03/schema#",
|
432
|
-
"type" => "object",
|
433
|
-
"properties" => {
|
434
|
-
"a" => {"type" => "integer", "default" => "42"},
|
435
|
-
"b" => {"type" => "integer"}
|
436
|
-
}
|
437
|
-
}
|
438
|
-
|
439
|
-
data = {:b => 2}
|
440
|
-
assert_valid schema, data
|
441
|
-
assert_nil(data["a"])
|
442
|
-
assert(!JSON::Validator.validate(schema,data, :insert_defaults => true))
|
443
|
-
assert_equal("42",data["a"])
|
444
|
-
assert_equal(2, data[:b])
|
445
|
-
|
446
|
-
end
|
447
|
-
|
448
|
-
|
449
|
-
end
|
450
|
-
|