1 $:.unshift File.join(File.dirname(__FILE__), '../lib')
5 require 'rbot/registry'
10 module RegistryHashInterfaceTests
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'
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
25 assert_not_nil(dbfile)
27 assert(File.exists?(dbfile), 'expected database to exist')
29 size_before = File.size(dbfile)
30 @reg['bar'] = big_string
32 size_after = File.size(dbfile)
34 assert(size_before < size_after, 'expected big string to be flushed on disk!')
43 def test_getset # [] and []=
44 @reg['mykey'] = 'myvalue'
45 assert_equal('myvalue', @reg['mykey'],'expected set value')
47 assert_equal(42, @reg['mykey'], 'expected set value to overwrite')
49 assert_equal(5, @reg[23], 'expected integer key to respond')
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'])
56 def test_getset_persists
57 @reg['mykey'] = 'myvalue'
62 assert_equal('myvalue', @reg['mykey'], 'expected value to persist')
63 assert_equal(5, @reg[23], 'expected integer key to persist')
65 assert_equal(45, @reg['myKey'], 'expected keys tobe case-sensitive')
66 assert_nil(@reg['not-there'])
70 @reg['mykey1'] = 'myvalue1'
71 @reg['mykey2'] = 'myvalue2'
72 @reg['mykey3'] = 'myvalue3'
75 @reg.each do |key, value|
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'])
89 @reg['mykey1'] = 'myvalue1'
90 @reg['mykey2'] = 'myvalue2'
91 @reg['mykey3'] = 'myvalue3'
94 @reg.each_pair do |key, value|
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'])
108 @reg['mykey1'] = 'myvalue1'
109 @reg['mykey2'] = 'myvalue2'
110 @reg['mykey3'] = 'myvalue3'
113 @reg.each_key do |key|
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')
124 @reg['mykey1'] = 'myvalue1'
125 @reg['mykey2'] = 'myvalue2'
126 @reg['mykey3'] = 'myvalue3'
129 @reg.each_value do |value|
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')
140 @reg['mykey1'] = 'myvalue1'
141 @reg['mykey2'] = 'myvalue2'
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))
151 @reg['mykey1'] = 'myvalue1'
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))
160 @reg['mykey1'] = 'myvalue1'
162 assert_equal('mykey1', @reg.index('myvalue1'))
163 assert_equal('23', @reg.index(5))
167 @reg['mykey'] = 'myvalue'
168 assert_not_nil(@reg['mykey'])
170 assert_nil(@reg['mykey'])
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'))
180 @reg['mykey1'] = 'myvalue1'
181 @reg['mykey2'] = 'myvalue2'
183 myhash['mykey1'] = 'myvalue1'
184 myhash['mykey2'] = 'myvalue2'
185 assert_equal(myhash.to_a, @reg.to_a)
189 @reg['mykey1'] = 'myvalue1'
190 @reg['mykey2'] = 'myvalue2'
192 myhash['mykey1'] = 'myvalue1'
193 myhash['mykey2'] = 'myvalue2'
194 assert_equal(myhash.to_hash, @reg.to_hash)
198 @reg['mykey1'] = 'myvalue1'
199 @reg['mykey2'] = 'myvalue2'
200 assert_not_nil(@reg['mykey1'])
202 assert_nil(@reg['mykey1'])
205 def test_clear_persists
206 @reg['mykey1'] = 'myvalue1'
207 @reg['mykey2'] = 'myvalue2'
208 assert_not_nil(@reg['mykey1'])
210 @reg = open(@tempdir)
211 assert_not_nil(@reg['mykey1'])
215 @reg['mykey1'] = 'myvalue1'
216 @reg['mykey2'] = 'myvalue2'
218 myhash['mykey1'] = 'myvalue1'
219 myhash['mykey2'] = 'myvalue2'
220 assert_equal(myhash.values, @reg.values)
224 @reg['mykey1'] = 'myvalue1'
225 @reg['mykey2'] = 'myvalue2'
226 assert_equal(2, @reg.length)
230 module TempRegistryTest
232 @tempdir = Dir.mktmpdir
236 FileUtils.remove_entry @tempdir
239 def open(path, filename='testcase')
240 @@factory ||= Irc::Bot::Registry.new(@format)
241 @reg = @@factory.create(path, filename)
245 class RegistryDBMTest < Test::Unit::TestCase
246 include TempRegistryTest
247 include RegistryHashInterfaceTests
252 @reg = open(@tempdir)
261 class RegistryTCTest < Test::Unit::TestCase
262 include TempRegistryTest
263 include RegistryHashInterfaceTests
268 @reg = open(@tempdir)
277 class RegistryDaybreakTest < Test::Unit::TestCase
278 include TempRegistryTest
279 include RegistryHashInterfaceTests
284 @reg = open(@tempdir)
294 class RegistrySqliteTest < Test::Unit::TestCase
295 include TempRegistryTest
296 include RegistryHashInterfaceTests
301 @reg = open(@tempdir)