dc-kwalify 0.7.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (209) hide show
  1. data/CHANGES.txt +252 -0
  2. data/MIT-LICENSE +20 -0
  3. data/README.txt +61 -0
  4. data/bin/kwalify +13 -0
  5. data/contrib/inline-require +179 -0
  6. data/contrib/kwalify +4160 -0
  7. data/doc/docstyle.css +188 -0
  8. data/doc/img/fig01.png +0 -0
  9. data/doc/users-guide.html +2050 -0
  10. data/doc-api/classes/CommandOptionError.html +184 -0
  11. data/doc-api/classes/CommandOptionParser.html +325 -0
  12. data/doc-api/classes/Kwalify/AssertionError.html +148 -0
  13. data/doc-api/classes/Kwalify/BaseError.html +297 -0
  14. data/doc-api/classes/Kwalify/BaseParser.html +461 -0
  15. data/doc-api/classes/Kwalify/CommandOptionError.html +168 -0
  16. data/doc-api/classes/Kwalify/ErrorHelper.html +223 -0
  17. data/doc-api/classes/Kwalify/HashInterface.html +118 -0
  18. data/doc-api/classes/Kwalify/Json.html +105 -0
  19. data/doc-api/classes/Kwalify/KwalifyError.html +111 -0
  20. data/doc-api/classes/Kwalify/Main.html +339 -0
  21. data/doc-api/classes/Kwalify/MetaValidator.html +448 -0
  22. data/doc-api/classes/Kwalify/Parser.html +155 -0
  23. data/doc-api/classes/Kwalify/PlainYamlParser/Alias.html +165 -0
  24. data/doc-api/classes/Kwalify/PlainYamlParser.html +523 -0
  25. data/doc-api/classes/Kwalify/Rule.html +433 -0
  26. data/doc-api/classes/Kwalify/SchemaError.html +148 -0
  27. data/doc-api/classes/Kwalify/SyntaxError.html +185 -0
  28. data/doc-api/classes/Kwalify/Types.html +302 -0
  29. data/doc-api/classes/Kwalify/Util/HashLike.html +246 -0
  30. data/doc-api/classes/Kwalify/Util/OrderedHash.html +330 -0
  31. data/doc-api/classes/Kwalify/Util.html +390 -0
  32. data/doc-api/classes/Kwalify/ValidationError.html +148 -0
  33. data/doc-api/classes/Kwalify/Validator.html +381 -0
  34. data/doc-api/classes/Kwalify/Yaml/Parser.html +1538 -0
  35. data/doc-api/classes/Kwalify/Yaml.html +194 -0
  36. data/doc-api/classes/Kwalify/YamlParser.html +542 -0
  37. data/doc-api/classes/Kwalify/YamlSyntaxError.html +119 -0
  38. data/doc-api/classes/Kwalify.html +292 -0
  39. data/doc-api/classes/Test/Unit.html +101 -0
  40. data/doc-api/classes/Test.html +107 -0
  41. data/doc-api/created.rid +1 -0
  42. data/doc-api/files/__/README_txt.html +172 -0
  43. data/doc-api/files/kwalify/errors_rb.html +114 -0
  44. data/doc-api/files/kwalify/main_rb.html +118 -0
  45. data/doc-api/files/kwalify/messages_rb.html +107 -0
  46. data/doc-api/files/kwalify/meta-validator_rb.html +117 -0
  47. data/doc-api/files/kwalify/parser/base_rb.html +116 -0
  48. data/doc-api/files/kwalify/parser/yaml_rb.html +117 -0
  49. data/doc-api/files/kwalify/rule_rb.html +116 -0
  50. data/doc-api/files/kwalify/types_rb.html +114 -0
  51. data/doc-api/files/kwalify/util/assert-text-equal_rb.html +115 -0
  52. data/doc-api/files/kwalify/util/hash-interface_rb.html +114 -0
  53. data/doc-api/files/kwalify/util/hashlike_rb.html +107 -0
  54. data/doc-api/files/kwalify/util/option-parser_rb.html +107 -0
  55. data/doc-api/files/kwalify/util/ordered-hash_rb.html +107 -0
  56. data/doc-api/files/kwalify/util/testcase-helper_rb.html +115 -0
  57. data/doc-api/files/kwalify/util_rb.html +107 -0
  58. data/doc-api/files/kwalify/validator_rb.html +117 -0
  59. data/doc-api/files/kwalify/yaml-parser_rb.html +117 -0
  60. data/doc-api/files/kwalify_rb.html +121 -0
  61. data/doc-api/fr_class_index.html +57 -0
  62. data/doc-api/fr_file_index.html +45 -0
  63. data/doc-api/fr_method_index.html +168 -0
  64. data/doc-api/index.html +24 -0
  65. data/doc-api/rdoc-style.css +208 -0
  66. data/examples/address-book/Makefile +10 -0
  67. data/examples/address-book/address-book.schema.yaml +45 -0
  68. data/examples/address-book/address-book.yaml +36 -0
  69. data/examples/data-binding/BABEL.data.yaml +63 -0
  70. data/examples/data-binding/BABEL.schema.yaml +31 -0
  71. data/examples/data-binding/Makefile +8 -0
  72. data/examples/data-binding/Rakefile +13 -0
  73. data/examples/data-binding/main.rb +27 -0
  74. data/examples/invoice/Makefile +9 -0
  75. data/examples/invoice/invoice.schema.yaml +43 -0
  76. data/examples/invoice/invoice.yaml +32 -0
  77. data/examples/tapkit/Makefile +10 -0
  78. data/examples/tapkit/main.rb +7 -0
  79. data/examples/tapkit/tapkit.schema.yaml +146 -0
  80. data/examples/tapkit/tapkit.yaml +85 -0
  81. data/lib/kwalify/errors.rb +127 -0
  82. data/lib/kwalify/kwalify.schema.yaml +58 -0
  83. data/lib/kwalify/main.rb +442 -0
  84. data/lib/kwalify/messages.rb +173 -0
  85. data/lib/kwalify/meta-validator.rb +275 -0
  86. data/lib/kwalify/parser/base.rb +127 -0
  87. data/lib/kwalify/parser/yaml.rb +841 -0
  88. data/lib/kwalify/rule.rb +559 -0
  89. data/lib/kwalify/templates/genclass-java.eruby +222 -0
  90. data/lib/kwalify/templates/genclass-php.eruby +104 -0
  91. data/lib/kwalify/templates/genclass-ruby.eruby +113 -0
  92. data/lib/kwalify/types.rb +156 -0
  93. data/lib/kwalify/util/assert-text-equal.rb +46 -0
  94. data/lib/kwalify/util/hash-interface.rb +18 -0
  95. data/lib/kwalify/util/hashlike.rb +51 -0
  96. data/lib/kwalify/util/option-parser.rb +220 -0
  97. data/lib/kwalify/util/ordered-hash.rb +57 -0
  98. data/lib/kwalify/util/testcase-helper.rb +112 -0
  99. data/lib/kwalify/util.rb +158 -0
  100. data/lib/kwalify/validator.rb +282 -0
  101. data/lib/kwalify/yaml-parser.rb +870 -0
  102. data/lib/kwalify.rb +67 -0
  103. data/setup.rb +1585 -0
  104. data/test/Rookbook.yaml +10 -0
  105. data/test/data/users-guide/AddressBook.java.expected +40 -0
  106. data/test/data/users-guide/BABEL.data.yaml +24 -0
  107. data/test/data/users-guide/BABEL.schema.yaml +30 -0
  108. data/test/data/users-guide/ExampleAddressBook.java +47 -0
  109. data/test/data/users-guide/Group.java.expected +24 -0
  110. data/test/data/users-guide/Person.java.expected +44 -0
  111. data/test/data/users-guide/address_book.rb +52 -0
  112. data/test/data/users-guide/address_book.schema.yaml +28 -0
  113. data/test/data/users-guide/address_book.yaml +27 -0
  114. data/test/data/users-guide/answers-schema.yaml +12 -0
  115. data/test/data/users-guide/answers-validator.rb +52 -0
  116. data/test/data/users-guide/babel_genclass.result +26 -0
  117. data/test/data/users-guide/config.schema.yaml +7 -0
  118. data/test/data/users-guide/config.yaml +4 -0
  119. data/test/data/users-guide/document01a.yaml +3 -0
  120. data/test/data/users-guide/document01b.yaml +3 -0
  121. data/test/data/users-guide/document02a.yaml +4 -0
  122. data/test/data/users-guide/document02b.yaml +4 -0
  123. data/test/data/users-guide/document03a.yaml +6 -0
  124. data/test/data/users-guide/document03b.yaml +6 -0
  125. data/test/data/users-guide/document04a.yaml +9 -0
  126. data/test/data/users-guide/document04b.yaml +9 -0
  127. data/test/data/users-guide/document05a.yaml +11 -0
  128. data/test/data/users-guide/document05b.yaml +12 -0
  129. data/test/data/users-guide/document06a.yaml +15 -0
  130. data/test/data/users-guide/document06b.yaml +16 -0
  131. data/test/data/users-guide/document07a.yaml +9 -0
  132. data/test/data/users-guide/document07b.yaml +7 -0
  133. data/test/data/users-guide/document12a.json +10 -0
  134. data/test/data/users-guide/document12b.json +6 -0
  135. data/test/data/users-guide/document13a.yaml +17 -0
  136. data/test/data/users-guide/document14a.yaml +3 -0
  137. data/test/data/users-guide/document14b.yaml +3 -0
  138. data/test/data/users-guide/document15a.yaml +6 -0
  139. data/test/data/users-guide/document15b.yaml +5 -0
  140. data/test/data/users-guide/example_address_book.rb +10 -0
  141. data/test/data/users-guide/example_address_book_java.result +32 -0
  142. data/test/data/users-guide/example_address_book_ruby.result +31 -0
  143. data/test/data/users-guide/genclass_java.result +4 -0
  144. data/test/data/users-guide/howto-validation-with-parsing.rb +28 -0
  145. data/test/data/users-guide/howto-validation.rb +25 -0
  146. data/test/data/users-guide/howto3.rb +6 -0
  147. data/test/data/users-guide/howto3.result +5 -0
  148. data/test/data/users-guide/howto3.yaml +8 -0
  149. data/test/data/users-guide/howto5_databinding.result +111 -0
  150. data/test/data/users-guide/invalid01.result +3 -0
  151. data/test/data/users-guide/invalid02.result +5 -0
  152. data/test/data/users-guide/invalid03.result +5 -0
  153. data/test/data/users-guide/invalid04.result +4 -0
  154. data/test/data/users-guide/invalid05.result +11 -0
  155. data/test/data/users-guide/invalid06.result +4 -0
  156. data/test/data/users-guide/invalid07.result +3 -0
  157. data/test/data/users-guide/invalid08.result +3 -0
  158. data/test/data/users-guide/invalid12.json +8 -0
  159. data/test/data/users-guide/invalid14.result +4 -0
  160. data/test/data/users-guide/invalid15.result +4 -0
  161. data/test/data/users-guide/loadbabel.rb +27 -0
  162. data/test/data/users-guide/loadconfig.rb +16 -0
  163. data/test/data/users-guide/loadconfig.result +6 -0
  164. data/test/data/users-guide/models.rb +22 -0
  165. data/test/data/users-guide/option_ha.result +6 -0
  166. data/test/data/users-guide/option_ha_genclass_java.result +7 -0
  167. data/test/data/users-guide/schema01.yaml +3 -0
  168. data/test/data/users-guide/schema02.yaml +12 -0
  169. data/test/data/users-guide/schema03.yaml +9 -0
  170. data/test/data/users-guide/schema04.yaml +20 -0
  171. data/test/data/users-guide/schema05.yaml +29 -0
  172. data/test/data/users-guide/schema06.yaml +11 -0
  173. data/test/data/users-guide/schema12.json +12 -0
  174. data/test/data/users-guide/schema13.yaml +13 -0
  175. data/test/data/users-guide/schema14.yaml +5 -0
  176. data/test/data/users-guide/schema15.yaml +21 -0
  177. data/test/data/users-guide/valid01.result +2 -0
  178. data/test/data/users-guide/valid02.result +2 -0
  179. data/test/data/users-guide/valid03.result +2 -0
  180. data/test/data/users-guide/valid04.result +2 -0
  181. data/test/data/users-guide/valid05.result +2 -0
  182. data/test/data/users-guide/valid06.result +2 -0
  183. data/test/data/users-guide/valid07.result +2 -0
  184. data/test/data/users-guide/valid08.result +2 -0
  185. data/test/data/users-guide/valid12.result +2 -0
  186. data/test/data/users-guide/valid13.result +2 -0
  187. data/test/data/users-guide/valid14.result +2 -0
  188. data/test/data/users-guide/valid15.result +2 -0
  189. data/test/data/users-guide/validate08.rb +37 -0
  190. data/test/test-action.rb +78 -0
  191. data/test/test-action.yaml +738 -0
  192. data/test/test-databinding.rb +83 -0
  193. data/test/test-databinding.yaml +339 -0
  194. data/test/test-main.rb +157 -0
  195. data/test/test-main.yaml +415 -0
  196. data/test/test-metavalidator.rb +80 -0
  197. data/test/test-metavalidator.yaml +1179 -0
  198. data/test/test-parser-yaml.rb +57 -0
  199. data/test/test-parser-yaml.yaml +1749 -0
  200. data/test/test-rule.rb +26 -0
  201. data/test/test-rule.yaml +317 -0
  202. data/test/test-users-guide.rb +75 -0
  203. data/test/test-util.rb +125 -0
  204. data/test/test-validator.rb +95 -0
  205. data/test/test-validator.yaml +986 -0
  206. data/test/test-yaml-parser.rb +47 -0
  207. data/test/test-yaml-parser.yaml +1226 -0
  208. data/test/test.rb +61 -0
  209. metadata +274 -0
@@ -0,0 +1,415 @@
1
+ ##
2
+ ## $Rev$
3
+ ## $Release: 0.7.2 $
4
+ ## copyright(c) 2005-2010 kuwata-lab all rights reserved.
5
+ ##
6
+ ---
7
+ - name: parseOptions1
8
+ desc: test Main#parseOptions()
9
+ method: parseOptions
10
+ args: [ -hvsmtlEDf, schema.yaml, -a, gemclass-ruby, -Ipath/to/dir, document.yaml, document2.yaml ]
11
+ expected: |
12
+ command: kwalify
13
+ options:
14
+ - action: gemclass-ruby
15
+ - debug: true
16
+ - emacs: true
17
+ - help: true
18
+ - linenum: true
19
+ - meta: true
20
+ - quiet: true
21
+ - schema: schema.yaml
22
+ - tpath: path/to/dir
23
+ - untabify: true
24
+ - version: true
25
+ properties:
26
+ filenames:
27
+ - document.yaml
28
+ - document2.yaml
29
+ ##
30
+ - name: parseOptions2
31
+ desc: -ffilename
32
+ method: parseOptions
33
+ args: [ -lfschema.yaml, -hagenclass-ruby, -I/path/to/dir]
34
+ expected: |
35
+ command: kwalify
36
+ options:
37
+ - action: genclass-ruby
38
+ - help: true
39
+ - linenum: true
40
+ - schema: schema.yaml
41
+ - tpath: /path/to/dir
42
+ properties:
43
+ filenames:
44
+ ##
45
+ - name: parseOptions3
46
+ desc: "'--help' is equal to '-h'"
47
+ method: parseOptions
48
+ args: [ --help, document.yaml ]
49
+ expected: |
50
+ command: kwalify
51
+ options:
52
+ - help: true
53
+ properties:
54
+ - help: true
55
+ filenames:
56
+ - document.yaml
57
+ ##
58
+ - name: parseOptions4
59
+ desc: "'-E' turns on '-l'"
60
+ method: parseOptions
61
+ args: [ -E, document.yaml ]
62
+ expected: |
63
+ command: kwalify
64
+ options:
65
+ - emacs: true
66
+ - linenum: true
67
+ properties:
68
+ filenames:
69
+ - document.yaml
70
+ ##
71
+ ---
72
+ - name: optionError1
73
+ desc: invalid command-line option
74
+ method: parseOptions
75
+ args: [ -hvi ]
76
+ inspect: '*'
77
+ exception*:
78
+ ruby: CommandOptionError
79
+ java: CommandOptionException
80
+ message: "-i: invalid command option."
81
+ error_symbol*:
82
+ ruby: !ruby/sym :command_option_invalid
83
+ java: command.option.invalid
84
+ ##
85
+ - name: optionError2
86
+ desc: no argument of '-f'
87
+ method: parseOptions
88
+ args: [ -f ]
89
+ inspect: '*'
90
+ exception*:
91
+ ruby: CommandOptionError
92
+ java: CommandOptionException
93
+ message: "-f: schema filename is required."
94
+ error_symbol*:
95
+ ruby: !ruby/sym :command_option_schema_required
96
+ java: command.option.noschema
97
+ ####
98
+ ##name: optionError3
99
+ ##desc: invalid property
100
+ ##method: parseOptions
101
+ ##args: [ --foo@var ]
102
+ ##inspect: '*'
103
+ ##exception*:
104
+ ## ruby: CommandOptionError
105
+ ## #java: CommandOptionException
106
+ ##message: "'--foo@var': invalid property."
107
+ ##error_symbol*:
108
+ ## ruby: !ruby/sym :command_property_invalid
109
+ ## #java: command.property.invalid
110
+ #
111
+
112
+ ##
113
+ - name: optionError4
114
+ desc: action required
115
+ method: execute
116
+ args: [ document.yaml ]
117
+ inspect: '*'
118
+ expected: |
119
+ exception*:
120
+ ruby: CommandOptionError
121
+ java: CommandOptionException
122
+ message: "command-line option '-f' or '-m' required."
123
+ error_symbol*:
124
+ ruby: !ruby/sym :command_option_noschema
125
+ java: command.option.noaction
126
+ ##
127
+ ---
128
+ - name: version # -v
129
+ desc: option '-v'
130
+ method: execute
131
+ args: [ -vt, document.yaml ]
132
+ expected: |
133
+ 0.0.0
134
+ ##
135
+ - name: help # -h
136
+ desc: option '-h'
137
+ method: execute
138
+ args: [ -hD, document.yaml ]
139
+ expected: |
140
+ kwalify - schema validator and data binding tool for YAML and JSON
141
+ ## Usage1: validate yaml document
142
+ kwalify [..options..] -f schema.yaml doc.yaml [doc2.yaml ...]
143
+ ## Usage2: validate schema definition
144
+ kwalify [..options..] -m schema.yaml [schema2.yaml ...]
145
+ ## Usage3: do action
146
+ kwalify [..options..] -a action -f schema.yaml [schema2.yaml ...]
147
+ -h, --help : help
148
+ -v : version
149
+ -q : quiet
150
+ -s : silent (obsolete, use '-q' instead)
151
+ -f schema.yaml : schema definition file
152
+ -m : meta-validation mode
153
+ -t : expand tab characters
154
+ -l : show linenumber when errored (experimental)
155
+ -E : show errors in emacs-style (experimental, implies '-l')
156
+ -a action : action ('genclass-ruby', 'genclass-php', 'genclass-java')
157
+ (try '-ha genclass-ruby' for details)
158
+ -I path : template path (for '-a')
159
+ -P : allow preceding alias
160
+ ##
161
+ - name: quiet1 # -q
162
+ desc: option '-q' (valid)
163
+ method: execute
164
+ args: [ -qf, quiet1.schema, quiet1.document ]
165
+ expected: |
166
+ schema: &quiet1_schema |
167
+ type: seq
168
+ sequence:
169
+ - type: str
170
+ document: &quiet1_document |
171
+ - foo
172
+ - bar
173
+ - baz
174
+ ##
175
+ - name: quiet2 # -s
176
+ desc: option '-s' (invalid)
177
+ method: execute
178
+ args: [ -sf, quiet2.schema, quiet2.document ]
179
+ expected: |
180
+ quiet2.document#1: INVALID
181
+ - [/1] '123': not a string.
182
+ - [/2] 'true': not a string.
183
+ schema: &quiet2_schema |
184
+ type: seq
185
+ sequence:
186
+ - type: str
187
+ document: &quiet2_document |
188
+ - foo
189
+ - bar
190
+ - baz
191
+ ---
192
+ - foo
193
+ - 123
194
+ - true
195
+ ##
196
+ - name: silent1 # -s
197
+ desc: option '-s' (valid)
198
+ method: execute
199
+ args: [ -sf, silent1.schema, silent1.document ]
200
+ expected: |
201
+ schema: *quiet1_schema
202
+ document: *quiet1_document
203
+ ##
204
+ - name: silent2 # -s
205
+ desc: option '-s' (invalid)
206
+ method: execute
207
+ args: [ -sf, silent2.schema, silent2.document ]
208
+ expected: |
209
+ silent2.document#1: INVALID
210
+ - [/1] '123': not a string.
211
+ - [/2] 'true': not a string.
212
+ schema: *quiet2_schema
213
+ document: *quiet2_document
214
+ ##
215
+ - name: untabify # -t
216
+ desc: option '-t'
217
+ method: execute
218
+ args: [ -tf, untabify.schema, untabify.document ]
219
+ expected: |
220
+ untabify.document#0: valid.
221
+ schema: |
222
+ type: seq
223
+ sequence:
224
+ - type: map
225
+ mapping:
226
+ "key":
227
+ type: text
228
+ required: yes
229
+ "value":
230
+ type: any
231
+ required: yes
232
+ document: |
233
+ #
234
+ - key: foo
235
+ value: 123
236
+ - key: bar
237
+ value: [a, b, c]
238
+ ##
239
+ - name: stream
240
+ desc: stream document
241
+ method: validation
242
+ schema: |
243
+ type: seq
244
+ sequence:
245
+ - type: str
246
+ valid: |
247
+ ---
248
+ - foo
249
+ - bar
250
+ - baz
251
+ ---
252
+ - aaa
253
+ - bbb
254
+ - ccc
255
+ valid_out: |
256
+ stream.valid#0: valid.
257
+ stream.valid#1: valid.
258
+ invalid: |
259
+ ---
260
+ - foo
261
+ - 123
262
+ - baz
263
+ ---
264
+ - aaa
265
+ - bbb
266
+ - true
267
+ invalid_out: |
268
+ stream.invalid#0: INVALID
269
+ - (line 3) [/1] '123': not a string.
270
+ stream.invalid#1: INVALID
271
+ - (line 8) [/2] 'true': not a string.
272
+ ##
273
+ - name: meta1 # -m
274
+ desc: meta validation (valid)
275
+ method: execute
276
+ args: [ -m, meta1.schema ]
277
+ schema: &meta1_schema |
278
+ type: seq
279
+ sequence:
280
+ - type: str
281
+ document: |
282
+ expected: &meta1_expected |
283
+ meta1.schema#0: valid.
284
+ ##
285
+ - name: meta2 # -m
286
+ desc: meta validation (invalid)
287
+ method: execute
288
+ args: [ -m, meta2.schema ]
289
+ schema: |
290
+ type: map
291
+ sequence:
292
+ - type: str
293
+ document: |
294
+ expected: |
295
+ meta2.schema#0: INVALID
296
+ - [/] type 'map' requires 'mapping:'.
297
+ - [/] 'sequence:': not available with mapping.
298
+ ##
299
+ - name: emacs # -E
300
+ desc: show errors in emacs style
301
+ method: execute
302
+ args: [ -Ef, emacs.schema, emacs.document ]
303
+ schema: |
304
+ type: seq
305
+ sequence:
306
+ - type: map
307
+ mapping:
308
+ "key": { type: str, required: yes }
309
+ "value": { type: any }
310
+ document: |
311
+ - key: one
312
+ value: 1
313
+ - key: 2
314
+ val: two
315
+ - kye: three
316
+ value:
317
+ expected: |
318
+ emacs.document#0: INVALID
319
+ emacs.document:3:3 [/1/key] '2': not a string.
320
+ emacs.document:4:3 [/1/val] key 'val:' is undefined.
321
+ emacs.document:5:3 [/2] key 'key:' is required.
322
+ emacs.document:5:3 [/2/kye] key 'kye:' is undefined.
323
+ ##
324
+ - name: preceding1 # -P
325
+ desc: preceding anchor
326
+ method: execute
327
+ args: [ -Pf, preceding1.schema, preceding1.document ]
328
+ schema: &preceding1_schema |
329
+ type: map
330
+ mapping:
331
+ "groups":
332
+ type: seq
333
+ sequence:
334
+ - &GROUP
335
+ type: map
336
+ mapping:
337
+ "name": { type: str, required: yes }
338
+ "owner": *USER
339
+ "users":
340
+ type: seq
341
+ sequence:
342
+ - &USER
343
+ type: map
344
+ mapping:
345
+ "name": { type: str, required: yes }
346
+ "mail": { type: str }
347
+ "group": *GROUP
348
+ document: &preceding1_document |
349
+ groups:
350
+ - &WHEEL
351
+ name: wheel
352
+ owner: *root
353
+ - &GUEST
354
+ name: guest
355
+ owner: *root
356
+ - &USERS
357
+ name: users
358
+ owner: *user1
359
+ users:
360
+ - &root
361
+ name: root
362
+ mail: root@localhost
363
+ group: *WHEEL
364
+ - &user1
365
+ name: user1
366
+ mail: user1@localhost
367
+ group: *USERS
368
+ expected: |
369
+ preceding1.document#0: valid.
370
+ ##
371
+ - name: preceding2 # -P
372
+ desc: preceding anchor
373
+ method: execute
374
+ args: [ -lf, preceding2.schema, preceding2.document ]
375
+ schema: *preceding1_schema
376
+ document: *preceding1_document
377
+ exception*:
378
+ ruby: Kwalify::SyntaxError
379
+ #java: kwalify.YamlSyntaxException
380
+ errormsg*:
381
+ ruby: "file: preceding2.schema, line 10: *USER: anchor not found."
382
+ #java: "*USER: anchor not found."
383
+ expected: |
384
+ ##
385
+ ---
386
+ - name: empty1
387
+ desc: ignore first empty document
388
+ method: execute
389
+ args: [ -f, empty1.schema, empty1.document ]
390
+ schema: |
391
+ type: map
392
+ mapping:
393
+ "name": { type: str }
394
+ document: |
395
+ ---
396
+ name: Foo
397
+ expected: |
398
+ empty1.document#0: valid.
399
+
400
+ - name: empty2
401
+ desc: report 'empty.' when document is empty
402
+ method: execute
403
+ args: [ -f, empty2.schema, empty2.document ]
404
+ schema: |
405
+ type: map
406
+ mapping:
407
+ "name": { type: str }
408
+ document: |
409
+ ---
410
+ name: Foo
411
+ ---
412
+ expected: |
413
+ empty2.document#0: valid.
414
+ empty2.document#1: empty.
415
+
@@ -0,0 +1,80 @@
1
+ ###
2
+ ### $Rev$
3
+ ### $Release: 0.7.2 $
4
+ ### copyright(c) 2005-2010 kuwata-lab all rights reserved.
5
+ ###
6
+
7
+ require File.dirname(__FILE__) + '/test.rb'
8
+
9
+
10
+ class MetaValidatorTest < Test::Unit::TestCase
11
+
12
+ ## define test methods
13
+ filename = __FILE__.sub(/\.rb$/, '.yaml')
14
+ load_yaml_documents(filename) do |ydoc|
15
+ name = ydoc['name']
16
+ ydoc.each do |key, val|
17
+ ydoc[$1] = val['ruby'] if key =~ /(.*)\*$/
18
+ end
19
+ s = <<-END
20
+ def test_meta_#{name}
21
+ @name = #{ydoc['name'].inspect}
22
+ @desc = #{ydoc['desc'].inspect}
23
+ @schema = #{ydoc['schema'].inspect}
24
+ @meta_msg = #{ydoc['meta-msg'].inspect}
25
+ # @rule_msg = #{ydoc['rule-msg'].inspect}
26
+ @test_type = :meta
27
+ _test
28
+ end
29
+ END
30
+ module_eval s if ydoc['meta-msg']
31
+ s = <<-END
32
+ def test_rule_#{name}
33
+ @name = #{ydoc['name'].inspect}
34
+ @desc = #{ydoc['desc'].inspect}
35
+ @schema = #{ydoc['schema'].inspect}
36
+ # @meta_msg = #{ydoc['meta-msg'].inspect}
37
+ @rule_msg = #{ydoc['rule-msg'].inspect}
38
+ @test_type = :rule
39
+ _test
40
+ end
41
+ END
42
+ module_eval s if ydoc['rule-msg']
43
+ end
44
+
45
+
46
+ ## execute test
47
+ def _test()
48
+ return if $target && $target != @name
49
+ #schema = YAML.load(@schema)
50
+ parser = Kwalify::YamlParser.new(@schema)
51
+ schema = parser.parse()
52
+ case @test_type
53
+ when :meta
54
+ meta_validator = Kwalify::MetaValidator.instance()
55
+ errors = meta_validator.validate(schema)
56
+ parser.set_errors_linenum(errors)
57
+ errors.sort!
58
+ expected = @meta_msg
59
+ when :rule
60
+ errors = []
61
+ begin
62
+ rule = Kwalify::Validator.new(schema)
63
+ rescue Kwalify::KwalifyError => error
64
+ errors << error
65
+ end
66
+ expected = @rule_msg
67
+ end
68
+ actual = ''
69
+ errors.each do |error|
70
+ raise error if error.is_a?(Kwalify::AssertionError)
71
+ actual << "%-20s: [%s] %s\n" % [error.error_symbol.inspect, error.path, error.message]
72
+ end
73
+ if $print
74
+ print actual
75
+ else
76
+ assert_text_equal(expected, actual)
77
+ end
78
+ end
79
+
80
+ end