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