cheeba 1.0.4

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 (95) hide show
  1. data/.git/COMMIT_EDITMSG +1 -0
  2. data/.git/HEAD +1 -0
  3. data/.git/config +9 -0
  4. data/.git/description +1 -0
  5. data/.git/hooks/applypatch-msg.sample +15 -0
  6. data/.git/hooks/commit-msg.sample +24 -0
  7. data/.git/hooks/post-commit.sample +8 -0
  8. data/.git/hooks/post-receive.sample +15 -0
  9. data/.git/hooks/post-update.sample +8 -0
  10. data/.git/hooks/pre-applypatch.sample +14 -0
  11. data/.git/hooks/pre-commit.sample +18 -0
  12. data/.git/hooks/pre-rebase.sample +169 -0
  13. data/.git/hooks/prepare-commit-msg.sample +36 -0
  14. data/.git/hooks/update.sample +107 -0
  15. data/.git/index +0 -0
  16. data/.git/info/exclude +7 -0
  17. data/.git/logs/HEAD +7 -0
  18. data/.git/logs/refs/heads/master +6 -0
  19. data/.git/logs/refs/remotes/origin/master +6 -0
  20. data/.git/objects/02/38dae53aee5cb4ea157a3f036b93868ede9593 +0 -0
  21. data/.git/objects/02/9cafaafb83e528381f0f2f02c6f23799bd1942 +0 -0
  22. data/.git/objects/07/c654f9ff6c65626369b061c595be42ccdd6cd7 +0 -0
  23. data/.git/objects/07/dbbace3b24b2d635d2fb637581931d573fc75c +0 -0
  24. data/.git/objects/08/ce1195151ff5a51573a871947ecd913fb5aa0f +1 -0
  25. data/.git/objects/0c/ad63d44505490e1a30ad075099a25020d7a7c5 +0 -0
  26. data/.git/objects/12/215629eba6a8f0fcd849923e98a471984521e1 +2 -0
  27. data/.git/objects/18/60fee2fadb59a6cbcb7f7dd0a6f6dc3b56ac79 +0 -0
  28. data/.git/objects/1e/1800628b80bef5a8043e4adacd6ebc6bab9aa1 +0 -0
  29. data/.git/objects/27/97bc2b3d72dc6d77b7bd07f1cca96f7e06b4ed +0 -0
  30. data/.git/objects/28/41d3f97c8aa8c942a613e1c69ed4280d78cf0a +0 -0
  31. data/.git/objects/29/f0c4074f9ecc894edd7ed507a1a92499838a6d +0 -0
  32. data/.git/objects/2a/8948661c63f2bef24f330638d239c88d5d0c2e +0 -0
  33. data/.git/objects/3f/7142cf3878c65e71b54d3572d82837d20f2aa7 +4 -0
  34. data/.git/objects/40/8c36a3103bc77e90db86dc06b1598e3baa4c2d +0 -0
  35. data/.git/objects/42/eb5558727a2144e7c5e997d3e6aea5486eaf37 +0 -0
  36. data/.git/objects/4c/6098fe05db7126c8a3c97f463910e5cc398630 +0 -0
  37. data/.git/objects/51/6902dffff8d29fa2f89979b9cd81ab275e1c67 +0 -0
  38. data/.git/objects/5b/502f8e20a0556c22727b504108a2dc36d7cbed +2 -0
  39. data/.git/objects/67/c3fb20cfae5320d83c9ebf2b85c1a3ef9b706b +0 -0
  40. data/.git/objects/72/7df703ac52c4ff97aa452feee27b9990430a11 +5 -0
  41. data/.git/objects/74/bc14252b2148d11877025d7f445d2fa686e7e9 +0 -0
  42. data/.git/objects/78/9ac5e1ca6a70ec3b8a11344e6f4a03e440f309 +0 -0
  43. data/.git/objects/7a/46bd1887d1a793094da678ded3b53b0208b826 +0 -0
  44. data/.git/objects/8d/77306c0d13e98da74ddf48002674fced7e1618 +2 -0
  45. data/.git/objects/94/36859cb89dd0bbddab77ed0810860e979b1c05 +0 -0
  46. data/.git/objects/ab/454c9537f329aecaedae0586c6d61146a7f819 +0 -0
  47. data/.git/objects/b9/3b5dde3104bb495dc0d2970bbe617dafb2f084 +0 -0
  48. data/.git/objects/be/197d3b2c14a52300cc4553bf2004ef3c45a45b +0 -0
  49. data/.git/objects/be/8e3e0ab878ffcb0456ae4cf66861888d933bf5 +0 -0
  50. data/.git/objects/c5/4c515f4bff81e08b01176b1a5743fd773a9740 +0 -0
  51. data/.git/objects/d4/a471f188d32adfa9dc2ff22c53b95319a162ed +0 -0
  52. data/.git/objects/d7/83399b37ca769b5b5bc2b33727fc47acfa5e4c +0 -0
  53. data/.git/objects/d7/a544fc5715014ef027875545ef0145e9f694fe +0 -0
  54. data/.git/objects/de/eef72f84f60beab439c58d84acc42d3e5a1279 +0 -0
  55. data/.git/objects/e6/9de29bb2d1d6434b8b29ae775ad8c2e48c5391 +0 -0
  56. data/.git/objects/e9/9c40e89cb90f8067f99d7051c3bebf2b145ec7 +0 -0
  57. data/.git/objects/f3/89737a46e7cad94deb222e238e8f926767637e +0 -0
  58. data/.git/objects/fa/4f98b2fe387e262f9c28011e53f1b8fb920401 +0 -0
  59. data/.git/objects/fb/72047097c38625f3598fb348b3fbe75afd6d2d +1 -0
  60. data/.git/objects/ff/7aefe3472c61b77f58669ec4b8208412156930 +0 -0
  61. data/.git/refs/heads/master +1 -0
  62. data/.git/refs/remotes/origin/master +1 -0
  63. data/History.txt +6 -0
  64. data/Manifest.txt +94 -0
  65. data/README.txt +35 -0
  66. data/Rakefile +13 -0
  67. data/bin/cheeba +68 -0
  68. data/cheeba.gemspec +37 -0
  69. data/lib/cheeba/defaults.rb +78 -0
  70. data/lib/cheeba/errors.rb +10 -0
  71. data/lib/cheeba/indicators.rb +25 -0
  72. data/lib/cheeba/reader/builder.rb +265 -0
  73. data/lib/cheeba/reader/format.rb +130 -0
  74. data/lib/cheeba/reader/node.rb +61 -0
  75. data/lib/cheeba/reader/parser.rb +64 -0
  76. data/lib/cheeba/reader.rb +33 -0
  77. data/lib/cheeba/version.rb +3 -0
  78. data/lib/cheeba/writer/builder.rb +95 -0
  79. data/lib/cheeba/writer.rb +49 -0
  80. data/lib/cheeba.rb +50 -0
  81. data/test/files/arrays.cash +15 -0
  82. data/test/files/blank.cash +0 -0
  83. data/test/files/comments.cash +17 -0
  84. data/test/files/hashes.cash +26 -0
  85. data/test/files/malformed.cash +3 -0
  86. data/test/files/mixed.cash +12 -0
  87. data/test/files/split.cash +9 -0
  88. data/test/test_cheeba.rb +185 -0
  89. data/test/test_reader.rb +210 -0
  90. data/test/test_reader_builder.rb +345 -0
  91. data/test/test_reader_format.rb +406 -0
  92. data/test/test_reader_parser.rb +190 -0
  93. data/test/test_writer.rb +133 -0
  94. data/test/test_writer_builder.rb +150 -0
  95. metadata +167 -0
@@ -0,0 +1,406 @@
1
+ #!/usr/bin/env ruby -w
2
+
3
+ require 'rubygems'
4
+ require 'minitest/unit'
5
+ $: << 'lib' << 'test'
6
+ require 'cheeba/reader/format'
7
+ require 'cheeba/defaults'
8
+ MiniTest::Unit.autorun
9
+
10
+ class TestReaderFormat < MiniTest::Unit::TestCase
11
+ def setup
12
+ @format = Cheeba::Reader::Format
13
+ @opt = {}
14
+ Cheeba::Defaults.options.each_key {|k| @opt[k] = false}
15
+ @phs = { :msg => nil,
16
+ :spc => nil,
17
+ :key => nil,
18
+ :val => nil,
19
+ :ask => nil,
20
+ :asv => nil,
21
+ :opt => @opt}
22
+ end
23
+
24
+ #
25
+ # parsed_hash => formatted_hash
26
+ #
27
+ def test_format_basic
28
+ phs = @phs.merge({:key => "1", :val => "1", :opt => @opt})
29
+ act = @format.format(phs)
30
+ assert_equal Hash, act.class
31
+ end
32
+
33
+ def test_adjust_options
34
+ phs1 = {:opt => {:auto_sym => true}}
35
+ phs2 = {:opt => {:auto_sym => false}}
36
+ @format.adjust_options(phs1)
37
+ @format.adjust_options(phs2)
38
+ assert phs1[:opt][:auto_sym_keys]
39
+ assert phs1[:opt][:auto_sym_vals]
40
+ assert !phs2[:opt][:auto_sym_keys]
41
+ assert !phs2[:opt][:auto_sym_vals]
42
+ end
43
+
44
+ def test_format_symbolize_keys_number_in_string
45
+ opt1 = @opt.merge({:symbolize_keys => true})
46
+ opt2 = @opt.merge({:int => true, :symbolize_keys => true})
47
+ phs1 = @phs.merge({:key => "1", :val => "1", :opt => opt1})
48
+ phs2 = @phs.merge({:key => "1", :val => "1", :opt => opt2})
49
+ act1 = @format.format(phs1)
50
+ act2 = @format.format(phs2)
51
+ exp1 = "1".to_sym
52
+ exp2 = "1".to_sym
53
+ assert_equal exp1, act1[:key]
54
+ assert_equal exp2, act2[:key]
55
+ end
56
+
57
+ def test_format_sym_str_nested
58
+
59
+ end
60
+
61
+ def test_format_sym_str
62
+ opt1 = @opt.merge({:sym_str => true})
63
+ opt2 = @opt.merge({:int => true, :sym_str => true})
64
+ opt3 = opt1
65
+ phs1 = @phs.merge({:key => "1", :val => "1", :opt => opt1})
66
+ phs2 = @phs.merge({:key => "1", :val => "1", :opt => opt2})
67
+ phs3 = @phs.merge({:key => "awesome", :val => "awesome", :opt => opt3})
68
+ act1 = @format.format(phs1)
69
+ act2 = @format.format(phs2)
70
+ act3 = @format.format(phs3)
71
+ exp1 = "1"
72
+ exp2 = 1
73
+ exp3 = "awesome".to_sym
74
+ exp4 = "1"
75
+ exp5 = 1
76
+ exp6 = "awesome".to_sym
77
+ assert_equal exp1, act1[:key]
78
+ assert_equal exp2, act2[:key]
79
+ assert_equal exp3, act3[:key]
80
+ assert_equal exp4, act1[:val]
81
+ assert_equal exp5, act2[:val]
82
+ assert_equal exp6, act3[:val]
83
+ end
84
+
85
+ def test_format_sym_str_keys
86
+ opt1 = @opt.merge({:sym_str_keys => true})
87
+ opt2 = @opt.merge({:int => true, :sym_str_keys => true})
88
+ opt3 = opt1
89
+ phs1 = @phs.merge({:key => "1", :val => "1", :opt => opt1})
90
+ phs2 = @phs.merge({:key => "1", :val => "1", :opt => opt2})
91
+ phs3 = @phs.merge({:key => "awesome", :val => "awesome", :opt => opt3})
92
+ act1 = @format.format(phs1)
93
+ act2 = @format.format(phs2)
94
+ act3 = @format.format(phs3)
95
+ exp1 = "1"
96
+ exp2 = 1
97
+ exp3 = "awesome".to_sym
98
+ exp4 = "1"
99
+ exp5 = 1
100
+ exp6 = "awesome"
101
+ assert_equal exp1, act1[:key]
102
+ assert_equal exp2, act2[:key]
103
+ assert_equal exp3, act3[:key]
104
+ assert_equal exp4, act1[:val]
105
+ assert_equal exp5, act2[:val]
106
+ assert_equal exp6, act3[:val]
107
+ end
108
+
109
+ def test_format_sym_str_vals
110
+ opt1 = @opt.merge({:sym_str_vals => true})
111
+ opt2 = @opt.merge({:int => true, :sym_str_vals => true})
112
+ opt3 = opt1
113
+ opt1 = @opt.merge({:sym_str_vals => true})
114
+ phs1 = @phs.merge({:key => "1", :val => "1", :opt => opt1})
115
+ phs2 = @phs.merge({:key => "1", :val => "1", :opt => opt2})
116
+ phs3 = @phs.merge({:key => "awesome", :val => "awesome", :opt => opt3})
117
+ act1 = @format.format(phs1)
118
+ act2 = @format.format(phs2)
119
+ act3 = @format.format(phs3)
120
+ exp1 = "1"
121
+ exp2 = 1
122
+ exp3 = "awesome"
123
+ exp4 = "1"
124
+ exp5 = 1
125
+ exp6 = "awesome".to_sym
126
+ assert_equal exp1, act1[:key]
127
+ assert_equal exp2, act2[:key]
128
+ assert_equal exp3, act3[:key]
129
+ assert_equal exp4, act1[:val]
130
+ assert_equal exp5, act2[:val]
131
+ assert_equal exp6, act3[:val]
132
+ end
133
+
134
+ #
135
+ # strip different things
136
+ #
137
+ def test_strip
138
+ key = " awesome "
139
+ val = " awesome "
140
+ opt1 = {:strip => true}
141
+ opt2 = @opt.clone
142
+ act_phs1 = @phs.merge({:key => key, :val => val, :opt => opt1})
143
+ act_phs2 = @phs.merge({:key => key, :val => val, :opt => opt2})
144
+ exp_key1 = "awesome"
145
+ exp_val1 = "awesome"
146
+ exp_key2 = key
147
+ exp_val2 = val
148
+ @format.format(act_phs1)
149
+ @format.format(act_phs2)
150
+ assert_equal exp_key1, act_phs1[:key]
151
+ assert_equal exp_val1, act_phs1[:val]
152
+ assert_equal exp_key2, act_phs2[:key]
153
+ assert_equal exp_val2, act_phs2[:val]
154
+ end
155
+
156
+ def test_strip_keys
157
+ key = " awesome "
158
+ opt1 = {:strip_keys => true}
159
+ opt2 = @opt.clone
160
+ act_phs1 = @phs.merge({:key => key, :opt => opt1})
161
+ act_phs2 = @phs.merge({:key => key, :opt => opt2})
162
+ exp_key1 = "awesome"
163
+ exp_key2 = key
164
+ @format.format(act_phs1)
165
+ @format.format(act_phs2)
166
+ assert_equal exp_key1, act_phs1[:key]
167
+ assert_equal exp_key2, act_phs2[:key]
168
+ end
169
+
170
+ def test_strip_vals
171
+ val = " awesome "
172
+ opt1 = {:strip_vals => true}
173
+ opt2 = @opt.clone
174
+ act_phs1 = @phs.merge({:val => val, :opt => opt1})
175
+ act_phs2 = @phs.merge({:val => val, :opt => opt2})
176
+ exp_val1 = "awesome"
177
+ exp_val2 = val
178
+ @format.format(act_phs1)
179
+ @format.format(act_phs2)
180
+ assert_equal exp_val1, act_phs1[:val]
181
+ assert_equal exp_val2, act_phs2[:val]
182
+ end
183
+
184
+ #
185
+ # convert true, false in strings
186
+ #
187
+ def test_true_keys
188
+ opt1 = @opt.clone
189
+ opt2 = @opt.merge({:auto_true_keys => true})
190
+ opt3 = @opt.merge({:auto_true => true})
191
+ opt4 = @opt.clone
192
+ opt5 = @opt.merge({:auto_true_keys => true})
193
+ opt6 = @opt.merge({:auto_true => true})
194
+ act_phs1 = @phs.merge({:key => "true", :opt => opt1})
195
+ act_phs2 = @phs.merge({:key => "true", :opt => opt2})
196
+ act_phs3 = @phs.merge({:key => "true", :opt => opt3})
197
+ act_phs4 = @phs.merge({:key => "false", :opt => opt4})
198
+ act_phs5 = @phs.merge({:key => "false", :opt => opt5})
199
+ act_phs6 = @phs.merge({:key => "false", :opt => opt6})
200
+ @format.key_to_true(act_phs1)
201
+ @format.key_to_true(act_phs2)
202
+ @format.key_to_true(act_phs3)
203
+ @format.key_to_true(act_phs4)
204
+ @format.key_to_true(act_phs5)
205
+ @format.key_to_true(act_phs6)
206
+ assert_equal "true", act_phs1[:key]
207
+ assert_equal true, act_phs2[:key]
208
+ assert_equal true, act_phs3[:key]
209
+ assert_equal "false", act_phs4[:key]
210
+ assert_equal false, act_phs5[:key]
211
+ assert_equal false, act_phs6[:key]
212
+ end
213
+
214
+ def test_true_vals
215
+ opt1 = @opt.clone
216
+ opt2 = @opt.merge({:auto_true_vals => true})
217
+ opt3 = @opt.merge({:auto_true => true})
218
+ opt4 = @opt.clone
219
+ opt5 = @opt.merge({:auto_true_vals => true})
220
+ opt6 = @opt.merge({:auto_true => true})
221
+ act_phs1 = @phs.merge({:val => "true", :opt => opt1})
222
+ act_phs2 = @phs.merge({:val => "true", :opt => opt2})
223
+ act_phs3 = @phs.merge({:val => "true", :opt => opt3})
224
+ act_phs4 = @phs.merge({:val => "false", :opt => opt4})
225
+ act_phs5 = @phs.merge({:val => "false", :opt => opt5})
226
+ act_phs6 = @phs.merge({:val => "false", :opt => opt6})
227
+ @format.val_to_true(act_phs1)
228
+ @format.val_to_true(act_phs2)
229
+ @format.val_to_true(act_phs3)
230
+ @format.val_to_true(act_phs4)
231
+ @format.val_to_true(act_phs5)
232
+ @format.val_to_true(act_phs6)
233
+ assert_equal "true", act_phs1[:val]
234
+ assert_equal true, act_phs2[:val]
235
+ assert_equal true, act_phs3[:val]
236
+ assert_equal "false", act_phs4[:val]
237
+ assert_equal false, act_phs5[:val]
238
+ assert_equal false, act_phs6[:val]
239
+ end
240
+
241
+ #
242
+ # symbolize key
243
+ #
244
+ def test_key_to_sym
245
+ exp_key1 = "awesome"
246
+ exp_key2 = "awesome".to_sym
247
+ opt1 = @opt.clone
248
+ opt2 = @opt.merge({:auto_sym_keys => true})
249
+ opt3 = @opt.merge({:symbolize => true})
250
+ opt4 = @opt.merge({:symbolize_keys => true})
251
+ act_phs1 = @phs.merge({:key => "awesome", :opt => opt1})
252
+ act_phs2 = @phs.merge({:key => "awesome", :opt => opt2})
253
+ act_phs3 = @phs.merge({:key => "awesome", :opt => opt3})
254
+ act_phs4 = @phs.merge({:key => "awesome", :opt => opt4})
255
+ @format.key_to_sym(act_phs1)
256
+ @format.key_to_sym(act_phs2)
257
+ @format.key_to_sym(act_phs3)
258
+ @format.key_to_sym(act_phs4)
259
+ assert_equal exp_key1, act_phs1[:key]
260
+ assert_equal exp_key1, act_phs2[:key]
261
+ assert_equal exp_key2, act_phs3[:key]
262
+ assert_equal exp_key2, act_phs4[:key]
263
+ end
264
+
265
+ def test_key_to_sym_number_in_string
266
+ exp_key1 = "411"
267
+ exp_key2 = "411".to_sym
268
+ opt1 = @opt.clone
269
+ opt2 = @opt.merge({:auto_sym_keys => true})
270
+ opt3 = @opt.merge({:symbolize => true})
271
+ opt4 = @opt.merge({:symbolize_keys => true})
272
+ act_phs1 = @phs.merge({:key => "411", :opt => opt1})
273
+ act_phs2 = @phs.merge({:key => "411", :opt => opt2})
274
+ act_phs3 = @phs.merge({:key => "411", :opt => opt3})
275
+ act_phs4 = @phs.merge({:key => "411", :opt => opt4})
276
+ @format.key_to_sym(act_phs1)
277
+ @format.key_to_sym(act_phs2)
278
+ @format.key_to_sym(act_phs3)
279
+ @format.key_to_sym(act_phs4)
280
+ assert_equal exp_key1, act_phs1[:key]
281
+ assert_equal exp_key1, act_phs2[:key]
282
+ assert_equal exp_key2, act_phs3[:key]
283
+ assert_equal exp_key2, act_phs4[:key]
284
+ end
285
+
286
+ #
287
+ # symbolize val
288
+ #
289
+ def test_val_to_sym
290
+ exp_val1 = "awesome"
291
+ exp_val2 = "awesome".to_sym
292
+ opt1 = @opt.clone
293
+ opt2 = @opt.merge({:auto_sym_vals => true})
294
+ opt3 = @opt.merge({:symbolize => true})
295
+ opt4 = @opt.merge({:symbolize_vals => true})
296
+ act_phs1 = @phs.merge({:val => "awesome", :opt => opt1})
297
+ act_phs2 = @phs.merge({:val => "awesome", :opt => opt2})
298
+ act_phs3 = @phs.merge({:val => "awesome", :opt => opt3})
299
+ act_phs4 = @phs.merge({:val => "awesome", :opt => opt4})
300
+ @format.val_to_sym(act_phs1)
301
+ @format.val_to_sym(act_phs2)
302
+ @format.val_to_sym(act_phs3)
303
+ @format.val_to_sym(act_phs4)
304
+ assert_equal exp_val1, act_phs1[:val]
305
+ assert_equal exp_val1, act_phs2[:val]
306
+ assert_equal exp_val2, act_phs3[:val]
307
+ assert_equal exp_val2, act_phs4[:val]
308
+ end
309
+
310
+ def test_val_to_sym_number_in_string
311
+ exp_val1 = "411"
312
+ exp_val2 = "411".to_sym
313
+ opt1 = @opt.clone
314
+ opt2 = @opt.merge({:auto_sym_vals => true})
315
+ opt3 = @opt.merge({:symbolize => true})
316
+ opt4 = @opt.merge({:symbolize_vals => true})
317
+ act_phs1 = @phs.merge({:val => "411", :opt => opt1})
318
+ act_phs2 = @phs.merge({:val => "411", :opt => opt2})
319
+ act_phs3 = @phs.merge({:val => "411", :opt => opt3})
320
+ act_phs4 = @phs.merge({:val => "411", :opt => opt4})
321
+ @format.val_to_sym(act_phs1)
322
+ @format.val_to_sym(act_phs2)
323
+ @format.val_to_sym(act_phs3)
324
+ @format.val_to_sym(act_phs4)
325
+ assert_equal exp_val1, act_phs1[:val]
326
+ assert_equal exp_val1, act_phs2[:val]
327
+ assert_equal exp_val2, act_phs3[:val]
328
+ assert_equal exp_val2, act_phs4[:val]
329
+ end
330
+
331
+ #
332
+ # key is parsed as string, try to_i
333
+ #
334
+ def test_key_to_int_string
335
+ exp_key1 = "411"
336
+ exp_key2 = 411
337
+ exp_key3 = "411".to_sym
338
+ opt1 = @opt.clone
339
+ opt2 = @opt.merge({:int => true})
340
+ opt3 = @opt.merge({:int_keys => true})
341
+ opt4 = @opt.merge({:int => true})
342
+ opt5 = @opt.merge({:int_keys => true})
343
+ act_phs1 = @phs.merge({:key => "411", :opt => opt1})
344
+ act_phs2 = @phs.merge({:key => "411", :opt => opt2})
345
+ act_phs3 = @phs.merge({:key => "411", :opt => opt3})
346
+ act_phs4 = @phs.merge({:key => "411".to_sym, :opt => opt4})
347
+ act_phs5 = @phs.merge({:key => "411".to_sym, :opt => opt5})
348
+ @format.key_to_int(act_phs1)
349
+ @format.key_to_int(act_phs2)
350
+ @format.key_to_int(act_phs3)
351
+ @format.key_to_int(act_phs4)
352
+ @format.key_to_int(act_phs5)
353
+ assert_equal exp_key1, act_phs1[:key]
354
+ assert_equal exp_key2, act_phs2[:key]
355
+ assert_equal exp_key2, act_phs3[:key]
356
+ assert_equal exp_key3, act_phs4[:key]
357
+ assert_equal exp_key3, act_phs5[:key]
358
+ end
359
+
360
+ #
361
+ # val is parsed as string, try to_i
362
+ #
363
+ def test_val_to_int
364
+ exp_val1 = "411"
365
+ exp_val2 = 411
366
+ exp_val3 = "411".to_sym
367
+ opt1 = @opt.clone
368
+ opt2 = @opt.merge({:int => true})
369
+ opt3 = @opt.merge({:int_vals => true})
370
+ opt4 = @opt.merge({:int => true})
371
+ opt5 = @opt.merge({:int_vals => true})
372
+ act_phs1 = @phs.merge({:val => "411", :opt => opt1})
373
+ act_phs2 = @phs.merge({:val => "411", :opt => opt2})
374
+ act_phs3 = @phs.merge({:val => "411", :opt => opt3})
375
+ act_phs4 = @phs.merge({:val => "411".to_sym, :opt => opt4})
376
+ act_phs5 = @phs.merge({:val => "411".to_sym, :opt => opt5})
377
+ @format.val_to_int(act_phs1)
378
+ @format.val_to_int(act_phs2)
379
+ @format.val_to_int(act_phs3)
380
+ @format.val_to_int(act_phs4)
381
+ @format.val_to_int(act_phs5)
382
+ assert_equal exp_val1, act_phs1[:val]
383
+ assert_equal exp_val2, act_phs2[:val]
384
+ assert_equal exp_val2, act_phs3[:val]
385
+ assert_equal exp_val3, act_phs4[:val]
386
+ assert_equal exp_val3, act_phs5[:val]
387
+ end
388
+
389
+ #
390
+ # returns Int if String is convertable
391
+ #
392
+ def test_string_to_int
393
+ str1 = ""
394
+ str2 = "awesome"
395
+ str3 = "123awesome"
396
+ str4 = "123"
397
+ exp1 = ""
398
+ exp2 = "awesome"
399
+ exp3 = "123awesome"
400
+ exp4 = 123
401
+ act1 = @format.string_to_int(str1)
402
+ act2 = @format.string_to_int(str2)
403
+ act3 = @format.string_to_int(str3)
404
+ act4 = @format.string_to_int(str4)
405
+ end
406
+ end
@@ -0,0 +1,190 @@
1
+ #!/usr/bin/env ruby -w
2
+
3
+ require 'rubygems'
4
+ require 'minitest/unit'
5
+ $: << 'lib' << 'test'
6
+ require 'cheeba/reader/node'
7
+ require 'cheeba/reader/parser'
8
+ require 'cheeba/indicators'
9
+ MiniTest::Unit.autorun
10
+
11
+ class TestReaderParser < MiniTest::Unit::TestCase
12
+ def setup
13
+ @parser = Cheeba::Reader::Parser
14
+ @opt = Cheeba::Indicators.options
15
+ end
16
+
17
+ def test_parser_module
18
+ assert_kind_of Module, @parser
19
+ end
20
+
21
+ def test_parse_raise_indenterror
22
+ lin1 = " 7:7"
23
+ spc1 = 1
24
+ idt1 = 2
25
+ num1 = 88
26
+ assert_raises(Cheeba::Reader::Parser::IndentError) {
27
+ @parser.check_indent(lin1, spc1, idt1, num1)
28
+ }
29
+ end
30
+
31
+ def test_check_indent_no_raise_indenterror
32
+ lin1 = " 7:7"
33
+ spc1 = 2
34
+ idt1 = 2
35
+ num1 = 88
36
+ assert_nil @parser.check_indent(lin1, spc1, idt1, num1)
37
+ end
38
+
39
+ def test_parse_comment
40
+ line = "#dude"
41
+ phs = @parser.parse(line, @opt, 77)
42
+ exp_msg = "com".to_sym
43
+ exp_spc = 0
44
+ exp_key = ""
45
+ exp_val = "dude"
46
+ exp_ask = nil
47
+ exp_asv = nil
48
+ exp_opt = @opt
49
+ assert_equal exp_msg, phs[:msg]
50
+ assert_equal exp_spc, phs[:spc]
51
+ assert_equal exp_key, phs[:key]
52
+ assert_equal exp_val, phs[:val]
53
+ assert_equal exp_ask, phs[:ask]
54
+ assert_equal exp_asv, phs[:asv]
55
+ assert_equal exp_opt, phs[:opt]
56
+ end
57
+
58
+ # parsed line => [msg, spc, key, val, ask, asv, opt]
59
+ def test_results_to_hash
60
+ results = [1, " ", "3", "4", 5, 6]
61
+ phs = @parser.results_to_hash(results, 7)
62
+ exp_msg = 1
63
+ exp_spc = 2
64
+ exp_key = "3"
65
+ exp_val = "4"
66
+ exp_ask = 5
67
+ exp_asv = 6
68
+ exp_opt = 7
69
+ assert_equal exp_msg, phs[:msg]
70
+ assert_equal exp_spc, phs[:spc]
71
+ assert_equal exp_key, phs[:key]
72
+ assert_equal exp_val, phs[:val]
73
+ assert_equal exp_ask, phs[:ask]
74
+ assert_equal exp_asv, phs[:asv]
75
+ assert_equal exp_opt, phs[:opt]
76
+ end
77
+
78
+ def test_parse_line_malformed
79
+ line = "awesome"
80
+ phs = @parser.parse_line(line, @opt)
81
+ assert_equal :mal, phs[0]
82
+ assert_equal "awesome", phs[3]
83
+ end
84
+
85
+ def test_parse_line_blank
86
+ line1 = " "
87
+ line2 = ""
88
+ exp_phs1 = @parser.parse_line(line1, @opt)
89
+ exp_phs2 = @parser.parse_line(line2, @opt)
90
+ assert_equal :bla, exp_phs1[0]
91
+ assert_equal :bla, exp_phs2[0]
92
+ end
93
+
94
+ def test_parse_line_comment
95
+ line1 = " #awesome"
96
+ line2 = "# dude"
97
+ line3 = "###beer"
98
+ line4 = " # camaro"
99
+ exp_phs1 = @parser.parse_line(line1, @opt)
100
+ exp_phs2 = @parser.parse_line(line2, @opt)
101
+ exp_phs3 = @parser.parse_line(line3, @opt)
102
+ exp_phs4 = @parser.parse_line(line4, @opt)
103
+ assert_equal :com, exp_phs1[0]
104
+ assert_equal :com, exp_phs2[0]
105
+ assert_equal :com, exp_phs3[0]
106
+ assert_equal :com, exp_phs4[0]
107
+ assert_equal "awesome", exp_phs1.flatten[3]
108
+ assert_equal "dude", exp_phs2.flatten[3]
109
+ assert_equal "##beer", exp_phs3.flatten[3]
110
+ assert_equal "camaro", exp_phs4.flatten[3]
111
+ end
112
+
113
+ def test_parse_line_array
114
+ line1 = "- awesome"
115
+ line2 = " -dude"
116
+ line3 = " -- beer"
117
+ line4 = " - #camaro"
118
+ exp_phs1 = @parser.parse_line(line1, @opt)
119
+ exp_phs2 = @parser.parse_line(line2, @opt)
120
+ exp_phs3 = @parser.parse_line(line3, @opt)
121
+ exp_phs4 = @parser.parse_line(line4, @opt)
122
+ assert_equal :arr, exp_phs1[0]
123
+ assert_equal :arr, exp_phs2[0]
124
+ assert_equal :arr, exp_phs3[0]
125
+ assert_equal :arr, exp_phs4[0]
126
+ assert_equal "", exp_phs1.flatten[1]
127
+ assert_equal " ", exp_phs2.flatten[1]
128
+ assert_equal " ", exp_phs3.flatten[1]
129
+ assert_equal " ", exp_phs4.flatten[1]
130
+ assert_equal "awesome", exp_phs1.flatten[3]
131
+ assert_equal "dude", exp_phs2.flatten[3]
132
+ assert_equal "- beer", exp_phs3.flatten[3]
133
+ assert_equal "#camaro", exp_phs4.flatten[3]
134
+ end
135
+
136
+ def test_parse_line_hashkey
137
+ line1 = "awesome:"
138
+ line2 = " dude :"
139
+ line3 = " :beer:"
140
+ line4 = ' "camaro":'
141
+ exp_phs1 = @parser.parse_line(line1, @opt)
142
+ exp_phs2 = @parser.parse_line(line2, @opt)
143
+ exp_phs3 = @parser.parse_line(line3, @opt)
144
+ exp_phs4 = @parser.parse_line(line4, @opt)
145
+ assert_equal :hky, exp_phs1[0]
146
+ assert_equal :mal, exp_phs2[0]
147
+ assert_equal :hky, exp_phs3[0]
148
+ assert_equal :hky, exp_phs4[0]
149
+ assert_equal "", exp_phs1.flatten[1]
150
+ assert_equal " ", exp_phs3.flatten[1]
151
+ assert_equal " ", exp_phs4.flatten[1]
152
+ assert_equal "awesome", exp_phs1.flatten[2]
153
+ assert_equal ":beer", exp_phs3.flatten[2]
154
+ assert_equal '"camaro"', exp_phs4.flatten[2]
155
+ assert_equal nil, exp_phs1.flatten[4]
156
+ assert_equal true, exp_phs3.flatten[4]
157
+ assert_equal nil, exp_phs4.flatten[4]
158
+ end
159
+
160
+ def test_parse_line_hashpair
161
+ line1 = "awesome:dude"
162
+ line2 = " :dude::fekja"
163
+ line3 = " :beer:coke"
164
+ line4 = ' "camaro"::firebird'
165
+ exp_phs1 = @parser.parse_line(line1, @opt)
166
+ exp_phs2 = @parser.parse_line(line2, @opt)
167
+ exp_phs3 = @parser.parse_line(line3, @opt)
168
+ exp_phs4 = @parser.parse_line(line4, @opt)
169
+ assert_equal :hpr, exp_phs1[0]
170
+ assert_equal :hpr, exp_phs2[0]
171
+ assert_equal :hpr, exp_phs3[0]
172
+ assert_equal :hpr, exp_phs4[0]
173
+ assert_equal "", exp_phs1.flatten[1]
174
+ assert_equal " ", exp_phs2.flatten[1]
175
+ assert_equal " ", exp_phs3.flatten[1]
176
+ assert_equal " ", exp_phs4.flatten[1]
177
+ assert_equal "awesome", exp_phs1.flatten[2]
178
+ assert_equal ":dude", exp_phs2.flatten[2]
179
+ assert_equal ":beer", exp_phs3.flatten[2]
180
+ assert_equal '"camaro"', exp_phs4.flatten[2]
181
+ assert_equal nil, exp_phs1.flatten[4]
182
+ assert_equal true, exp_phs2.flatten[4]
183
+ assert_equal true, exp_phs3.flatten[4]
184
+ assert_equal nil, exp_phs4.flatten[4]
185
+ assert_equal nil, exp_phs1.flatten[5]
186
+ assert_equal true, exp_phs2.flatten[5]
187
+ assert_equal nil, exp_phs3.flatten[5]
188
+ assert_equal true, exp_phs4.flatten[5]
189
+ end
190
+ end