1 $:.unshift File.join(File.dirname(__FILE__), '../lib')
6 @@datadir = File.expand_path(File.dirname($0) + '/../data/rbot')
7 @@coredir = File.expand_path(File.dirname($0) + '/../lib/rbot/core')
14 require 'rbot/registry'
26 module RegistryHashInterfaceTests
29 :my_obj => FooObj.new(42)
32 assert_equal(42, @reg['store'][:my_obj].bar)
37 assert_equal(42, @reg['store'][:my_obj].bar)
42 assert_equal(42, @reg['not-here'])
43 assert_equal(42, @reg.default)
47 # I don't know if there really is a good way to test this:
48 big_string = 'A' * (1024 * 512)
49 @reg['foo'] = big_string+'a'
51 dbfile = @reg.filename
52 assert_not_nil(dbfile)
53 if not File.exists? dbfile
54 # dbm ext. are arbitary
55 dbfile = Dir.glob(dbfile+'.*').first
57 assert_not_nil(dbfile)
59 assert(File.exists?(dbfile), 'expected database to exist')
61 size_before = File.size(dbfile)
62 @reg['bar'] = big_string
64 size_after = File.size(dbfile)
66 assert(size_before < size_after, 'expected big string to be flushed on disk!')
77 def test_getset # [] and []=
78 @reg['mykey'] = 'myvalue'
79 assert_equal('myvalue', @reg['mykey'],'expected set value')
81 assert_equal(42, @reg['mykey'], 'expected set value to overwrite')
83 assert_equal(5, @reg[23], 'expected integer key to respond')
85 assert_equal(42, @reg['mykey'], 'expected keys tobe case-sensitive')
86 assert_equal(45, @reg['myKey'], 'expected keys tobe case-sensitive')
87 assert_nil(@reg['not-there'])
90 def test_getset_persists
91 @reg['mykey'] = 'myvalue'
96 assert_equal('myvalue', @reg['mykey'], 'expected value to persist')
97 assert_equal(5, @reg[23], 'expected integer key to persist')
99 assert_equal(45, @reg['myKey'], 'expected keys tobe case-sensitive')
100 assert_nil(@reg['not-there'])
104 @reg['mykey1'] = 'myvalue1'
105 @reg['mykey2'] = 'myvalue2'
106 @reg['mykey3'] = 'myvalue3'
109 @reg.each do |key, value|
113 assert_equal(3, i, 'expected block to yield 3 times')
114 assert(resp.has_key? 'mykey1')
115 assert(resp.has_key? 'mykey2')
116 assert(resp.has_key? 'mykey3')
117 assert_equal('myvalue1', resp['mykey1'])
118 assert_equal('myvalue2', resp['mykey2'])
119 assert_equal('myvalue3', resp['mykey3'])
123 @reg['mykey1'] = 'myvalue1'
124 @reg['mykey2'] = 'myvalue2'
125 @reg['mykey3'] = 'myvalue3'
128 @reg.each_pair do |key, value|
132 assert_equal(3, i, 'expected block to yield 3 times')
133 assert(resp.has_key? 'mykey1')
134 assert(resp.has_key? 'mykey2')
135 assert(resp.has_key? 'mykey3')
136 assert_equal('myvalue1', resp['mykey1'])
137 assert_equal('myvalue2', resp['mykey2'])
138 assert_equal('myvalue3', resp['mykey3'])
142 @reg['mykey1'] = 'myvalue1'
143 @reg['mykey2'] = 'myvalue2'
144 @reg['mykey3'] = 'myvalue3'
147 @reg.each_key do |key|
151 assert_equal(3, i, 'expected block to yield 3 times')
152 assert(resp.include? 'mykey1')
153 assert(resp.include? 'mykey2')
154 assert(resp.include? 'mykey3')
158 @reg['mykey1'] = 'myvalue1'
159 @reg['mykey2'] = 'myvalue2'
160 @reg['mykey3'] = 'myvalue3'
163 @reg.each_value do |value|
167 assert_equal(3, i, 'expected block to yield 3 times')
168 assert(resp.include? 'myvalue1')
169 assert(resp.include? 'myvalue2')
170 assert(resp.include? 'myvalue3')
174 @reg['mykey1'] = 'myvalue1'
175 @reg['mykey2'] = 'myvalue2'
177 assert(@reg.has_key?('mykey1'))
178 assert(@reg.has_key?('mykey2'))
179 assert(@reg.has_key?(23))
180 assert_equal(false, @reg.has_key?('mykey3'))
181 assert_equal(false, @reg.has_key?(42))
185 @reg['mykey1'] = 'myvalue1'
187 assert(@reg.has_value?('myvalue1'))
188 assert(@reg.has_value?(5))
189 assert_equal(false, @reg.has_value?('myvalue3'))
190 assert_equal(false, @reg.has_value?(10))
194 @reg['mykey1'] = 'myvalue1'
196 assert_equal('mykey1', @reg.index('myvalue1'))
197 assert_equal('23', @reg.index(5))
201 @reg['mykey'] = 'myvalue'
202 assert_not_nil(@reg['mykey'])
204 assert_nil(@reg['mykey'])
207 def test_delete_return
208 @reg['mykey'] = 'myvalue'
209 assert_equal('myvalue', @reg.delete('mykey'), 'delete should return the deleted value')
210 assert_nil(@reg.delete('mykey'))
214 @reg['mykey1'] = 'myvalue1'
215 @reg['mykey2'] = 'myvalue2'
217 myhash['mykey1'] = 'myvalue1'
218 myhash['mykey2'] = 'myvalue2'
219 assert_equal(myhash.to_a, @reg.to_a)
223 @reg['mykey1'] = 'myvalue1'
224 @reg['mykey2'] = 'myvalue2'
226 myhash['mykey1'] = 'myvalue1'
227 myhash['mykey2'] = 'myvalue2'
228 assert_equal(myhash.to_hash, @reg.to_hash)
232 @reg['mykey1'] = 'myvalue1'
233 @reg['mykey2'] = 'myvalue2'
234 assert_not_nil(@reg['mykey1'])
236 assert_nil(@reg['mykey1'])
239 def test_clear_persists
240 @reg['mykey1'] = 'myvalue1'
241 @reg['mykey2'] = 'myvalue2'
242 assert_not_nil(@reg['mykey1'])
244 @reg = open(@tempdir)
245 assert_not_nil(@reg['mykey1'])
249 @reg['mykey1'] = 'myvalue1'
250 @reg['mykey2'] = 'myvalue2'
252 myhash['mykey1'] = 'myvalue1'
253 myhash['mykey2'] = 'myvalue2'
254 assert_equal(myhash.values, @reg.values)
258 @reg['mykey1'] = 'myvalue1'
259 @reg['mykey2'] = 'myvalue2'
260 assert_equal(2, @reg.length)
264 module RegistryTestModule
266 @tempdir = Dir.mktmpdir
267 @reg = open(@tempdir)
272 FileUtils.remove_entry @tempdir
275 def open(path, filename='testcase')
276 puts 'open type: ' + @format
277 @registry_class.new(File.join(path, filename))
283 class RegistryDBMTest < Test::Unit::TestCase
284 include RegistryTestModule
285 include RegistryHashInterfaceTests
290 Irc::Bot::Registry.new(@format)
291 @registry_class = Irc::Bot::Registry::DBMAccessor
294 rescue Exception; end
298 class RegistryTCTest < Test::Unit::TestCase
299 include RegistryTestModule
300 include RegistryHashInterfaceTests
305 Irc::Bot::Registry.new(@format)
306 @registry_class = Irc::Bot::Registry::TokyoCabinetAccessor
309 rescue Exception; end
313 class RegistryDaybreakTest < Test::Unit::TestCase
314 include RegistryTestModule
315 include RegistryHashInterfaceTests
320 Irc::Bot::Registry.new(@format)
321 @registry_class = Irc::Bot::Registry::DaybreakAccessor
324 rescue Exception; end
328 class RegistrySqliteTest < Test::Unit::TestCase
329 include RegistryTestModule
330 include RegistryHashInterfaceTests
335 Irc::Bot::Registry.new(@format)
336 @registry_class = Irc::Bot::Registry::SqliteAccessor
339 def test_duplicate_keys
342 res = @reg.registry.execute('select key from data')
343 assert res.length == 1
346 rescue Exception; end