|
5 | 5 | import pickle |
6 | 6 | import os |
7 | 7 |
|
8 | | -from test.support import import_helper, os_helper |
| 8 | +from test.support import import_helper, os_helper, subTests |
9 | 9 | from collections.abc import MutableMapping |
10 | 10 | from test.test_dbm import dbm_iterator |
11 | 11 |
|
@@ -241,20 +241,24 @@ def deserializer(data): |
241 | 241 | deserializer=deserializer) as s: |
242 | 242 | s["foo"] = "bar" |
243 | 243 |
|
244 | | - def test_custom_invalid_serializer(self): |
245 | | - os.mkdir(self.dirname) |
246 | | - self.addCleanup(os_helper.rmtree, self.dirname) |
| 244 | + @subTests("serialized", [None, ["invalid type"]]) |
| 245 | + def test_custom_invalid_serializer(self, serialized): |
| 246 | + test_dir = f"{self.dirname}_{id(serialized)}" |
| 247 | + os.mkdir(test_dir) |
| 248 | + self.addCleanup(os_helper.rmtree, test_dir) |
| 249 | + test_fn = os.path.join(test_dir, "shelftemp.db") |
247 | 250 |
|
248 | 251 | def serializer(obj, protocol=None): |
249 | | - return ["value with invalid type"] |
| 252 | + return serialized |
250 | 253 |
|
251 | 254 | def deserializer(data): |
252 | 255 | return data.decode("utf-8") |
253 | 256 |
|
254 | | - # Since the serializer returns None, dbm.error is raised |
255 | | - # by dbm.sqlite3 and TypeError is raised by other backends. |
| 257 | + # Since the serializer returns an invalid type or None, |
| 258 | + # dbm.error is raised by dbm.sqlite3 and TypeError is raised |
| 259 | + # by other backends. |
256 | 260 | with self.assertRaises((TypeError, dbm.error)): |
257 | | - with shelve.open(self.fn, serializer=serializer, |
| 261 | + with shelve.open(test_fn, serializer=serializer, |
258 | 262 | deserializer=deserializer) as s: |
259 | 263 | s["foo"] = "bar" |
260 | 264 |
|
|
0 commit comments