1 $:.unshift File.join(File.dirname(__FILE__), '../lib')
5 require 'rbot/registry'
10 module RegistryHashInterfaceTests
13 assert_equal(42, @reg['not-here'])
14 assert_equal(42, @reg.default)
18 # I don't know if there really is a good way to test this:
19 big_string = 'A' * (1024 * 512)
20 @reg['foo'] = big_string+'a'
22 dbfile = @reg.filename
23 assert_not_nil(dbfile)
24 if not File.exists? dbfile
25 # dbm ext. are arbitary
26 dbfile = Dir.glob(dbfile+'.*').first
28 assert_not_nil(dbfile)
30 assert(File.exists?(dbfile), 'expected database to exist')
32 size_before = File.size(dbfile)
33 @reg['bar'] = big_string
35 size_after = File.size(dbfile)
37 assert(size_before < size_after, 'expected big string to be flushed on disk!')
48 def test_getset # [] and []=
49 @reg['mykey'] = 'myvalue'
50 assert_equal('myvalue', @reg['mykey'],'expected set value')
52 assert_equal(42, @reg['mykey'], 'expected set value to overwrite')
54 assert_equal(5, @reg[23], 'expected integer key to respond')
56 assert_equal(42, @reg['mykey'], 'expected keys tobe case-sensitive')
57 assert_equal(45, @reg['myKey'], 'expected keys tobe case-sensitive')
58 assert_nil(@reg['not-there'])
61 def test_getset_persists
62 @reg['mykey'] = 'myvalue'
67 assert_equal('myvalue', @reg['mykey'], 'expected value to persist')
68 assert_equal(5, @reg[23], 'expected integer key to persist')
70 assert_equal(45, @reg['myKey'], 'expected keys tobe case-sensitive')
71 assert_nil(@reg['not-there'])
75 @reg['mykey1'] = 'myvalue1'
76 @reg['mykey2'] = 'myvalue2'
77 @reg['mykey3'] = 'myvalue3'
80 @reg.each do |key, value|
84 assert_equal(3, i, 'expected block to yield 3 times')
85 assert(resp.has_key? 'mykey1')
86 assert(resp.has_key? 'mykey2')
87 assert(resp.has_key? 'mykey3')
88 assert_equal('myvalue1', resp['mykey1'])
89 assert_equal('myvalue2', resp['mykey2'])
90 assert_equal('myvalue3', resp['mykey3'])
94 @reg['mykey1'] = 'myvalue1'
95 @reg['mykey2'] = 'myvalue2'
96 @reg['mykey3'] = 'myvalue3'
99 @reg.each_pair do |key, value|
103 assert_equal(3, i, 'expected block to yield 3 times')
104 assert(resp.has_key? 'mykey1')
105 assert(resp.has_key? 'mykey2')
106 assert(resp.has_key? 'mykey3')
107 assert_equal('myvalue1', resp['mykey1'])
108 assert_equal('myvalue2', resp['mykey2'])
109 assert_equal('myvalue3', resp['mykey3'])
113 @reg['mykey1'] = 'myvalue1'
114 @reg['mykey2'] = 'myvalue2'
115 @reg['mykey3'] = 'myvalue3'
118 @reg.each_key do |key|
122 assert_equal(3, i, 'expected block to yield 3 times')
123 assert(resp.include? 'mykey1')
124 assert(resp.include? 'mykey2')
125 assert(resp.include? 'mykey3')
129 @reg['mykey1'] = 'myvalue1'
130 @reg['mykey2'] = 'myvalue2'
131 @reg['mykey3'] = 'myvalue3'
134 @reg.each_value do |value|
138 assert_equal(3, i, 'expected block to yield 3 times')
139 assert(resp.include? 'myvalue1')
140 assert(resp.include? 'myvalue2')
141 assert(resp.include? 'myvalue3')
145 @reg['mykey1'] = 'myvalue1'
146 @reg['mykey2'] = 'myvalue2'
148 assert(@reg.has_key?('mykey1'))
149 assert(@reg.has_key?('mykey2'))
150 assert(@reg.has_key?(23))
151 assert_equal(false, @reg.has_key?('mykey3'))
152 assert_equal(false, @reg.has_key?(42))
156 @reg['mykey1'] = 'myvalue1'
158 assert(@reg.has_value?('myvalue1'))
159 assert(@reg.has_value?(5))
160 assert_equal(false, @reg.has_value?('myvalue3'))
161 assert_equal(false, @reg.has_value?(10))
165 @reg['mykey1'] = 'myvalue1'
167 assert_equal('mykey1', @reg.index('myvalue1'))
168 assert_equal('23', @reg.index(5))
172 @reg['mykey'] = 'myvalue'
173 assert_not_nil(@reg['mykey'])
175 assert_nil(@reg['mykey'])
178 def test_delete_return
179 @reg['mykey'] = 'myvalue'
180 assert_equal('myvalue', @reg.delete('mykey'), 'delete should return the deleted value')
181 assert_nil(@reg.delete('mykey'))
185 @reg['mykey1'] = 'myvalue1'
186 @reg['mykey2'] = 'myvalue2'
188 myhash['mykey1'] = 'myvalue1'
189 myhash['mykey2'] = 'myvalue2'
190 assert_equal(myhash.to_a, @reg.to_a)
194 @reg['mykey1'] = 'myvalue1'
195 @reg['mykey2'] = 'myvalue2'
197 myhash['mykey1'] = 'myvalue1'
198 myhash['mykey2'] = 'myvalue2'
199 assert_equal(myhash.to_hash, @reg.to_hash)
203 @reg['mykey1'] = 'myvalue1'
204 @reg['mykey2'] = 'myvalue2'
205 assert_not_nil(@reg['mykey1'])
207 assert_nil(@reg['mykey1'])
210 def test_clear_persists
211 @reg['mykey1'] = 'myvalue1'
212 @reg['mykey2'] = 'myvalue2'
213 assert_not_nil(@reg['mykey1'])
215 @reg = open(@tempdir)
216 assert_not_nil(@reg['mykey1'])
220 @reg['mykey1'] = 'myvalue1'
221 @reg['mykey2'] = 'myvalue2'
223 myhash['mykey1'] = 'myvalue1'
224 myhash['mykey2'] = 'myvalue2'
225 assert_equal(myhash.values, @reg.values)
229 @reg['mykey1'] = 'myvalue1'
230 @reg['mykey2'] = 'myvalue2'
231 assert_equal(2, @reg.length)
235 module TempRegistryTest
237 @tempdir = Dir.mktmpdir
241 FileUtils.remove_entry @tempdir
244 def open(path, filename='testcase')
245 @@factory ||= Irc::Bot::Registry.new(@format)
246 @reg = @@factory.create(path, filename)
250 class RegistryDBMTest < Test::Unit::TestCase
251 include TempRegistryTest
252 include RegistryHashInterfaceTests
257 @reg = open(@tempdir)
266 class RegistryTCTest < Test::Unit::TestCase
267 include TempRegistryTest
268 include RegistryHashInterfaceTests
273 @reg = open(@tempdir)
282 class RegistryDaybreakTest < Test::Unit::TestCase
283 include TempRegistryTest
284 include RegistryHashInterfaceTests
289 @reg = open(@tempdir)
299 class RegistrySqliteTest < Test::Unit::TestCase
300 include TempRegistryTest
301 include RegistryHashInterfaceTests
306 @reg = open(@tempdir)