diff --git a/Lib/test/test_importlib/test_util.py b/Lib/test/test_importlib/test_util.py index 8ec2dcd69e58b63..3a5a251f4a50259 100644 --- a/Lib/test/test_importlib/test_util.py +++ b/Lib/test/test_importlib/test_util.py @@ -33,6 +33,32 @@ _interpreters = None +class ImportImportlibTests(unittest.TestCase): + + def test_restores_missing_builtin_import_metadata(self): + missing = object() + attrs = { + attr: getattr(util.builtins, attr, missing) + for attr in ('__loader__', '__spec__') + } + try: + for attr in attrs: + if hasattr(util.builtins, attr): + delattr(util.builtins, attr) + + util.import_importlib('importlib') + + for attr in attrs: + self.assertFalse(hasattr(util.builtins, attr)) + finally: + for attr, value in attrs.items(): + if value is missing: + if hasattr(util.builtins, attr): + delattr(util.builtins, attr) + else: + setattr(util.builtins, attr, value) + + class DecodeSourceBytesTests: source = "string ='ΓΌ'" diff --git a/Lib/test/test_importlib/util.py b/Lib/test/test_importlib/util.py index 6399f952f9e912b..9b1cdaaca3500c2 100644 --- a/Lib/test/test_importlib/util.py +++ b/Lib/test/test_importlib/util.py @@ -68,8 +68,24 @@ def import_importlib(module_name): """Import a module from importlib both w/ and w/o _frozen_importlib.""" fresh = ('importlib',) if '.' in module_name else () frozen = import_helper.import_fresh_module(module_name) - source = import_helper.import_fresh_module(module_name, fresh=fresh, - blocked=('_frozen_importlib', '_frozen_importlib_external')) + missing = object() + builtin_attrs = { + attr: getattr(builtins, attr, missing) + for attr in ('__loader__', '__spec__') + } + try: + source = import_helper.import_fresh_module( + module_name, + fresh=fresh, + blocked=('_frozen_importlib', '_frozen_importlib_external'), + ) + finally: + for attr, value in builtin_attrs.items(): + if value is missing: + if hasattr(builtins, attr): + delattr(builtins, attr) + else: + setattr(builtins, attr, value) return {'Frozen': frozen, 'Source': source}