kwalify 0.6.1 → 0.7.0
Sign up to get free protection for your applications and to get access to all the features.
- data/CHANGES.txt +232 -0
- data/MIT-LICENSE +20 -0
- data/README.txt +16 -19
- data/bin/kwalify +3 -3
- data/contrib/inline-require +6 -4
- data/contrib/kwalify +3719 -2427
- data/doc-api/classes/CommandOptionError.html +17 -17
- data/doc-api/classes/CommandOptionParser.html +63 -63
- data/doc-api/classes/Kwalify.html +29 -7
- data/doc-api/classes/Kwalify/AssertionError.html +9 -9
- data/doc-api/classes/Kwalify/BaseError.html +72 -71
- data/doc-api/classes/Kwalify/BaseParser.html +461 -0
- data/doc-api/classes/Kwalify/CommandOptionError.html +11 -11
- data/doc-api/classes/Kwalify/ErrorHelper.html +51 -46
- data/doc-api/classes/Kwalify/HashInterface.html +13 -135
- data/doc-api/classes/Kwalify/Json.html +105 -0
- data/doc-api/classes/Kwalify/Main.html +129 -126
- data/doc-api/classes/Kwalify/MetaValidator.html +248 -232
- data/doc-api/classes/Kwalify/Parser.html +12 -12
- data/doc-api/classes/Kwalify/PlainYamlParser.html +166 -163
- data/doc-api/classes/Kwalify/PlainYamlParser/Alias.html +11 -11
- data/doc-api/classes/Kwalify/Rule.html +152 -130
- data/doc-api/classes/Kwalify/SchemaError.html +10 -10
- data/doc-api/classes/Kwalify/SyntaxError.html +185 -0
- data/doc-api/classes/Kwalify/Types.html +26 -25
- data/doc-api/classes/Kwalify/Util.html +389 -0
- data/doc-api/classes/Kwalify/Util/HashLike.html +246 -0
- data/doc-api/classes/Kwalify/Util/OrderedHash.html +330 -0
- data/doc-api/classes/Kwalify/ValidationError.html +10 -10
- data/doc-api/classes/Kwalify/Validator.html +153 -86
- data/doc-api/classes/Kwalify/Yaml.html +181 -0
- data/doc-api/classes/Kwalify/Yaml/Parser.html +1538 -0
- data/doc-api/classes/Kwalify/YamlParser.html +190 -183
- data/doc-api/classes/Kwalify/YamlSyntaxError.html +8 -57
- data/doc-api/created.rid +1 -1
- data/doc-api/files/__/README_txt.html +17 -22
- data/doc-api/files/kwalify/errors_rb.html +2 -2
- data/doc-api/files/kwalify/main_rb.html +4 -3
- data/doc-api/files/kwalify/messages_rb.html +2 -2
- data/doc-api/files/kwalify/meta-validator_rb.html +3 -3
- data/doc-api/files/kwalify/{util/yaml-helper_rb.html → parser/base_rb.html} +8 -6
- data/doc-api/files/kwalify/parser/yaml_rb.html +117 -0
- data/doc-api/files/kwalify/rule_rb.html +2 -2
- data/doc-api/files/kwalify/types_rb.html +2 -2
- data/doc-api/files/kwalify/util/assert-text-equal_rb.html +2 -2
- data/doc-api/files/kwalify/util/hash-interface_rb.html +9 -2
- data/doc-api/files/kwalify/util/hashlike_rb.html +107 -0
- data/doc-api/files/kwalify/util/option-parser_rb.html +2 -2
- data/doc-api/files/kwalify/util/ordered-hash_rb.html +107 -0
- data/doc-api/files/kwalify/util/testcase-helper_rb.html +2 -2
- data/doc-api/files/kwalify/util_rb.html +107 -0
- data/doc-api/files/kwalify/validator_rb.html +2 -2
- data/doc-api/files/kwalify/yaml-parser_rb.html +2 -2
- data/doc-api/files/kwalify_rb.html +3 -2
- data/doc-api/fr_class_index.html +8 -1
- data/doc-api/fr_file_index.html +5 -1
- data/doc-api/fr_method_index.html +128 -69
- data/doc/img/fig01.png +0 -0
- data/doc/users-guide.html +882 -717
- data/examples/address-book/address-book.schema.yaml +2 -2
- data/examples/data-binding/BABEL.data.yaml +63 -0
- data/examples/data-binding/BABEL.schema.yaml +31 -0
- data/examples/data-binding/Makefile +8 -0
- data/examples/data-binding/Rakefile +13 -0
- data/examples/data-binding/main.rb +27 -0
- data/examples/invoice/invoice.schema.yaml +3 -3
- data/examples/tapkit/tapkit.schema.yaml +2 -2
- data/lib/kwalify.rb +41 -4
- data/lib/kwalify/errors.rb +118 -96
- data/lib/kwalify/kwalify.schema.yaml +58 -0
- data/lib/kwalify/main.rb +384 -377
- data/lib/kwalify/messages.rb +41 -27
- data/lib/kwalify/meta-validator.rb +251 -331
- data/lib/kwalify/parser/base.rb +127 -0
- data/lib/kwalify/parser/yaml.rb +837 -0
- data/lib/kwalify/rule.rb +545 -487
- data/lib/kwalify/templates/genclass-java.eruby +189 -162
- data/lib/kwalify/templates/genclass-php.eruby +104 -0
- data/lib/kwalify/templates/genclass-ruby.eruby +95 -66
- data/lib/kwalify/types.rb +107 -106
- data/lib/kwalify/util.rb +157 -0
- data/lib/kwalify/util/assert-text-equal.rb +33 -31
- data/lib/kwalify/util/hash-interface.rb +11 -30
- data/lib/kwalify/util/hashlike.rb +51 -0
- data/lib/kwalify/util/option-parser.rb +144 -144
- data/lib/kwalify/util/ordered-hash.rb +57 -0
- data/lib/kwalify/util/testcase-helper.rb +3 -3
- data/lib/kwalify/validator.rb +267 -212
- data/lib/kwalify/yaml-parser.rb +822 -768
- data/setup.rb +861 -607
- data/test/Rookbook.yaml +10 -0
- data/test/{tmp.dir/Context.java → data/users-guide/AddressBook.java.expected} +11 -11
- data/test/data/users-guide/BABEL.data.yaml +24 -0
- data/test/data/users-guide/BABEL.schema.yaml +30 -0
- data/test/data/users-guide/ExampleAddressBook.java +47 -0
- data/test/{tmp.dir/Group.java → data/users-guide/Group.java.expected} +2 -11
- data/test/data/users-guide/Person.java.expected +44 -0
- data/test/data/users-guide/address_book.rb +52 -0
- data/test/data/users-guide/address_book.schema.yaml +28 -0
- data/test/data/users-guide/address_book.yaml +27 -0
- data/test/data/users-guide/answers-schema.yaml +12 -0
- data/test/data/users-guide/answers-validator.rb +52 -0
- data/test/data/users-guide/babel_genclass.result +26 -0
- data/test/data/users-guide/config.schema.yaml +7 -0
- data/test/data/users-guide/config.yaml +4 -0
- data/test/{tmp.dir/silent1.document → data/users-guide/document01a.yaml} +0 -0
- data/test/data/users-guide/document01b.yaml +3 -0
- data/test/data/users-guide/document02a.yaml +4 -0
- data/test/data/users-guide/document02b.yaml +4 -0
- data/test/data/users-guide/document03a.yaml +6 -0
- data/test/data/users-guide/document03b.yaml +6 -0
- data/test/data/users-guide/document04a.yaml +9 -0
- data/test/data/users-guide/document04b.yaml +9 -0
- data/test/data/users-guide/document05a.yaml +11 -0
- data/test/data/users-guide/document05b.yaml +12 -0
- data/test/data/users-guide/document06a.yaml +15 -0
- data/test/data/users-guide/document06b.yaml +16 -0
- data/test/data/users-guide/document07a.yaml +9 -0
- data/test/data/users-guide/document07b.yaml +7 -0
- data/test/data/users-guide/document12a.json +10 -0
- data/test/data/users-guide/document12b.json +6 -0
- data/test/data/users-guide/document13a.yaml +17 -0
- data/test/data/users-guide/document14a.yaml +3 -0
- data/test/data/users-guide/document14b.yaml +3 -0
- data/test/data/users-guide/document15a.yaml +6 -0
- data/test/data/users-guide/document15b.yaml +5 -0
- data/test/data/users-guide/example_address_book.rb +10 -0
- data/test/data/users-guide/example_address_book_java.result +32 -0
- data/test/data/users-guide/example_address_book_ruby.result +31 -0
- data/test/data/users-guide/genclass_java.result +4 -0
- data/test/data/users-guide/howto-validation-with-parsing.rb +28 -0
- data/test/data/users-guide/howto-validation.rb +25 -0
- data/test/data/users-guide/howto3.rb +6 -0
- data/test/data/users-guide/howto3.result +5 -0
- data/test/data/users-guide/howto3.yaml +8 -0
- data/test/data/users-guide/howto5_databinding.result +111 -0
- data/test/data/users-guide/invalid01.result +3 -0
- data/test/data/users-guide/invalid02.result +5 -0
- data/test/data/users-guide/invalid03.result +5 -0
- data/test/data/users-guide/invalid04.result +4 -0
- data/test/data/users-guide/invalid05.result +11 -0
- data/test/data/users-guide/invalid06.result +4 -0
- data/test/data/users-guide/invalid07.result +3 -0
- data/test/data/users-guide/invalid08.result +3 -0
- data/test/data/users-guide/invalid12.json +8 -0
- data/test/data/users-guide/invalid14.result +4 -0
- data/test/data/users-guide/invalid15.result +4 -0
- data/test/data/users-guide/loadbabel.rb +27 -0
- data/test/data/users-guide/loadconfig.rb +15 -0
- data/test/data/users-guide/loadconfig.result +2 -0
- data/test/data/users-guide/models.rb +22 -0
- data/test/data/users-guide/option_ha.result +6 -0
- data/test/data/users-guide/option_ha_genclass_java.result +7 -0
- data/test/{tmp.dir/meta1.schema → data/users-guide/schema01.yaml} +0 -0
- data/test/data/users-guide/schema02.yaml +12 -0
- data/test/data/users-guide/schema03.yaml +9 -0
- data/test/data/users-guide/schema04.yaml +20 -0
- data/test/data/users-guide/schema05.yaml +29 -0
- data/test/data/users-guide/schema06.yaml +11 -0
- data/test/data/users-guide/schema12.json +12 -0
- data/test/data/users-guide/schema13.yaml +13 -0
- data/test/data/users-guide/schema14.yaml +5 -0
- data/test/data/users-guide/schema15.yaml +21 -0
- data/test/data/users-guide/valid01.result +2 -0
- data/test/data/users-guide/valid02.result +2 -0
- data/test/data/users-guide/valid03.result +2 -0
- data/test/data/users-guide/valid04.result +2 -0
- data/test/data/users-guide/valid05.result +2 -0
- data/test/data/users-guide/valid06.result +2 -0
- data/test/data/users-guide/valid07.result +2 -0
- data/test/data/users-guide/valid08.result +2 -0
- data/test/data/users-guide/valid12.result +2 -0
- data/test/data/users-guide/valid13.result +2 -0
- data/test/data/users-guide/valid14.result +2 -0
- data/test/data/users-guide/valid15.result +2 -0
- data/test/data/users-guide/validate08.rb +37 -0
- data/test/test-action.rb +78 -0
- data/test/test-action.yaml +738 -0
- data/test/test-databinding.rb +80 -0
- data/test/test-databinding.yaml +301 -0
- data/test/test-main.rb +129 -150
- data/test/test-main.yaml +126 -321
- data/test/test-metavalidator.rb +47 -47
- data/test/test-metavalidator.yaml +77 -21
- data/test/test-parser-yaml.rb +57 -0
- data/test/test-parser-yaml.yaml +1749 -0
- data/test/test-rule.rb +14 -15
- data/test/test-rule.yaml +6 -3
- data/test/test-users-guide.rb +75 -0
- data/test/test-validator.rb +77 -52
- data/test/test-validator.yaml +168 -6
- data/test/test-yaml-parser.rb +47 -0
- data/test/{test-yamlparser.yaml → test-yaml-parser.yaml} +159 -52
- data/test/test.rb +37 -21
- metadata +136 -37
- data/COPYING +0 -340
- data/ChangeLog +0 -70
- data/doc-api/classes/YamlHelper.html +0 -259
- data/lib/kwalify/util/yaml-helper.rb +0 -82
- data/test/test-yamlparser.rb +0 -58
- data/test/tmp.dir/User.java +0 -43
- data/test/tmp.dir/action1.document +0 -18
- data/test/tmp.dir/action1.schema +0 -32
- data/test/tmp.dir/action2.document +0 -18
- data/test/tmp.dir/action2.schema +0 -32
- data/test/tmp.dir/emacs.document +0 -6
- data/test/tmp.dir/emacs.schema +0 -6
- data/test/tmp.dir/meta1.document +0 -0
- data/test/tmp.dir/meta2.document +0 -0
- data/test/tmp.dir/meta2.schema +0 -3
- data/test/tmp.dir/silent1.schema +0 -3
- data/test/tmp.dir/silent2.document +0 -7
- data/test/tmp.dir/silent2.schema +0 -3
- data/test/tmp.dir/stream.invalid +0 -8
- data/test/tmp.dir/stream.schema +0 -3
- data/test/tmp.dir/stream.valid +0 -8
- data/test/tmp.dir/untabify.document +0 -5
- data/test/tmp.dir/untabify.schema +0 -10
- data/todo.txt +0 -34
data/test/test-rule.rb
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
###
|
2
|
-
### $Rev:
|
3
|
-
### $Release: 0.
|
4
|
-
### copyright(c) 2005 kuwata-lab all rights reserved.
|
2
|
+
### $Rev: 83 $
|
3
|
+
### $Release: 0.7.0 $
|
4
|
+
### copyright(c) 2005-2008 kuwata-lab all rights reserved.
|
5
5
|
###
|
6
6
|
|
7
7
|
require File.dirname(__FILE__) + '/test.rb'
|
@@ -9,19 +9,18 @@ require File.dirname(__FILE__) + '/test.rb'
|
|
9
9
|
|
10
10
|
class RuleTest < Test::Unit::TestCase
|
11
11
|
|
12
|
-
|
13
|
-
|
14
|
-
|
12
|
+
## define test methods
|
13
|
+
filename = __FILE__.sub(/\.rb$/, '.yaml')
|
14
|
+
load_yaml_testdata(filename, :lang=>'ruby')
|
15
15
|
|
16
16
|
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
17
|
+
## execute test
|
18
|
+
def _test()
|
19
|
+
assert_nothing_raised do
|
20
|
+
return if $target && $target != @name
|
21
|
+
schema = @schema
|
22
|
+
rule = Kwalify::Rule.new(schema)
|
23
|
+
end
|
24
|
+
end
|
25
25
|
|
26
26
|
end
|
27
|
-
|
data/test/test-rule.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
##
|
2
|
-
## $Rev:
|
3
|
-
## $Release: 0.
|
4
|
-
## copyright(c) 2005 kuwata-lab all rights reserved.
|
2
|
+
## $Rev: 95 $
|
3
|
+
## $Release: 0.7.0 $
|
4
|
+
## copyright(c) 2005-2008 kuwata-lab all rights reserved.
|
5
5
|
##
|
6
6
|
---
|
7
7
|
name: sequence1
|
@@ -122,6 +122,9 @@ input: |
|
|
122
122
|
type: date
|
123
123
|
"memo":
|
124
124
|
type: any
|
125
|
+
"deleted"
|
126
|
+
type: bool
|
127
|
+
default: false
|
125
128
|
#
|
126
129
|
---
|
127
130
|
name: default1
|
@@ -0,0 +1,75 @@
|
|
1
|
+
require File.expand_path(File.dirname(__FILE__) + '/../test/test.rb')
|
2
|
+
|
3
|
+
class UsersGuideTest < Test::Unit::TestCase
|
4
|
+
|
5
|
+
DATA_DIR = 'data/users-guide'
|
6
|
+
CURR_DIR = Dir.pwd
|
7
|
+
for item in Dir.glob("#{DATA_DIR}/*.result").sort()
|
8
|
+
filename = File.basename(item)
|
9
|
+
name = (filename =~ /(.*)\.\w+$/) && $1.gsub(/[^\w]/, '_')
|
10
|
+
s = <<-END
|
11
|
+
def test_#{name}
|
12
|
+
@name = #{name.inspect}
|
13
|
+
@filename = #{filename.inspect}
|
14
|
+
_test()
|
15
|
+
end
|
16
|
+
END
|
17
|
+
eval s
|
18
|
+
end
|
19
|
+
|
20
|
+
### BEGIN
|
21
|
+
def test_address_book_ruby
|
22
|
+
@command = 'kwalify -a genclass-ruby -tf address_book.schema.yaml'
|
23
|
+
@result = File.read('address_book.rb')
|
24
|
+
_test()
|
25
|
+
end
|
26
|
+
def test_example_address_book_ruby
|
27
|
+
@command = 'ruby example_address_book.rb'
|
28
|
+
@result = File.read('example_address_book_ruby.result')
|
29
|
+
@testopts = { 'delete_object_id' => true }
|
30
|
+
_test()
|
31
|
+
end
|
32
|
+
### END
|
33
|
+
|
34
|
+
def setup
|
35
|
+
Dir.chdir DATA_DIR
|
36
|
+
end
|
37
|
+
|
38
|
+
def teardown
|
39
|
+
Dir.chdir CURR_DIR
|
40
|
+
end
|
41
|
+
|
42
|
+
def _test
|
43
|
+
#@name ||= (caller()[0] =~ /in `test_(.*?)'/) && $1
|
44
|
+
@name = (self.name =~ /\Atest_(.*)\(.*\)\z/) && $1
|
45
|
+
return if @name =~ /\_java$/
|
46
|
+
@filename ||= @name + '.result'
|
47
|
+
|
48
|
+
result = @result || File.read(@filename)
|
49
|
+
tuples = result.split(/^(?=\$ )/).collect do |s|
|
50
|
+
if s.sub!(/\A\$ (.*)\n/, '')
|
51
|
+
command = $1
|
52
|
+
while command =~ /\\\z/
|
53
|
+
command.chop!
|
54
|
+
s.sub!(/\A(.*)\n/, '')
|
55
|
+
command << $1
|
56
|
+
end
|
57
|
+
[@command || command, @expected || s]
|
58
|
+
else
|
59
|
+
[@command, @expected || s]
|
60
|
+
end
|
61
|
+
end
|
62
|
+
|
63
|
+
tuples.each do |command, expected|
|
64
|
+
actual = @actual || `#{command}`
|
65
|
+
#if @testopts && @testops['delete_object_id']
|
66
|
+
rexp = /(\#<\w+(::\w+)*:)0x[0-9a-f]+/
|
67
|
+
actual.gsub!(rexp, '\1')
|
68
|
+
expected.gsub!(rexp, '\1')
|
69
|
+
#end
|
70
|
+
assert_text_equal(expected, actual)
|
71
|
+
end
|
72
|
+
|
73
|
+
end
|
74
|
+
|
75
|
+
end
|
data/test/test-validator.rb
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
###
|
2
|
-
### $Rev:
|
3
|
-
### $Release: 0.
|
4
|
-
### copyright(c) 2005 kuwata-lab all rights reserved.
|
2
|
+
### $Rev: 83 $
|
3
|
+
### $Release: 0.7.0 $
|
4
|
+
### copyright(c) 2005-2008 kuwata-lab all rights reserved.
|
5
5
|
###
|
6
6
|
|
7
7
|
require File.dirname(__FILE__) + '/test.rb'
|
@@ -10,61 +10,86 @@ require File.dirname(__FILE__) + '/test.rb'
|
|
10
10
|
class ValidatorTest < Test::Unit::TestCase
|
11
11
|
|
12
12
|
|
13
|
-
|
14
|
-
|
15
|
-
|
13
|
+
## define test methods
|
14
|
+
filename = __FILE__.sub(/\.rb$/, '.yaml')
|
15
|
+
load_yaml_testdata(filename, :lang=>'ruby')
|
16
16
|
|
17
17
|
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
18
|
+
## execute test
|
19
|
+
def _test()
|
20
|
+
return if $target && $target != @name
|
21
|
+
## Syck parser
|
22
|
+
schema = YAML.load(@schema)
|
23
|
+
validator = Kwalify::Validator.new(schema)
|
24
|
+
error2 = @error.gsub(/\(line \d+\)/, '')
|
25
|
+
_test_by_syck_parser(validator, @valid, '' )
|
26
|
+
_test_by_syck_parser(validator, @invalid, error2)
|
27
|
+
## Kwalify::YamlParser
|
28
|
+
schema = Kwalify::YamlParser.new(@schema).parse()
|
29
|
+
validator = Kwalify::Validator.new(schema)
|
30
|
+
_test_by_kwalify_yamlparser(validator, @valid, '' )
|
31
|
+
_test_by_kwalify_yamlparser(validator, @invalid, @error)
|
32
|
+
## Kwalify::Yaml::Parser
|
33
|
+
schema = Kwalify::Yaml::Parser.new().parse(@schema)
|
34
|
+
validator = Kwalify::Validator.new(schema)
|
35
|
+
_test_by_kwalify_yaml_parser(validator, @valid, '' )
|
36
|
+
_test_by_kwalify_yaml_parser(validator, @invalid, @error2 || @error)
|
37
|
+
end
|
33
38
|
|
34
39
|
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
40
|
+
def _test_by_kwalify_yamlparser(validator, input, expected)
|
41
|
+
parser = Kwalify::YamlParser.new(input)
|
42
|
+
document = parser.parse()
|
43
|
+
error_list = validator.validate(document)
|
44
|
+
parser.set_errors_linenum(error_list)
|
45
|
+
error_list.sort!
|
46
|
+
actual = ''
|
47
|
+
error_list.each do |error|
|
48
|
+
e = error
|
49
|
+
args = [e.error_symbol.inspect, e.linenum, e.path, e.message]
|
50
|
+
actual << "%-20s: (line %d)[%s] %s\n" % args
|
51
|
+
end
|
52
|
+
if $print
|
53
|
+
print actual
|
54
|
+
else
|
55
|
+
assert_text_equal(expected, actual)
|
56
|
+
end
|
57
|
+
end
|
53
58
|
|
54
59
|
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
60
|
+
def _test_by_kwalify_yaml_parser(validator, input, expected)
|
61
|
+
parser = Kwalify::Yaml::Parser.new(validator)
|
62
|
+
document = parser.parse(input)
|
63
|
+
error_list = parser.errors()
|
64
|
+
error_list.sort!
|
65
|
+
actual = ''
|
66
|
+
error_list.each do |error|
|
67
|
+
e = error
|
68
|
+
args = [e.error_symbol.inspect, e.linenum, e.column, e.path, e.message]
|
69
|
+
#actual << "%-20s: (line %d)[%s] %s\n" % args
|
70
|
+
actual << "%-20s: %d:%d:[%s] %s\n" % args
|
71
|
+
end
|
72
|
+
if $print
|
73
|
+
print actual
|
74
|
+
else
|
75
|
+
assert_text_equal(expected, actual)
|
76
|
+
end
|
77
|
+
end
|
78
|
+
|
79
|
+
|
80
|
+
def _test_by_syck_parser(validator, input, expected)
|
81
|
+
document = YAML.load(input)
|
82
|
+
error_list = validator.validate(document)
|
83
|
+
expected = expected.to_a.sort.join()
|
84
|
+
actual = error_list.collect { |e|
|
85
|
+
"%-20s: [%s] %s\n" % [e.error_symbol.inspect, e.path, e.message]
|
86
|
+
}.sort.join()
|
87
|
+
if $print
|
88
|
+
print actual
|
89
|
+
else
|
90
|
+
assert_text_equal(expected, actual)
|
91
|
+
end
|
92
|
+
end
|
68
93
|
|
69
94
|
|
70
95
|
end
|
data/test/test-validator.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
##
|
2
|
-
## $Rev:
|
3
|
-
## $Release: 0.
|
4
|
-
## copyright(c) 2005 kuwata-lab all rights reserved.
|
2
|
+
## $Rev: 83 $
|
3
|
+
## $Release: 0.7.0 $
|
4
|
+
## copyright(c) 2005-2008 kuwata-lab all rights reserved.
|
5
5
|
##
|
6
6
|
---
|
7
7
|
name: sequence1
|
@@ -30,6 +30,9 @@ invalid: |
|
|
30
30
|
error: |
|
31
31
|
:required_novalue : (line 3)[/2] value required but none.
|
32
32
|
:type_unmatch : (line 5)[/4] '100': not a string.
|
33
|
+
error2: |
|
34
|
+
:required_novalue : 3:1:[/2] value required but none.
|
35
|
+
:type_unmatch : 5:1:[/4] '100': not a string.
|
33
36
|
##
|
34
37
|
---
|
35
38
|
name: mapping1
|
@@ -80,6 +83,13 @@ error: |
|
|
80
83
|
:type_unmatch : (line 3)[/age] 'twenty': not a integer.
|
81
84
|
:enum_notexist : (line 4)[/blood] 'ab': invalid blood value.
|
82
85
|
:type_unmatch : (line 5)[/birth] 'Jul 01, 1985': not a date.
|
86
|
+
error2: |
|
87
|
+
:required_nokey : 1:1:[/] key 'name:' is required.
|
88
|
+
:key_undefined : 1:1:[/nam] key 'nam:' is undefined.
|
89
|
+
:pattern_unmatch : 2:1:[/email] 'foo(at)mail.com': not matched to pattern /@/.
|
90
|
+
:type_unmatch : 3:1:[/age] 'twenty': not a integer.
|
91
|
+
:enum_notexist : 4:1:[/blood] 'ab': invalid blood value.
|
92
|
+
:type_unmatch : 5:1:[/birth] 'Jul 01, 1985': not a date.
|
83
93
|
##
|
84
94
|
---
|
85
95
|
name: nested1
|
@@ -142,6 +152,13 @@ error: |
|
|
142
152
|
:enum_notexist : (line 5)[/address-book/0/blood] 'ab': invalid blood value.
|
143
153
|
:type_unmatch : (line 6)[/address-book/0/birth] '1985/01/01': not a date.
|
144
154
|
:pattern_unmatch : (line 8)[/address-book/1/email] 'bar(at)mail.com': not matched to pattern /@/.
|
155
|
+
error2: |
|
156
|
+
:required_nokey : 2:5:[/address-book/0] key 'email:' is required.
|
157
|
+
:key_undefined : 3:5:[/address-book/0/mail] key 'mail:' is undefined.
|
158
|
+
:type_unmatch : 4:5:[/address-book/0/age] 'twenty': not a integer.
|
159
|
+
:enum_notexist : 5:5:[/address-book/0/blood] 'ab': invalid blood value.
|
160
|
+
:type_unmatch : 6:5:[/address-book/0/birth] '1985/01/01': not a date.
|
161
|
+
:pattern_unmatch : 8:5:[/address-book/1/email] 'bar(at)mail.com': not matched to pattern /@/.
|
145
162
|
##
|
146
163
|
---
|
147
164
|
name: anchor1
|
@@ -176,6 +193,10 @@ error: |
|
|
176
193
|
:required_nokey : (line 1)[/0] key 'family-name:' is required.
|
177
194
|
:key_undefined : (line 2)[/0/last-name] key 'last-name:' is undefined.
|
178
195
|
:type_unmatch : (line 4)[/1/family-name] '100': not a string.
|
196
|
+
error2: |
|
197
|
+
:required_nokey : 1:3:[/0] key 'family-name:' is required.
|
198
|
+
:key_undefined : 2:3:[/0/last-name] key 'last-name:' is undefined.
|
199
|
+
:type_unmatch : 4:3:[/1/family-name] '100': not a string.
|
179
200
|
##
|
180
201
|
---
|
181
202
|
name: anchor2
|
@@ -220,6 +241,10 @@ error: |
|
|
220
241
|
:type_unmatch : (line 3)[/address-book/0/name] '100': not a string.
|
221
242
|
:required_nokey : (line 5)[/address-book/1] key 'name:' is required.
|
222
243
|
:key_undefined : (line 5)[/address-book/1/first-name] key 'first-name:' is undefined.
|
244
|
+
error2: |
|
245
|
+
:type_unmatch : 3:5:[/address-book/0/name] '100': not a string.
|
246
|
+
:required_nokey : 5:5:[/address-book/1] key 'name:' is required.
|
247
|
+
:key_undefined : 5:5:[/address-book/1/first-name] key 'first-name:' is undefined.
|
223
248
|
##
|
224
249
|
---
|
225
250
|
name: anchor3
|
@@ -272,6 +297,9 @@ invalid: |
|
|
272
297
|
error: |
|
273
298
|
:type_unmatch : (line 2)[/0/name] '100': not a string.
|
274
299
|
:enum_notexist : (line 7)[/1/post] 'worker': invalid post value.
|
300
|
+
error2: |
|
301
|
+
:type_unmatch : 2:3:[/0/name] '100': not a string.
|
302
|
+
:enum_notexist : 7:3:[/1/post] 'worker': invalid post value.
|
275
303
|
##
|
276
304
|
---
|
277
305
|
name: range1
|
@@ -335,6 +363,15 @@ error: |
|
|
335
363
|
:range_toolarge : (line 9)[/max-and-min/1] '100.1': too large (> max 100.0).
|
336
364
|
:range_toosmall : (line 10)[/max-and-min/2] '9': too small (< min 10.0).
|
337
365
|
:range_toosmall : (line 11)[/max-and-min/3] '9.99': too small (< min 10.0).
|
366
|
+
error2: |
|
367
|
+
:range_toolarge : 2:3:[/max-only/0] '101': too large (> max 100).
|
368
|
+
:range_toolarge : 3:3:[/max-only/1] '100.1': too large (> max 100).
|
369
|
+
:range_toosmall : 5:3:[/min-only/0] '9': too small (< min 10.0).
|
370
|
+
:range_toosmall : 6:3:[/min-only/1] '9.99': too small (< min 10.0).
|
371
|
+
:range_toolarge : 8:3:[/max-and-min/0] '101': too large (> max 100.0).
|
372
|
+
:range_toolarge : 9:3:[/max-and-min/1] '100.1': too large (> max 100.0).
|
373
|
+
:range_toosmall : 10:3:[/max-and-min/2] '9': too small (< min 10.0).
|
374
|
+
:range_toosmall : 11:3:[/max-and-min/3] '9.99': too small (< min 10.0).
|
338
375
|
##
|
339
376
|
---
|
340
377
|
name: range2
|
@@ -397,6 +434,15 @@ error: |
|
|
397
434
|
:range_toolargeex : (line 9)[/max-ex-and-min-ex/1] '100.0': too large (>= max 100.0).
|
398
435
|
:range_toosmallex : (line 10)[/max-ex-and-min-ex/2] '10': too small (<= min 10.0).
|
399
436
|
:range_toosmallex : (line 11)[/max-ex-and-min-ex/3] '10.0': too small (<= min 10.0).
|
437
|
+
error2: |
|
438
|
+
:range_toolargeex : 2:3:[/max-ex-only/0] '100': too large (>= max 100).
|
439
|
+
:range_toolargeex : 3:3:[/max-ex-only/1] '100.0': too large (>= max 100).
|
440
|
+
:range_toosmallex : 5:3:[/min-ex-only/0] '10': too small (<= min 10.0).
|
441
|
+
:range_toosmallex : 6:3:[/min-ex-only/1] '10.0': too small (<= min 10.0).
|
442
|
+
:range_toolargeex : 8:3:[/max-ex-and-min-ex/0] '100': too large (>= max 100.0).
|
443
|
+
:range_toolargeex : 9:3:[/max-ex-and-min-ex/1] '100.0': too large (>= max 100.0).
|
444
|
+
:range_toosmallex : 10:3:[/max-ex-and-min-ex/2] '10': too small (<= min 10.0).
|
445
|
+
:range_toosmallex : 11:3:[/max-ex-and-min-ex/3] '10.0': too small (<= min 10.0).
|
400
446
|
##
|
401
447
|
---
|
402
448
|
name: range3
|
@@ -439,6 +485,11 @@ error: |
|
|
439
485
|
:range_toosmallex : (line 3)[/A/1] '10.0': too small (<= min 10.0).
|
440
486
|
:range_toosmall : (line 5)[/B/0] '9.99999': too small (< min 10).
|
441
487
|
:range_toolargeex : (line 6)[/B/1] '100.0': too large (>= max 100.0).
|
488
|
+
error2: |
|
489
|
+
:range_toolarge : 2:3:[/A/0] '100.00001': too large (> max 100).
|
490
|
+
:range_toosmallex : 3:3:[/A/1] '10.0': too small (<= min 10.0).
|
491
|
+
:range_toosmall : 5:3:[/B/0] '9.99999': too small (< min 10).
|
492
|
+
:range_toolargeex : 6:3:[/B/1] '100.0': too large (>= max 100.0).
|
442
493
|
##
|
443
494
|
---
|
444
495
|
name: length1
|
@@ -490,6 +541,11 @@ error: |
|
|
490
541
|
:length_tooshort : (line 4)[/min-only/0] 'foo': too short (length 3 < min 4).
|
491
542
|
:length_toolong : (line 7)[/max-and-min/0] 'foobarbaz': too long (length 9 > max 8).
|
492
543
|
:length_tooshort : (line 8)[/max-and-min/1] 'foo': too short (length 3 < min 4).
|
544
|
+
error2: |
|
545
|
+
:length_toolong : 2:3:[/max-only/0] 'hogehoge!': too long (length 9 > max 8).
|
546
|
+
:length_tooshort : 4:3:[/min-only/0] 'foo': too short (length 3 < min 4).
|
547
|
+
:length_toolong : 7:3:[/max-and-min/0] 'foobarbaz': too long (length 9 > max 8).
|
548
|
+
:length_tooshort : 8:3:[/max-and-min/1] 'foo': too short (length 3 < min 4).
|
493
549
|
##
|
494
550
|
---
|
495
551
|
name: length2
|
@@ -540,6 +596,11 @@ error: |
|
|
540
596
|
:length_tooshortex : (line 4)[/min-ex-only/0] 'foo!': too short (length 4 <= min 4).
|
541
597
|
:length_toolongex : (line 7)[/max-ex-and-min-ex/0] 'foobarba': too long (length 8 >= max 8).
|
542
598
|
:length_tooshortex : (line 8)[/max-ex-and-min-ex/1] 'foo!': too short (length 4 <= min 4).
|
599
|
+
error2: |
|
600
|
+
:length_toolongex : 2:3:[/max-ex-only/0] 'hogehoge': too long (length 8 >= max 8).
|
601
|
+
:length_tooshortex : 4:3:[/min-ex-only/0] 'foo!': too short (length 4 <= min 4).
|
602
|
+
:length_toolongex : 7:3:[/max-ex-and-min-ex/0] 'foobarba': too long (length 8 >= max 8).
|
603
|
+
:length_tooshortex : 8:3:[/max-ex-and-min-ex/1] 'foo!': too short (length 4 <= min 4).
|
543
604
|
##
|
544
605
|
---
|
545
606
|
name: length3
|
@@ -580,6 +641,11 @@ error: |
|
|
580
641
|
:length_tooshortex : (line 3)[/A/1] 'hoge': too short (length 4 <= min 4).
|
581
642
|
:length_toolongex : (line 5)[/B/0] 'hogehoge': too long (length 8 >= max 8).
|
582
643
|
:length_tooshort : (line 6)[/B/1] 'hog': too short (length 3 < min 4).
|
644
|
+
error2: |
|
645
|
+
:length_toolong : 2:3:[/A/0] 'hogehoge!': too long (length 9 > max 8).
|
646
|
+
:length_tooshortex : 3:3:[/A/1] 'hoge': too short (length 4 <= min 4).
|
647
|
+
:length_toolongex : 5:3:[/B/0] 'hogehoge': too long (length 8 >= max 8).
|
648
|
+
:length_tooshort : 6:3:[/B/1] 'hog': too short (length 3 < min 4).
|
583
649
|
##
|
584
650
|
---
|
585
651
|
name: assert1
|
@@ -622,6 +688,11 @@ error: |
|
|
622
688
|
:assert_failed : (line 2)[/1/more-than] '3': assertion expression failed (3 < val).
|
623
689
|
:assert_failed : (line 3)[/2/between] '2.9': assertion expression failed (3 < val && val < 8).
|
624
690
|
:assert_failed : (line 4)[/3/except] '3.1': assertion expression failed (val < 3 || 8 < val).
|
691
|
+
error2: |
|
692
|
+
:assert_failed : 1:3:[/0/less-than] '8': assertion expression failed (val < 8).
|
693
|
+
:assert_failed : 2:3:[/1/more-than] '3': assertion expression failed (3 < val).
|
694
|
+
:assert_failed : 3:3:[/2/between] '2.9': assertion expression failed (3 < val && val < 8).
|
695
|
+
:assert_failed : 4:3:[/3/except] '3.1': assertion expression failed (val < 3 || 8 < val).
|
625
696
|
##
|
626
697
|
---
|
627
698
|
name: deftype1
|
@@ -658,6 +729,17 @@ error*:
|
|
658
729
|
:type_unmatch : (line 2)[/0/email] 'true': not a string.
|
659
730
|
:type_unmatch : (line 3)[/1/name] '3.14': not a string.
|
660
731
|
:type_unmatch : (line 4)[/2/email] 'Sun Feb 01 00:00:00 JST 2004': not a string.
|
732
|
+
error2*:
|
733
|
+
ruby: |
|
734
|
+
:type_unmatch : 1:3:[/0/name] '123': not a string.
|
735
|
+
:type_unmatch : 2:3:[/0/email] 'true': not a string.
|
736
|
+
:type_unmatch : 3:3:[/1/name] '3.14': not a string.
|
737
|
+
:type_unmatch : 4:3:[/2/email] '2004-01-01': not a string.
|
738
|
+
java: |
|
739
|
+
:type_unmatch : 1:3:[/0/name] '123': not a string.
|
740
|
+
:type_unmatch : 2:3:[/0/email] 'true': not a string.
|
741
|
+
:type_unmatch : 3:3:[/1/name] '3.14': not a string.
|
742
|
+
:type_unmatch : 4:3:[/2/email] 'Sun Feb 01 00:00:00 JST 2004': not a string.
|
661
743
|
##
|
662
744
|
---
|
663
745
|
name: ident1
|
@@ -691,6 +773,8 @@ invalid: |
|
|
691
773
|
#
|
692
774
|
error: |
|
693
775
|
:value_notunique : (line 5)[/2/name] 'bar': is already used at '/1/name'.
|
776
|
+
error2: |
|
777
|
+
:value_notunique : 5:3:[/2/name] 'bar': is already used at '/1/name'.
|
694
778
|
##
|
695
779
|
---
|
696
780
|
name: unique1
|
@@ -719,11 +803,13 @@ invalid: |
|
|
719
803
|
age: 10
|
720
804
|
- name: bar
|
721
805
|
age: 10
|
722
|
-
-
|
723
|
-
|
806
|
+
- age: 10
|
807
|
+
name: bar
|
724
808
|
#
|
725
809
|
error: |
|
726
|
-
:value_notunique : (line
|
810
|
+
:value_notunique : (line 6)[/2/name] 'bar': is already used at '/1/name'.
|
811
|
+
error2: |
|
812
|
+
:value_notunique : 6:3:[/2/name] 'bar': is already used at '/1/name'.
|
727
813
|
##
|
728
814
|
---
|
729
815
|
name: unique2
|
@@ -751,6 +837,76 @@ invalid: |
|
|
751
837
|
#
|
752
838
|
error: |
|
753
839
|
:value_notunique : (line 5)[/4] 'bar': is already used at '/2'.
|
840
|
+
error2: |
|
841
|
+
:value_notunique : 5:1:[/4] 'bar': is already used at '/2'.
|
842
|
+
##
|
843
|
+
---
|
844
|
+
name: unique3
|
845
|
+
desc: unique constraint and '<<' (merge)
|
846
|
+
#
|
847
|
+
schema: |
|
848
|
+
type: seq
|
849
|
+
sequence:
|
850
|
+
- type: map
|
851
|
+
mapping:
|
852
|
+
"name": { type: str, required: yes, unique: yes }
|
853
|
+
"value": { type: any, required: yes }
|
854
|
+
#
|
855
|
+
valid: |
|
856
|
+
# no sense
|
857
|
+
- name: x1
|
858
|
+
value: 10
|
859
|
+
- name: x2
|
860
|
+
value: 20
|
861
|
+
#
|
862
|
+
invalid: |
|
863
|
+
- &a1
|
864
|
+
name: x1
|
865
|
+
value: 10
|
866
|
+
- <<: *a1
|
867
|
+
- <<: *a1 # wrong validation error
|
868
|
+
name: x3
|
869
|
+
#
|
870
|
+
error: |
|
871
|
+
:value_notunique : (line 2)[/1/name] 'x1': is already used at '/0/name'.
|
872
|
+
error2: |
|
873
|
+
:value_notunique : 4:3:[/1/name] 'x1': is already used at '/0/name'.
|
874
|
+
:value_notunique : 5:3:[/2/name] 'x1': is already used at '/0/name'.
|
875
|
+
memo: |
|
876
|
+
* '(line 2)' is not expected line number.
|
877
|
+
##
|
878
|
+
---
|
879
|
+
name: unique4
|
880
|
+
desc: unique constrant and anchor
|
881
|
+
#
|
882
|
+
schema: |
|
883
|
+
type: seq
|
884
|
+
sequence:
|
885
|
+
- type: map
|
886
|
+
mapping:
|
887
|
+
"name": { type: str }
|
888
|
+
"value": { type: any }
|
889
|
+
#
|
890
|
+
valid: |
|
891
|
+
# no sense
|
892
|
+
- name: x1
|
893
|
+
value: 10
|
894
|
+
- name: x2
|
895
|
+
value: 20
|
896
|
+
#
|
897
|
+
invalid: |
|
898
|
+
- &a1
|
899
|
+
name: x1
|
900
|
+
value: 10
|
901
|
+
- name: x2
|
902
|
+
value: 20
|
903
|
+
- *a1
|
904
|
+
#
|
905
|
+
error: |
|
906
|
+
# :value_notunique : (line 6)[/2/name] 'x1': is already used at '/0/name'.
|
907
|
+
error2: |
|
908
|
+
memo: |
|
909
|
+
* validation error should be reported but not reported.
|
754
910
|
##
|
755
911
|
---
|
756
912
|
name: default1
|
@@ -775,6 +931,9 @@ invalid: |
|
|
775
931
|
error: |
|
776
932
|
:range_toolarge : (line 2)[/value2] '20': too large (> max 10).
|
777
933
|
:range_toosmall : (line 3)[/value3] '-20': too small (< min -10).
|
934
|
+
error2: |
|
935
|
+
:range_toolarge : 2:1:[/value2] '20': too large (> max 10).
|
936
|
+
:range_toosmall : 3:1:[/value3] '-20': too small (< min -10).
|
778
937
|
##
|
779
938
|
---
|
780
939
|
name: merge1
|
@@ -821,4 +980,7 @@ invalid: |
|
|
821
980
|
error: |
|
822
981
|
:required_nokey : (line 4)[/user] key 'email:' is required.
|
823
982
|
:length_toolong : (line 5)[/user/name] 'toooooo-looooong-naaaame': too long (length 24 > max 16).
|
983
|
+
error2: |
|
984
|
+
:required_nokey : 5:3:[/user] key 'email:' is required.
|
985
|
+
:length_toolong : 5:3:[/user/name] 'toooooo-looooong-naaaame': too long (length 24 > max 16).
|
824
986
|
##
|