X-Git-Url: https://git.netwichtig.de/gitweb/?a=blobdiff_plain;f=test%2Ftest_registry.rb;h=097852aa17b45218bc850d08132427093566a8cf;hb=56e4713c5c0498838ed77a409e44fbc3251acde2;hp=76ee2b2227af720322f9b4bdffac20c036bcd362;hpb=6b36c31037276f3c5a511e6e568481c8446a6fab;p=user%2Fhenk%2Fcode%2Fruby%2Frbot.git diff --git a/test/test_registry.rb b/test/test_registry.rb index 76ee2b22..097852aa 100644 --- a/test/test_registry.rb +++ b/test/test_registry.rb @@ -1,5 +1,14 @@ $:.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' @@ -7,17 +16,62 @@ 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 []= @@ -207,85 +261,86 @@ module RegistryHashInterfaceTests 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 RegistryHashInterfaceTests - - def setup - setup_temp - @format = 'dbm' - @reg = open(@tempdir) - end - - def teardown - @reg.close - teardown_temp +begin + require 'dbm' + class RegistryDBMTest < Test::Unit::TestCase + include RegistryTestModule + include RegistryHashInterfaceTests + + def initialize(o) + super o + @format = 'dbm' + Irc::Bot::Registry.new(@format) + @registry_class = Irc::Bot::Registry::DBMAccessor + end end -end - -class RegistryTCTest < Test::Unit::TestCase - include TempRegistryTest - include RegistryHashInterfaceTests +rescue Exception; end - def setup - setup_temp - @format = 'tc' - @reg = open(@tempdir) - end +begin + require 'tc' + class RegistryTCTest < Test::Unit::TestCase + include RegistryTestModule + include RegistryHashInterfaceTests - def teardown - @reg.close - teardown_temp + def initialize(o) + super o + @format = 'tc' + Irc::Bot::Registry.new(@format) + @registry_class = Irc::Bot::Registry::TokyoCabinetAccessor + end end -end - -class RegistryDaybreakTest < Test::Unit::TestCase - include TempRegistryTest - include RegistryHashInterfaceTests +rescue Exception; end - def setup - setup_temp - @format = 'sqlite' - @reg = open(@tempdir) - end +begin + require 'daybreak' + class RegistryDaybreakTest < Test::Unit::TestCase + include RegistryTestModule + include RegistryHashInterfaceTests - def teardown - @reg.close - teardown_temp + 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