]> granicus.if.org Git - python/commitdiff
bpo-33855: Still more edits and minimal tests for IDLE (GH-7784)
authorTerry Jan Reedy <tjreedy@udel.edu>
Tue, 19 Jun 2018 23:12:52 +0000 (19:12 -0400)
committerGitHub <noreply@github.com>
Tue, 19 Jun 2018 23:12:52 +0000 (19:12 -0400)
Part 3 of 3, continuing PR #7689. This covers 14 idlelib modules and their tests,
rpc to zoomheight except for run (already done) and tooltip (being done separately).

36 files changed:
Lib/idlelib/autoexpand.py
Lib/idlelib/codecontext.py
Lib/idlelib/config.py
Lib/idlelib/config_key.py
Lib/idlelib/configdialog.py
Lib/idlelib/idle_test/test_codecontext.py
Lib/idlelib/idle_test/test_rpc.py [new file with mode: 0644]
Lib/idlelib/idle_test/test_rstrip.py
Lib/idlelib/idle_test/test_runscript.py [new file with mode: 0644]
Lib/idlelib/idle_test/test_scrolledlist.py
Lib/idlelib/idle_test/test_search.py
Lib/idlelib/idle_test/test_searchbase.py
Lib/idlelib/idle_test/test_searchengine.py
Lib/idlelib/idle_test/test_stackviewer.py [new file with mode: 0644]
Lib/idlelib/idle_test/test_statusbar.py [new file with mode: 0644]
Lib/idlelib/idle_test/test_textview.py
Lib/idlelib/idle_test/test_tree.py
Lib/idlelib/idle_test/test_undo.py
Lib/idlelib/idle_test/test_warning.py
Lib/idlelib/idle_test/test_windows.py [new file with mode: 0644]
Lib/idlelib/idle_test/test_zoomheight.py [new file with mode: 0644]
Lib/idlelib/outwin.py
Lib/idlelib/rpc.py
Lib/idlelib/rstrip.py
Lib/idlelib/runscript.py
Lib/idlelib/scrolledlist.py
Lib/idlelib/search.py
Lib/idlelib/searchbase.py
Lib/idlelib/searchengine.py
Lib/idlelib/stackviewer.py
Lib/idlelib/statusbar.py
Lib/idlelib/textview.py
Lib/idlelib/tree.py
Lib/idlelib/undo.py
Lib/idlelib/windows.py
Lib/idlelib/zoomheight.py

index 42e733a1a9e7358ee9f272c8a0482d9103f1e644..92f5c84eb6f40195c1bfa989002304a6c8d76cad 100644 (file)
@@ -92,5 +92,5 @@ class AutoExpand:
 
 
 if __name__ == '__main__':
-    import unittest
-    unittest.main('idlelib.idle_test.test_autoexpand', verbosity=2)
+    from unittest import main
+    main('idlelib.idle_test.test_autoexpand', verbosity=2)
index 8b378bceba250ac581fde73ef10fdd3e4fcee6a1..7c88a4d015e358c54f871932efb646a66428cef1 100644 (file)
@@ -233,6 +233,8 @@ class CodeContext:
 CodeContext.reload()
 
 
-if __name__ == "__main__":  # pragma: no cover
-    import unittest
-    unittest.main('idlelib.idle_test.test_codecontext', verbosity=2, exit=False)
+if __name__ == "__main__":
+    from unittest import main
+    main('idlelib.idle_test.test_codecontext', verbosity=2, exit=False)
+
+    # Add htest.
index 94b20832091691af6cef98c9011cf70b16858e65..0eb90fc8dc5fd6718c0b008ec0fc187bbfe1fac1 100644 (file)
@@ -925,7 +925,7 @@ def _dump():  # htest # (not really, but ignore in coverage)
     print('\nlines = ', line, ', crc = ', crc, sep='')
 
 if __name__ == '__main__':
-    import unittest
-    unittest.main('idlelib.idle_test.test_config',
-                  verbosity=2, exit=False)
-    #_dump()
+    from unittest import main
+    main('idlelib.idle_test.test_config', verbosity=2, exit=False)
+
+    # Run revised _dump() as htest?
index 3a865f869a06c4d9f6d78881f354bf402e97919e..7f4bb49ec8a6f20f39eb801616139b0d178c49a8 100644 (file)
@@ -291,8 +291,8 @@ class GetKeysDialog(Toplevel):
 
 
 if __name__ == '__main__':
-    import unittest
-    unittest.main('idlelib.idle_test.test_config_key', verbosity=2, exit=False)
+    from unittest import main
+    main('idlelib.idle_test.test_config_key', verbosity=2, exit=False)
 
     from idlelib.idle_test.htest import run
     run(GetKeysDialog)
index 75b917d0e193162ef8ed6d35609e63d4188bfabf..c7832380940321afe9539c7708df63cbcd043527 100644 (file)
@@ -2269,8 +2269,8 @@ class VerticalScrolledFrame(Frame):
 
 
 if __name__ == '__main__':
-    import unittest
-    unittest.main('idlelib.idle_test.test_configdialog',
-                  verbosity=2, exit=False)
+    from unittest import main
+    main('idlelib.idle_test.test_configdialog', verbosity=2, exit=False)
+
     from idlelib.idle_test.htest import run
     run(ConfigDialog)
index c349456d741bdce81dfa1a92086faadd095e3258..ef8170e3b6964d7987eab200a81d31eed66d5664 100644 (file)
@@ -2,10 +2,10 @@
 
 from idlelib import codecontext
 import unittest
-from unittest import mock
 from test.support import requires
 from tkinter import Tk, Frame, Text, TclError
 
+from unittest import mock
 import re
 from idlelib import config
 
diff --git a/Lib/idlelib/idle_test/test_rpc.py b/Lib/idlelib/idle_test/test_rpc.py
new file mode 100644 (file)
index 0000000..48be65b
--- /dev/null
@@ -0,0 +1,30 @@
+"Test rpc, coverage 20%."
+
+from idlelib import rpc
+import unittest
+
+import marshal
+
+
+class CodePicklerTest(unittest.TestCase):
+
+    def test_pickle_unpickle(self):
+        def f(): return a + b + c
+        func, (cbytes,) = rpc.pickle_code(f.__code__)
+        self.assertIs(func, rpc.unpickle_code)
+        self.assertIn(b'test_rpc.py', cbytes)
+        code = rpc.unpickle_code(cbytes)
+        self.assertEqual(code.co_names, ('a', 'b', 'c'))
+
+    def test_code_pickler(self):
+        self.assertIn(type((lambda:None).__code__),
+                      rpc.CodePickler.dispatch_table)
+
+    def test_dumps(self):
+        def f(): pass
+        # The main test here is that pickling code does not raise.
+        self.assertIn(b'test_rpc.py', rpc.dumps(f.__code__))
+
+
+if __name__ == '__main__':
+    unittest.main(verbosity=2)
index 130e6be257fe58cdc0454a82ba23019b7174aa8f..9ef1320eefbad5975e6e48b186454086d0c0285d 100644 (file)
@@ -1,5 +1,7 @@
+"Test rstrip, coverage 100%."
+
+from idlelib import rstrip
 import unittest
-import idlelib.rstrip as rs
 from idlelib.idle_test.mock_idle import Editor
 
 class rstripTest(unittest.TestCase):
@@ -7,7 +9,7 @@ class rstripTest(unittest.TestCase):
     def test_rstrip_line(self):
         editor = Editor()
         text = editor.text
-        do_rstrip = rs.RstripExtension(editor).do_rstrip
+        do_rstrip = rstrip.RstripExtension(editor).do_rstrip
 
         do_rstrip()
         self.assertEqual(text.get('1.0', 'insert'), '')
@@ -20,12 +22,12 @@ class rstripTest(unittest.TestCase):
 
     def test_rstrip_multiple(self):
         editor = Editor()
-        #  Uncomment following to verify that test passes with real widgets.
-##        from idlelib.editor import EditorWindow as Editor
-##        from tkinter import Tk
-##        editor = Editor(root=Tk())
+        #  Comment above, uncomment 3 below to test with real Editor & Text.
+        #from idlelib.editor import EditorWindow as Editor
+        #from tkinter import Tk
+        #editor = Editor(root=Tk())
         text = editor.text
-        do_rstrip = rs.RstripExtension(editor).do_rstrip
+        do_rstrip = rstrip.RstripExtension(editor).do_rstrip
 
         original = (
             "Line with an ending tab    \n"
@@ -45,5 +47,7 @@ class rstripTest(unittest.TestCase):
         do_rstrip()
         self.assertEqual(text.get('1.0', 'insert'), stripped)
 
+
+
 if __name__ == '__main__':
-    unittest.main(verbosity=2, exit=False)
+    unittest.main(verbosity=2)
diff --git a/Lib/idlelib/idle_test/test_runscript.py b/Lib/idlelib/idle_test/test_runscript.py
new file mode 100644 (file)
index 0000000..5fc6018
--- /dev/null
@@ -0,0 +1,33 @@
+"Test runscript, coverage 16%."
+
+from idlelib import runscript
+import unittest
+from test.support import requires
+from tkinter import Tk
+from idlelib.editor import EditorWindow
+
+
+class ScriptBindingTest(unittest.TestCase):
+
+    @classmethod
+    def setUpClass(cls):
+        requires('gui')
+        cls.root = Tk()
+        cls.root.withdraw()
+
+    @classmethod
+    def tearDownClass(cls):
+        cls.root.update_idletasks()
+        for id in cls.root.tk.call('after', 'info'):
+            cls.root.after_cancel(id)  # Need for EditorWindow.
+        cls.root.destroy()
+        del cls.root
+
+    def test_init(self):
+        ew = EditorWindow(root=self.root)
+        sb = runscript.ScriptBinding(ew)
+        ew._close()
+
+
+if __name__ == '__main__':
+    unittest.main(verbosity=2)
index 56aabfecf4a9ceff946221d75cb7f0ca8525afa7..2f819fda025ba3d453e081327a05ffc2fd7cf972 100644 (file)
@@ -1,11 +1,9 @@
-''' Test idlelib.scrolledlist.
+"Test scrolledlist, coverage 38%."
 
-Coverage: 39%
-'''
-from idlelib import scrolledlist
+from idlelib.scrolledlist import ScrolledList
+import unittest
 from test.support import requires
 requires('gui')
-import unittest
 from tkinter import Tk
 
 
@@ -22,7 +20,7 @@ class ScrolledListTest(unittest.TestCase):
 
 
     def test_init(self):
-        scrolledlist.ScrolledList(self.root)
+        ScrolledList(self.root)
 
 
 if __name__ == '__main__':
index 3ab72951efe3fa787ba31212d8477e9dc663ce25..de703c195cd22900b92f3b239018f805bbf373da 100644 (file)
@@ -1,25 +1,23 @@
-"""Test SearchDialog class in idlelib.search.py"""
+"Test search, coverage 69%."
+
+from idlelib import search
+import unittest
+from test.support import requires
+requires('gui')
+from tkinter import Tk, Text, BooleanVar
+from idlelib import searchengine
 
 # Does not currently test the event handler wrappers.
 # A usage test should simulate clicks and check highlighting.
 # Tests need to be coordinated with SearchDialogBase tests
 # to avoid duplication.
 
-from test.support import requires
-requires('gui')
-
-import unittest
-import tkinter as tk
-from tkinter import BooleanVar
-import idlelib.searchengine as se
-import idlelib.search as sd
-
 
 class SearchDialogTest(unittest.TestCase):
 
     @classmethod
     def setUpClass(cls):
-        cls.root = tk.Tk()
+        cls.root = Tk()
 
     @classmethod
     def tearDownClass(cls):
@@ -27,10 +25,10 @@ class SearchDialogTest(unittest.TestCase):
         del cls.root
 
     def setUp(self):
-        self.engine = se.SearchEngine(self.root)
-        self.dialog = sd.SearchDialog(self.root, self.engine)
+        self.engine = searchengine.SearchEngine(self.root)
+        self.dialog = search.SearchDialog(self.root, self.engine)
         self.dialog.bell = lambda: None
-        self.text = tk.Text(self.root)
+        self.text = Text(self.root)
         self.text.insert('1.0', 'Hello World!')
 
     def test_find_again(self):
index 27b02fbe54602c5cb7b3688b1d7bed0e82eaf073..46c3ad111d179336122f24604553589eb19053de 100644 (file)
@@ -1,8 +1,7 @@
-'''tests idlelib.searchbase.
+"Test searchbase, coverage 98%."
+# The only thing not covered is inconsequential --
+# testing skipping of suite when self.needwrapbutton is false.
 
-Coverage: 99%. The only thing not covered is inconsequential --
-testing skipping of suite when self.needwrapbutton is false.
-'''
 import unittest
 from test.support import requires
 from tkinter import Tk, Frame  ##, BooleanVar, StringVar
@@ -22,6 +21,7 @@ from idlelib.idle_test.mock_idle import Func
 ##    se.BooleanVar = BooleanVar
 ##    se.StringVar = StringVar
 
+
 class SearchDialogBaseTest(unittest.TestCase):
 
     @classmethod
index b3aa8eb81205eeb4e0bdc5737bcbda4ddf483456..3d26d62a95a8730b90933e5a7928852cc3802880 100644 (file)
@@ -1,18 +1,19 @@
-'''Test functions and SearchEngine class in idlelib.searchengine.py.'''
+"Test searchengine, coverage 99%."
 
-# With mock replacements, the module does not use any gui widgets.
-# The use of tk.Text is avoided (for now, until mock Text is improved)
-# by patching instances with an index function returning what is needed.
-# This works because mock Text.get does not use .index.
-
-import re
+from idlelib import searchengine as se
 import unittest
 # from test.support import requires
 from tkinter import  BooleanVar, StringVar, TclError  # ,Tk, Text
 import tkinter.messagebox as tkMessageBox
-from idlelib import searchengine as se
 from idlelib.idle_test.mock_tk import Var, Mbox
 from idlelib.idle_test.mock_tk import Text as mockText
+import re
+
+# With mock replacements, the module does not use any gui widgets.
+# The use of tk.Text is avoided (for now, until mock Text is improved)
+# by patching instances with an index function returning what is needed.
+# This works because mock Text.get does not use .index.
+# The tkinter imports are used to restore searchengine.
 
 def setUpModule():
     # Replace s-e module tkinter imports other than non-gui TclError.
@@ -326,4 +327,4 @@ class ForwardBackwardTest(unittest.TestCase):
 
 
 if __name__ == '__main__':
-    unittest.main(verbosity=2, exit=2)
+    unittest.main(verbosity=2)
diff --git a/Lib/idlelib/idle_test/test_stackviewer.py b/Lib/idlelib/idle_test/test_stackviewer.py
new file mode 100644 (file)
index 0000000..3b8486a
--- /dev/null
@@ -0,0 +1,36 @@
+"Test stackviewer, coverage 19%."
+
+from idlelib import stackviewer
+import unittest
+from test.support import requires
+from tkinter import Tk
+
+
+class Test(unittest.TestCase):
+
+    @classmethod
+    def setUpClass(cls):
+        requires('gui')
+        cls.root = Tk()
+        cls.root.withdraw()
+
+    @classmethod
+    def tearDownClass(cls):
+        cls.root.update_idletasks()
+##        for id in cls.root.tk.call('after', 'info'):
+##            cls.root.after_cancel(id)  # Need for EditorWindow.
+        cls.root.destroy()
+        del cls.root
+
+    def test_init(self):
+        try:
+            zzz
+        except NameError as e:
+            ex = e
+# Test runners suppress setting of sys.last_xyx, which stackviewer needs.
+# Revise stackviewer so following works.
+#        stackviewer.StackBrowser(self.root, ex=exc)
+
+
+if __name__ == '__main__':
+    unittest.main(verbosity=2)
diff --git a/Lib/idlelib/idle_test/test_statusbar.py b/Lib/idlelib/idle_test/test_statusbar.py
new file mode 100644 (file)
index 0000000..203a57d
--- /dev/null
@@ -0,0 +1,41 @@
+"Test statusbar, coverage 100%."
+
+from idlelib import statusbar
+import unittest
+from test.support import requires
+from tkinter import Tk
+
+
+class Test(unittest.TestCase):
+
+    @classmethod
+    def setUpClass(cls):
+        requires('gui')
+        cls.root = Tk()
+        cls.root.withdraw()
+
+    @classmethod
+    def tearDownClass(cls):
+        cls.root.update_idletasks()
+        cls.root.destroy()
+        del cls.root
+
+    def test_init(self):
+        bar = statusbar.MultiStatusBar(self.root)
+        self.assertEqual(bar.labels, {})
+
+    def test_set_label(self):
+        bar = statusbar.MultiStatusBar(self.root)
+        bar.set_label('left', text='sometext', width=10)
+        self.assertIn('left', bar.labels)
+        left = bar.labels['left']
+        self.assertEqual(left['text'], 'sometext')
+        self.assertEqual(left['width'], 10)
+        bar.set_label('left', text='revised text')
+        self.assertEqual(left['text'], 'revised text')
+        bar.set_label('right', text='correct text')
+        self.assertEqual(bar.labels['right']['text'], 'correct text')
+
+
+if __name__ == '__main__':
+    unittest.main(verbosity=2)
index dfd4063eb08d1e2dae2664599a0fe250caf60c76..0d11e41e0fb450f4719a7e6ae26ca0bcc150e129 100644 (file)
@@ -1,17 +1,15 @@
-'''Test idlelib.textview.
+"""Test textview, coverage 100%.
 
 Since all methods and functions create (or destroy) a ViewWindow, which
 is a widget containing a widget, etcetera, all tests must be gui tests.
 Using mock Text would not change this.  Other mocks are used to retrieve
 information about calls.
-
-Coverage: 100%.
-'''
+"""
 from idlelib import textview as tv
+import unittest
 from test.support import requires
 requires('gui')
 
-import unittest
 import os
 from tkinter import Tk
 from tkinter.ttk import Button
@@ -109,7 +107,7 @@ class ViewFunctionTest(unittest.TestCase):
         view = tv.view_text(root, 'Title', 'test text', modal=False)
         self.assertIsInstance(view, tv.ViewWindow)
         self.assertIsInstance(view.viewframe, tv.ViewFrame)
-        view.ok()
+        view.viewframe.ok()
 
     def test_view_file(self):
         view = tv.view_file(root, 'Title', __file__, 'ascii', modal=False)
index bb597d87ffd104eb2bd5d5bc4ae434d5e2ea479d..9be9abee361f083632626437e483602cdc93c771 100644 (file)
@@ -1,11 +1,9 @@
-''' Test idlelib.tree.
+"Test tree. coverage 56%."
 
-Coverage: 56%
-'''
 from idlelib import tree
+import unittest
 from test.support import requires
 requires('gui')
-import unittest
 from tkinter import Tk
 
 
index e872927a6c6d99ebe9fc0e14f04d5a85ac6ed638..beb5b582039f8844dd179561c7bb939606184375 100644 (file)
@@ -1,14 +1,13 @@
-"""Unittest for UndoDelegator in idlelib.undo.py.
+"Test undo, coverage 77%."
+# Only test UndoDelegator so far.
 
-Coverage about 80% (retest).
-"""
+from idlelib.undo import UndoDelegator
+import unittest
 from test.support import requires
 requires('gui')
 
-import unittest
 from unittest.mock import Mock
 from tkinter import Text, Tk
-from idlelib.undo import UndoDelegator
 from idlelib.percolator import Percolator
 
 
@@ -131,5 +130,6 @@ class UndoDelegatorTest(unittest.TestCase):
             text.insert('insert', 'foo')
             self.assertLessEqual(len(self.delegator.undolist), max_undo)
 
+
 if __name__ == '__main__':
     unittest.main(verbosity=2, exit=False)
index f3269f195af83160419dd1bc5485da3114c54ead..221068c5885fcbad118283b6c1702a1c55896ec7 100644 (file)
@@ -5,20 +5,18 @@ This file could be expanded to include traceback overrides
 Revise if output destination changes (http://bugs.python.org/issue18318).
 Make sure warnings module is left unaltered (http://bugs.python.org/issue18081).
 '''
-
+from idlelib import run
+from idlelib import pyshell as shell
 import unittest
 from test.support import captured_stderr
-
 import warnings
+
 # Try to capture default showwarning before Idle modules are imported.
 showwarning = warnings.showwarning
 # But if we run this file within idle, we are in the middle of the run.main loop
 # and default showwarnings has already been replaced.
 running_in_idle = 'idle' in showwarning.__name__
 
-from idlelib import run
-from idlelib import pyshell as shell
-
 # The following was generated from pyshell.idle_formatwarning
 # and checked as matching expectation.
 idlemsg = '''
@@ -29,6 +27,7 @@ UserWarning: Test
 '''
 shellmsg = idlemsg + ">>> "
 
+
 class RunWarnTest(unittest.TestCase):
 
     @unittest.skipIf(running_in_idle, "Does not work when run within Idle.")
@@ -46,6 +45,7 @@ class RunWarnTest(unittest.TestCase):
             # The following uses .splitlines to erase line-ending differences
             self.assertEqual(idlemsg.splitlines(), f.getvalue().splitlines())
 
+
 class ShellWarnTest(unittest.TestCase):
 
     @unittest.skipIf(running_in_idle, "Does not work when run within Idle.")
@@ -70,4 +70,4 @@ class ShellWarnTest(unittest.TestCase):
 
 
 if __name__ == '__main__':
-    unittest.main(verbosity=2, exit=False)
+    unittest.main(verbosity=2)
diff --git a/Lib/idlelib/idle_test/test_windows.py b/Lib/idlelib/idle_test/test_windows.py
new file mode 100644 (file)
index 0000000..425a569
--- /dev/null
@@ -0,0 +1,45 @@
+"Test windows, coverage 47%."
+
+from idlelib import windows
+import unittest
+from test.support import requires
+from tkinter import Tk
+
+
+class WindowListTest(unittest.TestCase):
+
+    def test_init(self):
+        wl = windows.WindowList()
+        self.assertEqual(wl.dict, {})
+        self.assertEqual(wl.callbacks, [])
+
+    # Further tests need mock Window.
+
+
+class ListedToplevelTest(unittest.TestCase):
+
+    @classmethod
+    def setUpClass(cls):
+        windows.registry = set()
+        requires('gui')
+        cls.root = Tk()
+        cls.root.withdraw()
+
+    @classmethod
+    def tearDownClass(cls):
+        windows.registry = windows.WindowList()
+        cls.root.update_idletasks()
+##        for id in cls.root.tk.call('after', 'info'):
+##            cls.root.after_cancel(id)  # Need for EditorWindow.
+        cls.root.destroy()
+        del cls.root
+
+    def test_init(self):
+
+        win = windows.ListedToplevel(self.root)
+        self.assertIn(win, windows.registry)
+        self.assertEqual(win.focused_widget, win)
+
+
+if __name__ == '__main__':
+    unittest.main(verbosity=2)
diff --git a/Lib/idlelib/idle_test/test_zoomheight.py b/Lib/idlelib/idle_test/test_zoomheight.py
new file mode 100644 (file)
index 0000000..bac86ac
--- /dev/null
@@ -0,0 +1,39 @@
+"Test zoomheight, coverage 66%."
+# Some code is system dependent.
+
+from idlelib import zoomheight
+import unittest
+from test.support import requires
+from tkinter import Tk, Text
+from idlelib.editor import EditorWindow
+
+
+class Test(unittest.TestCase):
+
+    @classmethod
+    def setUpClass(cls):
+        requires('gui')
+        cls.root = Tk()
+        cls.root.withdraw()
+        cls.editwin = EditorWindow(root=cls.root)
+
+    @classmethod
+    def tearDownClass(cls):
+        cls.editwin._close()
+        cls.root.update_idletasks()
+        for id in cls.root.tk.call('after', 'info'):
+            cls.root.after_cancel(id)  # Need for EditorWindow.
+        cls.root.destroy()
+        del cls.root
+
+    def test_init(self):
+        zoom = zoomheight.ZoomHeight(self.editwin)
+        self.assertIs(zoom.editwin, self.editwin)
+
+    def test_zoom_height_event(self):
+        zoom = zoomheight.ZoomHeight(self.editwin)
+        zoom.zoom_height_event()
+
+
+if __name__ == '__main__':
+    unittest.main(verbosity=2)
index 6c2a792d86b99ae3016c558a6486359e17db90e4..4af9f1afaed5181eae2dd80c7f4b1b0f2335f0b9 100644 (file)
@@ -184,5 +184,5 @@ class OnDemandOutputWindow:
         self.write = self.owin.write
 
 if __name__ == '__main__':
-    import unittest
-    unittest.main('idlelib.idle_test.test_outwin', verbosity=2, exit=False)
+    from unittest import main
+    main('idlelib.idle_test.test_outwin', verbosity=2, exit=False)
index 8f57edb836dec8a7c68a53c191a5d94bd730fc79..9962477cc56185c8cb76e7044004ec661bfcfd71 100644 (file)
@@ -43,16 +43,20 @@ import traceback
 import types
 
 def unpickle_code(ms):
+    "Return code object from marshal string ms."
     co = marshal.loads(ms)
     assert isinstance(co, types.CodeType)
     return co
 
 def pickle_code(co):
+    "Return unpickle function and tuple with marshalled co code object."
     assert isinstance(co, types.CodeType)
     ms = marshal.dumps(co)
     return unpickle_code, (ms,)
 
 def dumps(obj, protocol=None):
+    "Return pickled (or marshalled) string for obj."
+    # IDLE passes 'None' to select pickle.DEFAULT_PROTOCOL.
     f = io.BytesIO()
     p = CodePickler(f, protocol)
     p.dump(obj)
@@ -625,3 +629,8 @@ def displayhook(value):
         sys.stdout.write(text)
     sys.stdout.write("\n")
     builtins._ = value
+
+
+if __name__ == '__main__':
+    from unittest import main
+    main('idlelib.idle_test.test_rpc', verbosity=2,)
index 18c86f9b2c88968c7a9ee9a08046263a24af284d..b845d809d315ac431390d385ceb1a1d733b9e78a 100644 (file)
@@ -25,5 +25,5 @@ class RstripExtension:
         undo.undo_block_stop()
 
 if __name__ == "__main__":
-    import unittest
-    unittest.main('idlelib.idle_test.test_rstrip', verbosity=2, exit=False)
+    from unittest import main
+    main('idlelib.idle_test.test_rstrip', verbosity=2,)
index 45bf56345825a188b2728450b7de61a2cb6570f5..83433b1cf0a4591bc3fc9c9833987b9aa17f507c 100644 (file)
@@ -193,3 +193,8 @@ class ScriptBinding:
         # XXX This should really be a function of EditorWindow...
         tkMessageBox.showerror(title, message, parent=self.editwin.text)
         self.editwin.text.focus_set()
+
+
+if __name__ == "__main__":
+    from unittest import main
+    main('idlelib.idle_test.test_runscript', verbosity=2,)
index cdf658404ab643ac7ef3c9b8c10674f753ad8128..10229b63629293caa246ccc346edea7956a6db26 100644 (file)
@@ -142,6 +142,8 @@ def _scrolled_list(parent):  # htest #
         scrolled_list.append("Item %02d" % i)
 
 if __name__ == '__main__':
-    # At the moment, test_scrolledlist merely creates instance, like htest.
+    from unittest import main
+    main('idlelib.idle_test.test_scrolledlist', verbosity=2,)
+
     from idlelib.idle_test.htest import run
     run(_scrolled_list)
index 4b9065930822844a7f3d5c9bef8fa0a42e82e62c..6223661c8e080a9b583d8a9fa927dbbf442bfdf6 100644 (file)
@@ -94,9 +94,8 @@ def _search_dialog(parent):  # htest #
     button.pack()
 
 if __name__ == '__main__':
-    import unittest
-    unittest.main('idlelib.idle_test.test_search',
-                  verbosity=2, exit=False)
+    from unittest import main
+    main('idlelib.idle_test.test_search', verbosity=2, exit=False)
 
     from idlelib.idle_test.htest import run
     run(_search_dialog)
index 5f81785b712c088d6abec74918575ba8e30d88b7..9b03ff64c1e1a6635dbac4a129e2f218d577cad6 100644 (file)
@@ -192,9 +192,10 @@ class _searchbase(SearchDialogBase):  # htest #
 
     def default_command(self, dummy): pass
 
+
 if __name__ == '__main__':
-    import unittest
-    unittest.main('idlelib.idle_test.test_searchbase', verbosity=2, exit=False)
+    from unittest import main
+    main('idlelib.idle_test.test_searchbase', verbosity=2, exit=False)
 
     from idlelib.idle_test.htest import run
     run(_searchbase)
index 253f1b0831a6190ac69b03cc96afe544df5c3161..911e7d4691cac11f45cf7f2fd86d641f147ce90c 100644 (file)
@@ -231,6 +231,7 @@ def get_line_col(index):
     line, col = map(int, index.split(".")) # Fails on invalid index
     return line, col
 
+
 if __name__ == "__main__":
-    import unittest
-    unittest.main('idlelib.idle_test.test_searchengine', verbosity=2, exit=False)
+    from unittest import main
+    main('idlelib.idle_test.test_searchengine', verbosity=2)
index 400fa632a098cf2da9a9cc92971e6f05d20e3994..71cfb78fb94c3f522ed9ce7fcb7d52fa65718a9d 100644 (file)
@@ -148,5 +148,8 @@ def _stack_viewer(parent):  # htest #
     del sys.last_traceback
 
 if __name__ == '__main__':
+    from unittest import main
+    main('idlelib.idle_test.test_stackviewer', verbosity=2)
+
     from idlelib.idle_test.htest import run
     run(_stack_viewer)
index 8618528d822130c63800a1a20db251d2d17127e0..c071f898b0f7443e57cbad073d3ff5fefedd827f 100644 (file)
@@ -42,5 +42,8 @@ def _multistatus_bar(parent):  # htest #
     frame.pack()
 
 if __name__ == '__main__':
+    from unittest import main
+    main('idlelib.idle_test.test_statusbar', verbosity=2, exit=False)
+
     from idlelib.idle_test.htest import run
     run(_multistatus_bar)
index 66201344061090fca5cedc4d610e5f533f5d82b9..d9260e6c7183fc8bcb4465901afac844ee19c794 100644 (file)
@@ -130,7 +130,8 @@ def view_file(parent, title, filename, encoding, modal=True, _utest=False):
 
 
 if __name__ == '__main__':
-    import unittest
-    unittest.main('idlelib.idle_test.test_textview', verbosity=2, exit=False)
+    from unittest import main
+    main('idlelib.idle_test.test_textview', verbosity=2, exit=False)
+
     from idlelib.idle_test.htest import run
     run(ViewWindow)
index 292ce36184c76d92d76a09aa8fca14ee64de0dc4..05f864657fb827903acfaa694bd1d44f881e4e1b 100644 (file)
@@ -462,6 +462,8 @@ def _tree_widget(parent):  # htest #
     node.expand()
 
 if __name__ == '__main__':
-    # test_tree is currently a copy of this
+    from unittest import main
+    main('idlelib.idle_test.test_tree', verbosity=2, exit=False)
+
     from idlelib.idle_test.htest import run
     run(_tree_widget)
index 4332f1099343b451ed097a97170b31546d14980b..f048994b7d15c3a80239155360e415e64775d800 100644 (file)
@@ -359,8 +359,8 @@ def _undo_delegator(parent):  # htest #
     dump.pack(side='left')
 
 if __name__ == "__main__":
-    import unittest
-    unittest.main('idlelib.idle_test.test_undo', verbosity=2, exit=False)
+    from unittest import main
+    main('idlelib.idle_test.test_undo', verbosity=2, exit=False)
 
     from idlelib.idle_test.htest import run
     run(_undo_delegator)
index a3f858aa73fc487da158282554f6fd91e8b56b51..b1e50384e941db62b9ccc4398d9b3f972f34bb2f 100644 (file)
@@ -90,3 +90,8 @@ class ListedToplevel(Toplevel):
             # This can happen when the window menu was torn off.
             # Simply ignore it.
             pass
+
+
+if __name__ == "__main__":
+    from unittest import main
+    main('idlelib.idle_test.test_windows', verbosity=2)
index 74fbc888a80d3f21363dc29a07bc7912111c64bd..73f1df071bf3bf6aa9e4b43eaed6d2627702f941 100644 (file)
@@ -11,7 +11,7 @@ class ZoomHeight:
     def __init__(self, editwin):
         self.editwin = editwin
 
-    def zoom_height_event(self, event):
+    def zoom_height_event(self, event=None):
         top = self.editwin.top
         zoom_height(top)
         return "break"
@@ -46,3 +46,10 @@ def zoom_height(top):
     else:
         newgeom = "%dx%d+%d+%d" % (width, newheight, x, newy)
     top.wm_geometry(newgeom)
+
+
+if __name__ == "__main__":
+    from unittest import main
+    main('idlelib.idle_test.test_zoomheight', verbosity=2, exit=False)
+
+    # Add htest?