rkwalify 1.4.0.pre.preview1

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