GH-71383: IDLE - Document testing subsets of modules (#104463)

This commit is contained in:
Terry Jan Reedy 2023-05-13 23:55:20 -04:00 committed by GitHub
parent 7d2deafb73
commit 080a596152
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 29 additions and 20 deletions

View File

@ -146,14 +146,17 @@ python -m unittest -v idlelib.idle_test
python -m test -v -ugui test_idle
python -m test.test_idle
The idle tests are 'discovered' by
idlelib.idle_test.__init__.load_tests, which is also imported into
test.test_idle. Normally, neither file should be changed when working on
individual test modules. The third command runs unittest indirectly
through regrtest. The same happens when the entire test suite is run
with 'python -m test'. So that command must work for buildbots to stay
green. Idle tests must not disturb the environment in a way that makes
other tests fail (issue 18081).
IDLE tests are 'discovered' by idlelib.idle_test.__init__.load_tests
when this is imported into test.test_idle. Normally, neither file
should be changed when working on individual test modules. The third
command runs unittest indirectly through regrtest. The same happens when
the entire test suite is run with 'python -m test'. So that command must
work for buildbots to stay green. IDLE tests must not disturb the
environment in a way that makes other tests fail (GH-62281).
To test subsets of modules, see idlelib.idle_test.__init__. This
can be used to find refleaks or possible sources of "Theme changed"
tcl messages (GH-71383).
To run an individual Testcase or test method, extend the dotted name
given to unittest on the command line or use the test -m option. The

View File

@ -1,17 +1,27 @@
'''idlelib.idle_test is a private implementation of test.test_idle,
which tests the IDLE application as part of the stdlib test suite.
Run IDLE tests alone with "python -m test.test_idle".
Starting with Python 3.6, IDLE requires tcl/tk 8.5 or later.
"""idlelib.idle_test implements test.test_idle, which tests the IDLE
application as part of the stdlib test suite.
Run IDLE tests alone with "python -m test.test_idle (-v)".
This package and its contained modules are subject to change and
any direct use is at your own risk.
'''
"""
from os.path import dirname
# test_idle imports load_tests for test discovery (default all).
# To run subsets of idlelib module tests, insert '[<chars>]' after '_'.
# Example: insert '[ac]' for modules beginning with 'a' or 'c'.
# Additional .discover/.addTest pairs with separate inserts work.
# Example: pairs with 'c' and 'g' test c* files and grep.
def load_tests(loader, standard_tests, pattern):
this_dir = dirname(__file__)
top_dir = dirname(dirname(this_dir))
package_tests = loader.discover(start_dir=this_dir, pattern='test*.py',
module_tests = loader.discover(start_dir=this_dir,
pattern='test_*.py', # Insert here.
top_level_dir=top_dir)
standard_tests.addTests(package_tests)
standard_tests.addTests(module_tests)
## module_tests = loader.discover(start_dir=this_dir,
## pattern='test_*.py', # Insert here.
## top_level_dir=top_dir)
## standard_tests.addTests(module_tests)
return standard_tests

View File

@ -5,12 +5,8 @@ from test.support import check_sanitizer
if check_sanitizer(address=True, memory=True):
raise unittest.SkipTest("Tests involving libX11 can SEGFAULT on ASAN/MSAN builds")
# Skip test_idle if _tkinter wasn't built, if tkinter is missing,
# if tcl/tk is not the 8.5+ needed for ttk widgets,
# or if idlelib is missing (not installed).
# Skip test_idle if _tkinter, tkinter, or idlelib are missing.
tk = import_module('tkinter') # Also imports _tkinter.
if tk.TkVersion < 8.5:
raise unittest.SkipTest("IDLE requires tk 8.5 or later.")
idlelib = import_module('idlelib')
# Before importing and executing more of idlelib,