blob: 49f4426e4cb91e78dffaf8fb275d456d54a7d8c6 [file] [log] [blame]
Benjamin Petersonee8712c2008-05-20 21:35:26 +00001from test import support
Kristján Valur Jónsson42a40c52009-04-01 11:28:47 +00002support.import_module("dbm.ndbm") #skip if not supported
Christian Heimesb186d002008-03-18 15:15:01 +00003import unittest
Georg Brandl0a7ac7d2008-05-26 10:29:35 +00004import dbm.ndbm
5from dbm.ndbm import error
Roger E. Massefab8ab81996-12-20 22:36:52 +00006
Christian Heimesb186d002008-03-18 15:15:01 +00007class DbmTestCase(unittest.TestCase):
Roger E. Masse16f9fd21996-12-10 00:06:24 +00008
Christian Heimesb186d002008-03-18 15:15:01 +00009 def setUp(self):
Benjamin Petersonee8712c2008-05-20 21:35:26 +000010 self.filename = support.TESTFN
Georg Brandl0a7ac7d2008-05-26 10:29:35 +000011 self.d = dbm.ndbm.open(self.filename, 'c')
Christian Heimesb186d002008-03-18 15:15:01 +000012 self.d.close()
Fred Drake57a4e902000-09-18 17:56:58 +000013
Christian Heimesb186d002008-03-18 15:15:01 +000014 def tearDown(self):
15 for suffix in ['', '.pag', '.dir', '.db']:
Benjamin Petersonee8712c2008-05-20 21:35:26 +000016 support.unlink(self.filename + suffix)
Roger E. Masse16f9fd21996-12-10 00:06:24 +000017
Christian Heimesb186d002008-03-18 15:15:01 +000018 def test_keys(self):
Georg Brandl0a7ac7d2008-05-26 10:29:35 +000019 self.d = dbm.ndbm.open(self.filename, 'c')
Benjamin Petersonc9c0f202009-06-30 23:06:06 +000020 self.assertTrue(self.d.keys() == [])
Christian Heimesb186d002008-03-18 15:15:01 +000021 self.d['a'] = 'b'
Brett Cannon7317c1e2008-11-25 19:19:17 +000022 self.d[b'bytes'] = b'data'
Christian Heimesb186d002008-03-18 15:15:01 +000023 self.d['12345678910'] = '019237410982340912840198242'
24 self.d.keys()
Serhiy Storchaka9da33ab2013-10-24 23:59:28 +030025 self.assertIn('a', self.d)
Benjamin Peterson577473f2010-01-19 00:09:57 +000026 self.assertIn(b'a', self.d)
Brett Cannon7317c1e2008-11-25 19:19:17 +000027 self.assertEqual(self.d[b'bytes'], b'data')
Christian Heimesb186d002008-03-18 15:15:01 +000028 self.d.close()
Neal Norwitze7629c82002-11-02 18:25:08 +000029
Christian Heimesb186d002008-03-18 15:15:01 +000030 def test_modes(self):
31 for mode in ['r', 'rw', 'w', 'n']:
32 try:
Georg Brandl0a7ac7d2008-05-26 10:29:35 +000033 self.d = dbm.ndbm.open(self.filename, mode)
Christian Heimesb186d002008-03-18 15:15:01 +000034 self.d.close()
Georg Brandl0a7ac7d2008-05-26 10:29:35 +000035 except error:
Christian Heimesb186d002008-03-18 15:15:01 +000036 self.fail()
Neal Norwitze7629c82002-11-02 18:25:08 +000037
Nick Coghlanc610aba2013-11-17 15:59:51 +100038 def test_context_manager(self):
39 with dbm.ndbm.open(self.filename, 'c') as db:
40 db["ndbm context manager"] = "context manager"
41
42 with dbm.ndbm.open(self.filename, 'r') as db:
43 self.assertEqual(list(db.keys()), [b"ndbm context manager"])
44
45 with self.assertRaises(dbm.ndbm.error) as cm:
46 db.keys()
47 self.assertEqual(str(cm.exception),
48 "DBM object has already been closed")
49
50
Christian Heimes180510d2008-03-03 19:15:45 +000051if __name__ == '__main__':
Ezio Melottif79493b2013-03-01 11:23:28 +020052 unittest.main()