Skip to content

Commit e8a7484

Browse files
author
brett.cannon
committed
Move test_gdbm to use unittest.
Closes issue #1960. Thanks Giampaolo Rodola. git-svn-id: http://svn.python.org/projects/python/trunk@61374 6015fed2-1504-0410-9fe1-9d1591cc4771
1 parent 328548e commit e8a7484

3 files changed

Lines changed: 82 additions & 42 deletions

File tree

Lib/test/test_gdbm.py

Lines changed: 79 additions & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -1,46 +1,83 @@
1-
#! /usr/bin/env python
2-
"""Test script for the gdbm module
3-
Roger E. Masse
4-
"""
5-
61
import gdbm
7-
from gdbm import error
8-
from test.test_support import verbose, verify, TestFailed, TESTFN
2+
import unittest
3+
import os
4+
from test.test_support import verbose, TESTFN, run_unittest, unlink
5+
96

107
filename = TESTFN
118

12-
g = gdbm.open(filename, 'c')
13-
verify(g.keys() == [])
14-
g['a'] = 'b'
15-
g['12345678910'] = '019237410982340912840198242'
16-
a = g.keys()
17-
if verbose:
18-
print 'Test gdbm file keys: ', a
19-
20-
g.has_key('a')
21-
g.close()
22-
try:
23-
g['a']
24-
except error:
25-
pass
26-
else:
27-
raise TestFailed, "expected gdbm.error accessing closed database"
28-
g = gdbm.open(filename, 'r')
29-
g.close()
30-
g = gdbm.open(filename, 'w')
31-
g.close()
32-
g = gdbm.open(filename, 'n')
33-
g.close()
34-
try:
35-
g = gdbm.open(filename, 'rx')
36-
g.close()
37-
except error:
38-
pass
39-
else:
40-
raise TestFailed, "expected gdbm.error when passing invalid open flags"
41-
42-
try:
43-
import os
44-
os.unlink(filename)
45-
except:
46-
pass
9+
class TestGdbm(unittest.TestCase):
10+
11+
def setUp(self):
12+
self.g = None
13+
14+
def tearDown(self):
15+
if self.g is not None:
16+
self.g.close()
17+
unlink(filename)
18+
19+
def test_key_methods(self):
20+
self.g = gdbm.open(filename, 'c')
21+
self.assertEqual(self.g.keys(), [])
22+
self.g['a'] = 'b'
23+
self.g['12345678910'] = '019237410982340912840198242'
24+
key_set = set(self.g.keys())
25+
self.assertEqual(key_set, frozenset(['a', '12345678910']))
26+
self.assert_(self.g.has_key('a'))
27+
key = self.g.firstkey()
28+
while key:
29+
self.assert_(key in key_set)
30+
key_set.remove(key)
31+
key = self.g.nextkey(key)
32+
self.assertRaises(KeyError, lambda: self.g['xxx'])
33+
34+
def test_error_conditions(self):
35+
# Try to open a non-existent database.
36+
unlink(filename)
37+
self.assertRaises(gdbm.error, gdbm.open, filename, 'r')
38+
self.assertRaises(gdbm.error, gdbm.open, filename, 'w')
39+
# Try to access a closed database.
40+
self.g = gdbm.open(filename, 'c')
41+
self.g.close()
42+
self.assertRaises(gdbm.error, lambda: self.g['a'])
43+
# try pass an invalid open flag
44+
self.assertRaises(gdbm.error, lambda: gdbm.open(filename, 'rx').close())
45+
46+
def test_flags(self):
47+
# Test the flag parameter open() by trying all supported flag modes.
48+
all = set(gdbm.open_flags)
49+
# Test standard flags (presumably "crwn").
50+
modes = all - set('fsu')
51+
for mode in modes:
52+
self.g = gdbm.open(filename, mode)
53+
self.g.close()
54+
55+
# Test additional flags (presumably "fsu").
56+
flags = all - set('crwn')
57+
for mode in modes:
58+
for flag in flags:
59+
self.g = gdbm.open(filename, mode + flag)
60+
self.g.close()
61+
62+
def test_reorganize(self):
63+
self.g = gdbm.open(filename, 'c')
64+
size0 = os.path.getsize(filename)
65+
66+
self.g['x'] = 'x' * 10000
67+
size1 = os.path.getsize(filename)
68+
self.assert_(size0 < size1)
69+
70+
del self.g['x']
71+
# 'size' is supposed to be the same even after deleting an entry.
72+
self.assertEqual(os.path.getsize(filename), size1)
73+
74+
self.g.reorganize()
75+
size2 = os.path.getsize(filename)
76+
self.assert_(size1 > size2 >= size0)
77+
78+
79+
def test_main():
80+
run_unittest(TestGdbm)
81+
82+
if __name__ == '__main__':
83+
test_main()

Misc/ACKS

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -559,6 +559,7 @@ Mark Roberts
559559
Andy Robinson
560560
Jim Robinson
561561
Kevin Rodgers
562+
Giampaolo Rodola
562563
Mike Romberg
563564
Case Roole
564565
Timothy Roscoe

Misc/NEWS

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,8 @@ Library
5050
Tests
5151
-----
5252

53+
- Issue 1960: Convert test_gdbm to unittest.
54+
5355
- GHOP 294: Convert test_contains, test_crypt, and test_select to unittest.
5456

5557
- GHOP 238: Convert test_tokenize to use doctest.

0 commit comments

Comments
 (0)