#! /usr/bin/env python """Test script for the gdbm module Roger E. Masse """ import gdbm import unittest import os from test.test_support import verbose, TESTFN, run_unittest, unlink filename = TESTFN class TestGdbm(unittest.TestCase): def setUp(self): self.g = None def tearDown(self): if self.g is not None: self.g.close() unlink(filename) def test_key_methods(self): self.g = gdbm.open(filename, 'c') self.assertEqual(self.g.keys(), []) self.g['a'] = 'b' self.g['12345678910'] = '019237410982340912840198242' self.assertEqual(self.g.keys(), ['a', '12345678910']) self.assert_(self.g.has_key('a')) self.assertEqual(self.g.firstkey(), 'a') self.assertEqual(self.g.nextkey('a'), '12345678910') self.assertEqual(self.g.nextkey('12345678910'), None) self.assertRaises(KeyError, lambda: self.g['xxx']) def test_error_conditions(self): # try open a non existing database unlink(filename) self.assertRaises(gdbm.error, gdbm.open, filename, 'r') self.assertRaises(gdbm.error, gdbm.open, filename, 'w') # try access a closed database self.g = gdbm.open(filename, 'c') self.g.close() self.assertRaises(gdbm.error, lambda: self.g['a']) # try pass an invalid open flag self.assertRaises(gdbm.error, lambda: gdbm.open(filename, 'rx').close()) def test_flags(self): # test flag clause in the open statement by trying all # supported mode flags all = set(gdbm.open_flags) # test standard flags (presumably "crwn") modes = all - set('fsu') for mode in modes: self.g = gdbm.open(filename, mode) self.g.close() # test additional flags (presumably "fsu") flags = all - set('crwn') for mode in modes: for flag in flags: self.g = gdbm.open(filename, mode + flag) self.g.close() def test_reorganize(self): self.g = gdbm.open(filename, 'c') size0 = os.path.getsize(filename) self.g['x'] = 'x' * 10000 size1 = os.path.getsize(filename) self.assert_(size0 < size1) del self.g['x'] # size is supposed to be the same also after deleting the entry self.assertEqual(os.path.getsize(filename), size1) self.g.reorganize() size2 = os.path.getsize(filename) self.assert_(size1 > size2 >= size0) def test_main(): run_unittest(TestGdbm) if __name__ == '__main__': test_main()