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
data/test/test-rule.rb ADDED
@@ -0,0 +1,26 @@
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 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$
3
+ ## $Release: 0.7.2 $
4
+ ## copyright(c) 2005-2010 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
data/test/test-util.rb ADDED
@@ -0,0 +1,125 @@
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
+ require 'kwalify/util'
10
+
11
+
12
+ class UtilTest < Test::Unit::TestCase
13
+
14
+ def spec(detail)
15
+ yield
16
+ end
17
+
18
+ def test_untabify
19
+ spec "converts tab characters to spaces" do
20
+ input = "123\t999"
21
+ expected = "123 999"
22
+ assert_text_equal expected, Kwalify::Util.untabify(input)
23
+ end
24
+ spec "able to specify column width" do
25
+ input = "12\t999"
26
+ expected = "12 999"
27
+ assert_text_equal expected, Kwalify::Util.untabify(input, 4)
28
+ end
29
+ spec "able to handle multiline string" do
30
+ input = "123\n\t456\n789\t0"
31
+ expected = "123\n 456\n789 0"
32
+ assert_text_equal expected, Kwalify::Util.untabify(input)
33
+ end
34
+ spec "returns nil if argument is nil" do
35
+ assert_nil Kwalify::Util.untabify(nil)
36
+ end
37
+ spec "don't remove tailing spaces" do # bugfix
38
+ input = "abc\t\t"
39
+ expected = "abc "
40
+ assert_text_equal expected, Kwalify::Util.untabify(input)
41
+ end
42
+ end
43
+
44
+ SCHEMA1 = <<END
45
+ type: seq
46
+ sequence:
47
+ - type: map
48
+ class: Member
49
+ mapping:
50
+ "name": { type: str, required: true }
51
+ "age": { type: int, required: false }
52
+ END
53
+
54
+ def test_traverse
55
+ spec "traverse schema structure" do
56
+ schema = YAML.load(SCHEMA1)
57
+ assert_equal "Member", schema["sequence"][0]["class"]
58
+ Kwalify::Util.traverse_schema(schema) do |rulehash|
59
+ ## add module prefix to class name
60
+ if rulehash['class']
61
+ rulehash['class'] = 'MyModule::' + rulehash['class']
62
+ end
63
+ end
64
+ assert_equal "MyModule::Member", schema["sequence"][0]["class"]
65
+ end
66
+ end
67
+
68
+ def test_traverse_rule
69
+ spec "traverse rule" do
70
+ schema = YAML.load(SCHEMA1)
71
+ validator = Kwalify::Validator.new(schema)
72
+ rules = []
73
+ Kwalify::Util.traverse_rule(validator) do |rule|
74
+ rules << rule
75
+ end
76
+ assert_equal 4, rules.length
77
+ assert_text_equal <<'END', rules[0].send(:_inspect)
78
+ type: seq
79
+ klass: Array
80
+ -
81
+ type: map
82
+ klass: Hash
83
+ "name":
84
+ type: str
85
+ klass: String
86
+ required: true
87
+ "age":
88
+ type: int
89
+ klass: Integer
90
+ required: false
91
+ END
92
+ assert_text_equal <<'END', rules[1].send(:_inspect)
93
+ type: map
94
+ klass: Hash
95
+ "name":
96
+ type: str
97
+ klass: String
98
+ required: true
99
+ "age":
100
+ type: int
101
+ klass: Integer
102
+ required: false
103
+ END
104
+ assert_text_equal <<'END', rules[2].send(:_inspect)
105
+ type: str
106
+ klass: String
107
+ required: true
108
+ END
109
+ assert_text_equal <<'END', rules[3].send(:_inspect)
110
+ type: int
111
+ klass: Integer
112
+ required: false
113
+ END
114
+ end
115
+ end
116
+
117
+ def test_get_value
118
+ schema = YAML.load(SCHEMA1)
119
+ path = ['sequence', 0, 'mapping', 'name', 'type']
120
+ assert_equal 'str', Kwalify::Util.get_value(schema, path)
121
+ path = ['sequence', 1, 'mapping', 'name', 'type']
122
+ assert_equal nil, Kwalify::Util.get_value(schema, path)
123
+ end
124
+
125
+ end
@@ -0,0 +1,95 @@
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 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