gh-131031: Fix test_pickle when invoked directly (GH-133356)

This commit is contained in:
Serhiy Storchaka 2025-05-08 17:51:18 +03:00 committed by GitHub
parent bfac7d2edc
commit e15bbfafbc
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
1 changed files with 19 additions and 10 deletions

View File

@ -2272,7 +2272,11 @@ def test_nonencodable_module_name_error(self):
def test_nested_lookup_error(self):
# Nested name does not exist
obj = REX('AbstractPickleTests.spam')
global TestGlobal
class TestGlobal:
class A:
pass
obj = REX('TestGlobal.A.B.C')
obj.__module__ = __name__
for proto in protocols:
with self.subTest(proto=proto):
@ -2280,9 +2284,9 @@ def test_nested_lookup_error(self):
self.dumps(obj, proto)
self.assertEqual(str(cm.exception),
f"Can't pickle {obj!r}: "
f"it's not found as {__name__}.AbstractPickleTests.spam")
f"it's not found as {__name__}.TestGlobal.A.B.C")
self.assertEqual(str(cm.exception.__context__),
"type object 'AbstractPickleTests' has no attribute 'spam'")
"type object 'A' has no attribute 'B'")
obj.__module__ = None
for proto in protocols:
@ -2290,21 +2294,25 @@ def test_nested_lookup_error(self):
with self.assertRaises(pickle.PicklingError) as cm:
self.dumps(obj, proto)
self.assertEqual(str(cm.exception),
f"Can't pickle {obj!r}: it's not found as __main__.AbstractPickleTests.spam")
f"Can't pickle {obj!r}: "
f"it's not found as __main__.TestGlobal.A.B.C")
self.assertEqual(str(cm.exception.__context__),
"module '__main__' has no attribute 'AbstractPickleTests'")
"module '__main__' has no attribute 'TestGlobal'")
def test_wrong_object_lookup_error(self):
# Name is bound to different object
obj = REX('AbstractPickleTests')
global TestGlobal
class TestGlobal:
pass
obj = REX('TestGlobal')
obj.__module__ = __name__
AbstractPickleTests.ham = []
for proto in protocols:
with self.subTest(proto=proto):
with self.assertRaises(pickle.PicklingError) as cm:
self.dumps(obj, proto)
self.assertEqual(str(cm.exception),
f"Can't pickle {obj!r}: it's not the same object as {__name__}.AbstractPickleTests")
f"Can't pickle {obj!r}: "
f"it's not the same object as {__name__}.TestGlobal")
self.assertIsNone(cm.exception.__context__)
obj.__module__ = None
@ -2313,9 +2321,10 @@ def test_wrong_object_lookup_error(self):
with self.assertRaises(pickle.PicklingError) as cm:
self.dumps(obj, proto)
self.assertEqual(str(cm.exception),
f"Can't pickle {obj!r}: it's not found as __main__.AbstractPickleTests")
f"Can't pickle {obj!r}: "
f"it's not found as __main__.TestGlobal")
self.assertEqual(str(cm.exception.__context__),
"module '__main__' has no attribute 'AbstractPickleTests'")
"module '__main__' has no attribute 'TestGlobal'")
def test_local_lookup_error(self):
# Test that whichmodule() errors out cleanly when looking up