From aeda7ac09f24bbef95054b14607330cb966ab820 Mon Sep 17 00:00:00 2001 From: Dino Viehland Date: Mon, 27 Oct 2025 10:13:38 -0700 Subject: [PATCH] Add tests for __lazy_import__ --- Lib/test/test_import/__init__.py | 27 +++++++++++++++++++ .../data/lazy_imports/dunder_lazy_import.py | 1 + .../dunder_lazy_import_builtins.py | 13 +++++++++ .../lazy_imports/dunder_lazy_import_used.py | 2 ++ 4 files changed, 43 insertions(+) create mode 100644 Lib/test/test_import/data/lazy_imports/dunder_lazy_import.py create mode 100644 Lib/test/test_import/data/lazy_imports/dunder_lazy_import_builtins.py create mode 100644 Lib/test/test_import/data/lazy_imports/dunder_lazy_import_used.py diff --git a/Lib/test/test_import/__init__.py b/Lib/test/test_import/__init__.py index 028fe23facf..e3b47fb37b7 100644 --- a/Lib/test/test_import/__init__.py +++ b/Lib/test/test_import/__init__.py @@ -2809,6 +2809,33 @@ def test_lazy_import_pkg_cross_import(self): self.assertEqual(type(g["x"]), int) self.assertEqual(type(g["b"]), types.LazyImportType) + def test_dunder_lazy_import(self): + try: + import test.test_import.data.lazy_imports.dunder_lazy_import + except ImportError as e: + self.fail('lazy import failed') + + self.assertFalse("test.test_import.data.lazy_imports.basic2" in sys.modules) + + def test_dunder_lazy_import_used(self): + try: + import test.test_import.data.lazy_imports.dunder_lazy_import_used + except ImportError as e: + self.fail('lazy import failed') + + self.assertTrue("test.test_import.data.lazy_imports.basic2" in sys.modules) + + def test_dunder_lazy_import_builtins(self): + """__lazy_import__ uses modules __builtins__ to get __import__""" + try: + from test.test_import.data.lazy_imports import dunder_lazy_import_builtins + except ImportError as e: + self.fail('lazy import failed') + + self.assertFalse("test.test_import.data.lazy_imports.basic2" in sys.modules) + self.assertEqual(dunder_lazy_import_builtins.basic, 42) + + class TestSinglePhaseSnapshot(ModuleSnapshot): """A representation of a single-phase init module for testing. diff --git a/Lib/test/test_import/data/lazy_imports/dunder_lazy_import.py b/Lib/test/test_import/data/lazy_imports/dunder_lazy_import.py new file mode 100644 index 00000000000..1a8a19c3c90 --- /dev/null +++ b/Lib/test/test_import/data/lazy_imports/dunder_lazy_import.py @@ -0,0 +1 @@ +basic = __lazy_import__('test.test_import.data.lazy_imports.basic2') diff --git a/Lib/test/test_import/data/lazy_imports/dunder_lazy_import_builtins.py b/Lib/test/test_import/data/lazy_imports/dunder_lazy_import_builtins.py new file mode 100644 index 00000000000..594bf2b3042 --- /dev/null +++ b/Lib/test/test_import/data/lazy_imports/dunder_lazy_import_builtins.py @@ -0,0 +1,13 @@ +import sys + +def myimport(*args): + return sys.modules[__name__] + + +new_globals = dict(globals()) +new_globals["__builtins__"] = { + "__import__": myimport, +} +basic2 = 42 +basic = __lazy_import__("test.test_import.data.lazy_imports", fromlist="basic2", globals=new_globals) +basic diff --git a/Lib/test/test_import/data/lazy_imports/dunder_lazy_import_used.py b/Lib/test/test_import/data/lazy_imports/dunder_lazy_import_used.py new file mode 100644 index 00000000000..635828b50ef --- /dev/null +++ b/Lib/test/test_import/data/lazy_imports/dunder_lazy_import_used.py @@ -0,0 +1,2 @@ +basic = __lazy_import__('test.test_import.data.lazy_imports', fromlist="basic2") +basic