ddao-kwalify 0.7.1

Sign up to get free protection for your applications and to get access to all the features.
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