LEFT | RIGHT |
1 from test import support | 1 from test import support |
2 support.import_module("dbm.ndbm") #skip if not supported | 2 ndbm = support.import_module("dbm.ndbm") #skip if not supported |
3 import unittest | 3 import unittest |
4 import os | 4 import test.test_dbm_base as test_dbm_base |
5 import random | |
6 import dbm.ndbm | |
7 from dbm.ndbm import error | |
8 | 5 |
9 class DbmTestCase(unittest.TestCase): | |
10 | 6 |
11 def setUp(self): | 7 filename = test_dbm_base.filename |
12 self.filename = support.TESTFN | |
13 self.d = dbm.ndbm.open(self.filename, 'c') | |
14 self.d.close() | |
15 | 8 |
16 def tearDown(self): | |
17 for suffix in ['', '.pag', '.dir', '.db']: | |
18 support.unlink(self.filename + suffix) | |
19 | 9 |
20 def test_get(self): | 10 class DbmTestCase(test_dbm_base.TestDbmBase): |
21 self.g = dbm.ndbm.open(self.filename, 'c') | |
22 self.g['a'] = 'b' | |
23 self.assertEqual(b'b', self.g.get('a')) | |
24 self.assertEqual(b'b', self.g.get(b'a')) | |
25 self.assertEqual(b'b', self.g.get('a', None)) | |
26 self.assertIsNone(self.g.get('b')) | |
27 self.assertIsNone(self.g.get(b'b')) | |
28 self.assertEqual('c', self.g.get('b', 'c')) | |
29 | 11 |
30 def test_contains(self): | 12 _module = ndbm |
31 self.g = dbm.ndbm.open(self.filename, 'c') | |
32 self.g['a'] = 'b' | |
33 self.assertIn('a', self.g) | |
34 self.assertIn(b'a', self.g) | |
35 self.assertNotIn('b', self.g) | |
36 | |
37 def test_values(self): | |
38 self.g = dbm.ndbm.open(self.filename, 'c') | |
39 self.assertSetEqual(set(), set(self.g.values())) | |
40 self.assertEqual(0, len(self.g.values())) | |
41 self.g['a'] = 'b' | |
42 self.g['c'] = 'd' | |
43 self.assertSetEqual(set((b'b', b'd')), set(self.g.values())) | |
44 self.assertEqual(2, len(self.g.values())) | |
45 | |
46 def test_items(self): | |
47 self.g = dbm.ndbm.open(self.filename, 'c') | |
48 self.assertTupleEqual((), tuple(self.g.items())) | |
49 self.assertEqual(0, len(self.g.items())) | |
50 self.g['a'] = 'b' | |
51 self.g['c'] = 'd' | |
52 self.assertSetEqual(set(((b'a', b'b'), (b'c', b'd'))), set(self.g.items(
))) | |
53 self.assertEqual(2, len(self.g.items())) | |
54 | |
55 def test_pop(self): | |
56 self.g = dbm.ndbm.open(self.filename, 'c') | |
57 self.assertIsNone(self.g.pop('a')) | |
58 self.g['a'] = 'b' | |
59 self.g['c'] = 'd' | |
60 self.assertIsNone(self.g.pop('e')) | |
61 self.assertTupleEqual((b'a', b'c'), tuple(self.g.keys())) | |
62 self.assertIsNone(self.g.pop('e', None)) | |
63 self.assertTupleEqual((b'a', b'c'), tuple(self.g.keys())) | |
64 self.assertEqual(b'b', self.g.pop('a')) | |
65 self.assertTupleEqual((b'c', ), tuple(self.g.keys())) | |
66 self.assertEqual(b'd', self.g.pop('c', None)) | |
67 self.assertTupleEqual((), tuple(self.g.keys())) | |
68 | |
69 def test_popitem(self): | |
70 self.g = dbm.ndbm.open(self.filename, 'c') | |
71 self.assertRaises(KeyError, self.g.popitem) | |
72 self.g['a'] = 'b' | |
73 self.assertEqual((b'a', b'b'), self.g.popitem()) | |
74 self.assertRaises(KeyError, self.g.popitem) | |
75 | |
76 def test_clear(self): | |
77 self.g = dbm.ndbm.open(self.filename, 'c') | |
78 self.assertTupleEqual((), tuple(self.g.keys())) | |
79 self.g['a'] = 'b' | |
80 self.g['c'] = 'c' | |
81 self.g.clear() | |
82 self.assertTupleEqual((), tuple(self.g.keys())) | |
83 | |
84 def test_iteration(self): | |
85 self.g = dbm.ndbm.open(self.filename, 'c') | |
86 self.assertTupleEqual((), tuple(self.g.keys())) | |
87 self.assertRaises(StopIteration, next, iter(self.g)) | |
88 self.g['a'] = 'b' | |
89 self.g['c'] = 'd' | |
90 gi = iter(self.g) | |
91 self.assertTupleEqual((b'a', b'c'), (next(gi), next(gi))) | |
92 self.assertRaises(StopIteration, next, gi) | |
93 | |
94 def test_abc(self): | |
95 self.g = dbm.ndbm.open(self.filename, 'c') | |
96 from collections import Iterable, Mapping, MutableMapping | |
97 self.assertIsInstance(self.g, Iterable) | |
98 self.assertIsInstance(self.g, Mapping) | |
99 self.assertIsInstance(self.g, MutableMapping) | |
100 | |
101 def test_keys(self): | |
102 self.d = dbm.ndbm.open(self.filename, 'c') | |
103 self.assertTupleEqual((), tuple(self.d.keys())) | |
104 self.assertEqual(len(self.d.keys()), 0) | |
105 self.d['a'] = 'b' | |
106 self.d[b'bytes'] = b'data' | |
107 self.d['12345678910'] = '019237410982340912840198242' | |
108 self.d.keys() | |
109 self.assertEqual(len(self.d.keys()), 3) | |
110 self.assertIn(b'a', self.d) | |
111 self.assertNotIn(b'b', self.d) | |
112 self.assertEqual(self.d[b'bytes'], b'data') | |
113 self.d.close() | |
114 | |
115 def test_update1(self): | |
116 self.g = dbm.ndbm.open(self.filename, 'c') | |
117 self.assertTupleEqual((), tuple(self.g.keys())) | |
118 self.g['a'] = 'a' | |
119 self.g.update({'b':'b', 'c':'c'}) | |
120 self.assertTupleEqual(((b'a', b'a'), (b'b', b'b'), (b'c', b'c')), | |
121 tuple(self.g.items())) | |
122 | |
123 def test_update2(self): | |
124 self.g = dbm.ndbm.open(self.filename, 'c') | |
125 self.assertTupleEqual((), tuple(self.g.keys())) | |
126 self.g['a'] = 'a' | |
127 class Other(object): | |
128 def __init__(self, dic): | |
129 self._dict = dic | |
130 def keys(self): | |
131 return self._dict.keys() | |
132 def __getitem__(self, key): | |
133 return self._dict[key] | |
134 | |
135 self.g.update(Other({'b':'b', 'c':'c'})) | |
136 self.assertTupleEqual(((b'a', b'a'), (b'b', b'b'), (b'c', b'c')), | |
137 tuple(self.g.items())) | |
138 | |
139 def test_update3(self): | |
140 self.g = dbm.ndbm.open(self.filename, 'c') | |
141 self.assertTupleEqual((), tuple(self.g.keys())) | |
142 self.g['a'] = 'a' | |
143 self.g.update({b'b':b'b', b'c':b'c'}.items()) | |
144 self.assertTupleEqual(((b'a', b'a'), (b'b', b'b'), (b'c', b'c')), | |
145 tuple(self.g.items())) | |
146 | 13 |
147 def test_modes(self): | 14 def test_modes(self): |
148 for mode in ['r', 'rw', 'w', 'n']: | 15 # Here the order is important, put the 'c' flags at the first make sure |
| 16 # that 'r' won't raise file-not-exists error. |
| 17 for mode in ['c', 'r', 'rw', 'w', 'n']: |
149 try: | 18 try: |
150 self.d = dbm.ndbm.open(self.filename, mode) | 19 self.d = self._module.open(filename, mode) |
151 self.d.close() | 20 self.d.close() |
152 except error: | 21 except error: |
153 self.fail() | 22 self.fail() |
| 23 |
154 | 24 |
155 def test_main(): | 25 def test_main(): |
156 support.run_unittest(DbmTestCase) | 26 support.run_unittest(DbmTestCase) |
157 | 27 |
158 if __name__ == '__main__': | 28 if __name__ == '__main__': |
159 test_main() | 29 test_main() |
LEFT | RIGHT |