kwalify 0.5.1 → 0.6.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.
- data/ChangeLog +24 -19
- data/README.txt +51 -51
- data/bin/kwalify +2 -2
- data/contrib/inline-require +151 -0
- data/contrib/kwalify +2850 -0
- data/doc-api/classes/CommandOptionError.html +184 -0
- data/doc-api/classes/CommandOptionParser.html +325 -0
- data/doc-api/classes/Kwalify.html +270 -0
- data/doc-api/classes/Kwalify/AssertionError.html +148 -0
- data/doc-api/classes/Kwalify/BaseError.html +296 -0
- data/doc-api/classes/Kwalify/CommandOptionError.html +168 -0
- data/doc-api/classes/Kwalify/ErrorHelper.html +218 -0
- data/doc-api/classes/Kwalify/HashInterface.html +240 -0
- data/doc-api/classes/Kwalify/KwalifyError.html +111 -0
- data/doc-api/classes/Kwalify/Main.html +336 -0
- data/doc-api/classes/Kwalify/MetaValidator.html +432 -0
- data/doc-api/classes/Kwalify/Parser.html +155 -0
- data/doc-api/classes/Kwalify/PlainYamlParser.html +520 -0
- data/doc-api/classes/Kwalify/PlainYamlParser/Alias.html +165 -0
- data/doc-api/classes/Kwalify/Rule.html +411 -0
- data/doc-api/classes/Kwalify/SchemaError.html +148 -0
- data/doc-api/classes/Kwalify/Types.html +301 -0
- data/doc-api/classes/Kwalify/ValidationError.html +148 -0
- data/doc-api/classes/Kwalify/Validator.html +311 -0
- data/doc-api/classes/Kwalify/YamlParser.html +535 -0
- data/doc-api/classes/Kwalify/YamlSyntaxError.html +168 -0
- data/doc-api/classes/Test.html +107 -0
- data/doc-api/classes/Test/Unit.html +101 -0
- data/doc-api/classes/YamlHelper.html +259 -0
- data/doc-api/created.rid +1 -0
- data/doc-api/files/__/README_txt.html +179 -0
- data/doc-api/files/kwalify/errors_rb.html +114 -0
- data/doc-api/files/kwalify/main_rb.html +117 -0
- data/doc-api/files/kwalify/messages_rb.html +107 -0
- data/doc-api/files/kwalify/meta-validator_rb.html +117 -0
- data/doc-api/files/kwalify/rule_rb.html +116 -0
- data/doc-api/files/kwalify/types_rb.html +114 -0
- data/doc-api/files/kwalify/util/assert-text-equal_rb.html +115 -0
- data/doc-api/files/kwalify/util/hash-interface_rb.html +107 -0
- data/doc-api/files/kwalify/util/option-parser_rb.html +107 -0
- data/doc-api/files/kwalify/util/testcase-helper_rb.html +115 -0
- data/doc-api/files/kwalify/util/yaml-helper_rb.html +114 -0
- data/doc-api/files/kwalify/validator_rb.html +117 -0
- data/doc-api/files/kwalify/yaml-parser_rb.html +117 -0
- data/doc-api/files/kwalify_rb.html +120 -0
- data/doc-api/fr_class_index.html +50 -0
- data/doc-api/fr_file_index.html +41 -0
- data/doc-api/fr_method_index.html +109 -0
- data/doc-api/index.html +24 -0
- data/doc-api/rdoc-style.css +208 -0
- data/doc/users-guide.html +693 -193
- data/examples/address-book/Makefile +5 -0
- data/examples/address-book/address-book.schema.yaml +2 -1
- data/examples/invoice/Makefile +5 -0
- data/examples/invoice/invoice.schema.yaml +3 -2
- data/examples/tapkit/Makefile +5 -0
- data/examples/tapkit/main.rb +7 -0
- data/examples/tapkit/tapkit.schema.yaml +6 -1
- data/lib/kwalify.rb +3 -3
- data/lib/kwalify/errors.rb +2 -2
- data/lib/kwalify/main.rb +161 -84
- data/lib/kwalify/messages.rb +17 -11
- data/lib/kwalify/meta-validator.rb +11 -2
- data/lib/kwalify/rule.rb +13 -3
- data/lib/kwalify/templates/genclass-java.eruby +195 -0
- data/lib/kwalify/templates/genclass-ruby.eruby +84 -0
- data/lib/kwalify/types.rb +18 -18
- data/lib/kwalify/util/assert-text-equal.rb +44 -0
- data/lib/kwalify/util/hash-interface.rb +37 -0
- data/lib/kwalify/util/option-parser.rb +2 -2
- data/lib/kwalify/util/testcase-helper.rb +112 -0
- data/lib/kwalify/util/yaml-helper.rb +2 -2
- data/lib/kwalify/validator.rb +2 -2
- data/lib/kwalify/yaml-parser.rb +12 -9
- data/test/test-main.rb +77 -78
- data/test/test-main.yaml +543 -769
- data/test/test-metavalidator.rb +27 -47
- data/test/test-metavalidator.yaml +21 -2
- data/test/test-rule.rb +6 -39
- data/test/test-rule.yaml +2 -2
- data/test/test-validator.rb +36 -869
- data/test/test-validator.yaml +28 -20
- data/test/test-yamlparser.rb +30 -1248
- data/test/test-yamlparser.yaml +138 -110
- data/test/test.rb +33 -13
- data/test/tmp.dir/Context.java +40 -0
- data/test/tmp.dir/Group.java +33 -0
- data/test/tmp.dir/User.java +43 -0
- data/test/tmp.dir/action1.document +18 -0
- data/test/tmp.dir/action1.schema +32 -0
- data/test/tmp.dir/action2.document +18 -0
- data/test/tmp.dir/action2.schema +32 -0
- data/test/tmp.dir/emacs.document +6 -0
- data/test/tmp.dir/emacs.schema +6 -0
- data/test/tmp.dir/meta1.document +0 -0
- data/test/tmp.dir/meta1.schema +3 -0
- data/test/tmp.dir/meta2.document +0 -0
- data/test/tmp.dir/meta2.schema +3 -0
- data/test/tmp.dir/silent1.document +3 -0
- data/test/tmp.dir/silent1.schema +3 -0
- data/test/tmp.dir/silent2.document +7 -0
- data/test/tmp.dir/silent2.schema +3 -0
- data/test/tmp.dir/stream.invalid +8 -0
- data/test/tmp.dir/stream.schema +3 -0
- data/test/tmp.dir/stream.valid +8 -0
- data/test/tmp.dir/untabify.document +5 -0
- data/test/tmp.dir/untabify.schema +10 -0
- metadata +98 -12
- data/lib/kwalify/util/assert-diff.rb +0 -44
data/test/test-validator.yaml
CHANGED
|
@@ -1,11 +1,12 @@
|
|
|
1
1
|
##
|
|
2
|
-
## $Rev:
|
|
3
|
-
## $Release: 0.
|
|
2
|
+
## $Rev: 51 $
|
|
3
|
+
## $Release: 0.6.0 $
|
|
4
4
|
## copyright(c) 2005 kuwata-lab all rights reserved.
|
|
5
5
|
##
|
|
6
6
|
---
|
|
7
7
|
name: sequence1
|
|
8
8
|
desc: sequence test
|
|
9
|
+
checked: yes
|
|
9
10
|
#
|
|
10
11
|
schema: |
|
|
11
12
|
type: seq
|
|
@@ -29,10 +30,11 @@ invalid: |
|
|
|
29
30
|
error: |
|
|
30
31
|
:required_novalue : (line 3)[/2] value required but none.
|
|
31
32
|
:type_unmatch : (line 5)[/4] '100': not a string.
|
|
32
|
-
|
|
33
|
+
##
|
|
33
34
|
---
|
|
34
35
|
name: mapping1
|
|
35
36
|
desc: mapping test
|
|
37
|
+
checked: yes
|
|
36
38
|
#
|
|
37
39
|
schema: |
|
|
38
40
|
type: map
|
|
@@ -78,10 +80,11 @@ error: |
|
|
|
78
80
|
:type_unmatch : (line 3)[/age] 'twenty': not a integer.
|
|
79
81
|
:enum_notexist : (line 4)[/blood] 'ab': invalid blood value.
|
|
80
82
|
:type_unmatch : (line 5)[/birth] 'Jul 01, 1985': not a date.
|
|
81
|
-
|
|
83
|
+
##
|
|
82
84
|
---
|
|
83
85
|
name: nested1
|
|
84
86
|
desc: nest of seq and map
|
|
87
|
+
checked: yes
|
|
85
88
|
#
|
|
86
89
|
schema: |
|
|
87
90
|
type: map
|
|
@@ -139,10 +142,11 @@ error: |
|
|
|
139
142
|
:enum_notexist : (line 5)[/address-book/0/blood] 'ab': invalid blood value.
|
|
140
143
|
:type_unmatch : (line 6)[/address-book/0/birth] '1985/01/01': not a date.
|
|
141
144
|
:pattern_unmatch : (line 8)[/address-book/1/email] 'bar(at)mail.com': not matched to pattern /@/.
|
|
142
|
-
|
|
145
|
+
##
|
|
143
146
|
---
|
|
144
147
|
name: anchor1
|
|
145
148
|
desc: schema with anchor
|
|
149
|
+
checked: yes
|
|
146
150
|
#
|
|
147
151
|
schema: |
|
|
148
152
|
type: seq
|
|
@@ -172,10 +176,11 @@ error: |
|
|
|
172
176
|
:required_nokey : (line 1)[/0] key 'family-name:' is required.
|
|
173
177
|
:key_undefined : (line 2)[/0/last-name] key 'last-name:' is undefined.
|
|
174
178
|
:type_unmatch : (line 4)[/1/family-name] '100': not a string.
|
|
175
|
-
|
|
179
|
+
##
|
|
176
180
|
---
|
|
177
181
|
name: anchor2
|
|
178
182
|
desc: schema with anchor 2
|
|
183
|
+
checked: yes
|
|
179
184
|
#
|
|
180
185
|
schema: |
|
|
181
186
|
type: map
|
|
@@ -215,10 +220,11 @@ error: |
|
|
|
215
220
|
:type_unmatch : (line 3)[/address-book/0/name] '100': not a string.
|
|
216
221
|
:required_nokey : (line 5)[/address-book/1] key 'name:' is required.
|
|
217
222
|
:key_undefined : (line 5)[/address-book/1/first-name] key 'first-name:' is undefined.
|
|
218
|
-
|
|
223
|
+
##
|
|
219
224
|
---
|
|
220
225
|
name: anchor3
|
|
221
226
|
desc: document with anchor
|
|
227
|
+
checked: yes
|
|
222
228
|
#
|
|
223
229
|
schema: |
|
|
224
230
|
type: seq
|
|
@@ -266,10 +272,11 @@ invalid: |
|
|
|
266
272
|
error: |
|
|
267
273
|
:type_unmatch : (line 2)[/0/name] '100': not a string.
|
|
268
274
|
:enum_notexist : (line 7)[/1/post] 'worker': invalid post value.
|
|
269
|
-
|
|
275
|
+
##
|
|
270
276
|
---
|
|
271
277
|
name: range1
|
|
272
278
|
desc: range test && bug#?????
|
|
279
|
+
checked: yes
|
|
273
280
|
#
|
|
274
281
|
schema: |
|
|
275
282
|
type: map
|
|
@@ -328,7 +335,7 @@ error: |
|
|
|
328
335
|
:range_toolarge : (line 9)[/max-and-min/1] '100.1': too large (> max 100.0).
|
|
329
336
|
:range_toosmall : (line 10)[/max-and-min/2] '9': too small (< min 10.0).
|
|
330
337
|
:range_toosmall : (line 11)[/max-and-min/3] '9.99': too small (< min 10.0).
|
|
331
|
-
|
|
338
|
+
##
|
|
332
339
|
---
|
|
333
340
|
name: range2
|
|
334
341
|
desc: range test (with max-ex and min-ex)
|
|
@@ -390,7 +397,7 @@ error: |
|
|
|
390
397
|
:range_toolargeex : (line 9)[/max-ex-and-min-ex/1] '100.0': too large (>= max 100.0).
|
|
391
398
|
:range_toosmallex : (line 10)[/max-ex-and-min-ex/2] '10': too small (<= min 10.0).
|
|
392
399
|
:range_toosmallex : (line 11)[/max-ex-and-min-ex/3] '10.0': too small (<= min 10.0).
|
|
393
|
-
|
|
400
|
+
##
|
|
394
401
|
---
|
|
395
402
|
name: range3
|
|
396
403
|
desc: range test (with max, min, max-ex and min-ex)
|
|
@@ -432,7 +439,7 @@ error: |
|
|
|
432
439
|
:range_toosmallex : (line 3)[/A/1] '10.0': too small (<= min 10.0).
|
|
433
440
|
:range_toosmall : (line 5)[/B/0] '9.99999': too small (< min 10).
|
|
434
441
|
:range_toolargeex : (line 6)[/B/1] '100.0': too large (>= max 100.0).
|
|
435
|
-
|
|
442
|
+
##
|
|
436
443
|
---
|
|
437
444
|
name: length1
|
|
438
445
|
desc: length test
|
|
@@ -483,7 +490,7 @@ error: |
|
|
|
483
490
|
:length_tooshort : (line 4)[/min-only/0] 'foo': too short (length 3 < min 4).
|
|
484
491
|
:length_toolong : (line 7)[/max-and-min/0] 'foobarbaz': too long (length 9 > max 8).
|
|
485
492
|
:length_tooshort : (line 8)[/max-and-min/1] 'foo': too short (length 3 < min 4).
|
|
486
|
-
|
|
493
|
+
##
|
|
487
494
|
---
|
|
488
495
|
name: length2
|
|
489
496
|
desc: length test (with max-ex and min-ex)
|
|
@@ -533,7 +540,7 @@ error: |
|
|
|
533
540
|
:length_tooshortex : (line 4)[/min-ex-only/0] 'foo!': too short (length 4 <= min 4).
|
|
534
541
|
:length_toolongex : (line 7)[/max-ex-and-min-ex/0] 'foobarba': too long (length 8 >= max 8).
|
|
535
542
|
:length_tooshortex : (line 8)[/max-ex-and-min-ex/1] 'foo!': too short (length 4 <= min 4).
|
|
536
|
-
|
|
543
|
+
##
|
|
537
544
|
---
|
|
538
545
|
name: length3
|
|
539
546
|
desc: length test (with min, max, max-ex and min-ex)
|
|
@@ -573,7 +580,7 @@ error: |
|
|
|
573
580
|
:length_tooshortex : (line 3)[/A/1] 'hoge': too short (length 4 <= min 4).
|
|
574
581
|
:length_toolongex : (line 5)[/B/0] 'hogehoge': too long (length 8 >= max 8).
|
|
575
582
|
:length_tooshort : (line 6)[/B/1] 'hog': too short (length 3 < min 4).
|
|
576
|
-
|
|
583
|
+
##
|
|
577
584
|
---
|
|
578
585
|
name: assert1
|
|
579
586
|
desc: assert test
|
|
@@ -615,7 +622,7 @@ error: |
|
|
|
615
622
|
:assert_failed : (line 2)[/1/more-than] '3': assertion expression failed (3 < val).
|
|
616
623
|
:assert_failed : (line 3)[/2/between] '2.9': assertion expression failed (3 < val && val < 8).
|
|
617
624
|
:assert_failed : (line 4)[/3/except] '3.1': assertion expression failed (val < 3 || 8 < val).
|
|
618
|
-
|
|
625
|
+
##
|
|
619
626
|
---
|
|
620
627
|
name: deftype1
|
|
621
628
|
desc: default type test
|
|
@@ -651,7 +658,7 @@ error*:
|
|
|
651
658
|
:type_unmatch : (line 2)[/0/email] 'true': not a string.
|
|
652
659
|
:type_unmatch : (line 3)[/1/name] '3.14': not a string.
|
|
653
660
|
:type_unmatch : (line 4)[/2/email] 'Sun Feb 01 00:00:00 JST 2004': not a string.
|
|
654
|
-
|
|
661
|
+
##
|
|
655
662
|
---
|
|
656
663
|
name: ident1
|
|
657
664
|
desc: ident constraint test
|
|
@@ -684,7 +691,7 @@ invalid: |
|
|
|
684
691
|
#
|
|
685
692
|
error: |
|
|
686
693
|
:value_notunique : (line 5)[/2/name] 'bar': is already used at '/1/name'.
|
|
687
|
-
|
|
694
|
+
##
|
|
688
695
|
---
|
|
689
696
|
name: unique1
|
|
690
697
|
desc: unique constraint test with map
|
|
@@ -717,7 +724,7 @@ invalid: |
|
|
|
717
724
|
#
|
|
718
725
|
error: |
|
|
719
726
|
:value_notunique : (line 5)[/2/name] 'bar': is already used at '/1/name'.
|
|
720
|
-
|
|
727
|
+
##
|
|
721
728
|
---
|
|
722
729
|
name: unique2
|
|
723
730
|
desc: unique constraint test with seq
|
|
@@ -744,7 +751,7 @@ invalid: |
|
|
|
744
751
|
#
|
|
745
752
|
error: |
|
|
746
753
|
:value_notunique : (line 5)[/4] 'bar': is already used at '/2'.
|
|
747
|
-
|
|
754
|
+
##
|
|
748
755
|
---
|
|
749
756
|
name: default1
|
|
750
757
|
desc: default value of map
|
|
@@ -768,6 +775,7 @@ invalid: |
|
|
|
768
775
|
error: |
|
|
769
776
|
:range_toolarge : (line 2)[/value2] '20': too large (> max 10).
|
|
770
777
|
:range_toosmall : (line 3)[/value3] '-20': too small (< min -10).
|
|
778
|
+
##
|
|
771
779
|
---
|
|
772
780
|
name: merge1
|
|
773
781
|
desc: merge maps
|
|
@@ -813,4 +821,4 @@ invalid: |
|
|
|
813
821
|
error: |
|
|
814
822
|
:required_nokey : (line 4)[/user] key 'email:' is required.
|
|
815
823
|
:length_toolong : (line 5)[/user/name] 'toooooo-looooong-naaaame': too long (length 24 > max 16).
|
|
816
|
-
|
|
824
|
+
##
|
data/test/test-yamlparser.rb
CHANGED
|
@@ -1,26 +1,34 @@
|
|
|
1
1
|
###
|
|
2
|
-
### $Rev:
|
|
3
|
-
### $Release: 0.
|
|
2
|
+
### $Rev: 51 $
|
|
3
|
+
### $Release: 0.6.0 $
|
|
4
4
|
### copyright(c) 2005 kuwata-lab all rights reserved.
|
|
5
5
|
###
|
|
6
6
|
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
7
|
+
require File.dirname(__FILE__) + '/test.rb'
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
class Hash
|
|
11
|
+
|
|
12
|
+
def inspect
|
|
13
|
+
buf = [ '{' ]
|
|
14
|
+
self.keys.sort_by { |k| k.to_s }.each_with_index do |key, i|
|
|
15
|
+
buf << ', ' if i > 0
|
|
16
|
+
buf << key.inspect << '=>' << self[key].inspect
|
|
17
|
+
end
|
|
18
|
+
buf << '}'
|
|
19
|
+
return buf.join
|
|
20
|
+
end
|
|
12
21
|
|
|
13
|
-
|
|
14
|
-
require 'test/unit/ui/console/testrunner'
|
|
15
|
-
require 'kwalify'
|
|
16
|
-
require 'kwalify/util/assert-diff'
|
|
17
|
-
require 'yaml'
|
|
18
|
-
require 'pp'
|
|
19
|
-
require 'stringio'
|
|
22
|
+
end
|
|
20
23
|
|
|
21
24
|
|
|
22
25
|
class YamlParserTest < Test::Unit::TestCase
|
|
26
|
+
|
|
27
|
+
filename = __FILE__.sub(/\.rb$/, '.yaml')
|
|
28
|
+
load_yaml_testdata(filename, :lang=>'ruby')
|
|
29
|
+
|
|
23
30
|
def _test()
|
|
31
|
+
@error_class = Kwalify.const_get(@exception) if @exception
|
|
24
32
|
parser = Kwalify::YamlParser.new(@input)
|
|
25
33
|
if @error_class
|
|
26
34
|
assert_raise(@error_class) do
|
|
@@ -28,9 +36,13 @@ class YamlParserTest < Test::Unit::TestCase
|
|
|
28
36
|
end
|
|
29
37
|
else
|
|
30
38
|
doc = parser.parse()
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
39
|
+
if @recursive || @pp
|
|
40
|
+
s = StringWriter.new
|
|
41
|
+
PP.pp(doc, s)
|
|
42
|
+
actual = s
|
|
43
|
+
else
|
|
44
|
+
actual = doc.inspect + "\n"
|
|
45
|
+
end
|
|
34
46
|
if $log
|
|
35
47
|
File.open("#{@name}.expected", 'w') { |f| f.write(@expected) }
|
|
36
48
|
File.open("#{@name}.actual", 'w') { |f| f.write(actual) }
|
|
@@ -38,1239 +50,9 @@ class YamlParserTest < Test::Unit::TestCase
|
|
|
38
50
|
if $print
|
|
39
51
|
print actual
|
|
40
52
|
else
|
|
41
|
-
|
|
53
|
+
assert_text_equal(@expected, actual)
|
|
42
54
|
end
|
|
43
55
|
end
|
|
44
56
|
end
|
|
45
57
|
|
|
46
|
-
#str = DATA.read() # doesn't work when required by other script
|
|
47
|
-
str = File.read(__FILE__)
|
|
48
|
-
str.gsub!(/.*^__END__$/m, '')
|
|
49
|
-
doc_table = {}
|
|
50
|
-
YAML.load_documents(str) do |doc|
|
|
51
|
-
name = doc['name']
|
|
52
|
-
raise "name '#{name}' is duplicated." if doc_table[name]
|
|
53
|
-
doc_table[name] = doc
|
|
54
|
-
next if $target && $target != doc['name']
|
|
55
|
-
#if $target && $show
|
|
56
|
-
# puts doc.to_yaml
|
|
57
|
-
# exit
|
|
58
|
-
#end
|
|
59
|
-
s = <<-END
|
|
60
|
-
def test_#{name}
|
|
61
|
-
@name = #{doc['name'].dump}
|
|
62
|
-
@input = #{doc['input'].dump}
|
|
63
|
-
@expected = #{doc['expected'].dump}
|
|
64
|
-
@error_class = #{doc['error'] ? doc['error'] : 'nil'}
|
|
65
|
-
@option = #{doc['option'] ? doc['option'].dump : 'nil'}
|
|
66
|
-
_test()
|
|
67
|
-
end
|
|
68
|
-
END
|
|
69
|
-
if $target && $show
|
|
70
|
-
puts s
|
|
71
|
-
exit
|
|
72
|
-
end
|
|
73
|
-
eval s
|
|
74
|
-
end
|
|
75
58
|
end
|
|
76
|
-
|
|
77
|
-
#if $0 == __FILE__
|
|
78
|
-
# Test::Unit::UI::Console::TestRunner.run(YamlParserTest)
|
|
79
|
-
#end
|
|
80
|
-
|
|
81
|
-
__END__
|
|
82
|
-
---
|
|
83
|
-
name: parse01
|
|
84
|
-
desc: basic
|
|
85
|
-
#flag: print
|
|
86
|
-
#
|
|
87
|
-
input: |
|
|
88
|
-
- AAA
|
|
89
|
-
- BBB
|
|
90
|
-
- CCC
|
|
91
|
-
#
|
|
92
|
-
expected: |
|
|
93
|
-
["AAA", "BBB", "CCC"]
|
|
94
|
-
#
|
|
95
|
-
---
|
|
96
|
-
name: parse02
|
|
97
|
-
desc: scalar
|
|
98
|
-
#
|
|
99
|
-
input: |
|
|
100
|
-
- abc
|
|
101
|
-
- 123
|
|
102
|
-
- 3.14
|
|
103
|
-
- true
|
|
104
|
-
- false
|
|
105
|
-
- yes
|
|
106
|
-
- no
|
|
107
|
-
- ~
|
|
108
|
-
- null
|
|
109
|
-
- "123"
|
|
110
|
-
- '456'
|
|
111
|
-
- 2005-01-01
|
|
112
|
-
- :sym
|
|
113
|
-
#
|
|
114
|
-
expected: |
|
|
115
|
-
["abc",
|
|
116
|
-
123,
|
|
117
|
-
3.14,
|
|
118
|
-
true,
|
|
119
|
-
false,
|
|
120
|
-
true,
|
|
121
|
-
false,
|
|
122
|
-
nil,
|
|
123
|
-
nil,
|
|
124
|
-
"123",
|
|
125
|
-
"456",
|
|
126
|
-
#<Date: 4906743/2,0,2299161>,
|
|
127
|
-
:sym]
|
|
128
|
-
# ["abc", 123, true, false, true, false, nil, nil, "123", "456", #<Date: 4906743/2,0,2299161>, :sym]
|
|
129
|
-
#
|
|
130
|
-
---
|
|
131
|
-
name: parse03
|
|
132
|
-
desc: nested sequence
|
|
133
|
-
#
|
|
134
|
-
input: |
|
|
135
|
-
- AAA
|
|
136
|
-
-
|
|
137
|
-
- BBB1
|
|
138
|
-
- BBB2
|
|
139
|
-
- CCC
|
|
140
|
-
#
|
|
141
|
-
expected: |
|
|
142
|
-
["AAA", ["BBB1", "BBB2"], "CCC"]
|
|
143
|
-
#
|
|
144
|
-
---
|
|
145
|
-
name: parse04
|
|
146
|
-
desc: nested sequence #2
|
|
147
|
-
#
|
|
148
|
-
input: |
|
|
149
|
-
- A
|
|
150
|
-
-
|
|
151
|
-
- B1
|
|
152
|
-
-
|
|
153
|
-
- B1-1
|
|
154
|
-
- B1-2
|
|
155
|
-
- C
|
|
156
|
-
#
|
|
157
|
-
expected: |
|
|
158
|
-
["A", ["B1", ["B1-1", "B1-2"]], "C"]
|
|
159
|
-
#
|
|
160
|
-
---
|
|
161
|
-
name: parse05
|
|
162
|
-
desc: null item of sequence
|
|
163
|
-
#
|
|
164
|
-
input: |
|
|
165
|
-
- A
|
|
166
|
-
-
|
|
167
|
-
- C
|
|
168
|
-
-
|
|
169
|
-
-
|
|
170
|
-
-
|
|
171
|
-
- G
|
|
172
|
-
#
|
|
173
|
-
expected: |
|
|
174
|
-
["A", nil, "C", nil, nil, nil, "G"]
|
|
175
|
-
#
|
|
176
|
-
---
|
|
177
|
-
name: parse06
|
|
178
|
-
desc: null item of nested sequence
|
|
179
|
-
#
|
|
180
|
-
input: |
|
|
181
|
-
-
|
|
182
|
-
-
|
|
183
|
-
-
|
|
184
|
-
-
|
|
185
|
-
-
|
|
186
|
-
-
|
|
187
|
-
#
|
|
188
|
-
expected: |
|
|
189
|
-
[[[nil, nil, nil]], nil]
|
|
190
|
-
#
|
|
191
|
-
---
|
|
192
|
-
name: parse07
|
|
193
|
-
desc: sequence with empty lines
|
|
194
|
-
#
|
|
195
|
-
input: |
|
|
196
|
-
|
|
197
|
-
- A
|
|
198
|
-
|
|
199
|
-
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
- B
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
-
|
|
206
|
-
#
|
|
207
|
-
expected: |
|
|
208
|
-
["A", ["B"], nil]
|
|
209
|
-
#
|
|
210
|
-
---
|
|
211
|
-
name: parse08
|
|
212
|
-
desc: syntax error - invalid indent of sequence.
|
|
213
|
-
error: Kwalify::YamlSyntaxError
|
|
214
|
-
#
|
|
215
|
-
input: |
|
|
216
|
-
- AAA
|
|
217
|
-
- BBB1
|
|
218
|
-
- BBB2
|
|
219
|
-
- CCC
|
|
220
|
-
#
|
|
221
|
-
expected: |
|
|
222
|
-
#
|
|
223
|
-
---
|
|
224
|
-
name: parse09
|
|
225
|
-
desc: syntax error - sequence item is exepcted.
|
|
226
|
-
error: Kwalify::YamlSyntaxError
|
|
227
|
-
#
|
|
228
|
-
input: |
|
|
229
|
-
-
|
|
230
|
-
- a1
|
|
231
|
-
- a2
|
|
232
|
-
a3
|
|
233
|
-
-
|
|
234
|
-
- b1
|
|
235
|
-
- b2
|
|
236
|
-
b3
|
|
237
|
-
#
|
|
238
|
-
expected: |
|
|
239
|
-
#
|
|
240
|
-
---
|
|
241
|
-
name: parse11
|
|
242
|
-
desc: mapping
|
|
243
|
-
#
|
|
244
|
-
input: |
|
|
245
|
-
A: foo
|
|
246
|
-
B: bar
|
|
247
|
-
C : baz
|
|
248
|
-
#
|
|
249
|
-
expected: |
|
|
250
|
-
{"A"=>"foo", "B"=>"bar", "C"=>"baz"}
|
|
251
|
-
---
|
|
252
|
-
name: parse12
|
|
253
|
-
desc: mapping of scalar
|
|
254
|
-
#
|
|
255
|
-
input: |
|
|
256
|
-
abc: ABC
|
|
257
|
-
123: 1.23
|
|
258
|
-
3.14: 314
|
|
259
|
-
#
|
|
260
|
-
expected: |
|
|
261
|
-
{"abc"=>"ABC", 3.14=>314, 123=>1.23}
|
|
262
|
-
---
|
|
263
|
-
name: parse12b
|
|
264
|
-
desc: mapping of scalar
|
|
265
|
-
#
|
|
266
|
-
input: |
|
|
267
|
-
true: yes
|
|
268
|
-
false: no
|
|
269
|
-
#
|
|
270
|
-
expected: |
|
|
271
|
-
{false=>false, true=>true}
|
|
272
|
-
#
|
|
273
|
-
---
|
|
274
|
-
name: parse12c
|
|
275
|
-
desc: mapping of scalar
|
|
276
|
-
#
|
|
277
|
-
input: |
|
|
278
|
-
:sym: :symbol
|
|
279
|
-
--: -10
|
|
280
|
-
#
|
|
281
|
-
expected: |
|
|
282
|
-
{"--"=>-10, :sym=>:symbol}
|
|
283
|
-
#
|
|
284
|
-
---
|
|
285
|
-
name: parse13
|
|
286
|
-
desc: nested mapping
|
|
287
|
-
#
|
|
288
|
-
input: |
|
|
289
|
-
A: 10
|
|
290
|
-
B:
|
|
291
|
-
B1: 21
|
|
292
|
-
B2: 22
|
|
293
|
-
C: 30
|
|
294
|
-
#
|
|
295
|
-
expected: |
|
|
296
|
-
{"A"=>10, "B"=>{"B1"=>21, "B2"=>22}, "C"=>30}
|
|
297
|
-
#
|
|
298
|
-
---
|
|
299
|
-
name: parse14
|
|
300
|
-
desc: nested mapping #2
|
|
301
|
-
#
|
|
302
|
-
input: |
|
|
303
|
-
A: 10
|
|
304
|
-
B:
|
|
305
|
-
B1:
|
|
306
|
-
B1-1: 21
|
|
307
|
-
B1-2: 22
|
|
308
|
-
B1-3: 23
|
|
309
|
-
C: 30
|
|
310
|
-
#
|
|
311
|
-
expected: |
|
|
312
|
-
{"A"=>10, "B"=>{"B1"=>{"B1-1"=>21, "B1-2"=>22, "B1-3"=>23}}, "C"=>30}
|
|
313
|
-
#
|
|
314
|
-
---
|
|
315
|
-
name: parse15
|
|
316
|
-
desc: null item in mapping
|
|
317
|
-
#
|
|
318
|
-
input: |
|
|
319
|
-
A:
|
|
320
|
-
B:
|
|
321
|
-
C:
|
|
322
|
-
D:
|
|
323
|
-
#
|
|
324
|
-
expected: |
|
|
325
|
-
{"A"=>nil, "B"=>nil, "C"=>nil, "D"=>nil}
|
|
326
|
-
#
|
|
327
|
-
---
|
|
328
|
-
name: parse16
|
|
329
|
-
desc: null mapping
|
|
330
|
-
#
|
|
331
|
-
input: |
|
|
332
|
-
A:
|
|
333
|
-
B:
|
|
334
|
-
B1:
|
|
335
|
-
B1-2:
|
|
336
|
-
C:
|
|
337
|
-
#
|
|
338
|
-
expected: |
|
|
339
|
-
{"A"=>nil, "B"=>{"B1"=>{"B1-2"=>nil}}, "C"=>nil}
|
|
340
|
-
#
|
|
341
|
-
---
|
|
342
|
-
name: parse17
|
|
343
|
-
desc: mapping with empty lines
|
|
344
|
-
#
|
|
345
|
-
input: |
|
|
346
|
-
|
|
347
|
-
A: 1
|
|
348
|
-
|
|
349
|
-
B:
|
|
350
|
-
|
|
351
|
-
|
|
352
|
-
B1:
|
|
353
|
-
|
|
354
|
-
|
|
355
|
-
|
|
356
|
-
B1a: 2
|
|
357
|
-
C: 3
|
|
358
|
-
|
|
359
|
-
#
|
|
360
|
-
expected: |
|
|
361
|
-
{"A"=>1, "B"=>{"B1"=>{"B1a"=>2}}, "C"=>3}
|
|
362
|
-
#
|
|
363
|
-
---
|
|
364
|
-
name: parse18
|
|
365
|
-
desc: parse error - invalid indent of mapping.
|
|
366
|
-
error: Kwalify::YamlSyntaxError
|
|
367
|
-
#
|
|
368
|
-
input: |
|
|
369
|
-
A: 10
|
|
370
|
-
B: 20
|
|
371
|
-
B1: 21
|
|
372
|
-
B2: 22
|
|
373
|
-
C: 30
|
|
374
|
-
#
|
|
375
|
-
expected: |
|
|
376
|
-
|
|
377
|
-
#
|
|
378
|
-
---
|
|
379
|
-
name: parse19
|
|
380
|
-
desc: parse error - mapping item is expected.
|
|
381
|
-
error: Kwalify::YamlSyntaxError
|
|
382
|
-
#
|
|
383
|
-
input: |
|
|
384
|
-
A:
|
|
385
|
-
a1: 1
|
|
386
|
-
a2: 2
|
|
387
|
-
a3 3
|
|
388
|
-
B:
|
|
389
|
-
b1: 1
|
|
390
|
-
b2: 2
|
|
391
|
-
b3 3
|
|
392
|
-
expected: |
|
|
393
|
-
#
|
|
394
|
-
---
|
|
395
|
-
name: parse21
|
|
396
|
-
desc: seq of mapping
|
|
397
|
-
#
|
|
398
|
-
input: |
|
|
399
|
-
-
|
|
400
|
-
x: 10
|
|
401
|
-
y: 20
|
|
402
|
-
-
|
|
403
|
-
x: 15
|
|
404
|
-
y: 25
|
|
405
|
-
#
|
|
406
|
-
expected: |
|
|
407
|
-
[{"x"=>10, "y"=>20}, {"x"=>15, "y"=>25}]
|
|
408
|
-
---
|
|
409
|
-
name: parse22
|
|
410
|
-
desc: seq of mapping (inline)
|
|
411
|
-
#
|
|
412
|
-
input: |
|
|
413
|
-
- x: 10
|
|
414
|
-
y: 20
|
|
415
|
-
- x: 15
|
|
416
|
-
y: 25
|
|
417
|
-
#
|
|
418
|
-
expected: |
|
|
419
|
-
[{"x"=>10, "y"=>20}, {"x"=>15, "y"=>25}]
|
|
420
|
-
---
|
|
421
|
-
name: parse23
|
|
422
|
-
desc: seq of seq of seq (inline)
|
|
423
|
-
#
|
|
424
|
-
input: |
|
|
425
|
-
- - - a
|
|
426
|
-
- b
|
|
427
|
-
- - - c
|
|
428
|
-
- d
|
|
429
|
-
#
|
|
430
|
-
expected: |
|
|
431
|
-
[[["a", "b"]], [["c", "d"]]]
|
|
432
|
-
---
|
|
433
|
-
name: parse24
|
|
434
|
-
desc: map of sequence
|
|
435
|
-
#
|
|
436
|
-
input: |
|
|
437
|
-
foo:
|
|
438
|
-
- 1
|
|
439
|
-
- 2
|
|
440
|
-
- 3
|
|
441
|
-
bar:
|
|
442
|
-
- 4
|
|
443
|
-
- 5
|
|
444
|
-
- 6
|
|
445
|
-
#
|
|
446
|
-
expected: |
|
|
447
|
-
{"foo"=>[1, 2, 3], "bar"=>[4, 5, 6]}
|
|
448
|
-
---
|
|
449
|
-
name: parse25
|
|
450
|
-
desc: map of sequence (inline)
|
|
451
|
-
#
|
|
452
|
-
input: |
|
|
453
|
-
foo: - 1
|
|
454
|
-
- 2
|
|
455
|
-
- 3
|
|
456
|
-
bar: - 4
|
|
457
|
-
- 5
|
|
458
|
-
- 6
|
|
459
|
-
#
|
|
460
|
-
expected: |
|
|
461
|
-
{"foo"=>[1, 2, 3], "bar"=>[4, 5, 6]}
|
|
462
|
-
---
|
|
463
|
-
name: parse26
|
|
464
|
-
desc: map of map of map (inline)
|
|
465
|
-
#
|
|
466
|
-
input: |
|
|
467
|
-
A: a: 1: 100
|
|
468
|
-
2: 200
|
|
469
|
-
B: b: 3: 300
|
|
470
|
-
4: 400
|
|
471
|
-
#
|
|
472
|
-
expected: |
|
|
473
|
-
{"A"=>{"a"=>{1=>100, 2=>200}}, "B"=>{"b"=>{3=>300, 4=>400}}}
|
|
474
|
-
---
|
|
475
|
-
name: comment1
|
|
476
|
-
desc: line comment
|
|
477
|
-
#
|
|
478
|
-
input: |
|
|
479
|
-
# comment
|
|
480
|
-
- A
|
|
481
|
-
- B
|
|
482
|
-
# comment
|
|
483
|
-
-
|
|
484
|
-
# comment
|
|
485
|
-
- C
|
|
486
|
-
#
|
|
487
|
-
expected: |
|
|
488
|
-
["A", "B", ["C"]]
|
|
489
|
-
---
|
|
490
|
-
name: comment2
|
|
491
|
-
desc: escape line comment
|
|
492
|
-
#
|
|
493
|
-
input: |
|
|
494
|
-
# comment
|
|
495
|
-
- A
|
|
496
|
-
- B:
|
|
497
|
-
"# comment"
|
|
498
|
-
-
|
|
499
|
-
'# comment'
|
|
500
|
-
#
|
|
501
|
-
expected: |
|
|
502
|
-
["A", {"B"=>"# comment"}, "# comment"]
|
|
503
|
-
---
|
|
504
|
-
name: comment3
|
|
505
|
-
desc: line comment with seq and map
|
|
506
|
-
#
|
|
507
|
-
input: |
|
|
508
|
-
- A # comment
|
|
509
|
-
- B: # comment
|
|
510
|
-
C: foo # comment
|
|
511
|
-
D: "bar#bar" #comment
|
|
512
|
-
#
|
|
513
|
-
expected: |
|
|
514
|
-
["A", {"B"=>{"C"=>"foo", "D"=>"bar#bar"}}]
|
|
515
|
-
---
|
|
516
|
-
name: comment4
|
|
517
|
-
desc: line comment with anchor and alias
|
|
518
|
-
#
|
|
519
|
-
input: |
|
|
520
|
-
- &a1 # comment
|
|
521
|
-
foo
|
|
522
|
-
- *a1 # comment
|
|
523
|
-
#
|
|
524
|
-
expected: |
|
|
525
|
-
["foo", "foo"]
|
|
526
|
-
---
|
|
527
|
-
name: flowseq1
|
|
528
|
-
desc: flow style seq
|
|
529
|
-
#
|
|
530
|
-
input: |
|
|
531
|
-
- [ 10, 20 ]
|
|
532
|
-
- [15,25,35]
|
|
533
|
-
#
|
|
534
|
-
expected: |
|
|
535
|
-
[[10, 20], [15, 25, 35]]
|
|
536
|
-
#
|
|
537
|
-
---
|
|
538
|
-
name: flowseq2
|
|
539
|
-
desc: nested flow style seq
|
|
540
|
-
#
|
|
541
|
-
input: |
|
|
542
|
-
1: [ A, [B1, B2]]
|
|
543
|
-
2: [[[X]]]
|
|
544
|
-
3: [[x1,y1],[x2,"y2"],['x3',y3]]
|
|
545
|
-
#
|
|
546
|
-
expected: |
|
|
547
|
-
{1=>["A", ["B1", "B2"]],
|
|
548
|
-
2=>[[["X"]]],
|
|
549
|
-
3=>[["x1", "y1"], ["x2", "y2"], ["x3", "y3"]]}
|
|
550
|
-
#
|
|
551
|
-
---
|
|
552
|
-
name: flowseq3
|
|
553
|
-
desc: flow style seq with some lines
|
|
554
|
-
#
|
|
555
|
-
input: |
|
|
556
|
-
A: [ [10,20],
|
|
557
|
-
[11,21],
|
|
558
|
-
[12,22]]
|
|
559
|
-
B: [
|
|
560
|
-
[1.1,
|
|
561
|
-
1.2,
|
|
562
|
-
1.3
|
|
563
|
-
]
|
|
564
|
-
]
|
|
565
|
-
#
|
|
566
|
-
expected: |
|
|
567
|
-
{"A"=>[[10, 20], [11, 21], [12, 22]], "B"=>[[1.1, 1.2, 1.3]]}
|
|
568
|
-
#
|
|
569
|
-
---
|
|
570
|
-
name: flowseq4
|
|
571
|
-
desc: invalid flow style seq (sequence item required (or last comma is extra).)
|
|
572
|
-
mesg: sequence item required (or last comma is extra).
|
|
573
|
-
error: Kwalify::YamlSyntaxError
|
|
574
|
-
#
|
|
575
|
-
input: |
|
|
576
|
-
A: [ [10,20], ]
|
|
577
|
-
#
|
|
578
|
-
expected: |
|
|
579
|
-
#
|
|
580
|
-
---
|
|
581
|
-
name: flowseq5
|
|
582
|
-
desc: invalid flow style seq (flow style sequence requires ']').
|
|
583
|
-
mesg: flow style sequence requires ']'
|
|
584
|
-
error: Kwalify::YamlSyntaxError
|
|
585
|
-
#
|
|
586
|
-
input: |
|
|
587
|
-
A: [ [10,20]
|
|
588
|
-
B: [ [30, 40]]
|
|
589
|
-
#
|
|
590
|
-
expected: |
|
|
591
|
-
#
|
|
592
|
-
---
|
|
593
|
-
name: flowseq6
|
|
594
|
-
desc: invalid flow style seq (flow style sequence requires ']').
|
|
595
|
-
mesg: flow style sequence is closed but got ']'.
|
|
596
|
-
error: Kwalify::YamlSyntaxError
|
|
597
|
-
#
|
|
598
|
-
input: |
|
|
599
|
-
[ 10 ]]
|
|
600
|
-
#
|
|
601
|
-
expected: |
|
|
602
|
-
#
|
|
603
|
-
---
|
|
604
|
-
name: flowmap1
|
|
605
|
-
desc: flow style map
|
|
606
|
-
#
|
|
607
|
-
input: |
|
|
608
|
-
- { A1: 10, A2: 20 }
|
|
609
|
-
- {B1: 15, 'B2': 25, "B3": 35}
|
|
610
|
-
#
|
|
611
|
-
expected: |
|
|
612
|
-
[{"A1"=>10, "A2"=>20}, {"B1"=>15, "B2"=>25, "B3"=>35}]
|
|
613
|
-
#
|
|
614
|
-
---
|
|
615
|
-
name: flowmap2
|
|
616
|
-
desc: flow style map nested
|
|
617
|
-
#
|
|
618
|
-
input: |
|
|
619
|
-
A: { x: {y: {z: 10}}}
|
|
620
|
-
B: { a: 1, b:{c: 2, d: 3, e:{f: 4}}, g: 5}
|
|
621
|
-
#
|
|
622
|
-
expected: |
|
|
623
|
-
{"A"=>{"x"=>{"y"=>{"z"=>10}}},
|
|
624
|
-
"B"=>{"a"=>1, "b"=>{"c"=>2, "d"=>3, "e"=>{"f"=>4}}, "g"=>5}}
|
|
625
|
-
#
|
|
626
|
-
---
|
|
627
|
-
name: flowmap3
|
|
628
|
-
desc: flow style map with some lines
|
|
629
|
-
#
|
|
630
|
-
input: |
|
|
631
|
-
A: { x:
|
|
632
|
-
{y:
|
|
633
|
-
{z: 10}
|
|
634
|
-
}
|
|
635
|
-
}
|
|
636
|
-
B: {
|
|
637
|
-
a: 1,
|
|
638
|
-
b: {
|
|
639
|
-
c: 2,
|
|
640
|
-
d: 3,
|
|
641
|
-
e: {
|
|
642
|
-
f: 4
|
|
643
|
-
}
|
|
644
|
-
},
|
|
645
|
-
g: 5
|
|
646
|
-
}
|
|
647
|
-
#
|
|
648
|
-
expected: |
|
|
649
|
-
{"A"=>{"x"=>{"y"=>{"z"=>10}}},
|
|
650
|
-
"B"=>{"a"=>1, "b"=>{"c"=>2, "d"=>3, "e"=>{"f"=>4}}, "g"=>5}}
|
|
651
|
-
#
|
|
652
|
-
---
|
|
653
|
-
name: flowmap4
|
|
654
|
-
desc: invalid flow style map (mapping item required (or last comma is extra).)
|
|
655
|
-
mesg: mapping item required (or last comma is extra).
|
|
656
|
-
error: Kwalify::YamlSyntaxError
|
|
657
|
-
#
|
|
658
|
-
input: |
|
|
659
|
-
- {A: 10, B: 20, }
|
|
660
|
-
#
|
|
661
|
-
expected: |
|
|
662
|
-
#
|
|
663
|
-
---
|
|
664
|
-
name: flowmap5
|
|
665
|
-
desc: invalid flow style map (flow style mapping requires '}').
|
|
666
|
-
mesg: flow style mapping requires '}'
|
|
667
|
-
error: Kwalify::YamlSyntaxError
|
|
668
|
-
#
|
|
669
|
-
input: |
|
|
670
|
-
- {A: { x: 10, y: 20 }
|
|
671
|
-
- {A: { x: 11, y: 21 }}
|
|
672
|
-
#
|
|
673
|
-
expected: |
|
|
674
|
-
#
|
|
675
|
-
---
|
|
676
|
-
name: flowmap6
|
|
677
|
-
desc: invalid flow style map (flow style mapping requires ']').
|
|
678
|
-
mesg: flow style mapping is closed but got '}'.
|
|
679
|
-
error: Kwalify::YamlSyntaxError
|
|
680
|
-
#
|
|
681
|
-
input: |
|
|
682
|
-
{ x: 10 }}
|
|
683
|
-
#
|
|
684
|
-
expected: |
|
|
685
|
-
#
|
|
686
|
-
---
|
|
687
|
-
name: parse61
|
|
688
|
-
desc: combination of flow style seq and map
|
|
689
|
-
#
|
|
690
|
-
input: |
|
|
691
|
-
[
|
|
692
|
-
{name: ' foo ',
|
|
693
|
-
e-mail: foo@mail.com},
|
|
694
|
-
{name: ba z,
|
|
695
|
-
e-mail: ba__z@mail.com }
|
|
696
|
-
]
|
|
697
|
-
#
|
|
698
|
-
expected: |
|
|
699
|
-
[{"name"=>" foo ", "e-mail"=>"foo@mail.com"},
|
|
700
|
-
{"name"=>"ba z", "e-mail"=>"ba__z@mail.com"}]
|
|
701
|
-
#
|
|
702
|
-
---
|
|
703
|
-
name: block_text1
|
|
704
|
-
desc: parse_block_text
|
|
705
|
-
#
|
|
706
|
-
input: |
|
|
707
|
-
- text1: |
|
|
708
|
-
foo
|
|
709
|
-
bar
|
|
710
|
-
baz
|
|
711
|
-
- text2: |
|
|
712
|
-
aaa
|
|
713
|
-
bbb
|
|
714
|
-
ccc
|
|
715
|
-
- |
|
|
716
|
-
foo
|
|
717
|
-
bar
|
|
718
|
-
baz
|
|
719
|
-
- |
|
|
720
|
-
aaa
|
|
721
|
-
bbb
|
|
722
|
-
ccc
|
|
723
|
-
#
|
|
724
|
-
expected: |
|
|
725
|
-
[{"text1"=>"foo\nbar\nbaz\n"},
|
|
726
|
-
{"text2"=>" aaa\nbbb\n ccc\n"},
|
|
727
|
-
"foo\nbar\nbaz\n",
|
|
728
|
-
" aaa\nbbb\n ccc\n"]
|
|
729
|
-
#
|
|
730
|
-
---
|
|
731
|
-
name: block_text2
|
|
732
|
-
desc: block text with '|+' or '|-'
|
|
733
|
-
#
|
|
734
|
-
input: |
|
|
735
|
-
- text1: |
|
|
736
|
-
A
|
|
737
|
-
|
|
738
|
-
B
|
|
739
|
-
C
|
|
740
|
-
|
|
741
|
-
|
|
742
|
-
- text2: |+
|
|
743
|
-
A
|
|
744
|
-
|
|
745
|
-
B
|
|
746
|
-
C
|
|
747
|
-
|
|
748
|
-
|
|
749
|
-
- text3: |-
|
|
750
|
-
A
|
|
751
|
-
|
|
752
|
-
B
|
|
753
|
-
C
|
|
754
|
-
|
|
755
|
-
|
|
756
|
-
#
|
|
757
|
-
expected: |
|
|
758
|
-
[{"text1"=>"A\n\nB\nC\n"},
|
|
759
|
-
{"text2"=>"A\n\nB\nC\n\n\n"},
|
|
760
|
-
{"text3"=>"A\n\nB\nC"}]
|
|
761
|
-
#
|
|
762
|
-
---
|
|
763
|
-
name: block_text3
|
|
764
|
-
desc: block text with '| foo'
|
|
765
|
-
#
|
|
766
|
-
input: |
|
|
767
|
-
- text1: | foo
|
|
768
|
-
A
|
|
769
|
-
|
|
770
|
-
B
|
|
771
|
-
C
|
|
772
|
-
|
|
773
|
-
- | foo
|
|
774
|
-
A
|
|
775
|
-
B
|
|
776
|
-
C
|
|
777
|
-
#
|
|
778
|
-
expected: |
|
|
779
|
-
[{"text1"=>"foo A\n\nB\nC\n"}, "fooA\n B\n C\n"]
|
|
780
|
-
#
|
|
781
|
-
---
|
|
782
|
-
name: block_text4
|
|
783
|
-
desc: block text with '#' (comment)
|
|
784
|
-
#
|
|
785
|
-
input: |
|
|
786
|
-
#
|
|
787
|
-
- text1: |
|
|
788
|
-
A
|
|
789
|
-
#
|
|
790
|
-
B
|
|
791
|
-
#
|
|
792
|
-
text2: |
|
|
793
|
-
#
|
|
794
|
-
#
|
|
795
|
-
#
|
|
796
|
-
- |
|
|
797
|
-
A
|
|
798
|
-
#
|
|
799
|
-
B
|
|
800
|
-
#
|
|
801
|
-
- |
|
|
802
|
-
#
|
|
803
|
-
#
|
|
804
|
-
#
|
|
805
|
-
- x
|
|
806
|
-
|
|
807
|
-
#
|
|
808
|
-
expected: |
|
|
809
|
-
[{"text1"=>"A\n#\nB\n", "text2"=>"#\n#\n"}, "A\n#\nB\n", "#\n#\n", "x"]
|
|
810
|
-
#
|
|
811
|
-
---
|
|
812
|
-
name: block_text6
|
|
813
|
-
desc: parse_block_text (>)
|
|
814
|
-
#
|
|
815
|
-
input: |
|
|
816
|
-
- text1: >
|
|
817
|
-
foo
|
|
818
|
-
bar
|
|
819
|
-
baz
|
|
820
|
-
- text2: >
|
|
821
|
-
aaa
|
|
822
|
-
bbb
|
|
823
|
-
ccc
|
|
824
|
-
- >
|
|
825
|
-
foo
|
|
826
|
-
bar
|
|
827
|
-
baz
|
|
828
|
-
- >
|
|
829
|
-
aaa
|
|
830
|
-
bbb
|
|
831
|
-
ccc
|
|
832
|
-
#
|
|
833
|
-
expected: |
|
|
834
|
-
[{"text1"=>"foo bar baz\n"},
|
|
835
|
-
{"text2"=>" aaa bbb ccc\n"},
|
|
836
|
-
"foo bar baz\n",
|
|
837
|
-
" aaa bbb ccc\n"]
|
|
838
|
-
#
|
|
839
|
-
---
|
|
840
|
-
name: block_text7
|
|
841
|
-
desc: block text with '>+' or '>-'
|
|
842
|
-
#
|
|
843
|
-
input: |
|
|
844
|
-
- text1: >
|
|
845
|
-
A
|
|
846
|
-
|
|
847
|
-
B
|
|
848
|
-
C
|
|
849
|
-
|
|
850
|
-
|
|
851
|
-
- text2: >+
|
|
852
|
-
A
|
|
853
|
-
|
|
854
|
-
B
|
|
855
|
-
C
|
|
856
|
-
|
|
857
|
-
|
|
858
|
-
- text3: >-
|
|
859
|
-
A
|
|
860
|
-
|
|
861
|
-
B
|
|
862
|
-
C
|
|
863
|
-
|
|
864
|
-
|
|
865
|
-
#
|
|
866
|
-
expected: |
|
|
867
|
-
[{"text1"=>"A\nB C\n"}, {"text2"=>"A\nB C\n\n"}, {"text3"=>"A\nB C"}]
|
|
868
|
-
#
|
|
869
|
-
---
|
|
870
|
-
name: block_text8
|
|
871
|
-
desc: block text with '> foo'
|
|
872
|
-
#
|
|
873
|
-
input: |
|
|
874
|
-
- text1: > foo
|
|
875
|
-
A
|
|
876
|
-
|
|
877
|
-
B
|
|
878
|
-
C
|
|
879
|
-
|
|
880
|
-
- > foo
|
|
881
|
-
A
|
|
882
|
-
B
|
|
883
|
-
C
|
|
884
|
-
#
|
|
885
|
-
expected: |
|
|
886
|
-
[{"text1"=>"foo A\nB C\n"}, "fooA B C\n"]
|
|
887
|
-
#
|
|
888
|
-
---
|
|
889
|
-
name: block_text9
|
|
890
|
-
desc: block text with '#' (comment)
|
|
891
|
-
#
|
|
892
|
-
input: |
|
|
893
|
-
#
|
|
894
|
-
- text1: >
|
|
895
|
-
AA
|
|
896
|
-
##
|
|
897
|
-
BB
|
|
898
|
-
#
|
|
899
|
-
text2: >
|
|
900
|
-
#
|
|
901
|
-
#
|
|
902
|
-
#
|
|
903
|
-
- >
|
|
904
|
-
AA
|
|
905
|
-
##
|
|
906
|
-
BB
|
|
907
|
-
#
|
|
908
|
-
- >
|
|
909
|
-
#
|
|
910
|
-
#
|
|
911
|
-
#
|
|
912
|
-
- x
|
|
913
|
-
|
|
914
|
-
#
|
|
915
|
-
expected: |
|
|
916
|
-
[{"text1"=>"AA ## BB\n", "text2"=>"# #\n"}, "AA ## BB\n", "# #\n", "x"]
|
|
917
|
-
#
|
|
918
|
-
---
|
|
919
|
-
name: anchor1
|
|
920
|
-
desc: parse_anchor, parse_alias
|
|
921
|
-
#
|
|
922
|
-
input: |
|
|
923
|
-
- &a1 foo
|
|
924
|
-
- &a2
|
|
925
|
-
bar
|
|
926
|
-
- *a1
|
|
927
|
-
- *a2
|
|
928
|
-
#
|
|
929
|
-
expected: |
|
|
930
|
-
["foo", "bar", "foo", "bar"]
|
|
931
|
-
#
|
|
932
|
-
---
|
|
933
|
-
name: anchor2
|
|
934
|
-
desc: parse_anchor, parse_alias
|
|
935
|
-
#
|
|
936
|
-
input: |
|
|
937
|
-
- A: &a1
|
|
938
|
-
x: 10
|
|
939
|
-
y: 20
|
|
940
|
-
- B: bar
|
|
941
|
-
- C: *a1
|
|
942
|
-
#
|
|
943
|
-
expected: |
|
|
944
|
-
[{"A"=>{"x"=>10, "y"=>20}}, {"B"=>"bar"}, {"C"=>{"x"=>10, "y"=>20}}]
|
|
945
|
-
#
|
|
946
|
-
---
|
|
947
|
-
name: anchor3
|
|
948
|
-
desc: anchor on child node
|
|
949
|
-
#
|
|
950
|
-
input: |
|
|
951
|
-
- A: &a1
|
|
952
|
-
x: 10
|
|
953
|
-
y: 20
|
|
954
|
-
z: *a1
|
|
955
|
-
#
|
|
956
|
-
expected: |
|
|
957
|
-
[{"A"=>{"x"=>10, "y"=>20, "z"=>{...}}}]
|
|
958
|
-
#
|
|
959
|
-
---
|
|
960
|
-
name: anchor4
|
|
961
|
-
desc: backward anchor
|
|
962
|
-
#
|
|
963
|
-
input: |
|
|
964
|
-
- *a1
|
|
965
|
-
- *a1
|
|
966
|
-
- foo
|
|
967
|
-
- &a1 bar
|
|
968
|
-
#
|
|
969
|
-
expected: |
|
|
970
|
-
["bar", "bar", "foo", "bar"]
|
|
971
|
-
#
|
|
972
|
-
---
|
|
973
|
-
name: anchor5
|
|
974
|
-
desc: anchor not found
|
|
975
|
-
error: Kwalify::YamlSyntaxError
|
|
976
|
-
mesg: anchor 'a2' not found (Kwalify::YamlSyntaxError)
|
|
977
|
-
#
|
|
978
|
-
input: |
|
|
979
|
-
- &a1 foo
|
|
980
|
-
- bar
|
|
981
|
-
- *a2
|
|
982
|
-
#
|
|
983
|
-
expected: |
|
|
984
|
-
#
|
|
985
|
-
---
|
|
986
|
-
name: anchor6
|
|
987
|
-
desc: anchor on child node
|
|
988
|
-
#
|
|
989
|
-
input: |
|
|
990
|
-
type: seq
|
|
991
|
-
sequence:
|
|
992
|
-
- &employee
|
|
993
|
-
type: map
|
|
994
|
-
mapping:
|
|
995
|
-
name:
|
|
996
|
-
type: str
|
|
997
|
-
post:
|
|
998
|
-
type: str
|
|
999
|
-
enum:
|
|
1000
|
-
- exective
|
|
1001
|
-
- manager
|
|
1002
|
-
- clerk
|
|
1003
|
-
supervisor: *employee
|
|
1004
|
-
#
|
|
1005
|
-
expected: |
|
|
1006
|
-
{"sequence"=>
|
|
1007
|
-
[{"type"=>"map",
|
|
1008
|
-
"mapping"=>
|
|
1009
|
-
{"name"=>{"type"=>"str"},
|
|
1010
|
-
"post"=>{"type"=>"str", "enum"=>["exective", "manager", "clerk"]},
|
|
1011
|
-
"supervisor"=>{...}}}],
|
|
1012
|
-
"type"=>"seq"}
|
|
1013
|
-
#
|
|
1014
|
-
---
|
|
1015
|
-
name: tag1
|
|
1016
|
-
desc: tag
|
|
1017
|
-
#
|
|
1018
|
-
input: |
|
|
1019
|
-
- !str 123
|
|
1020
|
-
- foo: !text 123
|
|
1021
|
-
#
|
|
1022
|
-
expected: |
|
|
1023
|
-
[123, {"foo"=>123}]
|
|
1024
|
-
#
|
|
1025
|
-
---
|
|
1026
|
-
name: docend1
|
|
1027
|
-
desc: ... (document end)
|
|
1028
|
-
#
|
|
1029
|
-
input: |
|
|
1030
|
-
- aaa
|
|
1031
|
-
- bbb
|
|
1032
|
-
...
|
|
1033
|
-
- ccc
|
|
1034
|
-
#
|
|
1035
|
-
expected: |
|
|
1036
|
-
["aaa", "bbb"]
|
|
1037
|
-
#
|
|
1038
|
-
---
|
|
1039
|
-
name: docend2
|
|
1040
|
-
desc: ... (document end) in block text
|
|
1041
|
-
#
|
|
1042
|
-
input: |
|
|
1043
|
-
- |
|
|
1044
|
-
foo
|
|
1045
|
-
...
|
|
1046
|
-
bar
|
|
1047
|
-
#
|
|
1048
|
-
expected: |
|
|
1049
|
-
["foo\n...\nbar\n"]
|
|
1050
|
-
#
|
|
1051
|
-
---
|
|
1052
|
-
name: docstart1
|
|
1053
|
-
desc: --- (document start)
|
|
1054
|
-
#
|
|
1055
|
-
input: |
|
|
1056
|
-
# comment
|
|
1057
|
-
---
|
|
1058
|
-
- foo
|
|
1059
|
-
- bar
|
|
1060
|
-
#
|
|
1061
|
-
expected: |
|
|
1062
|
-
["foo", "bar"]
|
|
1063
|
-
#
|
|
1064
|
-
---
|
|
1065
|
-
name: docstart2
|
|
1066
|
-
desc: --- (document start) with tag
|
|
1067
|
-
#
|
|
1068
|
-
input: |
|
|
1069
|
-
# comment
|
|
1070
|
-
--- %YAML !seq
|
|
1071
|
-
- foo
|
|
1072
|
-
- bar
|
|
1073
|
-
#
|
|
1074
|
-
expected: |
|
|
1075
|
-
["foo", "bar"]
|
|
1076
|
-
#
|
|
1077
|
-
---
|
|
1078
|
-
name: docstart3
|
|
1079
|
-
desc: --- (document start) with tag
|
|
1080
|
-
#
|
|
1081
|
-
input: |
|
|
1082
|
-
- |
|
|
1083
|
-
foo
|
|
1084
|
-
---
|
|
1085
|
-
bar
|
|
1086
|
-
---
|
|
1087
|
-
baz
|
|
1088
|
-
#
|
|
1089
|
-
expected: |
|
|
1090
|
-
["foo\n---\nbar\n---\nbaz\n"]
|
|
1091
|
-
#
|
|
1092
|
-
---
|
|
1093
|
-
name: default1
|
|
1094
|
-
desc: map default value
|
|
1095
|
-
#
|
|
1096
|
-
input: |
|
|
1097
|
-
A: 10
|
|
1098
|
-
B: 20
|
|
1099
|
-
=: 0
|
|
1100
|
-
#
|
|
1101
|
-
expected: |
|
|
1102
|
-
{"A"=>10, "B"=>20}
|
|
1103
|
-
#
|
|
1104
|
-
---
|
|
1105
|
-
name: merge1
|
|
1106
|
-
desc: merge key '<<'
|
|
1107
|
-
#
|
|
1108
|
-
input: |
|
|
1109
|
-
- &a1
|
|
1110
|
-
A: 10
|
|
1111
|
-
B: 20
|
|
1112
|
-
- C: 30
|
|
1113
|
-
<<: *a1
|
|
1114
|
-
A: ~
|
|
1115
|
-
#
|
|
1116
|
-
expected: |
|
|
1117
|
-
[{"A"=>10, "B"=>20}, {"A"=>nil, "B"=>20, "C"=>30}]
|
|
1118
|
-
---
|
|
1119
|
-
name: example1
|
|
1120
|
-
desc: complex combination of seq and map
|
|
1121
|
-
#
|
|
1122
|
-
input: |
|
|
1123
|
-
columns:
|
|
1124
|
-
- name: id
|
|
1125
|
-
type: integer
|
|
1126
|
-
primary-key: yes
|
|
1127
|
-
sequence: yes
|
|
1128
|
-
|
|
1129
|
-
- name: name
|
|
1130
|
-
type: string
|
|
1131
|
-
not-null: yes
|
|
1132
|
-
width: 63
|
|
1133
|
-
|
|
1134
|
-
- name: desc
|
|
1135
|
-
type: string
|
|
1136
|
-
|
|
1137
|
-
- name: email
|
|
1138
|
-
type: string
|
|
1139
|
-
width: 63
|
|
1140
|
-
|
|
1141
|
-
- name: birth
|
|
1142
|
-
type: date
|
|
1143
|
-
|
|
1144
|
-
- name: age
|
|
1145
|
-
type: integer
|
|
1146
|
-
|
|
1147
|
-
- name: last_update
|
|
1148
|
-
type: timestamp
|
|
1149
|
-
|
|
1150
|
-
- name: gender
|
|
1151
|
-
type: string
|
|
1152
|
-
values:
|
|
1153
|
-
- M
|
|
1154
|
-
- F
|
|
1155
|
-
|
|
1156
|
-
tables:
|
|
1157
|
-
- name: groups
|
|
1158
|
-
class: Group
|
|
1159
|
-
desc: Group master table
|
|
1160
|
-
columns:
|
|
1161
|
-
- name: id
|
|
1162
|
-
- name: name
|
|
1163
|
-
- name: desc
|
|
1164
|
-
|
|
1165
|
-
- name: users
|
|
1166
|
-
class: User
|
|
1167
|
-
desc: User master table
|
|
1168
|
-
columns:
|
|
1169
|
-
- name: id
|
|
1170
|
-
- name: name
|
|
1171
|
-
- name: desc
|
|
1172
|
-
- name: email
|
|
1173
|
-
- name: group_id
|
|
1174
|
-
type: ref
|
|
1175
|
-
ref: groups.id
|
|
1176
|
-
- name: account
|
|
1177
|
-
type: string
|
|
1178
|
-
maxlength: 31
|
|
1179
|
-
not-null: yes
|
|
1180
|
-
- name: password
|
|
1181
|
-
not-null: yes
|
|
1182
|
-
#
|
|
1183
|
-
expected: |
|
|
1184
|
-
{"columns"=>
|
|
1185
|
-
[{"name"=>"id", "sequence"=>true, "type"=>"integer", "primary-key"=>true},
|
|
1186
|
-
{"name"=>"name", "not-null"=>true, "type"=>"string", "width"=>63},
|
|
1187
|
-
{"name"=>"desc", "type"=>"string"},
|
|
1188
|
-
{"name"=>"email", "type"=>"string", "width"=>63},
|
|
1189
|
-
{"name"=>"birth", "type"=>"date"},
|
|
1190
|
-
{"name"=>"age", "type"=>"integer"},
|
|
1191
|
-
{"name"=>"last_update", "type"=>"timestamp"},
|
|
1192
|
-
{"name"=>"gender", "type"=>"string", "values"=>["M", "F"]}],
|
|
1193
|
-
"tables"=>
|
|
1194
|
-
[{"columns"=>[{"name"=>"id"}, {"name"=>"name"}, {"name"=>"desc"}],
|
|
1195
|
-
"name"=>"groups",
|
|
1196
|
-
"class"=>"Group",
|
|
1197
|
-
"desc"=>"Group master table"},
|
|
1198
|
-
{"columns"=>
|
|
1199
|
-
[{"name"=>"id"},
|
|
1200
|
-
{"name"=>"name"},
|
|
1201
|
-
{"name"=>"desc"},
|
|
1202
|
-
{"name"=>"email"},
|
|
1203
|
-
{"name"=>"group_id", "type"=>"ref", "ref"=>"groups.id"},
|
|
1204
|
-
{"name"=>"account", "not-null"=>true, "type"=>"string", "maxlength"=>31},
|
|
1205
|
-
{"name"=>"password", "not-null"=>true}],
|
|
1206
|
-
"name"=>"users",
|
|
1207
|
-
"class"=>"User",
|
|
1208
|
-
"desc"=>"User master table"}]}
|
|
1209
|
-
#
|
|
1210
|
-
---
|
|
1211
|
-
name: example2
|
|
1212
|
-
desc: invoice
|
|
1213
|
-
#
|
|
1214
|
-
input: |
|
|
1215
|
-
invoice: 34843
|
|
1216
|
-
date : 2001-01-23
|
|
1217
|
-
bill-to: &id001
|
|
1218
|
-
given : Chris
|
|
1219
|
-
family : Dumars
|
|
1220
|
-
address:
|
|
1221
|
-
lines: |
|
|
1222
|
-
458 Walkman Dr.
|
|
1223
|
-
Suite #292
|
|
1224
|
-
city : Royal Oak
|
|
1225
|
-
state : MI
|
|
1226
|
-
postal : 48046
|
|
1227
|
-
ship-to: *id001
|
|
1228
|
-
product:
|
|
1229
|
-
- sku : BL394D
|
|
1230
|
-
quantity : 4
|
|
1231
|
-
description : Basketball
|
|
1232
|
-
price : 450.00
|
|
1233
|
-
- sku : BL4438H
|
|
1234
|
-
quantity : 1
|
|
1235
|
-
description : Super Hoop
|
|
1236
|
-
price : 2392.00
|
|
1237
|
-
tax : 251.42
|
|
1238
|
-
total: 4443.52
|
|
1239
|
-
comments: >
|
|
1240
|
-
Late afternoon is best.
|
|
1241
|
-
Backup contact is Nancy
|
|
1242
|
-
Billsmer @ 338-4338.
|
|
1243
|
-
#
|
|
1244
|
-
expected: |
|
|
1245
|
-
{"tax"=>251.42,
|
|
1246
|
-
"bill-to"=>
|
|
1247
|
-
{"given"=>"Chris",
|
|
1248
|
-
"family"=>"Dumars",
|
|
1249
|
-
"address"=>
|
|
1250
|
-
{"postal"=>48046,
|
|
1251
|
-
"city"=>"Royal Oak",
|
|
1252
|
-
"lines"=>"458 Walkman Dr.\nSuite #292\n",
|
|
1253
|
-
"state"=>"MI"}},
|
|
1254
|
-
"comments"=>
|
|
1255
|
-
"Late afternoon is best. Backup contact is Nancy Billsmer @ 338-4338.\n",
|
|
1256
|
-
"invoice"=>34843,
|
|
1257
|
-
"date"=>#<Date: 4903865/2,0,2299161>,
|
|
1258
|
-
"total"=>4443.52,
|
|
1259
|
-
"product"=>
|
|
1260
|
-
[{"price"=>450.0,
|
|
1261
|
-
"quantity"=>4,
|
|
1262
|
-
"description"=>"Basketball",
|
|
1263
|
-
"sku"=>"BL394D"},
|
|
1264
|
-
{"price"=>2392.0,
|
|
1265
|
-
"quantity"=>1,
|
|
1266
|
-
"description"=>"Super Hoop",
|
|
1267
|
-
"sku"=>"BL4438H"}],
|
|
1268
|
-
"ship-to"=>
|
|
1269
|
-
{"given"=>"Chris",
|
|
1270
|
-
"family"=>"Dumars",
|
|
1271
|
-
"address"=>
|
|
1272
|
-
{"postal"=>48046,
|
|
1273
|
-
"city"=>"Royal Oak",
|
|
1274
|
-
"lines"=>"458 Walkman Dr.\nSuite #292\n",
|
|
1275
|
-
"state"=>"MI"}}}
|
|
1276
|
-
#
|