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.
- checksums.yaml +6 -14
- data/README.textile +58 -7
- data/lib/json-schema.rb +3 -1
- data/lib/json-schema/attributes/additionalitems.rb +14 -11
- data/lib/json-schema/attributes/additionalproperties.rb +33 -43
- data/lib/json-schema/attributes/anyof.rb +4 -0
- data/lib/json-schema/attributes/dependencies.rb +31 -19
- data/lib/json-schema/attributes/disallow.rb +2 -3
- data/lib/json-schema/attributes/divisibleby.rb +11 -7
- data/lib/json-schema/attributes/enum.rb +14 -16
- data/lib/json-schema/attributes/format.rb +4 -7
- data/lib/json-schema/attributes/formats/date_time_v4.rb +5 -8
- data/lib/json-schema/attributes/formats/ip.rb +41 -0
- data/lib/json-schema/attributes/formats/uri.rb +10 -8
- data/lib/json-schema/attributes/items.rb +15 -16
- data/lib/json-schema/attributes/limit.rb +179 -0
- data/lib/json-schema/attributes/maxdecimal.rb +7 -6
- data/lib/json-schema/attributes/multipleof.rb +4 -11
- data/lib/json-schema/attributes/not.rb +1 -1
- data/lib/json-schema/attributes/oneof.rb +15 -6
- data/lib/json-schema/attributes/pattern.rb +7 -6
- data/lib/json-schema/attributes/patternproperties.rb +9 -12
- data/lib/json-schema/attributes/properties.rb +55 -39
- data/lib/json-schema/attributes/properties_optional.rb +13 -12
- data/lib/json-schema/attributes/ref.rb +4 -4
- data/lib/json-schema/attributes/required.rb +16 -13
- data/lib/json-schema/attributes/type.rb +13 -18
- data/lib/json-schema/attributes/type_v4.rb +11 -18
- data/lib/json-schema/attributes/uniqueitems.rb +5 -7
- data/lib/json-schema/schema.rb +8 -8
- data/lib/json-schema/schema/#validator.rb# +37 -0
- data/lib/json-schema/schema/reader.rb +113 -0
- data/lib/json-schema/util/uri.rb +16 -0
- data/lib/json-schema/validator.rb +123 -128
- data/lib/json-schema/validators/draft1.rb +1 -1
- data/lib/json-schema/validators/draft2.rb +1 -1
- data/lib/json-schema/validators/draft3.rb +1 -1
- data/lib/json-schema/validators/draft4.rb +1 -1
- data/lib/json-schema/validators/hyper-draft4.rb +1 -1
- data/test/schemas/address_microformat.json +18 -0
- data/test/schemas/definition_schema.json +15 -0
- data/test/schemas/ref john with spaces schema.json +11 -0
- data/test/schemas/relative_definition_schema.json +8 -0
- data/test/test_all_of_ref_schema.rb +12 -15
- data/test/test_any_of_ref_schema.rb +7 -9
- data/test/test_bad_schema_ref.rb +18 -12
- data/test/test_common_test_suite.rb +45 -29
- data/test/test_custom_format.rb +2 -3
- data/test/test_definition.rb +15 -0
- data/test/test_extended_schema.rb +25 -31
- data/test/test_extends_and_additionalProperties.rb +23 -21
- data/test/test_files_v3.rb +14 -23
- data/test/test_fragment_resolution.rb +6 -7
- data/test/test_fragment_validation_with_ref.rb +2 -8
- data/test/test_full_validation.rb +2 -3
- data/test/test_helper.rb +46 -1
- data/test/test_initialize_data.rb +118 -0
- data/test/test_jsonschema_draft1.rb +48 -600
- data/test/test_jsonschema_draft2.rb +48 -699
- data/test/test_jsonschema_draft3.rb +91 -861
- data/test/test_jsonschema_draft4.rb +173 -812
- data/test/test_list_option.rb +6 -7
- data/test/{test_merge_misisng_values.rb → test_merge_missing_values.rb} +2 -3
- data/test/test_minitems.rb +2 -4
- data/test/test_one_of.rb +9 -19
- data/test/test_ruby_schema.rb +5 -14
- data/test/test_schema_loader.rb +74 -0
- data/test/test_schema_type_attribute.rb +2 -3
- data/test/test_schema_validation.rb +4 -5
- data/test/test_stringify.rb +2 -3
- data/test/test_uri_related.rb +67 -0
- data/test/test_validator.rb +53 -0
- metadata +129 -51
- data/lib/json-schema/attributes/dependencies_v4.rb +0 -27
- data/lib/json-schema/attributes/formats/ip4.rb +0 -20
- data/lib/json-schema/attributes/formats/ip6.rb +0 -20
- data/lib/json-schema/attributes/maximum.rb +0 -17
- data/lib/json-schema/attributes/maximum_inclusive.rb +0 -17
- data/lib/json-schema/attributes/maxitems.rb +0 -14
- data/lib/json-schema/attributes/maxlength.rb +0 -16
- data/lib/json-schema/attributes/maxproperties.rb +0 -14
- data/lib/json-schema/attributes/minimum.rb +0 -17
- data/lib/json-schema/attributes/minimum_inclusive.rb +0 -17
- data/lib/json-schema/attributes/minitems.rb +0 -14
- data/lib/json-schema/attributes/minlength.rb +0 -16
- data/lib/json-schema/attributes/minproperties.rb +0 -14
- data/lib/json-schema/attributes/properties_v4.rb +0 -58
- data/lib/json-schema/uri/file.rb +0 -36
data/test/test_files_v3.rb
CHANGED
@@ -1,52 +1,43 @@
|
|
1
|
-
require '
|
2
|
-
require File.dirname(__FILE__) + '/../lib/json-schema'
|
1
|
+
require File.expand_path('../test_helper', __FILE__)
|
3
2
|
|
4
|
-
class JSONSchemaTest < Test
|
3
|
+
class JSONSchemaTest < Minitest::Test
|
5
4
|
|
6
5
|
#
|
7
6
|
# These tests are ONLY run if there is an appropriate JSON backend parser available
|
8
7
|
#
|
9
8
|
|
10
9
|
def test_schema_from_file
|
11
|
-
|
12
|
-
|
13
|
-
data = {"a" => "bad"}
|
14
|
-
assert(!JSON::Validator.validate(File.join(File.dirname(__FILE__),"schemas/good_schema_1.json"),data))
|
10
|
+
assert_valid schema_fixture_path('good_schema_1.json'), { "a" => 5 }
|
11
|
+
refute_valid schema_fixture_path('good_schema_1.json'), { "a" => "bad" }
|
15
12
|
end
|
16
13
|
|
17
14
|
def test_data_from_file
|
18
15
|
schema = {"$schema" => "http://json-schema.org/draft-03/schema#","type" => "object", "properties" => {"a" => {"type" => "integer"}}}
|
19
|
-
|
20
|
-
|
16
|
+
assert_valid schema, data_fixture_path('good_data_1.json'), :uri => true
|
17
|
+
refute_valid schema, data_fixture_path('bad_data_1.json'), :uri => true
|
21
18
|
end
|
22
19
|
|
23
20
|
def test_data_from_json
|
24
21
|
if JSON::Validator.json_backend != nil
|
25
22
|
schema = {"$schema" => "http://json-schema.org/draft-03/schema#","type" => "object", "properties" => {"a" => {"type" => "integer"}}}
|
26
|
-
|
27
|
-
|
23
|
+
assert_valid schema, %Q({"a": 5}), :json => true
|
24
|
+
refute_valid schema, %Q({"a": "poop"}), :json => true
|
28
25
|
end
|
29
26
|
end
|
30
27
|
|
31
28
|
def test_both_from_file
|
32
|
-
|
33
|
-
|
29
|
+
assert_valid schema_fixture_path('good_schema_1.json'), data_fixture_path('good_data_1.json'), :uri => true
|
30
|
+
refute_valid schema_fixture_path('good_schema_1.json'), data_fixture_path('bad_data_1.json'), :uri => true
|
34
31
|
end
|
35
32
|
|
36
33
|
def test_file_ref
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
data = {"b" => {"a" => "boo"}}
|
41
|
-
assert(!JSON::Validator.validate(File.join(File.dirname(__FILE__),"schemas/good_schema_1.json"),data))
|
34
|
+
assert_valid schema_fixture_path('good_schema_2.json'), { "b" => { "a" => 5 } }
|
35
|
+
refute_valid schema_fixture_path('good_schema_1.json'), { "b" => { "a" => "boo" } }
|
42
36
|
end
|
43
37
|
|
44
38
|
def test_file_extends
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
data = {"a" => 5, "b" => {"a" => 5}}
|
49
|
-
assert(JSON::Validator.validate(File.join(File.dirname(__FILE__),"schemas/good_schema_extends2.json"),data))
|
39
|
+
assert_valid schema_fixture_path('good_schema_extends1.json'), { "a" => 5 }
|
40
|
+
assert_valid schema_fixture_path('good_schema_extends2.json'), { "a" => 5, "b" => { "a" => 5 } }
|
50
41
|
end
|
51
42
|
|
52
43
|
end
|
@@ -1,7 +1,6 @@
|
|
1
|
-
require '
|
2
|
-
require File.dirname(__FILE__) + '/../lib/json-schema'
|
1
|
+
require File.expand_path('../test_helper', __FILE__)
|
3
2
|
|
4
|
-
class FragmentResolution < Test
|
3
|
+
class FragmentResolution < Minitest::Test
|
5
4
|
def test_fragment_resolution
|
6
5
|
schema = {
|
7
6
|
"$schema" => "http://json-schema.org/draft-04/schema#",
|
@@ -17,14 +16,14 @@ class FragmentResolution < Test::Unit::TestCase
|
|
17
16
|
}
|
18
17
|
|
19
18
|
data = {"b" => 5}
|
20
|
-
|
21
|
-
|
19
|
+
refute_valid schema, data
|
20
|
+
assert_valid schema, data, :fragment => "#/properties/a"
|
22
21
|
|
23
|
-
|
22
|
+
assert_raises JSON::Schema::SchemaError do
|
24
23
|
JSON::Validator.validate!(schema,data,:fragment => "/properties/a")
|
25
24
|
end
|
26
25
|
|
27
|
-
|
26
|
+
assert_raises JSON::Schema::SchemaError do
|
28
27
|
JSON::Validator.validate!(schema,data,:fragment => "#/properties/b")
|
29
28
|
end
|
30
29
|
end
|
@@ -1,7 +1,6 @@
|
|
1
1
|
require File.expand_path('../test_helper', __FILE__)
|
2
|
-
require 'json-schema'
|
3
2
|
|
4
|
-
class FragmentValidationWithRef < Test
|
3
|
+
class FragmentValidationWithRef < Minitest::Test
|
5
4
|
def whole_schema
|
6
5
|
{
|
7
6
|
"$schema" => "http://json-schema.org/draft-04/schema#",
|
@@ -30,11 +29,6 @@ class FragmentValidationWithRef < Test::Unit::TestCase
|
|
30
29
|
|
31
30
|
def test_validation_of_fragment
|
32
31
|
data = [{"content" => "ohai", "author" => "Bob"}]
|
33
|
-
|
34
|
-
assert_nothing_raised do
|
35
|
-
v = JSON::Validator.fully_validate(whole_schema,data,:fragment => "#/definitions/posts")
|
36
|
-
end
|
37
|
-
|
38
|
-
assert(v.empty?, v.join("\n"))
|
32
|
+
assert_valid whole_schema, data, :fragment => "#/definitions/posts"
|
39
33
|
end
|
40
34
|
end
|
@@ -1,7 +1,6 @@
|
|
1
|
-
require '
|
2
|
-
require File.dirname(__FILE__) + '/../lib/json-schema'
|
1
|
+
require File.expand_path('../test_helper', __FILE__)
|
3
2
|
|
4
|
-
class JSONFullValidation < Test
|
3
|
+
class JSONFullValidation < Minitest::Test
|
5
4
|
|
6
5
|
def test_full_validation
|
7
6
|
data = {"b" => {"a" => 5}}
|
data/test/test_helper.rb
CHANGED
@@ -1,2 +1,47 @@
|
|
1
|
-
require '
|
1
|
+
require 'minitest/autorun'
|
2
|
+
require 'webmock/minitest'
|
3
|
+
|
2
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
|
@@ -0,0 +1,118 @@
|
|
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,169 +1,31 @@
|
|
1
|
-
require '
|
2
|
-
require File.dirname(__FILE__) + '/../lib/json-schema'
|
1
|
+
require File.expand_path('../test_helper', __FILE__)
|
3
2
|
|
4
|
-
class JSONSchemaDraft1Test < Test
|
5
|
-
def
|
6
|
-
|
7
|
-
|
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 => :draft1))
|
20
|
-
|
21
|
-
data["a"] = 5.2
|
22
|
-
assert(!JSON::Validator.validate(schema,data,:version => :draft1))
|
23
|
-
|
24
|
-
data['a'] = 'string'
|
25
|
-
assert(!JSON::Validator.validate(schema,data,:version => :draft1))
|
26
|
-
|
27
|
-
data['a'] = true
|
28
|
-
assert(!JSON::Validator.validate(schema,data,:version => :draft1))
|
29
|
-
|
30
|
-
|
31
|
-
# Test numbers
|
32
|
-
schema["properties"]["a"]["type"] = "number"
|
33
|
-
data["a"] = 5
|
34
|
-
assert(JSON::Validator.validate(schema,data,:version => :draft1))
|
35
|
-
|
36
|
-
data["a"] = 5.2
|
37
|
-
assert(JSON::Validator.validate(schema,data,:version => :draft1))
|
38
|
-
|
39
|
-
data['a'] = 'string'
|
40
|
-
assert(!JSON::Validator.validate(schema,data,:version => :draft1))
|
41
|
-
|
42
|
-
data['a'] = true
|
43
|
-
assert(!JSON::Validator.validate(schema,data,:version => :draft1))
|
44
|
-
|
45
|
-
|
46
|
-
# Test strings
|
47
|
-
schema["properties"]["a"]["type"] = "string"
|
48
|
-
data["a"] = 5
|
49
|
-
assert(!JSON::Validator.validate(schema,data,:version => :draft1))
|
50
|
-
|
51
|
-
data["a"] = 5.2
|
52
|
-
assert(!JSON::Validator.validate(schema,data,:version => :draft1))
|
53
|
-
|
54
|
-
data['a'] = 'string'
|
55
|
-
assert(JSON::Validator.validate(schema,data,:version => :draft1))
|
56
|
-
|
57
|
-
data['a'] = true
|
58
|
-
assert(!JSON::Validator.validate(schema,data,:version => :draft1))
|
59
|
-
|
60
|
-
|
61
|
-
# Test booleans
|
62
|
-
schema["properties"]["a"]["type"] = "boolean"
|
63
|
-
data["a"] = 5
|
64
|
-
assert(!JSON::Validator.validate(schema,data,:version => :draft1))
|
65
|
-
|
66
|
-
data["a"] = 5.2
|
67
|
-
assert(!JSON::Validator.validate(schema,data,:version => :draft1))
|
68
|
-
|
69
|
-
data['a'] = 'string'
|
70
|
-
assert(!JSON::Validator.validate(schema,data,:version => :draft1))
|
71
|
-
|
72
|
-
data['a'] = true
|
73
|
-
assert(JSON::Validator.validate(schema,data,:version => :draft1))
|
74
|
-
|
75
|
-
data['a'] = false
|
76
|
-
assert(JSON::Validator.validate(schema,data,:version => :draft1))
|
77
|
-
|
78
|
-
|
79
|
-
# Test object
|
80
|
-
schema["properties"]["a"]["type"] = "object"
|
81
|
-
data["a"] = {}
|
82
|
-
assert(JSON::Validator.validate(schema,data,:version => :draft1))
|
83
|
-
|
84
|
-
data["a"] = 5.2
|
85
|
-
assert(!JSON::Validator.validate(schema,data,:version => :draft1))
|
86
|
-
|
87
|
-
data['a'] = 'string'
|
88
|
-
assert(!JSON::Validator.validate(schema,data,:version => :draft1))
|
89
|
-
|
90
|
-
data['a'] = true
|
91
|
-
assert(!JSON::Validator.validate(schema,data,:version => :draft1))
|
92
|
-
|
93
|
-
|
94
|
-
# Test array
|
95
|
-
schema["properties"]["a"]["type"] = "array"
|
96
|
-
data["a"] = []
|
97
|
-
assert(JSON::Validator.validate(schema,data,:version => :draft1))
|
98
|
-
|
99
|
-
data["a"] = 5.2
|
100
|
-
assert(!JSON::Validator.validate(schema,data,:version => :draft1))
|
101
|
-
|
102
|
-
data['a'] = 'string'
|
103
|
-
assert(!JSON::Validator.validate(schema,data,:version => :draft1))
|
104
|
-
|
105
|
-
data['a'] = true
|
106
|
-
assert(!JSON::Validator.validate(schema,data,:version => :draft1))
|
107
|
-
|
108
|
-
|
109
|
-
# Test null
|
110
|
-
schema["properties"]["a"]["type"] = "null"
|
111
|
-
data["a"] = nil
|
112
|
-
assert(JSON::Validator.validate(schema,data,:version => :draft1))
|
113
|
-
|
114
|
-
data["a"] = 5.2
|
115
|
-
assert(!JSON::Validator.validate(schema,data,:version => :draft1))
|
116
|
-
|
117
|
-
data['a'] = 'string'
|
118
|
-
assert(!JSON::Validator.validate(schema,data,:version => :draft1))
|
119
|
-
|
120
|
-
data['a'] = true
|
121
|
-
assert(!JSON::Validator.validate(schema,data,:version => :draft1))
|
122
|
-
|
123
|
-
|
124
|
-
# Test any
|
125
|
-
schema["properties"]["a"]["type"] = "any"
|
126
|
-
data["a"] = 5
|
127
|
-
assert(JSON::Validator.validate(schema,data,:version => :draft1))
|
128
|
-
|
129
|
-
data["a"] = 5.2
|
130
|
-
assert(JSON::Validator.validate(schema,data,:version => :draft1))
|
131
|
-
|
132
|
-
data['a'] = 'string'
|
133
|
-
assert(JSON::Validator.validate(schema,data,:version => :draft1))
|
134
|
-
|
135
|
-
data['a'] = true
|
136
|
-
assert(JSON::Validator.validate(schema,data,:version => :draft1))
|
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 => :draft1))
|
143
|
-
|
144
|
-
data["a"] = 'boo'
|
145
|
-
assert(JSON::Validator.validate(schema,data,:version => :draft1))
|
146
|
-
|
147
|
-
data["a"] = false
|
148
|
-
assert(!JSON::Validator.validate(schema,data,:version => :draft1))
|
3
|
+
class JSONSchemaDraft1Test < Minitest::Test
|
4
|
+
def schema_version
|
5
|
+
:draft1
|
6
|
+
end
|
149
7
|
|
150
|
-
|
151
|
-
|
8
|
+
def exclusive_minimum
|
9
|
+
{ 'minimumCanEqual' => false }
|
10
|
+
end
|
152
11
|
|
153
|
-
|
154
|
-
|
12
|
+
def exclusive_maximum
|
13
|
+
{ 'maximumCanEqual' => false }
|
14
|
+
end
|
155
15
|
|
156
|
-
|
157
|
-
assert(!JSON::Validator.validate(schema,data,:version => :draft1))
|
16
|
+
include ArrayValidation::ItemsTests
|
158
17
|
|
159
|
-
|
160
|
-
assert(JSON::Validator.validate(schema,data,:version => :draft1))
|
18
|
+
include NumberValidation::MinMaxTests
|
161
19
|
|
162
|
-
|
163
|
-
assert(!JSON::Validator.validate(schema,data,:version => :draft1))
|
164
|
-
end
|
20
|
+
include ObjectValidation::AdditionalPropertiesTests
|
165
21
|
|
22
|
+
include StringValidation::ValueTests
|
23
|
+
include StringValidation::FormatTests
|
24
|
+
include StringValidation::DateAndTimeFormatTests
|
166
25
|
|
26
|
+
include TypeValidation::SimpleTypeTests
|
27
|
+
include TypeValidation::AnyTypeTests
|
28
|
+
include TypeValidation::SchemaUnionTypeTests
|
167
29
|
|
168
30
|
def test_optional
|
169
31
|
# Set up the default datatype
|
@@ -174,9 +36,9 @@ class JSONSchemaDraft1Test < Test::Unit::TestCase
|
|
174
36
|
}
|
175
37
|
data = {}
|
176
38
|
|
177
|
-
|
39
|
+
refute_valid schema, data
|
178
40
|
data['a'] = "Hello"
|
179
|
-
|
41
|
+
assert_valid schema, data
|
180
42
|
|
181
43
|
schema = {
|
182
44
|
"properties" => {
|
@@ -185,237 +47,9 @@ class JSONSchemaDraft1Test < Test::Unit::TestCase
|
|
185
47
|
}
|
186
48
|
|
187
49
|
data = {}
|
188
|
-
|
189
|
-
|
190
|
-
end
|
191
|
-
|
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 => :draft1))
|
210
|
-
|
211
|
-
data["a"] = 4
|
212
|
-
assert(!JSON::Validator.validate(schema,data,:version => :draft1))
|
213
|
-
|
214
|
-
# Test a float
|
215
|
-
data["a"] = 5.0
|
216
|
-
assert(JSON::Validator.validate(schema,data,:version => :draft1))
|
217
|
-
|
218
|
-
data["a"] = 4.9
|
219
|
-
assert(!JSON::Validator.validate(schema,data,:version => :draft1))
|
220
|
-
|
221
|
-
# Test a non-number
|
222
|
-
data["a"] = "a string"
|
223
|
-
assert(JSON::Validator.validate(schema,data,:version => :draft1))
|
224
|
-
|
225
|
-
# Test exclusiveMinimum
|
226
|
-
schema["properties"]["a"]["minimumCanEqual"] = false
|
227
|
-
|
228
|
-
data["a"] = 6
|
229
|
-
assert(JSON::Validator.validate(schema,data,:version => :draft1))
|
230
|
-
|
231
|
-
data["a"] = 5
|
232
|
-
assert(!JSON::Validator.validate(schema,data,:version => :draft1))
|
233
|
-
|
234
|
-
# Test with float
|
235
|
-
data["a"] = 5.00000001
|
236
|
-
assert(JSON::Validator.validate(schema,data,:version => :draft1))
|
237
|
-
|
238
|
-
data["a"] = 5.0
|
239
|
-
assert(!JSON::Validator.validate(schema,data,:version => :draft1))
|
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 => :draft1))
|
260
|
-
|
261
|
-
data["a"] = 6
|
262
|
-
assert(!JSON::Validator.validate(schema,data,:version => :draft1))
|
263
|
-
|
264
|
-
# Test a float
|
265
|
-
data["a"] = 5.0
|
266
|
-
assert(JSON::Validator.validate(schema,data,:version => :draft1))
|
267
|
-
|
268
|
-
data["a"] = 5.1
|
269
|
-
assert(!JSON::Validator.validate(schema,data,:version => :draft1))
|
270
|
-
|
271
|
-
# Test a non-number
|
272
|
-
data["a"] = "a string"
|
273
|
-
assert(JSON::Validator.validate(schema,data,:version => :draft1))
|
274
|
-
|
275
|
-
# Test exclusiveMinimum
|
276
|
-
schema["properties"]["a"]["maximumCanEqual"] = false
|
277
|
-
|
278
|
-
data["a"] = 4
|
279
|
-
assert(JSON::Validator.validate(schema,data,:version => :draft1))
|
280
|
-
|
281
|
-
data["a"] = 5
|
282
|
-
assert(!JSON::Validator.validate(schema,data,:version => :draft1))
|
283
|
-
|
284
|
-
# Test with float
|
285
|
-
data["a"] = 4.9999999
|
286
|
-
assert(JSON::Validator.validate(schema,data,:version => :draft1))
|
287
|
-
|
288
|
-
data["a"] = 5.0
|
289
|
-
assert(!JSON::Validator.validate(schema,data,:version => :draft1))
|
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 => :draft1))
|
308
|
-
|
309
|
-
data["a"] = []
|
310
|
-
assert(!JSON::Validator.validate(schema,data,:version => :draft1))
|
311
|
-
|
312
|
-
# Test with a non-array
|
313
|
-
data["a"] = "boo"
|
314
|
-
assert(JSON::Validator.validate(schema,data,:version => :draft1))
|
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 => :draft1))
|
334
|
-
|
335
|
-
data["a"] = ["boo","taco"]
|
336
|
-
assert(!JSON::Validator.validate(schema,data,:version => :draft1))
|
337
|
-
|
338
|
-
# Test with a non-array
|
339
|
-
data["a"] = "boo"
|
340
|
-
assert(JSON::Validator.validate(schema,data,:version => :draft1))
|
341
|
-
end
|
342
|
-
|
343
|
-
|
344
|
-
def test_pattern
|
345
|
-
# Set up the default datatype
|
346
|
-
schema = {
|
347
|
-
"properties" => {
|
348
|
-
"a" => {"pattern" => "\\d+ taco"}
|
349
|
-
}
|
350
|
-
}
|
351
|
-
|
352
|
-
data = {
|
353
|
-
"a" => nil
|
354
|
-
}
|
355
|
-
|
356
|
-
# Test strings
|
357
|
-
data["a"] = "156 taco bell"
|
358
|
-
assert(JSON::Validator.validate(schema,data,:version => :draft1))
|
359
|
-
|
360
|
-
# Test a non-string
|
361
|
-
data["a"] = 5
|
362
|
-
assert(JSON::Validator.validate(schema,data,:version => :draft1))
|
363
|
-
|
364
|
-
data["a"] = "taco"
|
365
|
-
assert(!JSON::Validator.validate(schema,data,:version => :draft1))
|
366
|
-
end
|
367
|
-
|
368
|
-
|
369
|
-
def test_min_length
|
370
|
-
# Set up the default datatype
|
371
|
-
schema = {
|
372
|
-
"properties" => {
|
373
|
-
"a" => {"minLength" => 1}
|
374
|
-
}
|
375
|
-
}
|
376
|
-
|
377
|
-
data = {
|
378
|
-
"a" => nil
|
379
|
-
}
|
380
|
-
|
381
|
-
# Try out strings
|
382
|
-
data["a"] = "t"
|
383
|
-
assert(JSON::Validator.validate(schema,data,:version => :draft1))
|
384
|
-
|
385
|
-
data["a"] = ""
|
386
|
-
assert(!JSON::Validator.validate(schema,data,:version => :draft1))
|
387
|
-
|
388
|
-
# Try out non-string
|
389
|
-
data["a"] = 5
|
390
|
-
assert(JSON::Validator.validate(schema,data,:version => :draft1))
|
391
|
-
end
|
392
|
-
|
393
|
-
|
394
|
-
def test_max_length
|
395
|
-
# Set up the default datatype
|
396
|
-
schema = {
|
397
|
-
"properties" => {
|
398
|
-
"a" => {"maxLength" => 1}
|
399
|
-
}
|
400
|
-
}
|
401
|
-
|
402
|
-
data = {
|
403
|
-
"a" => nil
|
404
|
-
}
|
405
|
-
|
406
|
-
# Try out strings
|
407
|
-
data["a"] = "t"
|
408
|
-
assert(JSON::Validator.validate(schema,data,:version => :draft1))
|
409
|
-
|
410
|
-
data["a"] = "tt"
|
411
|
-
assert(!JSON::Validator.validate(schema,data,:version => :draft1))
|
412
|
-
|
413
|
-
# Try out non-string
|
414
|
-
data["a"] = 5
|
415
|
-
assert(JSON::Validator.validate(schema,data,:version => :draft1))
|
50
|
+
assert_valid schema, data
|
416
51
|
end
|
417
52
|
|
418
|
-
|
419
53
|
def test_enum
|
420
54
|
# Set up the default datatype
|
421
55
|
schema = {
|
@@ -430,24 +64,24 @@ class JSONSchemaDraft1Test < Test::Unit::TestCase
|
|
430
64
|
|
431
65
|
# Make sure all of the above are valid...
|
432
66
|
data["a"] = 1
|
433
|
-
|
67
|
+
assert_valid schema, data
|
434
68
|
|
435
69
|
data["a"] = 'boo'
|
436
|
-
|
70
|
+
assert_valid schema, data
|
437
71
|
|
438
72
|
data["a"] = [1,2,3]
|
439
|
-
|
73
|
+
assert_valid schema, data
|
440
74
|
|
441
75
|
data["a"] = {"a" => "b"}
|
442
|
-
|
76
|
+
assert_valid schema, data
|
443
77
|
|
444
78
|
# Test something that doesn't exist
|
445
79
|
data["a"] = 'taco'
|
446
|
-
|
80
|
+
refute_valid schema, data
|
447
81
|
|
448
82
|
# Try it without the key
|
449
83
|
data = {}
|
450
|
-
|
84
|
+
assert_valid schema, data
|
451
85
|
end
|
452
86
|
|
453
87
|
|
@@ -464,22 +98,22 @@ class JSONSchemaDraft1Test < Test::Unit::TestCase
|
|
464
98
|
}
|
465
99
|
|
466
100
|
data["a"] = 3.35
|
467
|
-
|
101
|
+
assert_valid schema, data
|
468
102
|
|
469
103
|
data["a"] = 3.455
|
470
|
-
|
104
|
+
refute_valid schema, data
|
471
105
|
|
472
106
|
|
473
107
|
schema["properties"]["a"]["maxDecimal"] = 0
|
474
108
|
|
475
109
|
data["a"] = 4.0
|
476
|
-
|
110
|
+
refute_valid schema, data
|
477
111
|
|
478
112
|
data["a"] = 'boo'
|
479
|
-
|
113
|
+
assert_valid schema, data
|
480
114
|
|
481
115
|
data["a"] = 5
|
482
|
-
|
116
|
+
assert_valid schema, data
|
483
117
|
end
|
484
118
|
|
485
119
|
|
@@ -498,225 +132,39 @@ class JSONSchemaDraft1Test < Test::Unit::TestCase
|
|
498
132
|
|
499
133
|
|
500
134
|
data["a"] = 'string'
|
501
|
-
|
135
|
+
assert_valid schema, data
|
502
136
|
|
503
137
|
data["a"] = 5
|
504
|
-
|
138
|
+
refute_valid schema, data
|
505
139
|
|
506
140
|
|
507
141
|
schema["properties"]["a"]["disallow"] = ["integer","string"]
|
508
142
|
data["a"] = 'string'
|
509
|
-
|
143
|
+
refute_valid schema, data
|
510
144
|
|
511
145
|
data["a"] = 5
|
512
|
-
|
146
|
+
refute_valid schema, data
|
513
147
|
|
514
148
|
data["a"] = false
|
515
|
-
|
149
|
+
assert_valid schema, data
|
516
150
|
|
517
151
|
end
|
518
152
|
|
519
|
-
|
520
|
-
|
521
|
-
def test_additional_properties
|
522
|
-
# Test no additional properties allowed
|
523
|
-
schema = {
|
524
|
-
"properties" => {
|
525
|
-
"a" => { "type" => "integer" }
|
526
|
-
},
|
527
|
-
"additionalProperties" => false
|
528
|
-
}
|
529
|
-
|
530
|
-
data = {
|
531
|
-
"a" => 10
|
532
|
-
}
|
533
|
-
|
534
|
-
assert(JSON::Validator.validate(schema,data,:version => :draft1))
|
535
|
-
data["b"] = 5
|
536
|
-
assert(!JSON::Validator.validate(schema,data,:version => :draft1))
|
537
|
-
|
538
|
-
# Test additional properties match a schema
|
539
|
-
schema["additionalProperties"] = { "type" => "string" }
|
540
|
-
data["b"] = "taco"
|
541
|
-
assert(JSON::Validator.validate(schema,data,:version => :draft1))
|
542
|
-
data["b"] = 5
|
543
|
-
assert(!JSON::Validator.validate(schema,data,:version => :draft1))
|
544
|
-
end
|
545
|
-
|
546
|
-
|
547
|
-
def test_items
|
548
|
-
schema = {
|
549
|
-
"items" => { "type" => "integer" }
|
550
|
-
}
|
551
|
-
|
552
|
-
data = [1,2,4]
|
553
|
-
assert(JSON::Validator.validate(schema,data,:version => :draft1))
|
554
|
-
data = [1,2,"string"]
|
555
|
-
assert(!JSON::Validator.validate(schema,data,:version => :draft1))
|
556
|
-
|
557
|
-
schema = {
|
558
|
-
"items" => [
|
559
|
-
{"type" => "integer"},
|
560
|
-
{"type" => "string"}
|
561
|
-
]
|
562
|
-
}
|
563
|
-
|
564
|
-
data = [1,"string"]
|
565
|
-
assert(JSON::Validator.validate(schema,data,:version => :draft1))
|
566
|
-
data = [1,"string",3]
|
567
|
-
assert(JSON::Validator.validate(schema,data,:version => :draft1))
|
568
|
-
data = ["string",1]
|
569
|
-
assert(!JSON::Validator.validate(schema,data,:version => :draft1))
|
570
|
-
|
571
|
-
end
|
572
|
-
|
573
|
-
|
574
|
-
def test_format_ipv4
|
575
|
-
schema = {
|
576
|
-
"type" => "object",
|
577
|
-
"properties" => { "a" => {"type" => "string", "format" => "ip-address"}}
|
578
|
-
}
|
579
|
-
|
580
|
-
data = {"a" => "1.1.1.1"}
|
581
|
-
assert(JSON::Validator.validate(schema,data,:version => :draft1))
|
582
|
-
data = {"a" => "1.1.1"}
|
583
|
-
assert(!JSON::Validator.validate(schema,data,:version => :draft1))
|
584
|
-
data = {"a" => "1.1.1.300"}
|
585
|
-
assert(!JSON::Validator.validate(schema,data,:version => :draft1))
|
586
|
-
data = {"a" => 5}
|
587
|
-
assert(!JSON::Validator.validate(schema,data,:version => :draft1))
|
588
|
-
data = {"a" => "1.1.1"}
|
589
|
-
assert(!JSON::Validator.validate(schema,data,:version => :draft1))
|
590
|
-
data = {"a" => "1.1.1.1b"}
|
591
|
-
assert(!JSON::Validator.validate(schema,data,:version => :draft1))
|
592
|
-
data = {"a" => "b1.1.1.1"}
|
593
|
-
end
|
594
|
-
|
595
|
-
|
596
|
-
def test_format_ipv6
|
597
|
-
schema = {
|
598
|
-
"type" => "object",
|
599
|
-
"properties" => { "a" => {"type" => "string", "format" => "ipv6"}}
|
600
|
-
}
|
601
|
-
|
602
|
-
data = {"a" => "1111:2222:8888:9999:aaaa:cccc:eeee:ffff"}
|
603
|
-
assert(JSON::Validator.validate(schema,data,:version => :draft1))
|
604
|
-
data = {"a" => "1111:0:8888:0:0:0:eeee:ffff"}
|
605
|
-
assert(JSON::Validator.validate(schema,data,:version => :draft1))
|
606
|
-
data = {"a" => "1111:2222:8888::eeee:ffff"}
|
607
|
-
assert(JSON::Validator.validate(schema,data,:version => :draft1))
|
608
|
-
data = {"a" => "1111:2222:8888:99999:aaaa:cccc:eeee:ffff"}
|
609
|
-
assert(!JSON::Validator.validate(schema,data,:version => :draft1))
|
610
|
-
data = {"a" => "1111:2222:8888:9999:aaaa:cccc:eeee:gggg"}
|
611
|
-
assert(!JSON::Validator.validate(schema,data,:version => :draft1))
|
612
|
-
data = {"a" => "1111:2222::9999::cccc:eeee:ffff"}
|
613
|
-
assert(!JSON::Validator.validate(schema,data,:version => :draft1))
|
614
|
-
data = {"a" => "1111:2222:8888:9999:aaaa:cccc:eeee:ffff:bbbb"}
|
615
|
-
assert(!JSON::Validator.validate(schema,data,:version => :draft1))
|
616
|
-
assert(JSON::Validator.validate(schema, {"a" => "::1"}, :version => :draft1), 'validate with shortcut')
|
617
|
-
assert(!JSON::Validator.validate(schema, {"a" => "42"}, :version => :draft1), 'not validate a simple number')
|
618
|
-
end
|
619
|
-
|
620
|
-
def test_format_time
|
621
|
-
schema = {
|
622
|
-
"type" => "object",
|
623
|
-
"properties" => { "a" => {"type" => "string", "format" => "time"}}
|
624
|
-
}
|
625
|
-
|
626
|
-
data = {"a" => "12:00:00"}
|
627
|
-
assert(JSON::Validator.validate(schema,data,:version => :draft1))
|
628
|
-
data = {"a" => "12:00"}
|
629
|
-
assert(!JSON::Validator.validate(schema,data,:version => :draft1))
|
630
|
-
data = {"a" => "12:00:60"}
|
631
|
-
assert(!JSON::Validator.validate(schema,data,:version => :draft1))
|
632
|
-
data = {"a" => "12:60:00"}
|
633
|
-
assert(!JSON::Validator.validate(schema,data,:version => :draft1))
|
634
|
-
data = {"a" => "24:00:00"}
|
635
|
-
assert(!JSON::Validator.validate(schema,data,:version => :draft1))
|
636
|
-
data = {"a" => "0:00:00"}
|
637
|
-
assert(!JSON::Validator.validate(schema,data,:version => :draft1))
|
638
|
-
data = {"a" => "-12:00:00"}
|
639
|
-
assert(!JSON::Validator.validate(schema,data,:version => :draft1))
|
640
|
-
data = {"a" => "12:00:00b"}
|
641
|
-
assert(!JSON::Validator.validate(schema,data,:version => :draft1))
|
642
|
-
data = {"a" => "12:00:00"}
|
643
|
-
assert(JSON::Validator.validate(schema,data,:version => :draft1))
|
644
|
-
data = {"a" => "12:00:00\nabc"}
|
645
|
-
assert(!JSON::Validator.validate(schema,data,:version => :draft1))
|
646
|
-
end
|
647
|
-
|
648
|
-
|
649
|
-
def test_format_date
|
650
|
-
schema = {
|
651
|
-
"type" => "object",
|
652
|
-
"properties" => { "a" => {"type" => "string", "format" => "date"}}
|
653
|
-
}
|
654
|
-
|
655
|
-
data = {"a" => "2010-01-01"}
|
656
|
-
assert(JSON::Validator.validate(schema,data,:version => :draft1))
|
657
|
-
data = {"a" => "2010-01-32"}
|
658
|
-
assert(!JSON::Validator.validate(schema,data,:version => :draft1))
|
659
|
-
data = {"a" => "n2010-01-01"}
|
660
|
-
assert(!JSON::Validator.validate(schema,data,:version => :draft1))
|
661
|
-
data = {"a" => "2010-1-01"}
|
662
|
-
assert(!JSON::Validator.validate(schema,data,:version => :draft1))
|
663
|
-
data = {"a" => "2010-01-1"}
|
664
|
-
assert(!JSON::Validator.validate(schema,data,:version => :draft1))
|
665
|
-
data = {"a" => "2010-01-01n"}
|
666
|
-
assert(!JSON::Validator.validate(schema,data,:version => :draft1))
|
667
|
-
data = {"a" => "2010-01-01\nabc"}
|
668
|
-
assert(!JSON::Validator.validate(schema,data,:version => :draft1))
|
669
|
-
end
|
670
|
-
|
671
153
|
def test_format_datetime
|
672
154
|
schema = {
|
673
155
|
"type" => "object",
|
674
156
|
"properties" => { "a" => {"type" => "string", "format" => "date-time"}}
|
675
157
|
}
|
676
158
|
|
677
|
-
|
678
|
-
|
679
|
-
|
680
|
-
|
681
|
-
|
682
|
-
|
683
|
-
|
684
|
-
|
685
|
-
|
686
|
-
assert(!JSON::Validator.validate(schema,data,:version => :draft1))
|
687
|
-
data = {"a" => "2010-01-01T12:00:60Z"}
|
688
|
-
assert(!JSON::Validator.validate(schema,data,:version => :draft1))
|
689
|
-
data = {"a" => "2010-01-01T12:00:00z"}
|
690
|
-
assert(!JSON::Validator.validate(schema,data,:version => :draft1))
|
691
|
-
data = {"a" => "2010-01-0112:00:00Z"}
|
692
|
-
assert(!JSON::Validator.validate(schema,data,:version => :draft1))
|
693
|
-
data = {"a" => "2010-01-01T12:00:00Z\nabc"}
|
694
|
-
assert(!JSON::Validator.validate(schema,data,:version => :draft1))
|
695
|
-
end
|
696
|
-
|
697
|
-
def test_format_unknown
|
698
|
-
schema = {
|
699
|
-
"type" => "object",
|
700
|
-
"properties" => { "a" => {"type" => "string", "format" => "unknown"}}
|
701
|
-
}
|
702
|
-
|
703
|
-
data = {"a" => "I can write what I want here"}
|
704
|
-
assert(JSON::Validator.validate(schema,data,:version => :draft1))
|
705
|
-
data = {"a" => ""}
|
706
|
-
assert(JSON::Validator.validate(schema,data,:version => :draft1))
|
707
|
-
end
|
708
|
-
|
709
|
-
|
710
|
-
def test_format_union
|
711
|
-
data1 = {"a" => "boo"}
|
712
|
-
data2 = {"a" => nil}
|
713
|
-
|
714
|
-
schema = {
|
715
|
-
"type" => "object",
|
716
|
-
"properties" => { "a" => {"type" => ["string","null"], "format" => "ip-address"}}
|
717
|
-
}
|
718
|
-
assert(!JSON::Validator.validate(schema,data1,:version => :draft1))
|
719
|
-
assert(JSON::Validator.validate(schema,data2,:version => :draft1))
|
159
|
+
assert_valid schema, {"a" => "2010-01-01T12:00:00Z"}
|
160
|
+
refute_valid schema, {"a" => "2010-01-32T12:00:00Z"}
|
161
|
+
refute_valid schema, {"a" => "2010-13-01T12:00:00Z"}
|
162
|
+
refute_valid schema, {"a" => "2010-01-01T24:00:00Z"}
|
163
|
+
refute_valid schema, {"a" => "2010-01-01T12:60:00Z"}
|
164
|
+
refute_valid schema, {"a" => "2010-01-01T12:00:60Z"}
|
165
|
+
refute_valid schema, {"a" => "2010-01-01T12:00:00z"}
|
166
|
+
refute_valid schema, {"a" => "2010-01-0112:00:00Z"}
|
167
|
+
refute_valid schema, {"a" => "2010-01-01T12:00:00Z\nabc"}
|
720
168
|
end
|
721
169
|
|
722
170
|
end
|