99# Skip tests if dbm module doesn't exist.
1010dbm = test .support .import_module ('dbm' )
1111
12+ try :
13+ from dbm import ndbm
14+ except ImportError :
15+ ndbm = None
16+
1217_fname = test .support .TESTFN
1318
1419#
@@ -130,7 +135,7 @@ def test_whichdb(self):
130135 delete_files ()
131136 f = module .open (_fname , 'c' )
132137 f .close ()
133- self .assertEqual (name , dbm .whichdb (_fname ))
138+ self .assertEqual (name , self . dbm .whichdb (_fname ))
134139 # Now add a key
135140 f = module .open (_fname , 'w' )
136141 f [b"1" ] = b"1"
@@ -139,7 +144,15 @@ def test_whichdb(self):
139144 # and read it
140145 self .assertTrue (f [b"1" ] == b"1" )
141146 f .close ()
142- self .assertEqual (name , dbm .whichdb (_fname ))
147+ self .assertEqual (name , self .dbm .whichdb (_fname ))
148+
149+ @unittest .skipUnless (ndbm , reason = 'Test requires ndbm' )
150+ def test_whichdb_ndbm (self ):
151+ # Issue 17198: check that ndbm which is referenced in whichdb is defined
152+ db_file = '{}_ndbm.db' .format (_fname )
153+ with open (db_file , 'w' ):
154+ self .addCleanup (test .support .unlink , db_file )
155+ self .assertIsNone (self .dbm .whichdb (db_file [:- 3 ]))
143156
144157 def tearDown (self ):
145158 delete_files ()
@@ -149,6 +162,7 @@ def setUp(self):
149162 self .filename = test .support .TESTFN
150163 self .d = dbm .open (self .filename , 'c' )
151164 self .d .close ()
165+ self .dbm = test .support .import_fresh_module ('dbm' )
152166
153167 def test_keys (self ):
154168 self .d = dbm .open (self .filename , 'c' )
0 commit comments