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.
- data/.git/COMMIT_EDITMSG +1 -0
- data/.git/HEAD +1 -0
- data/.git/config +9 -0
- data/.git/description +1 -0
- data/.git/hooks/applypatch-msg.sample +15 -0
- data/.git/hooks/commit-msg.sample +24 -0
- data/.git/hooks/post-commit.sample +8 -0
- data/.git/hooks/post-receive.sample +15 -0
- data/.git/hooks/post-update.sample +8 -0
- data/.git/hooks/pre-applypatch.sample +14 -0
- data/.git/hooks/pre-commit.sample +18 -0
- data/.git/hooks/pre-rebase.sample +169 -0
- data/.git/hooks/prepare-commit-msg.sample +36 -0
- data/.git/hooks/update.sample +107 -0
- data/.git/index +0 -0
- data/.git/info/exclude +7 -0
- data/.git/logs/HEAD +7 -0
- data/.git/logs/refs/heads/master +6 -0
- data/.git/logs/refs/remotes/origin/master +6 -0
- data/.git/objects/02/38dae53aee5cb4ea157a3f036b93868ede9593 +0 -0
- data/.git/objects/02/9cafaafb83e528381f0f2f02c6f23799bd1942 +0 -0
- data/.git/objects/07/c654f9ff6c65626369b061c595be42ccdd6cd7 +0 -0
- data/.git/objects/07/dbbace3b24b2d635d2fb637581931d573fc75c +0 -0
- data/.git/objects/08/ce1195151ff5a51573a871947ecd913fb5aa0f +1 -0
- data/.git/objects/0c/ad63d44505490e1a30ad075099a25020d7a7c5 +0 -0
- data/.git/objects/12/215629eba6a8f0fcd849923e98a471984521e1 +2 -0
- data/.git/objects/18/60fee2fadb59a6cbcb7f7dd0a6f6dc3b56ac79 +0 -0
- data/.git/objects/1e/1800628b80bef5a8043e4adacd6ebc6bab9aa1 +0 -0
- data/.git/objects/27/97bc2b3d72dc6d77b7bd07f1cca96f7e06b4ed +0 -0
- data/.git/objects/28/41d3f97c8aa8c942a613e1c69ed4280d78cf0a +0 -0
- data/.git/objects/29/f0c4074f9ecc894edd7ed507a1a92499838a6d +0 -0
- data/.git/objects/2a/8948661c63f2bef24f330638d239c88d5d0c2e +0 -0
- data/.git/objects/3f/7142cf3878c65e71b54d3572d82837d20f2aa7 +4 -0
- data/.git/objects/40/8c36a3103bc77e90db86dc06b1598e3baa4c2d +0 -0
- data/.git/objects/42/eb5558727a2144e7c5e997d3e6aea5486eaf37 +0 -0
- data/.git/objects/4c/6098fe05db7126c8a3c97f463910e5cc398630 +0 -0
- data/.git/objects/51/6902dffff8d29fa2f89979b9cd81ab275e1c67 +0 -0
- data/.git/objects/5b/502f8e20a0556c22727b504108a2dc36d7cbed +2 -0
- data/.git/objects/67/c3fb20cfae5320d83c9ebf2b85c1a3ef9b706b +0 -0
- data/.git/objects/72/7df703ac52c4ff97aa452feee27b9990430a11 +5 -0
- data/.git/objects/74/bc14252b2148d11877025d7f445d2fa686e7e9 +0 -0
- data/.git/objects/78/9ac5e1ca6a70ec3b8a11344e6f4a03e440f309 +0 -0
- data/.git/objects/7a/46bd1887d1a793094da678ded3b53b0208b826 +0 -0
- data/.git/objects/8d/77306c0d13e98da74ddf48002674fced7e1618 +2 -0
- data/.git/objects/94/36859cb89dd0bbddab77ed0810860e979b1c05 +0 -0
- data/.git/objects/ab/454c9537f329aecaedae0586c6d61146a7f819 +0 -0
- data/.git/objects/b9/3b5dde3104bb495dc0d2970bbe617dafb2f084 +0 -0
- data/.git/objects/be/197d3b2c14a52300cc4553bf2004ef3c45a45b +0 -0
- data/.git/objects/be/8e3e0ab878ffcb0456ae4cf66861888d933bf5 +0 -0
- data/.git/objects/c5/4c515f4bff81e08b01176b1a5743fd773a9740 +0 -0
- data/.git/objects/d4/a471f188d32adfa9dc2ff22c53b95319a162ed +0 -0
- data/.git/objects/d7/83399b37ca769b5b5bc2b33727fc47acfa5e4c +0 -0
- data/.git/objects/d7/a544fc5715014ef027875545ef0145e9f694fe +0 -0
- data/.git/objects/de/eef72f84f60beab439c58d84acc42d3e5a1279 +0 -0
- data/.git/objects/e6/9de29bb2d1d6434b8b29ae775ad8c2e48c5391 +0 -0
- data/.git/objects/e9/9c40e89cb90f8067f99d7051c3bebf2b145ec7 +0 -0
- data/.git/objects/f3/89737a46e7cad94deb222e238e8f926767637e +0 -0
- data/.git/objects/fa/4f98b2fe387e262f9c28011e53f1b8fb920401 +0 -0
- data/.git/objects/fb/72047097c38625f3598fb348b3fbe75afd6d2d +1 -0
- data/.git/objects/ff/7aefe3472c61b77f58669ec4b8208412156930 +0 -0
- data/.git/refs/heads/master +1 -0
- data/.git/refs/remotes/origin/master +1 -0
- data/History.txt +6 -0
- data/Manifest.txt +94 -0
- data/README.txt +35 -0
- data/Rakefile +13 -0
- data/bin/cheeba +68 -0
- data/cheeba.gemspec +37 -0
- data/lib/cheeba/defaults.rb +78 -0
- data/lib/cheeba/errors.rb +10 -0
- data/lib/cheeba/indicators.rb +25 -0
- data/lib/cheeba/reader/builder.rb +265 -0
- data/lib/cheeba/reader/format.rb +130 -0
- data/lib/cheeba/reader/node.rb +61 -0
- data/lib/cheeba/reader/parser.rb +64 -0
- data/lib/cheeba/reader.rb +33 -0
- data/lib/cheeba/version.rb +3 -0
- data/lib/cheeba/writer/builder.rb +95 -0
- data/lib/cheeba/writer.rb +49 -0
- data/lib/cheeba.rb +50 -0
- data/test/files/arrays.cash +15 -0
- data/test/files/blank.cash +0 -0
- data/test/files/comments.cash +17 -0
- data/test/files/hashes.cash +26 -0
- data/test/files/malformed.cash +3 -0
- data/test/files/mixed.cash +12 -0
- data/test/files/split.cash +9 -0
- data/test/test_cheeba.rb +185 -0
- data/test/test_reader.rb +210 -0
- data/test/test_reader_builder.rb +345 -0
- data/test/test_reader_format.rb +406 -0
- data/test/test_reader_parser.rb +190 -0
- data/test/test_writer.rb +133 -0
- data/test/test_writer_builder.rb +150 -0
- metadata +167 -0
data/test/test_cheeba.rb
ADDED
|
@@ -0,0 +1,185 @@
|
|
|
1
|
+
#!/usr/bin/env ruby -w
|
|
2
|
+
|
|
3
|
+
require 'rubygems'
|
|
4
|
+
require 'minitest/unit'
|
|
5
|
+
$: << 'lib' << 'test'
|
|
6
|
+
require 'cheeba'
|
|
7
|
+
MiniTest::Unit.autorun
|
|
8
|
+
|
|
9
|
+
class TestCheeba < MiniTest::Unit::TestCase
|
|
10
|
+
def setup
|
|
11
|
+
@files = "#{File.dirname(__FILE__)}/files"
|
|
12
|
+
@test = "#{@files}/test.cash"
|
|
13
|
+
@opt = Cheeba::Defaults.options.merge(Cheeba::Indicators.options)
|
|
14
|
+
@hom = ENV['HOME']
|
|
15
|
+
@dot = "#{@hom}/.cheeba"
|
|
16
|
+
@hsh = {
|
|
17
|
+
"grocery_list" => {
|
|
18
|
+
"meatsez" => {
|
|
19
|
+
1 => {"count"=>5, "model"=>"Spam"},
|
|
20
|
+
2 => {"count"=>1, "model"=>"Log of ground beef"}},
|
|
21
|
+
"beer"=>{1=>{"count"=>1, "model"=>"24 pack - Coors Lite"}},
|
|
22
|
+
"cigarettes" => {
|
|
23
|
+
1 => {"count"=>2, "model"=>"Carton - Basic Ultra Menthol Box 100"}},
|
|
24
|
+
"other" => {
|
|
25
|
+
1 => {"count"=>2, "model"=>"Economy-Size Pork & Beans"},
|
|
26
|
+
2 => {"count"=>1, "model"=>"Jumbo Miracle Whip"},
|
|
27
|
+
3 => {"count"=>2, "model"=>"White Wonder Bread"}}}}
|
|
28
|
+
@exp =
|
|
29
|
+
["grocery_list:",
|
|
30
|
+
" meatsez:",
|
|
31
|
+
" 1:",
|
|
32
|
+
" count: 5",
|
|
33
|
+
" model: Spam",
|
|
34
|
+
" 2:",
|
|
35
|
+
" count: 1",
|
|
36
|
+
" model: Log of ground beef",
|
|
37
|
+
" cigarettes:",
|
|
38
|
+
" 1:",
|
|
39
|
+
" count: 2",
|
|
40
|
+
" model: Carton - Basic Ultra Menthol Box 100",
|
|
41
|
+
" beer:",
|
|
42
|
+
" 1:",
|
|
43
|
+
" count: 1",
|
|
44
|
+
" model: 24 pack - Coors Lite",
|
|
45
|
+
" other:",
|
|
46
|
+
" 1:",
|
|
47
|
+
" count: 2",
|
|
48
|
+
" model: Economy-Size Pork & Beans",
|
|
49
|
+
" 2:",
|
|
50
|
+
" count: 1",
|
|
51
|
+
" model: Jumbo Miracle Whip",
|
|
52
|
+
" 3:",
|
|
53
|
+
" count: 2",
|
|
54
|
+
" model: White Wonder Bread"]
|
|
55
|
+
@nested =<<FEKJA
|
|
56
|
+
domain: test
|
|
57
|
+
manifest:
|
|
58
|
+
manifest_id:
|
|
59
|
+
format: String
|
|
60
|
+
master_id:
|
|
61
|
+
format: String
|
|
62
|
+
owner_id:
|
|
63
|
+
format: String
|
|
64
|
+
log_id:
|
|
65
|
+
desc: log of all transactions withing the entire tree
|
|
66
|
+
format: String
|
|
67
|
+
FEKJA
|
|
68
|
+
end
|
|
69
|
+
|
|
70
|
+
def test_read_hash
|
|
71
|
+
act = Cheeba.read("#{@files}/hashes.cash")
|
|
72
|
+
assert_equal @hsh, act
|
|
73
|
+
end
|
|
74
|
+
|
|
75
|
+
def test_read_hash_options_symbolize_keys
|
|
76
|
+
hsh = ":awesome: dude"
|
|
77
|
+
exp = {:awesome => "dude"}
|
|
78
|
+
act = Cheeba.read(hsh, {:symbolize_keys => true})
|
|
79
|
+
assert_equal exp, act
|
|
80
|
+
end
|
|
81
|
+
|
|
82
|
+
def test_read_nested_hash_options_symbolize
|
|
83
|
+
exp = {
|
|
84
|
+
:domain => :test,
|
|
85
|
+
:manifest => {
|
|
86
|
+
:manifest_id => {
|
|
87
|
+
:format => :String},
|
|
88
|
+
:master_id => {
|
|
89
|
+
:format => :String},
|
|
90
|
+
:owner_id=>{
|
|
91
|
+
:format => :String},
|
|
92
|
+
:log_id => {
|
|
93
|
+
:desc => :"log of all transactions withing the entire tree",
|
|
94
|
+
:format => :String}}}
|
|
95
|
+
act = Cheeba.read(@nested, {:symbolize => true})
|
|
96
|
+
assert_equal exp, act
|
|
97
|
+
end
|
|
98
|
+
|
|
99
|
+
def test_read_nested_hash_options_symbolize_keys
|
|
100
|
+
exp = {
|
|
101
|
+
:domain=>"test",
|
|
102
|
+
:manifest=>{
|
|
103
|
+
:manifest_id=>{
|
|
104
|
+
:format => "String"},
|
|
105
|
+
:master_id=>{
|
|
106
|
+
:format => "String"},
|
|
107
|
+
:owner_id=>{
|
|
108
|
+
:format => "String"},
|
|
109
|
+
:log_id=>{
|
|
110
|
+
:desc=>"log of all transactions withing the entire tree",
|
|
111
|
+
:format => "String"}}}
|
|
112
|
+
act = Cheeba.read(@nested, {:symbolize_keys => true})
|
|
113
|
+
assert_equal exp, act
|
|
114
|
+
end
|
|
115
|
+
|
|
116
|
+
def test_read_string
|
|
117
|
+
str = IO.read("#{@files}/hashes.cash")
|
|
118
|
+
act = Cheeba.read(str)
|
|
119
|
+
assert_equal @hsh, act
|
|
120
|
+
end
|
|
121
|
+
|
|
122
|
+
def test_parse_hash
|
|
123
|
+
act = Cheeba.parse(@hsh)
|
|
124
|
+
assert_equal @exp, act
|
|
125
|
+
end
|
|
126
|
+
|
|
127
|
+
def test_write
|
|
128
|
+
File.delete(@test) if File.exists?(@test)
|
|
129
|
+
refute(File.exists?(@test), "dude!")
|
|
130
|
+
Cheeba.write(@hsh, @test)
|
|
131
|
+
act = (IO.readlines(@test).map {|x| x.chomp})
|
|
132
|
+
assert(File.exists?(@test))
|
|
133
|
+
assert_equal @exp, act
|
|
134
|
+
File.delete(@test)
|
|
135
|
+
end
|
|
136
|
+
|
|
137
|
+
def test_dotfile
|
|
138
|
+
File.delete(@dot) if File.exists?(@dot)
|
|
139
|
+
refute(File.exists?(@dot), "dude!")
|
|
140
|
+
Cheeba.dotfile
|
|
141
|
+
assert(File.exists?(@dot))
|
|
142
|
+
exp_keys = Cheeba::Defaults.options
|
|
143
|
+
act_keys = Cheeba::Reader.read(@dot, @opt.merge({:symbolize_keys => true}))
|
|
144
|
+
assert_equal exp_keys, act_keys
|
|
145
|
+
File.delete(@dot)
|
|
146
|
+
end
|
|
147
|
+
|
|
148
|
+
def test_dotfile_exists
|
|
149
|
+
len = Dir.entries(@hom).length
|
|
150
|
+
mv_by_test = (File.exists?(@dot) ? "#{@dot}.mv_by_test" : "")
|
|
151
|
+
File.rename(@dot, mv_by_test) unless mv_by_test.empty?
|
|
152
|
+
refute(File.exists?(@dot), "dude!")
|
|
153
|
+
dot = Cheeba.dotfile
|
|
154
|
+
assert File.exists?(@dot)
|
|
155
|
+
assert File.exists?(dot)
|
|
156
|
+
assert_equal len, (Dir.entries(@hom).length - 1)
|
|
157
|
+
File.delete(@dot) if File.exists?(@dot)
|
|
158
|
+
File.delete(dot) if File.exists?(dot)
|
|
159
|
+
refute(File.exists?(@dot), "dude!")
|
|
160
|
+
refute(File.exists?(dot), "dude!")
|
|
161
|
+
File.rename(mv_by_test, @dot) if File.exists?(mv_by_test)
|
|
162
|
+
end
|
|
163
|
+
|
|
164
|
+
def test_read_raise_on_empty_string
|
|
165
|
+
assert_raises(Cheeba::Reader::EmptyInputError) {Cheeba.read("")}
|
|
166
|
+
end
|
|
167
|
+
|
|
168
|
+
def test_format_sym_str_nested_2009cash
|
|
169
|
+
file = "#{File.dirname(__FILE__)}/files/2009.cash"
|
|
170
|
+
raise file.inspect unless File.exist?(file)
|
|
171
|
+
act = Cheeba.read(file, {:sym_str => true})
|
|
172
|
+
exp = {:content=>{1=>:"200901.cash", 2=>:"200902.cash"}}
|
|
173
|
+
assert_equal exp, act
|
|
174
|
+
end
|
|
175
|
+
|
|
176
|
+
# this is what was happening! because the "01".to_i # => 1
|
|
177
|
+
# {:content=>{"01"=>:"200901.cash", "02"=>:"200902.cash"}}
|
|
178
|
+
def test_format_sym_str_nested
|
|
179
|
+
file = "#{File.dirname(__FILE__)}/files/nested.cash"
|
|
180
|
+
raise file.inspect unless File.exist?(file)
|
|
181
|
+
act = Cheeba.read(file)
|
|
182
|
+
exp = {1 => "awesome", 2 => "dude", 3 => {1 => "niceone", 2 => "bro", "fekja" => "bacon", 3 => {1 => "beer", 2 => "camaro"}}}
|
|
183
|
+
assert_equal exp, act
|
|
184
|
+
end
|
|
185
|
+
end
|
data/test/test_reader.rb
ADDED
|
@@ -0,0 +1,210 @@
|
|
|
1
|
+
#!/usr/bin/env ruby -w
|
|
2
|
+
|
|
3
|
+
require 'rubygems'
|
|
4
|
+
require 'minitest/unit'
|
|
5
|
+
$: << 'lib' << 'test'
|
|
6
|
+
require 'cheeba/reader'
|
|
7
|
+
require 'cheeba/indicators'
|
|
8
|
+
require 'cheeba/defaults'
|
|
9
|
+
MiniTest::Unit.autorun
|
|
10
|
+
|
|
11
|
+
class TestReader < MiniTest::Unit::TestCase
|
|
12
|
+
def setup
|
|
13
|
+
@file_com = "test/files/comments.cash"
|
|
14
|
+
@file_arr = "test/files/arrays.cash"
|
|
15
|
+
@file_hsh = "test/files/hashes.cash"
|
|
16
|
+
@file_mix = "test/files/mixed.cash"
|
|
17
|
+
@file_mal = "test/files/malformed.cash"
|
|
18
|
+
@file_bla = "test/files/blank.cash"
|
|
19
|
+
@file_spl = "test/files/split.cash"
|
|
20
|
+
opt = Cheeba::Indicators.options
|
|
21
|
+
@opt = Cheeba::Defaults.options.merge(opt)
|
|
22
|
+
@reader = Cheeba::Reader
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
def test_test_files_exists
|
|
26
|
+
assert File.exists?(@file_com)
|
|
27
|
+
assert File.exists?(@file_arr)
|
|
28
|
+
assert File.exists?(@file_hsh)
|
|
29
|
+
assert File.exists?(@file_mix)
|
|
30
|
+
assert File.exists?(@file_mal)
|
|
31
|
+
assert File.exists?(@file_bla)
|
|
32
|
+
assert File.exists?(@file_spl)
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
def test_parse_string
|
|
36
|
+
exp1 = {"awesome" => "dude"}
|
|
37
|
+
exp2 = {1 => {"awesome" => "dude"}, :lst => {1 => "1"}}
|
|
38
|
+
act1 = @reader.read("awesome: dude", @opt.merge({:list => false}))
|
|
39
|
+
act2 = @reader.read("awesome: dude", @opt.merge({:list => true}))
|
|
40
|
+
assert_equal exp1, act1
|
|
41
|
+
assert_equal exp2, act2
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
def test_parse_empty_string_raise_emptystringerror
|
|
45
|
+
assert_raises(Cheeba::Reader::EmptyInputError) {@reader.read("", @opt)}
|
|
46
|
+
end
|
|
47
|
+
|
|
48
|
+
def test_parse_blank_file_raise_emptyfileerror
|
|
49
|
+
assert_raises(Cheeba::Reader::EmptyFileError) {@reader.read(@file_bla, @opt)}
|
|
50
|
+
end
|
|
51
|
+
|
|
52
|
+
def test_parse_blank_file_raise_invalidinputerror
|
|
53
|
+
assert_raises(Cheeba::Reader::InvalidInputError) {@reader.read({}, @opt)}
|
|
54
|
+
end
|
|
55
|
+
|
|
56
|
+
def test_parse_split_raise_rootnodeerror
|
|
57
|
+
assert_raises(Cheeba::Reader::Builder::RootNodeError) {
|
|
58
|
+
@reader.read(@file_spl, @opt.merge({:list => true}))
|
|
59
|
+
}
|
|
60
|
+
end
|
|
61
|
+
|
|
62
|
+
def test_parse_file_array
|
|
63
|
+
exp1 = ["", 1, 2, [["", "awesome", "awesome"]], 4, 5, 6, [7, [8], "dude"], ""]
|
|
64
|
+
exp2 = {1 => ["", 1, 2, [["", "awesome", "awesome"]], 4, 5, 6, [7, [8], "dude"], ""],
|
|
65
|
+
:lst=> {
|
|
66
|
+
1 => "1",
|
|
67
|
+
2 => "1",
|
|
68
|
+
3 => "1",
|
|
69
|
+
4 => "1",
|
|
70
|
+
5 => "1,3",
|
|
71
|
+
6 => "1,3,0",
|
|
72
|
+
7 => "1,3,0",
|
|
73
|
+
8 => "1,3,0",
|
|
74
|
+
9 => "1",
|
|
75
|
+
10 => "1",
|
|
76
|
+
11 => "1",
|
|
77
|
+
12 => "1,7",
|
|
78
|
+
13 => "1,7,1",
|
|
79
|
+
14 => "1,7",
|
|
80
|
+
15 => "1"}}
|
|
81
|
+
act1 = @reader.read(@file_arr, @opt.merge({:list => false}))
|
|
82
|
+
act2 = @reader.read(@file_arr, @opt.merge({:list => true}))
|
|
83
|
+
assert_equal exp1, act1
|
|
84
|
+
assert_equal exp2, act2
|
|
85
|
+
end
|
|
86
|
+
|
|
87
|
+
def test_parse_file_hash
|
|
88
|
+
exp1 = {"grocery_list" =>
|
|
89
|
+
{"meatsez" =>
|
|
90
|
+
{1 => {"count" => 5, "model" => "Spam"},
|
|
91
|
+
2 => {"count" => 1, "model" => "Log of ground beef"}},
|
|
92
|
+
"beer" => {1 => {"count" => 1, "model" => "24 pack - Coors Lite"}},
|
|
93
|
+
"cigarettes" =>
|
|
94
|
+
{1 => {"count" => 2, "model" => "Carton - Basic Ultra Menthol Box 100"}},
|
|
95
|
+
"other" =>
|
|
96
|
+
{1 => {"count" => 2, "model" => "Economy-Size Pork & Beans"},
|
|
97
|
+
2 => {"count" => 1, "model" => "Jumbo Miracle Whip"},
|
|
98
|
+
3 => {"count" => 2, "model" => "White Wonder Bread"}}}}
|
|
99
|
+
exp2 = {1 => {"grocery_list" =>
|
|
100
|
+
{"meatsez" =>
|
|
101
|
+
{1 => {"count" => 5, "model" => "Spam"},
|
|
102
|
+
2 => {"count" => 1, "model" => "Log of ground beef"}},
|
|
103
|
+
"beer" => {1 => {"count" => 1, "model" => "24 pack - Coors Lite"}},
|
|
104
|
+
"cigarettes" =>
|
|
105
|
+
{1 => {"count" => 2, "model" => "Carton - Basic Ultra Menthol Box 100"}},
|
|
106
|
+
"other" =>
|
|
107
|
+
{1 => {"count" => 2, "model" => "Economy-Size Pork & Beans"},
|
|
108
|
+
2 => {"count" => 1, "model" => "Jumbo Miracle Whip"},
|
|
109
|
+
3 => {"count" => 2, "model" => "White Wonder Bread"}}}},
|
|
110
|
+
:lst =>
|
|
111
|
+
{1 => "1,grocery_list",
|
|
112
|
+
2 => "1,grocery_list,beer",
|
|
113
|
+
3 => "1,grocery_list,beer,1",
|
|
114
|
+
4 => "1,grocery_list,beer,1",
|
|
115
|
+
5 => "1,grocery_list,beer,1",
|
|
116
|
+
6 => "1,grocery_list,meatsez",
|
|
117
|
+
7 => "1,grocery_list,meatsez,1",
|
|
118
|
+
8 => "1,grocery_list,meatsez,1",
|
|
119
|
+
9 => "1,grocery_list,meatsez,1",
|
|
120
|
+
10 => "1,grocery_list,meatsez,2",
|
|
121
|
+
11 => "1,grocery_list,meatsez,2",
|
|
122
|
+
12 => "1,grocery_list,meatsez,2",
|
|
123
|
+
13 => "1,grocery_list,cigarettes",
|
|
124
|
+
14 => "1,grocery_list,cigarettes,1",
|
|
125
|
+
15 => "1,grocery_list,cigarettes,1",
|
|
126
|
+
16 => "1,grocery_list,cigarettes,1",
|
|
127
|
+
17 => "1,grocery_list,other",
|
|
128
|
+
18 => "1,grocery_list,other,1",
|
|
129
|
+
19 => "1,grocery_list,other,1",
|
|
130
|
+
20 => "1,grocery_list,other,1",
|
|
131
|
+
21 => "1,grocery_list,other,2",
|
|
132
|
+
22 => "1,grocery_list,other,2",
|
|
133
|
+
23 => "1,grocery_list,other,2",
|
|
134
|
+
24 => "1,grocery_list,other,3",
|
|
135
|
+
25 => "1,grocery_list,other,3",
|
|
136
|
+
26 => "1,grocery_list,other,3"}}
|
|
137
|
+
act1 = @reader.read(@file_hsh, @opt.merge({:list => false}))
|
|
138
|
+
act2 = @reader.read(@file_hsh, @opt.merge({:list => true}))
|
|
139
|
+
assert_equal exp1, act1
|
|
140
|
+
assert_equal exp2, act2
|
|
141
|
+
end
|
|
142
|
+
|
|
143
|
+
def test_parse_file_mixed
|
|
144
|
+
exp1 = {1=>1,
|
|
145
|
+
2 => ["", "one", "two", {5=>{6=>6, 7=>7}, 8=>{"dude"=>"dude"}}, ""],
|
|
146
|
+
3 =>"awesome"}
|
|
147
|
+
exp2 = {1=>
|
|
148
|
+
{1=>1,
|
|
149
|
+
2=>["", "one", "two", {5=>{6=>6, 7=>7}, 8=>{"dude"=>"dude"}}, ""],
|
|
150
|
+
3=>"awesome"},
|
|
151
|
+
:lst => {
|
|
152
|
+
1 => "1",
|
|
153
|
+
2 => "1,2",
|
|
154
|
+
3 => "1,2",
|
|
155
|
+
4 => "1,2",
|
|
156
|
+
5 => "1,2",
|
|
157
|
+
6 => "1,2,3,5",
|
|
158
|
+
7 => "1,2,3,5",
|
|
159
|
+
8 => "1,2,3,5",
|
|
160
|
+
9 => "1,2,3,8",
|
|
161
|
+
10 => "1,2,3,8",
|
|
162
|
+
11 => "1,2",
|
|
163
|
+
12 => "1"}}
|
|
164
|
+
act1 = @reader.read(@file_mix, @opt.merge({:list => false}))
|
|
165
|
+
act2 = @reader.read(@file_mix, @opt.merge({:list => true}))
|
|
166
|
+
assert_equal exp1, act1
|
|
167
|
+
assert_equal exp2, act2
|
|
168
|
+
end
|
|
169
|
+
|
|
170
|
+
def test_parse_file_comments
|
|
171
|
+
exp1 = {1=>1, 2=>2, 3=>3, 4=>[1, 2, 3]}
|
|
172
|
+
exp2 = {1=>{1=>1, 2=>2, 3=>3, 4=>[1, 2, 3]},
|
|
173
|
+
:lst => {
|
|
174
|
+
1 => "#COMMENT: dude",
|
|
175
|
+
2 => "1",
|
|
176
|
+
3 => "#COMMENT: awesome",
|
|
177
|
+
4 => "1",
|
|
178
|
+
5 => "#COMMENT: ",
|
|
179
|
+
6 => "#COMMENT: camaro",
|
|
180
|
+
7 => "#COMMENT: ",
|
|
181
|
+
8 => "1",
|
|
182
|
+
9 => "#COMMENT: #",
|
|
183
|
+
10 => "#COMMENT: nice",
|
|
184
|
+
11 => "#COMMENT: one",
|
|
185
|
+
12 => "#COMMENT: bro!",
|
|
186
|
+
13 => "#COMMENT: ",
|
|
187
|
+
14 => "1,4",
|
|
188
|
+
15 => "1,4",
|
|
189
|
+
16 => "1,4",
|
|
190
|
+
17 => "1,4"}}
|
|
191
|
+
act1 = @reader.read(@file_com, @opt.merge({:list => false}))
|
|
192
|
+
act2 = @reader.read(@file_com, @opt.merge({:list => true}))
|
|
193
|
+
assert_equal exp1, act1
|
|
194
|
+
assert_equal exp2, act2
|
|
195
|
+
end
|
|
196
|
+
|
|
197
|
+
def test_parse_file_malformed
|
|
198
|
+
exp1 = {}
|
|
199
|
+
exp2 = {
|
|
200
|
+
1=>{},
|
|
201
|
+
:lst => {
|
|
202
|
+
1 => "#MALFORMED: 2341234",
|
|
203
|
+
2 => "#MALFORMED: awesome",
|
|
204
|
+
3 => "#MALFORMED: dude"}}
|
|
205
|
+
act1 = @reader.read(@file_mal, @opt.merge({:list => false}))
|
|
206
|
+
act2 = @reader.read(@file_mal, @opt.merge({:list => true}))
|
|
207
|
+
assert_equal exp1, act1
|
|
208
|
+
assert_equal exp2, act2
|
|
209
|
+
end
|
|
210
|
+
end
|