ddao-kwalify 0.7.1

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 (208) hide show
  1. data/CHANGES.txt +243 -0
  2. data/MIT-LICENSE +20 -0
  3. data/README.txt +61 -0
  4. data/bin/kwalify +13 -0
  5. data/contrib/inline-require +153 -0
  6. data/contrib/kwalify +4159 -0
  7. data/doc-api/classes/CommandOptionError.html +184 -0
  8. data/doc-api/classes/CommandOptionParser.html +325 -0
  9. data/doc-api/classes/Kwalify.html +292 -0
  10. data/doc-api/classes/Kwalify/AssertionError.html +148 -0
  11. data/doc-api/classes/Kwalify/BaseError.html +297 -0
  12. data/doc-api/classes/Kwalify/BaseParser.html +461 -0
  13. data/doc-api/classes/Kwalify/CommandOptionError.html +168 -0
  14. data/doc-api/classes/Kwalify/ErrorHelper.html +223 -0
  15. data/doc-api/classes/Kwalify/HashInterface.html +118 -0
  16. data/doc-api/classes/Kwalify/Json.html +105 -0
  17. data/doc-api/classes/Kwalify/KwalifyError.html +111 -0
  18. data/doc-api/classes/Kwalify/Main.html +339 -0
  19. data/doc-api/classes/Kwalify/MetaValidator.html +448 -0
  20. data/doc-api/classes/Kwalify/Parser.html +155 -0
  21. data/doc-api/classes/Kwalify/PlainYamlParser.html +523 -0
  22. data/doc-api/classes/Kwalify/PlainYamlParser/Alias.html +165 -0
  23. data/doc-api/classes/Kwalify/Rule.html +433 -0
  24. data/doc-api/classes/Kwalify/SchemaError.html +148 -0
  25. data/doc-api/classes/Kwalify/SyntaxError.html +185 -0
  26. data/doc-api/classes/Kwalify/Types.html +302 -0
  27. data/doc-api/classes/Kwalify/Util.html +389 -0
  28. data/doc-api/classes/Kwalify/Util/HashLike.html +246 -0
  29. data/doc-api/classes/Kwalify/Util/OrderedHash.html +330 -0
  30. data/doc-api/classes/Kwalify/ValidationError.html +148 -0
  31. data/doc-api/classes/Kwalify/Validator.html +381 -0
  32. data/doc-api/classes/Kwalify/Yaml.html +194 -0
  33. data/doc-api/classes/Kwalify/Yaml/Parser.html +1538 -0
  34. data/doc-api/classes/Kwalify/YamlParser.html +542 -0
  35. data/doc-api/classes/Kwalify/YamlSyntaxError.html +119 -0
  36. data/doc-api/classes/Test.html +107 -0
  37. data/doc-api/classes/Test/Unit.html +101 -0
  38. data/doc-api/created.rid +1 -0
  39. data/doc-api/files/__/README_txt.html +172 -0
  40. data/doc-api/files/kwalify/errors_rb.html +114 -0
  41. data/doc-api/files/kwalify/main_rb.html +118 -0
  42. data/doc-api/files/kwalify/messages_rb.html +107 -0
  43. data/doc-api/files/kwalify/meta-validator_rb.html +117 -0
  44. data/doc-api/files/kwalify/parser/base_rb.html +116 -0
  45. data/doc-api/files/kwalify/parser/yaml_rb.html +117 -0
  46. data/doc-api/files/kwalify/rule_rb.html +116 -0
  47. data/doc-api/files/kwalify/types_rb.html +114 -0
  48. data/doc-api/files/kwalify/util/assert-text-equal_rb.html +115 -0
  49. data/doc-api/files/kwalify/util/hash-interface_rb.html +114 -0
  50. data/doc-api/files/kwalify/util/hashlike_rb.html +107 -0
  51. data/doc-api/files/kwalify/util/option-parser_rb.html +107 -0
  52. data/doc-api/files/kwalify/util/ordered-hash_rb.html +107 -0
  53. data/doc-api/files/kwalify/util/testcase-helper_rb.html +115 -0
  54. data/doc-api/files/kwalify/util_rb.html +107 -0
  55. data/doc-api/files/kwalify/validator_rb.html +117 -0
  56. data/doc-api/files/kwalify/yaml-parser_rb.html +117 -0
  57. data/doc-api/files/kwalify_rb.html +121 -0
  58. data/doc-api/fr_class_index.html +57 -0
  59. data/doc-api/fr_file_index.html +45 -0
  60. data/doc-api/fr_method_index.html +168 -0
  61. data/doc-api/index.html +24 -0
  62. data/doc-api/rdoc-style.css +208 -0
  63. data/doc/docstyle.css +188 -0
  64. data/doc/img/fig01.png +0 -0
  65. data/doc/users-guide.html +2050 -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.rb +67 -0
  82. data/lib/kwalify/errors.rb +128 -0
  83. data/lib/kwalify/kwalify.schema.yaml +58 -0
  84. data/lib/kwalify/main.rb +442 -0
  85. data/lib/kwalify/messages.rb +173 -0
  86. data/lib/kwalify/meta-validator.rb +276 -0
  87. data/lib/kwalify/parser/base.rb +127 -0
  88. data/lib/kwalify/parser/yaml.rb +841 -0
  89. data/lib/kwalify/rule.rb +560 -0
  90. data/lib/kwalify/templates/genclass-java.eruby +222 -0
  91. data/lib/kwalify/templates/genclass-php.eruby +104 -0
  92. data/lib/kwalify/templates/genclass-ruby.eruby +113 -0
  93. data/lib/kwalify/types.rb +156 -0
  94. data/lib/kwalify/util.rb +157 -0
  95. data/lib/kwalify/util/assert-text-equal.rb +46 -0
  96. data/lib/kwalify/util/hash-interface.rb +18 -0
  97. data/lib/kwalify/util/hashlike.rb +51 -0
  98. data/lib/kwalify/util/option-parser.rb +220 -0
  99. data/lib/kwalify/util/ordered-hash.rb +57 -0
  100. data/lib/kwalify/util/testcase-helper.rb +112 -0
  101. data/lib/kwalify/validator.rb +282 -0
  102. data/lib/kwalify/yaml-parser.rb +870 -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 +384 -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-validator.rb +95 -0
  204. data/test/test-validator.yaml +986 -0
  205. data/test/test-yaml-parser.rb +47 -0
  206. data/test/test-yaml-parser.yaml +1226 -0
  207. data/test/test.rb +60 -0
  208. metadata +261 -0
@@ -0,0 +1,26 @@
1
+ ###
2
+ ### $Rev: 83 $
3
+ ### $Release: 0.7.1 $
4
+ ### copyright(c) 2005-2008 kuwata-lab all rights reserved.
5
+ ###
6
+
7
+ require File.dirname(__FILE__) + '/test.rb'
8
+
9
+
10
+ class RuleTest < Test::Unit::TestCase
11
+
12
+ ## define test methods
13
+ filename = __FILE__.sub(/\.rb$/, '.yaml')
14
+ load_yaml_testdata(filename, :lang=>'ruby')
15
+
16
+
17
+ ## execute test
18
+ def _test()
19
+ assert_nothing_raised do
20
+ return if $target && $target != @name
21
+ schema = @schema
22
+ rule = Kwalify::Rule.new(schema)
23
+ end
24
+ end
25
+
26
+ end
@@ -0,0 +1,317 @@
1
+ ##
2
+ ## $Rev: 95 $
3
+ ## $Release: 0.7.1 $
4
+ ## copyright(c) 2005-2008 kuwata-lab all rights reserved.
5
+ ##
6
+ ---
7
+ name: sequence1
8
+ desc: basic sequence
9
+ input: |
10
+ type: seq
11
+ sequence:
12
+ - type: str
13
+ #
14
+ ---
15
+ name: mapping1
16
+ desc: basic mapping
17
+ input: |
18
+ type: map
19
+ mapping:
20
+ "name":
21
+ type: str
22
+ required: yes
23
+ "email":
24
+ type: str
25
+ pattern: /@/
26
+ "age":
27
+ type: int
28
+ "birth":
29
+ type: date
30
+ #
31
+ ---
32
+ name: seqmap1
33
+ desc: mapping of sequence
34
+ input: |
35
+ type: seq
36
+ sequence:
37
+ - type: map
38
+ mapping:
39
+ "name":
40
+ type: str
41
+ required: true
42
+ "email":
43
+ type: str
44
+ #
45
+ ---
46
+ name: mapseq1
47
+ desc: mapping of sequence
48
+ input: |
49
+ type: map
50
+ mapping:
51
+ "company":
52
+ type: str
53
+ required: yes
54
+ "email":
55
+ type: str
56
+ "employees":
57
+ type: seq
58
+ sequence:
59
+ - type: map
60
+ mapping:
61
+ "code":
62
+ type: int
63
+ required: yes
64
+ "name":
65
+ type: str
66
+ required: yes
67
+ "email":
68
+ type: str
69
+ #
70
+ ---
71
+ name: unique1
72
+ desc: unique constraint
73
+ input: |
74
+ type: seq
75
+ sequence:
76
+ - type: map
77
+ required: yes
78
+ mapping:
79
+ "name":
80
+ type: str
81
+ required: yes
82
+ unique: yes
83
+ "email":
84
+ type: str
85
+ "groups":
86
+ type: seq
87
+ sequence:
88
+ - type: str
89
+ unique: yes
90
+ ---
91
+ name: constraints1
92
+ desc: some constraints
93
+ input: |
94
+ name: address-book
95
+ desc: Address book
96
+ type: seq
97
+ sequence:
98
+ - type: map
99
+ mapping:
100
+ "name":
101
+ type: str
102
+ required: yes
103
+ "email":
104
+ type: str
105
+ required: yes
106
+ pattern: /@/
107
+ "password":
108
+ type: str
109
+ length: { max: 16, min: 8 }
110
+ "age":
111
+ type: int
112
+ range: { max: 30, min: 18 }
113
+ # or assert: 18 <= val && val <= 30
114
+ "blood":
115
+ type: str
116
+ enum:
117
+ - A
118
+ - B
119
+ - O
120
+ - AB
121
+ "birth":
122
+ type: date
123
+ "memo":
124
+ type: any
125
+ "deleted"
126
+ type: bool
127
+ default: false
128
+ #
129
+ ---
130
+ name: default1
131
+ desc: default rule
132
+ input: |
133
+ type: map
134
+ mapping:
135
+ "properties":
136
+ type: map
137
+ mapping:
138
+ =:
139
+ type: any
140
+ #
141
+ ---
142
+ name: default2
143
+ desc: default rule #2
144
+ input: |
145
+ type: seq
146
+ sequence:
147
+ - type: map
148
+ mapping:
149
+ "name":
150
+ type: str
151
+ required: yes
152
+ "email":
153
+ type: str
154
+ "birth":
155
+ type: date
156
+ =:
157
+ type: any
158
+ #
159
+ ---
160
+ name: merge1
161
+ desc: merge rule
162
+ input: |
163
+ type: map
164
+ mapping:
165
+ "group":
166
+ type: map
167
+ mapping:
168
+ "name": &name
169
+ type: str
170
+ required: yes
171
+ "email": &email
172
+ type: str
173
+ pattern: /@/
174
+ required: no
175
+ "user":
176
+ type: map
177
+ mapping:
178
+ "name":
179
+ <<: *name # merge
180
+ length: { max: 16 } # append
181
+ "email":
182
+ <<: *email # merge
183
+ required: yes # overwrite
184
+ #
185
+ ---
186
+ name: anchor1
187
+ desc: sharing rule with anchor and alias
188
+ input: |
189
+ desc: Bookshelf
190
+ type: seq
191
+ sequence:
192
+ - type: map
193
+ mapping:
194
+ "title":
195
+ type: str
196
+ required: yes
197
+ "author": &persons # anchor
198
+ type: seq
199
+ sequence:
200
+ - type: str
201
+ "translator": *persons # alias
202
+ "publisher":
203
+ type: str
204
+ "year":
205
+ type: int
206
+ #
207
+ ---
208
+ name: anchor2
209
+ desc: recursive definition of rule
210
+ input: |
211
+ &task # anchor
212
+ desc: WBS
213
+ type: map
214
+ mapping:
215
+ "name": { type: str, required: yes }
216
+ "assigned": { type: str }
217
+ "deadline": { type: date }
218
+ "subtasks":
219
+ type: seq
220
+ sequence:
221
+ - *task # alias
222
+ ---
223
+ name: meta_schema
224
+ desc: schema for meta-validator
225
+ #
226
+ input: |
227
+ name: MAIN
228
+ type: map
229
+ required: yes
230
+ mapping: &main-rule
231
+ "name":
232
+ type: str
233
+ "desc":
234
+ type: str
235
+ "type":
236
+ type: str
237
+ #required: yes
238
+ enum:
239
+ - seq
240
+ #- sequence
241
+ #- list
242
+ - map
243
+ #- mapping
244
+ #- hash
245
+ - str
246
+ #- string
247
+ - int
248
+ #- integer
249
+ - float
250
+ - number
251
+ #- numeric
252
+ - bool
253
+ #- boolean
254
+ - text
255
+ - date
256
+ - time
257
+ - timestamp
258
+ #- object
259
+ - any
260
+ - scalar
261
+ #- collection
262
+ "required":
263
+ type: bool
264
+ "enum":
265
+ type: seq
266
+ sequence:
267
+ - type: scalar
268
+ unique: yes
269
+ "pattern":
270
+ type: str
271
+ "assert":
272
+ type: str
273
+ pattern: /\bval\b/
274
+ "range":
275
+ type: map
276
+ mapping:
277
+ "max":
278
+ type: scalar
279
+ "min":
280
+ type: scalar
281
+ "max-ex":
282
+ type: scalar
283
+ "min-ex":
284
+ type: scalar
285
+ "length":
286
+ type: map
287
+ mapping:
288
+ "max":
289
+ type: int
290
+ "min":
291
+ type: int
292
+ "max-ex":
293
+ type: int
294
+ "min-ex":
295
+ type: int
296
+ "ident":
297
+ type: bool
298
+ "unique":
299
+ type: bool
300
+ "sequence":
301
+ name: SEQUENCE
302
+ type: seq
303
+ sequence:
304
+ - type: map
305
+ mapping: *main-rule
306
+ name: MAIN
307
+ #required: yes
308
+ "mapping":
309
+ name: MAPPING
310
+ type: map
311
+ mapping:
312
+ =:
313
+ type: map
314
+ mapping: *main-rule
315
+ name: MAIN
316
+ #required: yes
317
+
@@ -0,0 +1,75 @@
1
+ require File.expand_path(File.dirname(__FILE__) + '/../test/test.rb')
2
+
3
+ class UsersGuideTest < Test::Unit::TestCase
4
+
5
+ DATA_DIR = 'data/users-guide'
6
+ CURR_DIR = Dir.pwd
7
+ for item in Dir.glob("#{DATA_DIR}/*.result").sort()
8
+ filename = File.basename(item)
9
+ name = (filename =~ /(.*)\.\w+$/) && $1.gsub(/[^\w]/, '_')
10
+ s = <<-END
11
+ def test_#{name}
12
+ @name = #{name.inspect}
13
+ @filename = #{filename.inspect}
14
+ _test()
15
+ end
16
+ END
17
+ eval s
18
+ end
19
+
20
+ ### BEGIN
21
+ def test_address_book_ruby
22
+ @command = 'kwalify -a genclass-ruby -tf address_book.schema.yaml'
23
+ @result = File.read('address_book.rb')
24
+ _test()
25
+ end
26
+ def test_example_address_book_ruby
27
+ @command = 'ruby example_address_book.rb'
28
+ @result = File.read('example_address_book_ruby.result')
29
+ @testopts = { 'delete_object_id' => true }
30
+ _test()
31
+ end
32
+ ### END
33
+
34
+ def setup
35
+ Dir.chdir DATA_DIR
36
+ end
37
+
38
+ def teardown
39
+ Dir.chdir CURR_DIR
40
+ end
41
+
42
+ def _test
43
+ #@name ||= (caller()[0] =~ /in `test_(.*?)'/) && $1
44
+ @name = (self.name =~ /\Atest_(.*)\(.*\)\z/) && $1
45
+ return if @name =~ /\_java$/
46
+ @filename ||= @name + '.result'
47
+
48
+ result = @result || File.read(@filename)
49
+ tuples = result.split(/^(?=\$ )/).collect do |s|
50
+ if s.sub!(/\A\$ (.*)\n/, '')
51
+ command = $1
52
+ while command =~ /\\\z/
53
+ command.chop!
54
+ s.sub!(/\A(.*)\n/, '')
55
+ command << $1
56
+ end
57
+ [@command || command, @expected || s]
58
+ else
59
+ [@command, @expected || s]
60
+ end
61
+ end
62
+
63
+ tuples.each do |command, expected|
64
+ actual = @actual || `#{command}`
65
+ #if @testopts && @testops['delete_object_id']
66
+ rexp = /(\#<\w+(::\w+)*:)0x[0-9a-f]+/
67
+ actual.gsub!(rexp, '\1')
68
+ expected.gsub!(rexp, '\1')
69
+ #end
70
+ assert_text_equal(expected, actual)
71
+ end
72
+
73
+ end
74
+
75
+ end
@@ -0,0 +1,95 @@
1
+ ###
2
+ ### $Rev: 83 $
3
+ ### $Release: 0.7.1 $
4
+ ### copyright(c) 2005-2008 kuwata-lab all rights reserved.
5
+ ###
6
+
7
+ require File.dirname(__FILE__) + '/test.rb'
8
+
9
+
10
+ class ValidatorTest < Test::Unit::TestCase
11
+
12
+
13
+ ## define test methods
14
+ filename = __FILE__.sub(/\.rb$/, '.yaml')
15
+ load_yaml_testdata(filename, :lang=>'ruby')
16
+
17
+
18
+ ## execute test
19
+ def _test()
20
+ return if $target && $target != @name
21
+ ## Syck parser
22
+ schema = YAML.load(@schema)
23
+ validator = Kwalify::Validator.new(schema)
24
+ error2 = @error.gsub(/\(line \d+\)/, '')
25
+ _test_by_syck_parser(validator, @valid, '' )
26
+ _test_by_syck_parser(validator, @invalid, error2)
27
+ ## Kwalify::YamlParser
28
+ schema = Kwalify::YamlParser.new(@schema).parse()
29
+ validator = Kwalify::Validator.new(schema)
30
+ _test_by_kwalify_yamlparser(validator, @valid, '' )
31
+ _test_by_kwalify_yamlparser(validator, @invalid, @error)
32
+ ## Kwalify::Yaml::Parser
33
+ schema = Kwalify::Yaml::Parser.new().parse(@schema)
34
+ validator = Kwalify::Validator.new(schema)
35
+ _test_by_kwalify_yaml_parser(validator, @valid, '' )
36
+ _test_by_kwalify_yaml_parser(validator, @invalid, @error2 || @error)
37
+ end
38
+
39
+
40
+ def _test_by_kwalify_yamlparser(validator, input, expected)
41
+ parser = Kwalify::YamlParser.new(input)
42
+ document = parser.parse()
43
+ error_list = validator.validate(document)
44
+ parser.set_errors_linenum(error_list)
45
+ error_list.sort!
46
+ actual = ''
47
+ error_list.each do |error|
48
+ e = error
49
+ args = [e.error_symbol.inspect, e.linenum, e.path, e.message]
50
+ actual << "%-20s: (line %d)[%s] %s\n" % args
51
+ end
52
+ if $print
53
+ print actual
54
+ else
55
+ assert_text_equal(expected, actual)
56
+ end
57
+ end
58
+
59
+
60
+ def _test_by_kwalify_yaml_parser(validator, input, expected)
61
+ parser = Kwalify::Yaml::Parser.new(validator)
62
+ document = parser.parse(input)
63
+ error_list = parser.errors()
64
+ error_list.sort!
65
+ actual = ''
66
+ error_list.each do |error|
67
+ e = error
68
+ args = [e.error_symbol.inspect, e.linenum, e.column, e.path, e.message]
69
+ #actual << "%-20s: (line %d)[%s] %s\n" % args
70
+ actual << "%-20s: %d:%d:[%s] %s\n" % args
71
+ end
72
+ if $print
73
+ print actual
74
+ else
75
+ assert_text_equal(expected, actual)
76
+ end
77
+ end
78
+
79
+
80
+ def _test_by_syck_parser(validator, input, expected)
81
+ document = YAML.load(input)
82
+ error_list = validator.validate(document)
83
+ expected = expected.to_a.sort.join()
84
+ actual = error_list.collect { |e|
85
+ "%-20s: [%s] %s\n" % [e.error_symbol.inspect, e.path, e.message]
86
+ }.sort.join()
87
+ if $print
88
+ print actual
89
+ else
90
+ assert_text_equal(expected, actual)
91
+ end
92
+ end
93
+
94
+
95
+ end