Skip to content

Commit e64777b

Browse files
committed
Add parameterized test for invalid custom serializers
1 parent f0af214 commit e64777b

1 file changed

Lines changed: 12 additions & 8 deletions

File tree

Lib/test/test_shelve.py

Lines changed: 12 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
import pickle
66
import os
77

8-
from test.support import import_helper, os_helper
8+
from test.support import import_helper, os_helper, subTests
99
from collections.abc import MutableMapping
1010
from test.test_dbm import dbm_iterator
1111

@@ -241,20 +241,24 @@ def deserializer(data):
241241
deserializer=deserializer) as s:
242242
s["foo"] = "bar"
243243

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")
247250

248251
def serializer(obj, protocol=None):
249-
return ["value with invalid type"]
252+
return serialized
250253

251254
def deserializer(data):
252255
return data.decode("utf-8")
253256

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.
256260
with self.assertRaises((TypeError, dbm.error)):
257-
with shelve.open(self.fn, serializer=serializer,
261+
with shelve.open(test_fn, serializer=serializer,
258262
deserializer=deserializer) as s:
259263
s["foo"] = "bar"
260264

0 commit comments

Comments
 (0)