mirror of
https://github.com/python/cpython.git
synced 2025-08-03 16:39:00 +00:00
bpo-40173: Fix test.support.import_helper.import_fresh_module() (GH-28654)
* Work correctly if an additional fresh module imports other additional fresh module which imports a blocked module. * Raises ImportError if the specified module cannot be imported while all additional fresh modules are successfully imported. * Support blocking packages. * Always restore the import state of fresh and blocked modules and their submodules. * Fix test_decimal and test_xml_etree which depended on an undesired side effect of import_fresh_module().
This commit is contained in:
parent
b07fddd527
commit
ec4d917a6a
4 changed files with 32 additions and 52 deletions
|
@ -26,7 +26,7 @@ from itertools import product, islice
|
|||
from test import support
|
||||
from test.support import os_helper
|
||||
from test.support import warnings_helper
|
||||
from test.support import findfile, gc_collect, swap_attr
|
||||
from test.support import findfile, gc_collect, swap_attr, swap_item
|
||||
from test.support.import_helper import import_fresh_module
|
||||
from test.support.os_helper import TESTFN
|
||||
|
||||
|
@ -167,12 +167,11 @@ class ElementTestCase:
|
|||
cls.modules = {pyET, ET}
|
||||
|
||||
def pickleRoundTrip(self, obj, name, dumper, loader, proto):
|
||||
save_m = sys.modules[name]
|
||||
try:
|
||||
sys.modules[name] = dumper
|
||||
temp = pickle.dumps(obj, proto)
|
||||
sys.modules[name] = loader
|
||||
result = pickle.loads(temp)
|
||||
with swap_item(sys.modules, name, dumper):
|
||||
temp = pickle.dumps(obj, proto)
|
||||
with swap_item(sys.modules, name, loader):
|
||||
result = pickle.loads(temp)
|
||||
except pickle.PicklingError as pe:
|
||||
# pyET must be second, because pyET may be (equal to) ET.
|
||||
human = dict([(ET, "cET"), (pyET, "pyET")])
|
||||
|
@ -180,8 +179,6 @@ class ElementTestCase:
|
|||
% (obj,
|
||||
human.get(dumper, dumper),
|
||||
human.get(loader, loader))) from pe
|
||||
finally:
|
||||
sys.modules[name] = save_m
|
||||
return result
|
||||
|
||||
def assertEqualElements(self, alice, bob):
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue