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 -v -ugui test_idle
python -m test.test_idle python -m test.test_idle
The idle tests are 'discovered' by IDLE tests are 'discovered' by idlelib.idle_test.__init__.load_tests
idlelib.idle_test.__init__.load_tests, which is also imported into when this is imported into test.test_idle. Normally, neither file
test.test_idle. Normally, neither file should be changed when working on should be changed when working on individual test modules. The third
individual test modules. The third command runs unittest indirectly command runs unittest indirectly through regrtest. The same happens when
through regrtest. The same happens when the entire test suite is run the entire test suite is run with 'python -m test'. So that command must
with 'python -m test'. So that command must work for buildbots to stay work for buildbots to stay green. IDLE tests must not disturb the
green. Idle tests must not disturb the environment in a way that makes environment in a way that makes other tests fail (GH-62281).
other tests fail (issue 18081).
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 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 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, """idlelib.idle_test implements test.test_idle, which tests the IDLE
which tests the IDLE application as part of the stdlib test suite. application as part of the stdlib test suite.
Run IDLE tests alone with "python -m test.test_idle". Run IDLE tests alone with "python -m test.test_idle (-v)".
Starting with Python 3.6, IDLE requires tcl/tk 8.5 or later.
This package and its contained modules are subject to change and This package and its contained modules are subject to change and
any direct use is at your own risk. any direct use is at your own risk.
''' """
from os.path import dirname 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): def load_tests(loader, standard_tests, pattern):
this_dir = dirname(__file__) this_dir = dirname(__file__)
top_dir = dirname(dirname(this_dir)) 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) 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 return standard_tests

View file

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