cpython/Lib/idlelib/idle_test/htest.py

94 lines
2.8 KiB
Python
Raw Normal View History

'''Run human tests of Idle's window, dialog, and popup widgets.
run(test): run *test*, a callable that causes a widget to be displayed.
runall(): run all tests defined in this file.
Let X be a global name bound to a widget callable. End the module with
if __name__ == '__main__':
<unittest, if there is one>
from idlelib.idle_test.htest import run
run(X)
The X object must have a .__name__ attribute and a 'parent' parameter.
X will often be a widget class, but a callable instance with .__name__
or a wrapper function also work. The name of wrapper functions, like
'_Editor_Window', should start with '_'.
This file must contain a matching instance of the folling template,
with X.__name__ prepended, as in '_Editor_window_spec ...'.
_spec = {
'file': '',
'kwds': {'title': ''},
'msg': ""
}
file (no .py): used in runall() to import the file and get X.
kwds: passed to X (**kwds), after 'parent' is added, to initialize X.
title: an example; used for some widgets, delete if not.
msg: displayed in a master window. Hints as to how the user might
test the widget. Close the window to skip or end the test.
'''
from importlib import import_module
import tkinter as tk
_Editor_window_spec = {
'file': 'EditorWindow',
'kwds': {},
'msg': "Test editor functions of interest"
}
_Help_dialog_spec = {
'file': 'EditorWindow',
'kwds': {},
'msg': "If the help text displays, this works"
}
AboutDialog_spec = {
'file': 'aboutDialog',
'kwds': {'title': 'About test'},
'msg': "Try each button"
}
GetCfgSectionNameDialog_spec = {
'file': 'configSectionNameDialog',
'kwds': {'title':'Get Name',
'message':'Enter something',
'used_names': {'abc'},
'_htest': True},
'msg': "After the text entered with [Ok] is stripped, <nothing>, "
"'abc', or more that 30 chars are errors.\n"
"Close 'Get Name' with a valid entry (printed to Shell), [Cancel], or [X]",
}
def run(test):
"Display a widget with callable *test* using a _spec dict"
root = tk.Tk()
test_spec = globals()[test.__name__ + '_spec']
test_kwds = test_spec['kwds']
test_kwds['parent'] = root
def run_test():
widget = test(**test_kwds)
try:
print(widget.result)
except AttributeError:
pass
tk.Label(root, text=test_spec['msg'], justify='left').pack()
tk.Button(root, text='Test ' + test.__name__, command=run_test).pack()
root.mainloop()
def runall():
"Run all tests. Quick and dirty version."
for k, d in globals().items():
if k.endswith('_spec'):
mod = import_module('idlelib.' + d['file'])
test = getattr(mod, k[:-5])
run(test)
if __name__ == '__main__':
runall()