]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
gh-118761: Add test_lazy_import for more modules (#133057)
authorDaniel Hollas <daniel.hollas@bristol.ac.uk>
Mon, 5 May 2025 22:46:05 +0000 (23:46 +0100)
committerGitHub <noreply@github.com>
Mon, 5 May 2025 22:46:05 +0000 (22:46 +0000)
Co-authored-by: Jelle Zijlstra <jelle.zijlstra@gmail.com>
20 files changed:
Lib/test/test_ast/test_ast.py
Lib/test/test_base64.py
Lib/test/test_cmd.py
Lib/test/test_csv.py
Lib/test/test_email/test_utils.py
Lib/test/test_enum.py
Lib/test/test_functools.py
Lib/test/test_gettext.py
Lib/test/test_locale.py
Lib/test/test_mimetypes.py
Lib/test/test_optparse.py
Lib/test/test_pathlib/test_pathlib.py
Lib/test/test_pickle.py
Lib/test/test_pprint.py
Lib/test/test_pstats.py
Lib/test/test_shlex.py
Lib/test/test_socket.py
Lib/test/test_string/test_string.py
Lib/test/test_threading.py
Lib/test/test_zipfile/test_core.py

index 530b5ec428eaa8466936e3071740eba2369737fb..09cf3186e05cc17cdd41b6f3ac2084f1572d3498 100644 (file)
@@ -26,6 +26,7 @@ from test import support
 from test.support import os_helper
 from test.support import skip_emscripten_stack_overflow, skip_wasi_stack_overflow
 from test.support.ast_helper import ASTTestMixin
+from test.support.import_helper import ensure_lazy_imports
 from test.test_ast.utils import to_tuple
 from test.test_ast.snippets import (
     eval_tests, eval_results, exec_tests, exec_results, single_tests, single_results
@@ -47,6 +48,12 @@ def ast_repr_update_snapshots() -> None:
     AST_REPR_DATA_FILE.write_text("\n".join(data))
 
 
+class LazyImportTest(unittest.TestCase):
+    @support.cpython_only
+    def test_lazy_import(self):
+        ensure_lazy_imports("ast", {"contextlib", "enum", "inspect", "re", "collections", "argparse"})
+
+
 class AST_Tests(unittest.TestCase):
     maxDiff = None
 
index 409c8c109e885f614a1944f8d5cff9fc9e143b8b..9efebc43d911c455a5fc1d2b89b1d34cff9e689c 100644 (file)
@@ -3,8 +3,16 @@ import base64
 import binascii
 import os
 from array import array
+from test.support import cpython_only
 from test.support import os_helper
 from test.support import script_helper
+from test.support.import_helper import ensure_lazy_imports
+
+
+class LazyImportTest(unittest.TestCase):
+    @cpython_only
+    def test_lazy_import(self):
+        ensure_lazy_imports("base64", {"re", "getopt"})
 
 
 class LegacyBase64TestCase(unittest.TestCase):
index 0ae44f3987d324461a486346a6e9354cbafd7e93..dbfec42fc219880c2121085ad7ea4e961f75de37 100644 (file)
@@ -11,9 +11,15 @@ import unittest
 import io
 import textwrap
 from test import support
-from test.support.import_helper import import_module
+from test.support.import_helper import ensure_lazy_imports, import_module
 from test.support.pty_helper import run_pty
 
+class LazyImportTest(unittest.TestCase):
+    @support.cpython_only
+    def test_lazy_import(self):
+        ensure_lazy_imports("cmd", {"inspect", "string"})
+
+
 class samplecmdclass(cmd.Cmd):
     """
     Instance the sampleclass:
index 4af8f7f480e759c639fcc1419baf96a89161d3bf..9aace57633b0c64e78148400289f0c3c37e4e3d5 100644 (file)
@@ -10,7 +10,8 @@ import csv
 import gc
 import pickle
 from test import support
-from test.support import import_helper, check_disallow_instantiation
+from test.support import cpython_only, import_helper, check_disallow_instantiation
+from test.support.import_helper import ensure_lazy_imports
 from itertools import permutations
 from textwrap import dedent
 from collections import OrderedDict
@@ -1565,6 +1566,10 @@ class MiscTestCase(unittest.TestCase):
     def test__all__(self):
         support.check__all__(self, csv, ('csv', '_csv'))
 
+    @cpython_only
+    def test_lazy_import(self):
+        ensure_lazy_imports("csv", {"re"})
+
     def test_subclassable(self):
         # issue 44089
         class Foo(csv.Error): ...
index 4e6201e13c87f9e301a9b54abee614efd316c637..c9d09098b502f9d2fab3dbda2195730c0029762e 100644 (file)
@@ -4,6 +4,16 @@ import test.support
 import time
 import unittest
 
+from test.support import cpython_only
+from test.support.import_helper import ensure_lazy_imports
+
+
+class TestImportTime(unittest.TestCase):
+
+    @cpython_only
+    def test_lazy_import(self):
+        ensure_lazy_imports("email.utils", {"random", "socket"})
+
 
 class DateTimeTests(unittest.TestCase):
 
index 68cedc666a59ef051c4d0bb1aa8290f60490e998..d8cb5261244939c8b55cfb38369bb0a73082e984 100644 (file)
@@ -19,7 +19,8 @@ from io import StringIO
 from pickle import dumps, loads, PicklingError, HIGHEST_PROTOCOL
 from test import support
 from test.support import ALWAYS_EQ, REPO_ROOT
-from test.support import threading_helper
+from test.support import threading_helper, cpython_only
+from test.support.import_helper import ensure_lazy_imports
 from datetime import timedelta
 
 python_version = sys.version_info[:2]
@@ -5288,6 +5289,10 @@ class MiscTestCase(unittest.TestCase):
     def test__all__(self):
         support.check__all__(self, enum, not_exported={'bin', 'show_flag_values'})
 
+    @cpython_only
+    def test_lazy_import(self):
+        ensure_lazy_imports("enum", {"functools", "warnings", "inspect", "re"})
+
     def test_doc_1(self):
         class Single(Enum):
             ONE = 1
index e3b449f2d24a2b63e99231cd84a249047f977534..2e794b0fc95a22d0031e51cc5e3e3641326dc6e9 100644 (file)
@@ -23,6 +23,7 @@ from inspect import Signature
 
 from test.support import import_helper
 from test.support import threading_helper
+from test.support import cpython_only
 from test.support import EqualToForwardRef
 
 import functools
@@ -63,6 +64,14 @@ class BadTuple(tuple):
 class MyDict(dict):
     pass
 
+class TestImportTime(unittest.TestCase):
+
+    @cpython_only
+    def test_lazy_import(self):
+        import_helper.ensure_lazy_imports(
+            "functools", {"os", "weakref", "typing", "annotationlib", "warnings"}
+        )
+
 
 class TestPartial:
 
index 585ed08ea14a552618bd61fe4ba6e9b1a3e19032..33b7d75e3ff203db0c8a37e725c46399050baa6c 100644 (file)
@@ -6,7 +6,8 @@ import unittest.mock
 from functools import partial
 
 from test import support
-from test.support import os_helper
+from test.support import cpython_only, os_helper
+from test.support.import_helper import ensure_lazy_imports
 
 
 # TODO:
@@ -931,6 +932,10 @@ class MiscTestCase(unittest.TestCase):
         support.check__all__(self, gettext,
                              not_exported={'c2py', 'ENOENT'})
 
+    @cpython_only
+    def test_lazy_import(self):
+        ensure_lazy_imports("gettext", {"re", "warnings", "locale"})
+
 
 if __name__ == '__main__':
     unittest.main()
index 528ceef528114c08aae1fcb72f12a2051dda78ad..455d2af37efdc80b5877b028a0a0eda23a8ce24e 100644 (file)
@@ -1,13 +1,18 @@
 from decimal import Decimal
-from test.support import verbose, is_android, linked_to_musl, os_helper
+from test.support import cpython_only, verbose, is_android, linked_to_musl, os_helper
 from test.support.warnings_helper import check_warnings
-from test.support.import_helper import import_fresh_module
+from test.support.import_helper import ensure_lazy_imports, import_fresh_module
 from unittest import mock
 import unittest
 import locale
 import sys
 import codecs
 
+class LazyImportTest(unittest.TestCase):
+    @cpython_only
+    def test_lazy_import(self):
+        ensure_lazy_imports("locale", {"re", "warnings"})
+
 
 class BaseLocalizedTest(unittest.TestCase):
     #
index 1db3277e3902755ca1bb41d2176b7095eaed4b81..fb57d5e5544c125cde4aad1a4316da2c5bfb9005 100644 (file)
@@ -6,7 +6,8 @@ import sys
 import unittest.mock
 from platform import win32_edition
 from test import support
-from test.support import force_not_colorized, os_helper
+from test.support import cpython_only, force_not_colorized, os_helper
+from test.support.import_helper import ensure_lazy_imports
 
 try:
     import _winapi
@@ -435,6 +436,10 @@ class MiscTestCase(unittest.TestCase):
     def test__all__(self):
         support.check__all__(self, mimetypes)
 
+    @cpython_only
+    def test_lazy_import(self):
+        ensure_lazy_imports("mimetypes", {"os", "posixpath", "urllib.parse", "argparse"})
+
 
 class CommandLineTest(unittest.TestCase):
     @force_not_colorized
index 8655a0537a5e56ac19f9df1a7cc059fd670df770..e6ffd2b0ffeb0e9761c163de459111318118d395 100644 (file)
@@ -14,8 +14,9 @@ import unittest
 
 from io import StringIO
 from test import support
-from test.support import os_helper
+from test.support import cpython_only, os_helper
 from test.support.i18n_helper import TestTranslationsBase, update_translation_snapshots
+from test.support.import_helper import ensure_lazy_imports
 
 import optparse
 from optparse import make_option, Option, \
@@ -1655,6 +1656,10 @@ class MiscTestCase(unittest.TestCase):
         not_exported = {'check_builtin', 'AmbiguousOptionError', 'NO_DEFAULT'}
         support.check__all__(self, optparse, not_exported=not_exported)
 
+    @cpython_only
+    def test_lazy_import(self):
+        ensure_lazy_imports("optparse", {"textwrap"})
+
 
 class TestTranslations(TestTranslationsBase):
     def test_translations(self):
index e23dac3c25fa355b2213d213dc25c634ae5632de..8a313cc4292574820a1baacf1ff7793e8c9ea013 100644 (file)
@@ -16,6 +16,7 @@ from unittest import mock
 from urllib.request import pathname2url
 
 from test.support import import_helper
+from test.support import cpython_only
 from test.support import is_emscripten, is_wasi
 from test.support import infinite_recursion
 from test.support import os_helper
@@ -80,6 +81,12 @@ class UnsupportedOperationTest(unittest.TestCase):
         self.assertTrue(isinstance(pathlib.UnsupportedOperation(), NotImplementedError))
 
 
+class LazyImportTest(unittest.TestCase):
+    @cpython_only
+    def test_lazy_import(self):
+        import_helper.ensure_lazy_imports("pathlib", {"shutil"})
+
+
 #
 # Tests for the pure classes.
 #
index 3b46e524aac477bca10cb692c469904e0c115b3a..742ca8de1bea8cf2d998412f452ade7ab1a68f8c 100644 (file)
@@ -15,7 +15,8 @@ from textwrap import dedent
 import doctest
 import unittest
 from test import support
-from test.support import import_helper, os_helper
+from test.support import cpython_only, import_helper, os_helper
+from test.support.import_helper import ensure_lazy_imports
 
 from test.pickletester import AbstractHookTests
 from test.pickletester import AbstractUnpickleTests
@@ -36,6 +37,12 @@ except ImportError:
     has_c_implementation = False
 
 
+class LazyImportTest(unittest.TestCase):
+    @cpython_only
+    def test_lazy_import(self):
+        ensure_lazy_imports("pickle", {"re"})
+
+
 class PyPickleTests(AbstractPickleModuleTests, unittest.TestCase):
     dump = staticmethod(pickle._dump)
     dumps = staticmethod(pickle._dumps)
index dfbc2a06e7346fa889c95b2a87b47d42fb002880..f68996f72b15b54e6bac02d49b2e9fee2fd59f52 100644 (file)
@@ -11,6 +11,9 @@ import re
 import types
 import unittest
 
+from test.support import cpython_only
+from test.support.import_helper import ensure_lazy_imports
+
 # list, tuple and dict subclasses that do or don't overwrite __repr__
 class list2(list):
     pass
@@ -129,6 +132,10 @@ class QueryTestCase(unittest.TestCase):
         self.b = list(range(200))
         self.a[-12] = self.b
 
+    @cpython_only
+    def test_lazy_import(self):
+        ensure_lazy_imports("pprint", {"dataclasses", "re"})
+
     def test_init(self):
         pp = pprint.PrettyPrinter()
         pp = pprint.PrettyPrinter(indent=4, width=40, depth=5,
index d5a5a9738c2498f0d48e95ff2aca28b25be0d424..a26a8c1d522a70e33330a1edcf11bbb3a5e0b3bd 100644 (file)
@@ -1,6 +1,7 @@
 import unittest
 
 from test import support
+from test.support.import_helper import ensure_lazy_imports
 from io import StringIO
 from pstats import SortKey
 from enum import StrEnum, _test_simple_enum
@@ -10,6 +11,12 @@ import pstats
 import tempfile
 import cProfile
 
+class LazyImportTest(unittest.TestCase):
+    @support.cpython_only
+    def test_lazy_import(self):
+        ensure_lazy_imports("pstats", {"typing"})
+
+
 class AddCallersTestCase(unittest.TestCase):
     """Tests for pstats.add_callers helper."""
 
index f35571ea88654ddcc760f8c4dbc036f458a5d484..a13ddcb76b7bcb8ef2d8bb6eae094dc55e0e1210 100644 (file)
@@ -3,6 +3,7 @@ import itertools
 import shlex
 import string
 import unittest
+from test.support import cpython_only
 from test.support import import_helper
 
 
@@ -364,6 +365,7 @@ class ShlexTest(unittest.TestCase):
         with self.assertRaises(AttributeError):
             shlex_instance.punctuation_chars = False
 
+    @cpython_only
     def test_lazy_imports(self):
         import_helper.ensure_lazy_imports('shlex', {'collections', 're', 'os'})
 
index ace97ce0cbe42290c3ec2b13451a355829939777..03c54151a2218ff636114af46f2c14579a7b69d0 100644 (file)
@@ -2,8 +2,9 @@ import unittest
 from unittest import mock
 from test import support
 from test.support import (
-    is_apple, os_helper, refleak_helper, socket_helper, threading_helper
+    cpython_only, is_apple, os_helper, refleak_helper, socket_helper, threading_helper
 )
+from test.support.import_helper import ensure_lazy_imports
 import _thread as thread
 import array
 import contextlib
@@ -257,6 +258,12 @@ HAVE_SOCKET_HYPERV = _have_socket_hyperv()
 # Size in bytes of the int type
 SIZEOF_INT = array.array("i").itemsize
 
+class TestLazyImport(unittest.TestCase):
+    @cpython_only
+    def test_lazy_import(self):
+        ensure_lazy_imports("socket", {"array", "selectors"})
+
+
 class SocketTCPTest(unittest.TestCase):
 
     def setUp(self):
index f6d112d8a93ec4e84ba71759b6fa9cda8196d405..5394fe4e12cd41c29dc0d398efbfa14b9a4c7261 100644 (file)
@@ -2,6 +2,14 @@ import unittest
 import string
 from string import Template
 import types
+from test.support import cpython_only
+from test.support.import_helper import ensure_lazy_imports
+
+
+class LazyImportTest(unittest.TestCase):
+    @cpython_only
+    def test_lazy_import(self):
+        ensure_lazy_imports("base64", {"re", "collections"})
 
 
 class ModuleTest(unittest.TestCase):
index 814c00ca0fd7b62ffd58450dd3493be3e587e3fc..4ab38c2598b50a484051666c8818daa487201341 100644 (file)
@@ -5,7 +5,7 @@ Tests for the threading module.
 import test.support
 from test.support import threading_helper, requires_subprocess, requires_gil_enabled
 from test.support import verbose, cpython_only, os_helper
-from test.support.import_helper import import_module
+from test.support.import_helper import ensure_lazy_imports, import_module
 from test.support.script_helper import assert_python_ok, assert_python_failure
 from test.support import force_not_colorized
 
@@ -120,6 +120,10 @@ class BaseTestCase(unittest.TestCase):
 class ThreadTests(BaseTestCase):
     maxDiff = 9999
 
+    @cpython_only
+    def test_lazy_import(self):
+        ensure_lazy_imports("threading", {"functools", "warnings"})
+
     @cpython_only
     def test_name(self):
         def func(): pass
index 7c8a82d821a0203cb01f44d6ffa280cfdcce9f12..4c9d9f4b56235de9f8a00f05684cdaf518d7fe48 100644 (file)
@@ -24,10 +24,12 @@ from test.support import script_helper, os_helper
 from test.support import (
     findfile, requires_zlib, requires_bz2, requires_lzma,
     captured_stdout, captured_stderr, requires_subprocess,
+    cpython_only
 )
 from test.support.os_helper import (
     TESTFN, unlink, rmtree, temp_dir, temp_cwd, fd_count, FakePath
 )
+from test.support.import_helper import ensure_lazy_imports
 
 
 TESTFN2 = TESTFN + "2"
@@ -49,6 +51,13 @@ def get_files(test):
         yield f
         test.assertFalse(f.closed)
 
+
+class LazyImportTest(unittest.TestCase):
+    @cpython_only
+    def test_lazy_import(self):
+        ensure_lazy_imports("zipfile", {"typing"})
+
+
 class AbstractTestsWithSourceFile:
     @classmethod
     def setUpClass(cls):