Skip to content

Commit

Permalink
pythongh-66819: More IDLE htest updates (pythonGH-112574)
Browse files Browse the repository at this point in the history
Revise htest.py docstring and move 2 specs to alphabetical position.
(cherry picked from commit e44f194)

Co-authored-by: Terry Jan Reedy <tjreedy@udel.edu>
  • Loading branch information
terryjreedy authored and miss-islington committed Dec 1, 2023
1 parent 03ac9e6 commit c9131ed
Showing 1 changed file with 52 additions and 55 deletions.
107 changes: 52 additions & 55 deletions Lib/idlelib/idle_test/htest.py
Original file line number Diff line number Diff line change
@@ -1,38 +1,35 @@
'''Run human tests of Idle's window, dialog, and popup widgets.
run(*tests)
Create a master Tk window. Within that, run each callable in tests
after finding the matching test spec in this file. If tests is empty,
run an htest for each spec dict in this file after finding the matching
callable in the module named in the spec. Close the window to skip or
end the test.
In a tested module, let X be a global name bound to a callable (class
or function) whose .__name__ attribute is also X (the usual situation).
The first parameter of X must be 'parent'. When called, the parent
argument will be the root window. X must create a child Toplevel
window (or subclass thereof). The Toplevel may be a test widget or
dialog, in which case the callable is the corresponding class. Or the
Toplevel may contain the widget to be tested or set up a context in
which a test widget is invoked. In this latter case, the callable is a
wrapper function that sets up the Toplevel and other objects. Wrapper
function names, such as _editor_window', should start with '_'.
"""Run human tests of Idle's window, dialog, and popup widgets.
run(*tests) Create a master Tk() htest window. Within that, run each
callable in tests after finding the matching test spec in this file. If
tests is empty, run an htest for each spec dict in this file after
finding the matching callable in the module named in the spec. Close
the master window to end testing.
In a tested module, let X be a global name bound to a callable (class or
function) whose .__name__ attribute is also X (the usual situation). The
first parameter of X must be 'parent'. When called, the parent argument
will be the root window. X must create a child Toplevel(parent) window
(or subclass thereof). The Toplevel may be a test widget or dialog, in
which case the callable is the corresponding class. Or the Toplevel may
contain the widget to be tested or set up a context in which a test
widget is invoked. In this latter case, the callable is a wrapper
function that sets up the Toplevel and other objects. Wrapper function
names, such as _editor_window', should start with '_' and be lowercase.
End the module with
if __name__ == '__main__':
<unittest, if there is one>
<run unittest.main with 'exit=False'>
from idlelib.idle_test.htest import run
run(X)
run(callable) # There could be multiple comma-separated callables.
To have wrapper functions and test invocation code ignored by coveragepy
reports, put '# htest #' on the def statement header line.
def _wrapper(parent): # htest #
Also make sure that the 'if __name__' line matches the above. Then have
make sure that .coveragerc includes the following.
To have wrapper functions ignored by coverage reports, tag the def
header like so: "def _wrapper(parent): # htest #". Use the same tag
for htest lines in widget code. Make sure that the 'if __name__' line
matches the above. Then have make sure that .coveragerc includes the
following:
[report]
exclude_lines =
Expand All @@ -46,24 +43,24 @@ def _wrapper(parent): # htest #
following template, with X.__name__ prepended to '_spec'.
When all tests are run, the prefix is use to get X.
_spec = {
callable_spec = {
'file': '',
'kwds': {'title': ''},
'msg': ""
}
file (no .py): run() imports file.py.
kwds: augmented with {'parent':root} and passed to X as **kwds.
title: an example kwd; some widgets need this, delete if not.
title: an example kwd; some widgets need this, delete line if not.
msg: master window hints about testing the widget.
Modules and classes not being tested at the moment:
pyshell.PyShellEditorWindow
debugger.Debugger
autocomplete_w.AutoCompleteWindow
outwin.OutputWindow (indirectly being tested with grep test)
'''
TODO test these modules and classes:
autocomplete_w.AutoCompleteWindow
debugger.Debugger
outwin.OutputWindow (indirectly being tested with grep test)
pyshell.PyShellEditorWindow
"""

import idlelib.pyshell # Set Windows DPI awareness before Tk().
from importlib import import_module
Expand Down Expand Up @@ -91,15 +88,6 @@ def _wrapper(parent): # htest #
"Force-open-calltip does not work here.\n"
}

_module_browser_spec = {
'file': 'browser',
'kwds': {},
'msg': "Inspect names of module, class(with superclass if "
"applicable), methods and functions.\nToggle nested items.\n"
"Double clicking on items prints a traceback for an exception "
"that is ignored."
}

_color_delegator_spec = {
'file': 'colorizer',
'kwds': {},
Expand All @@ -109,16 +97,6 @@ def _wrapper(parent): # htest #
"The default color scheme is in idlelib/config-highlight.def"
}

CustomRun_spec = {
'file': 'query',
'kwds': {'title': 'Customize query.py Run',
'_htest': True},
'msg': "Enter with <Return> or [Run]. Print valid entry to Shell\n"
"Arguments are parsed into a list\n"
"Mode is currently restart True or False\n"
"Close dialog with valid entry, <Escape>, [Cancel], [X]"
}

ConfigDialog_spec = {
'file': 'configdialog',
'kwds': {'title': 'ConfigDialogTest',
Expand All @@ -135,6 +113,16 @@ def _wrapper(parent): # htest #
"changes made have persisted."
}

CustomRun_spec = {
'file': 'query',
'kwds': {'title': 'Customize query.py Run',
'_htest': True},
'msg': "Enter with <Return> or [Run]. Print valid entry to Shell\n"
"Arguments are parsed into a list\n"
"Mode is currently restart True or False\n"
"Close dialog with valid entry, <Escape>, [Cancel], [X]"
}

# TODO Improve message
_dyn_option_menu_spec = {
'file': 'dynoption',
Expand Down Expand Up @@ -236,6 +224,15 @@ def _wrapper(parent): # htest #
"focusing out of the window\nare sequences to be tested."
}

_module_browser_spec = {
'file': 'browser',
'kwds': {},
'msg': "Inspect names of module, class(with superclass if "
"applicable), methods and functions.\nToggle nested items.\n"
"Double clicking on items prints a traceback for an exception "
"that is ignored."
}

_multistatus_bar_spec = {
'file': 'statusbar',
'kwds': {},
Expand Down

0 comments on commit c9131ed

Please sign in to comment.