diff --git a/Lib/idlelib/EditorWindow.py b/Lib/idlelib/EditorWindow.py
index 21efc31..634a226 100644
--- a/Lib/idlelib/EditorWindow.py
+++ b/Lib/idlelib/EditorWindow.py
@@ -108,6 +108,8 @@
         self.parent = None
 
 helpDialog = HelpDialog()  # singleton instance
+def _Help_dialog(parent):  # wrapper for htest
+    helpDialog.show_dialog(parent)
 
 
 class EditorWindow(object):
@@ -1709,19 +1711,21 @@
     tk.call('set', 'tcl_nonwordchars', '[^a-zA-Z0-9_]')
 
 
-def test():
-    root = Tk()
+def _Editor_window(parent):
+    root = parent
     fixwordbreaks(root)
     root.withdraw()
     if sys.argv[1:]:
         filename = sys.argv[1]
     else:
         filename = None
+    macosxSupport.setupApp(root, None)
     edit = EditorWindow(root=root, filename=filename)
     edit.set_close_hook(root.quit)
     edit.text.bind("<<close-all-windows>>", edit.close_event)
-    root.mainloop()
-    root.destroy()
 
 if __name__ == '__main__':
-    test()
+    from idlelib.idle_test.htest import run
+    if len(sys.argv) <= 1:
+        run(_Help_dialog)
+    run(_Editor_window)
diff --git a/Lib/idlelib/aboutDialog.py b/Lib/idlelib/aboutDialog.py
index 0734518..05631fa 100644
--- a/Lib/idlelib/aboutDialog.py
+++ b/Lib/idlelib/aboutDialog.py
@@ -12,7 +12,7 @@
     """Modal about dialog for idle
 
     """
-    def __init__(self,parent,title):
+    def __init__(self, parent, title):
         Toplevel.__init__(self, parent)
         self.configure(borderwidth=5)
         self.geometry("+%d+%d" % (parent.winfo_rootx()+30,
@@ -136,10 +136,5 @@
         self.destroy()
 
 if __name__ == '__main__':
-    # test the dialog
-    root = Tk()
-    def run():
-        from idlelib import aboutDialog
-        aboutDialog.AboutDialog(root, 'About')
-    Button(root, text='Dialog', command=run).pack()
-    root.mainloop()
+    from idlelib.idle_test.htest import run
+    run(AboutDialog)
diff --git a/Lib/idlelib/configSectionNameDialog.py b/Lib/idlelib/configSectionNameDialog.py
index 04fcd8c..c09dca8 100644
--- a/Lib/idlelib/configSectionNameDialog.py
+++ b/Lib/idlelib/configSectionNameDialog.py
@@ -7,10 +7,11 @@
 from Tkinter import *
 import tkMessageBox
 class GetCfgSectionNameDialog(Toplevel):
-    def __init__(self, parent, title, message, used_names):
+    def __init__(self, parent, title, message, used_names, _htest=False):
         """
         message - string, informational message to display
         used_names - string collection, names already in use for validity check
+        _htest - bool, change box location when running htest
         """
         Toplevel.__init__(self, parent)
         self.configure(borderwidth=5)
@@ -29,11 +30,12 @@
         self.messageInfo.config(width=self.frameMain.winfo_reqwidth())
         self.geometry(
                 "+%d+%d" % (
-                parent.winfo_rootx() +
-                (parent.winfo_width()/2 - self.winfo_reqwidth()/2),
-                parent.winfo_rooty() +
-                (parent.winfo_height()/2 - self.winfo_reqheight()/2)
-                ) )  #centre dialog over parent
+                    parent.winfo_rootx() +
+                    (parent.winfo_width()/2 - self.winfo_reqwidth()/2),
+                    parent.winfo_rooty() +
+                    ((parent.winfo_height()/2 - self.winfo_reqheight()/2)
+                    if not _htest else 100)
+                ) )  #centre dialog over parent (or below htest box)
         self.deiconify()  #geometry set, unhide
         self.wait_window()
     def create_widgets(self):
@@ -86,15 +88,5 @@
     import unittest
     unittest.main('idlelib.idle_test.test_config_name', verbosity=2, exit=False)
 
-    # also human test the dialog
-    root = Tk()
-    def run():
-        dlg=GetCfgSectionNameDialog(root,'Get Name',
-                "After the text entered with [Ok] is stripped, <nothing>, "
-                "'abc', or more that 30 chars are errors. "
-                "Close with a valid entry (printed), [Cancel], or [X]",
-                {'abc'})
-        print dlg.result
-    Message(root, text='').pack()  # will be needed for oher dialog tests
-    Button(root, text='Click to begin dialog test', command=run).pack()
-    root.mainloop()
+    from idlelib.idle_test.htest import run
+    run(GetCfgSectionNameDialog)
diff --git a/Lib/idlelib/idle_test/htest.py b/Lib/idlelib/idle_test/htest.py
new file mode 100644
index 0000000..ac1be5c
--- /dev/null
+++ b/Lib/idlelib/idle_test/htest.py
@@ -0,0 +1,91 @@
+'''Run a human test of Idle wndow, dialog, and other widget classes.
+
+run(klass) runs a test for one class.
+runall() runs all the defined tests
+
+The file wih the widget class should end with
+if __name__ == '__main__':
+    <unittest, if there is one>
+    from idlelib.idle_test.htest import run
+    run(X)
+where X is a global object of the module. X must be a callable with a
+.__name__ attribute that accepts a 'parent' attribute. X will usually 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 then contain an instance of this template.
+_spec = {
+    'file': '',
+    'kwds': {'title': ''},
+    'msg': ""
+    }
+with X.__name__ prepended to _spec.
+File (no .py) is used in runall() to import the file and get the class.
+Kwds is passed to X (**kwds) after 'parent' is added, to initialize X.
+Msg. displayed is a window with a start button. hint as to how the user
+might test the widget. Closing The box skips or ends the test.
+'''
+from importlib import import_module
+import Tkinter as tk
+
+# Template for class_spec dicts, copy and uncomment
+
+_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(klas):
+    "Test the widget class klas using _spec dict"
+    root = tk.Tk()
+    klas_spec = globals()[klas.__name__+'_spec']
+    klas_kwds = klas_spec['kwds']
+    klas_kwds['parent'] = root
+    # This presumes that Idle consistently uses 'parent'
+    def run_klas():
+        widget = klas(**klas_kwds)
+        try:
+            print(widget.result)
+        except AttributeError:
+            pass
+    tk.Label(root, text=klas_spec['msg'], justify='left').pack()
+    tk.Button(root, text='Test ' + klas.__name__, command=run_klas).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'])
+            klas = getattr(mod, k[:-5])
+            run(klas)
+
+if __name__ == '__main__':
+    runall()
+
