$:.unshift File.join(File.dirname(__FILE__), '../lib')
+module Irc
+class Bot
+ module Config
+ @@datadir = File.expand_path(File.dirname($0) + '/../data/rbot')
+ @@coredir = File.expand_path(File.dirname($0) + '/../lib/rbot/core')
+ end
+end
+end
+
require 'test/unit'
require 'rbot/ircbot'
require 'rbot/registry'
require 'pp'
require 'tmpdir'
+class FooObj
+ attr_reader :bar
+ def initialize(bar)
+ @bar = bar
+ end
+end
+
module RegistryHashInterfaceTests
+ def test_object
+ @reg['store'] = {
+ :my_obj => FooObj.new(42)
+ }
+
+ assert_equal(42, @reg['store'][:my_obj].bar)
+
+ @reg.close
+ @reg = open(@tempdir)
+
+ assert_equal(42, @reg['store'][:my_obj].bar)
+ end
+
def test_default
+ @reg.set_default(42)
+ assert_equal(42, @reg['not-here'])
+ assert_equal(42, @reg.default)
end
def test_flush
+ # I don't know if there really is a good way to test this:
+ big_string = 'A' * (1024 * 512)
+ @reg['foo'] = big_string+'a'
+
+ dbfile = @reg.filename
+ assert_not_nil(dbfile)
+ if not File.exists? dbfile
+ # dbm ext. are arbitary
+ dbfile = Dir.glob(dbfile+'.*').first
+ end
+ assert_not_nil(dbfile)
+
+ assert(File.exists?(dbfile), 'expected database to exist')
+
+ size_before = File.size(dbfile)
+ @reg['bar'] = big_string
+ @reg.flush
+ size_after = File.size(dbfile)
+
+ assert(size_before < size_after, 'expected big string to be flushed on disk!')
end
def test_optimize
+ @reg.optimize
end
def test_close
+ @reg.close
end
def test_getset # [] and []=
end
end
-module TempRegistryTest
- def setup_temp
+module RegistryTestModule
+ def setup
@tempdir = Dir.mktmpdir
- puts ' setup registry test, using %s' % @tempdir
+ @reg = open(@tempdir)
end
- def teardown_temp
- puts ' teardown registry test, delete %s' % @tempdir
+ def teardown
+ @reg.close
FileUtils.remove_entry @tempdir
end
def open(path, filename='testcase')
- @@factory ||= Irc::Bot::Registry.new(@format)
- @reg = @@factory.create(path, filename)
+ puts 'open type: ' + @format
+ @registry_class.new(File.join(path, filename))
end
end
class RegistryDBMTest < Test::Unit::TestCase
- include TempRegistryTest
+ include RegistryTestModule
include RegistryHashInterfaceTests
- def setup
- setup_temp
+ def initialize(o)
+ super o
@format = 'dbm'
- @reg = open(@tempdir)
- end
-
- def teardown
- @reg.close
- teardown_temp
+ Irc::Bot::Registry.new(@format)
+ @registry_class = Irc::Bot::Registry::DBMAccessor
end
end
class RegistryTCTest < Test::Unit::TestCase
- include TempRegistryTest
+ include RegistryTestModule
include RegistryHashInterfaceTests
- def setup
- setup_temp
+ def initialize(o)
+ super o
@format = 'tc'
- @reg = open(@tempdir)
- end
-
- def teardown
- @reg.close
- teardown_temp
+ Irc::Bot::Registry.new(@format)
+ @registry_class = Irc::Bot::Registry::TokyoCabinetAccessor
end
end
-class RegistryDaybreakTest < Test::Unit::TestCase
- include TempRegistryTest
- include RegistryHashInterfaceTests
-
- def setup
- setup_temp
- @format = 'sqlite'
- @reg = open(@tempdir)
- end
-
- def teardown
- @reg.close
- teardown_temp
+begin
+ require 'daybreak'
+ class RegistryDaybreakTest < Test::Unit::TestCase
+ include RegistryTestModule
+ include RegistryHashInterfaceTests
+
+ def initialize(o)
+ super o
+ @format = 'daybreak'
+ Irc::Bot::Registry.new(@format)
+ @registry_class = Irc::Bot::Registry::DaybreakAccessor
+ end
end
-end
+rescue Exception; end
+begin
+ require 'sqlite'
+ class RegistrySqliteTest < Test::Unit::TestCase
+ include RegistryTestModule
+ include RegistryHashInterfaceTests
-class RegistrySqliteTest < Test::Unit::TestCase
- include TempRegistryTest
- include RegistryHashInterfaceTests
-
- def setup
- setup_temp
- @format = 'sqlite'
- @reg = open(@tempdir)
- end
+ def initialize(o)
+ super o
+ @format = 'sqlite'
+ Irc::Bot::Registry.new(@format)
+ @registry_class = Irc::Bot::Registry::SqliteAccessor
+ end
- def teardown
- @reg.close
- teardown_temp
+ def test_duplicate_keys
+ @reg['foo'] = 1
+ @reg['foo'] = 2
+ res = @reg.registry.execute('select key from data')
+ assert res.length == 1
+ end
end
-end
-
+rescue Exception; end