From afc610ece2f8db0c21a77dc9b0e8d8f1c0811c83 Mon Sep 17 00:00:00 2001 From: Victor Stinner Date: Thu, 9 Nov 2023 14:53:38 +0100 Subject: [PATCH 1/2] gh-111881: Import doctest lazily in libregrtest In most cases, doctest is not needed. So don't always import it at startup. --- Lib/test/libregrtest/single.py | 24 +++++++++++++----------- 1 file changed, 13 insertions(+), 11 deletions(-) diff --git a/Lib/test/libregrtest/single.py b/Lib/test/libregrtest/single.py index ad75ef54a8c3f8..9c89e600ba802f 100644 --- a/Lib/test/libregrtest/single.py +++ b/Lib/test/libregrtest/single.py @@ -1,4 +1,3 @@ -import doctest import faulthandler import gc import importlib @@ -94,17 +93,20 @@ def regrtest_runner(result: TestResult, test_func, runtests: RunTests) -> None: stats: TestStats | None - match test_result: - case TestStats(): - stats = test_result - case unittest.TestResult(): - stats = TestStats.from_unittest(test_result) - case doctest.TestResults(): + if isinstance(test_result, TestStats): + stats = test_result + elif isinstance(test_result, unittest.TestResult): + stats = TestStats.from_unittest(test_result) + elif test_result is None: + print_warning(f"{result.test_name} test runner returned None: {test_func}") + stats = None + else: + # Don't import doctest at top level since only few tests return + # a doctest.TestResult instance. + import doctest + if isinstance(test_result, doctest.TestResults): stats = TestStats.from_doctest(test_result) - case None: - print_warning(f"{result.test_name} test runner returned None: {test_func}") - stats = None - case _: + else: print_warning(f"Unknown test result type: {type(test_result)}") stats = None From 0e9d0da97c168f0c8f6c8e79fbac58e12812942c Mon Sep 17 00:00:00 2001 From: Victor Stinner Date: Thu, 9 Nov 2023 15:33:30 +0100 Subject: [PATCH 2/2] Address Alex's review: keep match/case --- Lib/test/libregrtest/single.py | 31 ++++++++++++++++--------------- 1 file changed, 16 insertions(+), 15 deletions(-) diff --git a/Lib/test/libregrtest/single.py b/Lib/test/libregrtest/single.py index 9c89e600ba802f..5c7bc7d40fb394 100644 --- a/Lib/test/libregrtest/single.py +++ b/Lib/test/libregrtest/single.py @@ -93,22 +93,23 @@ def regrtest_runner(result: TestResult, test_func, runtests: RunTests) -> None: stats: TestStats | None - if isinstance(test_result, TestStats): - stats = test_result - elif isinstance(test_result, unittest.TestResult): - stats = TestStats.from_unittest(test_result) - elif test_result is None: - print_warning(f"{result.test_name} test runner returned None: {test_func}") - stats = None - else: - # Don't import doctest at top level since only few tests return - # a doctest.TestResult instance. - import doctest - if isinstance(test_result, doctest.TestResults): - stats = TestStats.from_doctest(test_result) - else: - print_warning(f"Unknown test result type: {type(test_result)}") + match test_result: + case TestStats(): + stats = test_result + case unittest.TestResult(): + stats = TestStats.from_unittest(test_result) + case None: + print_warning(f"{result.test_name} test runner returned None: {test_func}") stats = None + case _: + # Don't import doctest at top level since only few tests return + # a doctest.TestResult instance. + import doctest + if isinstance(test_result, doctest.TestResults): + stats = TestStats.from_doctest(test_result) + else: + print_warning(f"Unknown test result type: {type(test_result)}") + stats = None result.stats = stats