1414# setting dbm to use each in turn, and yielding that module
1515#
1616def dbm_iterator ():
17- old_default = dbm ._defaultmod
18- for module in dbm ._modules .values ():
19- dbm ._defaultmod = module
20- yield module
21- dbm ._defaultmod = old_default
17+ for name in dbm ._names :
18+ try :
19+ mod = __import__ (name , fromlist = ['open' ])
20+ except ImportError :
21+ continue
22+ dbm ._modules [name ] = mod
23+ yield mod
2224
2325#
2426# Clean up all scratch databases we might have created during testing
@@ -40,8 +42,20 @@ class AnyDBMTestCase(unittest.TestCase):
4042 'g' : b'intended' ,
4143 }
4244
43- def __init__ (self , * args ):
44- unittest .TestCase .__init__ (self , * args )
45+ def init_db (self ):
46+ f = dbm .open (_fname , 'n' )
47+ for k in self ._dict :
48+ f [k .encode ("ascii" )] = self ._dict [k ]
49+ f .close ()
50+
51+ def keys_helper (self , f ):
52+ keys = sorted (k .decode ("ascii" ) for k in f .keys ())
53+ dkeys = sorted (self ._dict .keys ())
54+ self .assertEqual (keys , dkeys )
55+ return keys
56+
57+ def test_error (self ):
58+ self .assert_ (issubclass (self .module .error , IOError ))
4559
4660 def test_anydbm_creation (self ):
4761 f = dbm .open (_fname , 'c' )
@@ -83,22 +97,11 @@ def read_helper(self, f):
8397 for key in self ._dict :
8498 self .assertEqual (self ._dict [key ], f [key .encode ("ascii" )])
8599
86- def init_db (self ):
87- f = dbm .open (_fname , 'n' )
88- for k in self ._dict :
89- f [k .encode ("ascii" )] = self ._dict [k ]
90- f .close ()
91-
92- def keys_helper (self , f ):
93- keys = sorted (k .decode ("ascii" ) for k in f .keys ())
94- dkeys = sorted (self ._dict .keys ())
95- self .assertEqual (keys , dkeys )
96- return keys
97-
98100 def tearDown (self ):
99101 delete_files ()
100102
101103 def setUp (self ):
104+ dbm ._defaultmod = self .module
102105 delete_files ()
103106
104107
@@ -137,11 +140,11 @@ def setUp(self):
137140
138141
139142def test_main ():
140- try :
141- for module in dbm_iterator ():
142- test . support . run_unittest (AnyDBMTestCase , WhichDBTestCase )
143- finally :
144- delete_files ( )
143+ classes = [ WhichDBTestCase ]
144+ for mod in dbm_iterator ():
145+ classes . append ( type ( "TestCase-" + mod . __name__ , (AnyDBMTestCase ,),
146+ { 'module' : mod }))
147+ test . support . run_unittest ( * classes )
145148
146149if __name__ == "__main__" :
147150 test_main ()
0 commit comments