1 $:.unshift File.join(File.dirname(__FILE__), '../lib')
5 require 'rbot/registry'
17 module RegistryHashInterfaceTests
20 :my_obj => FooObj.new(42)
23 assert_equal(42, @reg['store'][:my_obj].bar)
28 assert_equal(42, @reg['store'][:my_obj].bar)
33 assert_equal(42, @reg['not-here'])
34 assert_equal(42, @reg.default)
38 # I don't know if there really is a good way to test this:
39 big_string = 'A' * (1024 * 512)
40 @reg['foo'] = big_string+'a'
42 dbfile = @reg.filename
43 assert_not_nil(dbfile)
44 if not File.exists? dbfile
45 # dbm ext. are arbitary
46 dbfile = Dir.glob(dbfile+'.*').first
48 assert_not_nil(dbfile)
50 assert(File.exists?(dbfile), 'expected database to exist')
52 size_before = File.size(dbfile)
53 @reg['bar'] = big_string
55 size_after = File.size(dbfile)
57 assert(size_before < size_after, 'expected big string to be flushed on disk!')
68 def test_getset # [] and []=
69 @reg['mykey'] = 'myvalue'
70 assert_equal('myvalue', @reg['mykey'],'expected set value')
72 assert_equal(42, @reg['mykey'], 'expected set value to overwrite')
74 assert_equal(5, @reg[23], 'expected integer key to respond')
76 assert_equal(42, @reg['mykey'], 'expected keys tobe case-sensitive')
77 assert_equal(45, @reg['myKey'], 'expected keys tobe case-sensitive')
78 assert_nil(@reg['not-there'])
81 def test_getset_persists
82 @reg['mykey'] = 'myvalue'
87 assert_equal('myvalue', @reg['mykey'], 'expected value to persist')
88 assert_equal(5, @reg[23], 'expected integer key to persist')
90 assert_equal(45, @reg['myKey'], 'expected keys tobe case-sensitive')
91 assert_nil(@reg['not-there'])
95 @reg['mykey1'] = 'myvalue1'
96 @reg['mykey2'] = 'myvalue2'
97 @reg['mykey3'] = 'myvalue3'
100 @reg.each do |key, value|
104 assert_equal(3, i, 'expected block to yield 3 times')
105 assert(resp.has_key? 'mykey1')
106 assert(resp.has_key? 'mykey2')
107 assert(resp.has_key? 'mykey3')
108 assert_equal('myvalue1', resp['mykey1'])
109 assert_equal('myvalue2', resp['mykey2'])
110 assert_equal('myvalue3', resp['mykey3'])
114 @reg['mykey1'] = 'myvalue1'
115 @reg['mykey2'] = 'myvalue2'
116 @reg['mykey3'] = 'myvalue3'
119 @reg.each_pair do |key, value|
123 assert_equal(3, i, 'expected block to yield 3 times')
124 assert(resp.has_key? 'mykey1')
125 assert(resp.has_key? 'mykey2')
126 assert(resp.has_key? 'mykey3')
127 assert_equal('myvalue1', resp['mykey1'])
128 assert_equal('myvalue2', resp['mykey2'])
129 assert_equal('myvalue3', resp['mykey3'])
133 @reg['mykey1'] = 'myvalue1'
134 @reg['mykey2'] = 'myvalue2'
135 @reg['mykey3'] = 'myvalue3'
138 @reg.each_key do |key|
142 assert_equal(3, i, 'expected block to yield 3 times')
143 assert(resp.include? 'mykey1')
144 assert(resp.include? 'mykey2')
145 assert(resp.include? 'mykey3')
149 @reg['mykey1'] = 'myvalue1'
150 @reg['mykey2'] = 'myvalue2'
151 @reg['mykey3'] = 'myvalue3'
154 @reg.each_value do |value|
158 assert_equal(3, i, 'expected block to yield 3 times')
159 assert(resp.include? 'myvalue1')
160 assert(resp.include? 'myvalue2')
161 assert(resp.include? 'myvalue3')
165 @reg['mykey1'] = 'myvalue1'
166 @reg['mykey2'] = 'myvalue2'
168 assert(@reg.has_key?('mykey1'))
169 assert(@reg.has_key?('mykey2'))
170 assert(@reg.has_key?(23))
171 assert_equal(false, @reg.has_key?('mykey3'))
172 assert_equal(false, @reg.has_key?(42))
176 @reg['mykey1'] = 'myvalue1'
178 assert(@reg.has_value?('myvalue1'))
179 assert(@reg.has_value?(5))
180 assert_equal(false, @reg.has_value?('myvalue3'))
181 assert_equal(false, @reg.has_value?(10))
185 @reg['mykey1'] = 'myvalue1'
187 assert_equal('mykey1', @reg.index('myvalue1'))
188 assert_equal('23', @reg.index(5))
192 @reg['mykey'] = 'myvalue'
193 assert_not_nil(@reg['mykey'])
195 assert_nil(@reg['mykey'])
198 def test_delete_return
199 @reg['mykey'] = 'myvalue'
200 assert_equal('myvalue', @reg.delete('mykey'), 'delete should return the deleted value')
201 assert_nil(@reg.delete('mykey'))
205 @reg['mykey1'] = 'myvalue1'
206 @reg['mykey2'] = 'myvalue2'
208 myhash['mykey1'] = 'myvalue1'
209 myhash['mykey2'] = 'myvalue2'
210 assert_equal(myhash.to_a, @reg.to_a)
214 @reg['mykey1'] = 'myvalue1'
215 @reg['mykey2'] = 'myvalue2'
217 myhash['mykey1'] = 'myvalue1'
218 myhash['mykey2'] = 'myvalue2'
219 assert_equal(myhash.to_hash, @reg.to_hash)
223 @reg['mykey1'] = 'myvalue1'
224 @reg['mykey2'] = 'myvalue2'
225 assert_not_nil(@reg['mykey1'])
227 assert_nil(@reg['mykey1'])
230 def test_clear_persists
231 @reg['mykey1'] = 'myvalue1'
232 @reg['mykey2'] = 'myvalue2'
233 assert_not_nil(@reg['mykey1'])
235 @reg = open(@tempdir)
236 assert_not_nil(@reg['mykey1'])
240 @reg['mykey1'] = 'myvalue1'
241 @reg['mykey2'] = 'myvalue2'
243 myhash['mykey1'] = 'myvalue1'
244 myhash['mykey2'] = 'myvalue2'
245 assert_equal(myhash.values, @reg.values)
249 @reg['mykey1'] = 'myvalue1'
250 @reg['mykey2'] = 'myvalue2'
251 assert_equal(2, @reg.length)
255 module RegistryTestModule
257 @tempdir = Dir.mktmpdir
258 @reg = open(@tempdir)
263 FileUtils.remove_entry @tempdir
266 def open(path, filename='testcase')
267 puts 'open type: ' + @format
268 @registry_class.new(File.join(path, filename))
272 class RegistryDBMTest < Test::Unit::TestCase
273 include RegistryTestModule
274 include RegistryHashInterfaceTests
279 Irc::Bot::Registry.new(@format)
280 @registry_class = Irc::Bot::Registry::DBMAccessor
284 class RegistryTCTest < Test::Unit::TestCase
285 include RegistryTestModule
286 include RegistryHashInterfaceTests
291 Irc::Bot::Registry.new(@format)
292 @registry_class = Irc::Bot::Registry::TokyoCabinetAccessor
296 class RegistryDaybreakTest < Test::Unit::TestCase
297 include RegistryTestModule
298 include RegistryHashInterfaceTests
303 Irc::Bot::Registry.new(@format)
304 @registry_class = Irc::Bot::Registry::DaybreakAccessor
308 class RegistrySqliteTest < Test::Unit::TestCase
309 include RegistryTestModule
310 include RegistryHashInterfaceTests
315 Irc::Bot::Registry.new(@format)
316 @registry_class = Irc::Bot::Registry::SqliteAccessor
319 def test_duplicate_keys
322 res = @reg.registry.execute('select key from data')
323 assert res.length == 1