]> git.netwichtig.de Git - user/henk/code/ruby/rbot.git/blob - test/test_registry.rb
[registry] added a testcase
[user/henk/code/ruby/rbot.git] / test / test_registry.rb
1 $:.unshift File.join(File.dirname(__FILE__), '../lib')
2
3 require 'test/unit'
4 require 'rbot/ircbot'
5 require 'rbot/registry'
6
7 require 'pp'
8 require 'tmpdir'
9
10 module RegistryHashInterfaceTests
11   def test_default
12   end
13
14   def test_flush
15   end
16
17   def test_optimize
18   end
19
20   def test_close
21   end
22
23   def test_getset # [] and []=
24     @reg['mykey'] = 'myvalue'
25     assert_equal('myvalue', @reg['mykey'],'expected set value')
26     @reg['mykey'] = 42
27     assert_equal(42, @reg['mykey'], 'expected set value to overwrite')
28     @reg[23] = 5
29     assert_equal(5, @reg[23], 'expected integer key to respond')
30     @reg['myKey'] = 45
31     assert_equal(42, @reg['mykey'], 'expected keys tobe case-sensitive')
32     assert_equal(45, @reg['myKey'], 'expected keys tobe case-sensitive')
33     assert_nil(@reg['not-there'])
34   end
35
36   def test_getset_persists
37     @reg['mykey'] = 'myvalue'
38     @reg['myKey'] = 45
39     @reg[23] = 5
40     @reg.close
41     @reg = open(@tempdir)
42     assert_equal('myvalue', @reg['mykey'], 'expected value to persist')
43     assert_equal(5, @reg[23], 'expected integer key to persist')
44
45     assert_equal(45, @reg['myKey'], 'expected keys tobe case-sensitive')
46     assert_nil(@reg['not-there'])
47   end
48
49   def test_each
50     @reg['mykey1'] = 'myvalue1'
51     @reg['mykey2'] = 'myvalue2'
52     @reg['mykey3'] = 'myvalue3'
53     resp = {}
54     i = 0
55     @reg.each do |key, value|
56       resp[key] = value
57       i += 1
58     end
59     assert_equal(3, i, 'expected block to yield 3 times')
60     assert(resp.has_key? 'mykey1')
61     assert(resp.has_key? 'mykey2')
62     assert(resp.has_key? 'mykey3')
63     assert_equal('myvalue1', resp['mykey1'])
64     assert_equal('myvalue2', resp['mykey2'])
65     assert_equal('myvalue3', resp['mykey3'])
66   end
67
68   def test_each_pair
69     @reg['mykey1'] = 'myvalue1'
70     @reg['mykey2'] = 'myvalue2'
71     @reg['mykey3'] = 'myvalue3'
72     resp = {}
73     i = 0
74     @reg.each_pair do |key, value|
75       resp[key] = value
76       i += 1
77     end
78     assert_equal(3, i, 'expected block to yield 3 times')
79     assert(resp.has_key? 'mykey1')
80     assert(resp.has_key? 'mykey2')
81     assert(resp.has_key? 'mykey3')
82     assert_equal('myvalue1', resp['mykey1'])
83     assert_equal('myvalue2', resp['mykey2'])
84     assert_equal('myvalue3', resp['mykey3'])
85   end
86
87   def test_each_key
88     @reg['mykey1'] = 'myvalue1'
89     @reg['mykey2'] = 'myvalue2'
90     @reg['mykey3'] = 'myvalue3'
91     resp = []
92     i = 0
93     @reg.each_key do |key|
94       resp << key
95       i += 1
96     end
97     assert_equal(3, i, 'expected block to yield 3 times')
98     assert(resp.include? 'mykey1')
99     assert(resp.include? 'mykey2')
100     assert(resp.include? 'mykey3')
101   end
102
103   def test_each_value
104     @reg['mykey1'] = 'myvalue1'
105     @reg['mykey2'] = 'myvalue2'
106     @reg['mykey3'] = 'myvalue3'
107     resp = []
108     i = 0
109     @reg.each_value do |value|
110       resp << value
111       i += 1
112     end
113     assert_equal(3, i, 'expected block to yield 3 times')
114     assert(resp.include? 'myvalue1')
115     assert(resp.include? 'myvalue2')
116     assert(resp.include? 'myvalue3')
117   end
118
119   def test_has_key
120     @reg['mykey1'] = 'myvalue1'
121     @reg['mykey2'] = 'myvalue2'
122     @reg[23] = 5
123     assert(@reg.has_key?('mykey1'))
124     assert(@reg.has_key?('mykey2'))
125     assert(@reg.has_key?(23))
126     assert_equal(false, @reg.has_key?('mykey3'))
127     assert_equal(false, @reg.has_key?(42))
128   end
129
130   def test_has_value
131     @reg['mykey1'] = 'myvalue1'
132     @reg[23] = 5
133     assert(@reg.has_value?('myvalue1'))
134     assert(@reg.has_value?(5))
135     assert_equal(false, @reg.has_value?('myvalue3'))
136     assert_equal(false, @reg.has_value?(10))
137   end
138
139   def test_index
140     @reg['mykey1'] = 'myvalue1'
141     @reg[23] = 5
142     assert_equal('mykey1', @reg.index('myvalue1'))
143     assert_equal('23', @reg.index(5))
144   end
145
146   def test_delete
147     @reg['mykey'] = 'myvalue'
148     assert_not_nil(@reg['mykey'])
149     @reg.delete('mykey')
150     assert_nil(@reg['mykey'])
151   end
152
153   def test_delete_return
154     @reg['mykey'] = 'myvalue'
155     assert_equal('myvalue', @reg.delete('mykey'), 'delete should return the deleted value')
156     assert_nil(@reg.delete('mykey'))
157   end
158
159   def test_to_a
160     @reg['mykey1'] = 'myvalue1'
161     @reg['mykey2'] = 'myvalue2'
162     myhash = {}
163     myhash['mykey1'] = 'myvalue1'
164     myhash['mykey2'] = 'myvalue2'
165     assert_equal(myhash.to_a, @reg.to_a)
166   end
167
168   def test_to_hash
169     @reg['mykey1'] = 'myvalue1'
170     @reg['mykey2'] = 'myvalue2'
171     myhash = {}
172     myhash['mykey1'] = 'myvalue1'
173     myhash['mykey2'] = 'myvalue2'
174     assert_equal(myhash.to_hash, @reg.to_hash)
175   end
176
177   def test_clear
178     @reg['mykey1'] = 'myvalue1'
179     @reg['mykey2'] = 'myvalue2'
180     assert_not_nil(@reg['mykey1'])
181     @reg.clear
182     assert_nil(@reg['mykey1'])
183   end
184
185   def test_clear_persists
186     @reg['mykey1'] = 'myvalue1'
187     @reg['mykey2'] = 'myvalue2'
188     assert_not_nil(@reg['mykey1'])
189     @reg.close
190     @reg = open(@tempdir)
191     assert_not_nil(@reg['mykey1'])
192   end
193
194   def test_values
195     @reg['mykey1'] = 'myvalue1'
196     @reg['mykey2'] = 'myvalue2'
197     myhash = {}
198     myhash['mykey1'] = 'myvalue1'
199     myhash['mykey2'] = 'myvalue2'
200     assert_equal(myhash.values, @reg.values)
201   end
202
203   def test_length
204     @reg['mykey1'] = 'myvalue1'
205     @reg['mykey2'] = 'myvalue2'
206     assert_equal(2, @reg.length)
207   end
208 end
209
210 module TempRegistryTest
211   def setup_temp
212     @tempdir = Dir.mktmpdir
213     puts ' setup registry test, using %s' % @tempdir
214   end
215
216   def teardown_temp
217     puts ' teardown registry test, delete %s' % @tempdir
218     FileUtils.remove_entry @tempdir
219   end
220
221   def open(path, filename='testcase')
222     @@factory ||= Irc::Bot::Registry.new(@format)
223     @reg = @@factory.create(path, filename)
224   end
225 end
226
227 class RegistryDBMTest < Test::Unit::TestCase
228   include TempRegistryTest
229   include RegistryHashInterfaceTests
230
231   def setup
232     setup_temp
233     @format = 'dbm'
234     @reg = open(@tempdir)
235   end
236
237   def teardown
238     @reg.close
239     teardown_temp
240   end
241 end
242
243 class RegistryTCTest < Test::Unit::TestCase
244   include TempRegistryTest
245   include RegistryHashInterfaceTests
246
247   def setup
248     setup_temp
249     @format = 'tc'
250     @reg = open(@tempdir)
251   end
252
253   def teardown
254     @reg.close
255     teardown_temp
256   end
257 end
258
259 class RegistryDaybreakTest < Test::Unit::TestCase
260   include TempRegistryTest
261   include RegistryHashInterfaceTests
262
263   def setup
264     setup_temp
265     @format = 'sqlite'
266     @reg = open(@tempdir)
267   end
268
269   def teardown
270     @reg.close
271     teardown_temp
272   end
273 end
274
275
276 class RegistrySqliteTest < Test::Unit::TestCase
277   include TempRegistryTest
278   include RegistryHashInterfaceTests
279
280   def setup
281     setup_temp
282     @format = 'sqlite'
283     @reg = open(@tempdir)
284   end
285
286   def teardown
287     @reg.close
288     teardown_temp
289   end
290 end
291