From 0d3dcc199aa0b6c97e45a634eec7bb6c252a40b6 Mon Sep 17 00:00:00 2001 From: Terry Jan Reedy Date: Wed, 13 Jun 2018 23:17:57 -0400 Subject: [PATCH 01/30] Edit test_autocomplete. --- Lib/idlelib/idle_test/test_autocomplete.py | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/Lib/idlelib/idle_test/test_autocomplete.py b/Lib/idlelib/idle_test/test_autocomplete.py index f3f2dea4246df0..53582b912b0e2e 100644 --- a/Lib/idlelib/idle_test/test_autocomplete.py +++ b/Lib/idlelib/idle_test/test_autocomplete.py @@ -1,7 +1,5 @@ -''' Test autocomplete and autocomple_w +"Test autocomplete, coverage 57%." -Coverage of autocomple: 56% -''' import unittest from test.support import requires from tkinter import Tk, Text From f8199573dc45932851af5c719ee85a7e88fc7ceb Mon Sep 17 00:00:00 2001 From: Terry Jan Reedy Date: Wed, 13 Jun 2018 23:29:45 -0400 Subject: [PATCH 02/30] Edit test_autocomplete. --- Lib/idlelib/idle_test/test_autocomplete.py | 3 --- 1 file changed, 3 deletions(-) diff --git a/Lib/idlelib/idle_test/test_autocomplete.py b/Lib/idlelib/idle_test/test_autocomplete.py index 53582b912b0e2e..d7ee00af94b4da 100644 --- a/Lib/idlelib/idle_test/test_autocomplete.py +++ b/Lib/idlelib/idle_test/test_autocomplete.py @@ -9,9 +9,6 @@ from idlelib.idle_test.mock_idle import Func from idlelib.idle_test.mock_tk import Event -class AutoCompleteWindow: - def complete(): - return class DummyEditwin: def __init__(self, root, text): From a661e3216629af26a72b980df875c162f1ca11cb Mon Sep 17 00:00:00 2001 From: Terry Jan Reedy Date: Wed, 13 Jun 2018 23:47:11 -0400 Subject: [PATCH 03/30] Add test_autocomplete_w. --- Lib/idlelib/idle_test/test_autocomplete_w.py | 30 ++++++++++++++++++++ 1 file changed, 30 insertions(+) create mode 100644 Lib/idlelib/idle_test/test_autocomplete_w.py diff --git a/Lib/idlelib/idle_test/test_autocomplete_w.py b/Lib/idlelib/idle_test/test_autocomplete_w.py new file mode 100644 index 00000000000000..3259215568486f --- /dev/null +++ b/Lib/idlelib/idle_test/test_autocomplete_w.py @@ -0,0 +1,30 @@ +"Test autocomplete_w, coverage %." + +import unittest +from test.support import requires +from tkinter import Tk, Text + +import idlelib.autocomplete_w as acw + + +class AutoCompleteWindowTest(unittest.TestCase): + + @classmethod + def setUpClass(cls): + requires('gui') + cls.root = Tk() + cls.text = Text(cls.root) + cls.acw = acw.AutoCompleteWindow(cls.text) + + @classmethod + def tearDownClass(cls): + del cls.text, cls.acw + cls.root.destroy() + del cls.root + + def test_init(self): + self.assertEqual(self.acw.widget, self.text) + + +if __name__ == '__main__': + unittest.main(verbosity=2) From 858d9d44071ac707ce8a093a762d9683f5fb7b76 Mon Sep 17 00:00:00 2001 From: Terry Jan Reedy Date: Wed, 13 Jun 2018 23:48:39 -0400 Subject: [PATCH 04/30] Edit autocomplete_w.py. --- Lib/idlelib/idle_test/test_autocomplete_w.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Lib/idlelib/idle_test/test_autocomplete_w.py b/Lib/idlelib/idle_test/test_autocomplete_w.py index 3259215568486f..d360958d950cf9 100644 --- a/Lib/idlelib/idle_test/test_autocomplete_w.py +++ b/Lib/idlelib/idle_test/test_autocomplete_w.py @@ -1,4 +1,4 @@ -"Test autocomplete_w, coverage %." +"Test autocomplete_w, coverage 11%." import unittest from test.support import requires From b011fd3c8b4cf6fead2518036ad726ba38b8224d Mon Sep 17 00:00:00 2001 From: Terry Jan Reedy Date: Wed, 13 Jun 2018 23:52:30 -0400 Subject: [PATCH 05/30] Edit test_calltips. --- Lib/idlelib/idle_test/test_calltips.py | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/Lib/idlelib/idle_test/test_calltips.py b/Lib/idlelib/idle_test/test_calltips.py index a58229d36ede70..34c06ef77e5a8d 100644 --- a/Lib/idlelib/idle_test/test_calltips.py +++ b/Lib/idlelib/idle_test/test_calltips.py @@ -1,3 +1,5 @@ +"Test calltips, coverage 60%" + import unittest import idlelib.calltips as ct import textwrap @@ -5,6 +7,7 @@ default_tip = ct._default_callable_argspec + # Test Class TC is used in multiple get_argspec test methods class TC(): 'doc' @@ -31,9 +34,11 @@ def cm(cls, a): 'doc' @staticmethod def sm(b): 'doc' -tc = TC() +tc = TC() signature = ct.get_argspec # 2.7 and 3.x use different functions + + class Get_signatureTest(unittest.TestCase): # The signature function must return a string, even if blank. # Test a variety of objects to be sure that none cause it to raise @@ -198,5 +203,6 @@ def test_bad_entity(self): def test_good_entity(self): self.assertIs(ct.get_entity('int'), int) + if __name__ == '__main__': - unittest.main(verbosity=2, exit=False) + unittest.main(verbosity=2) From 3f4e9cf5c5052582b0378d1cf94b14ed8a31407c Mon Sep 17 00:00:00 2001 From: Terry Jan Reedy Date: Thu, 14 Jun 2018 01:03:00 -0400 Subject: [PATCH 06/30] Add idle_test/template.py. --- Lib/idlelib/idle_test/template.py | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) create mode 100644 Lib/idlelib/idle_test/template.py diff --git a/Lib/idlelib/idle_test/template.py b/Lib/idlelib/idle_test/template.py new file mode 100644 index 00000000000000..2bf69e4e48ac14 --- /dev/null +++ b/Lib/idlelib/idle_test/template.py @@ -0,0 +1,23 @@ +"Test , coverage %." + +import unittest +from test.support import requires +from tkinter import Tk + +import + +class Test(unittest.TestCase): + + @classmethod + def setUpClass(cls): + requires('gui') + cls.root = Tk() + + @classmethod + def tearDownClass(cls): + cls.root.destroy() + del cls.root + + +if __name__ == '__main__': + unittest.main(verbosity=2) From 4572cded5c135356001fa4d0972a8086692cbd43 Mon Sep 17 00:00:00 2001 From: Terry Jan Reedy Date: Thu, 14 Jun 2018 01:22:59 -0400 Subject: [PATCH 07/30] Edit test_autoexpand. --- Lib/idlelib/idle_test/test_autoexpand.py | 28 +++++++++++++++++------- 1 file changed, 20 insertions(+), 8 deletions(-) diff --git a/Lib/idlelib/idle_test/test_autoexpand.py b/Lib/idlelib/idle_test/test_autoexpand.py index ae8186cdc49f7b..9791df5dc97e1d 100644 --- a/Lib/idlelib/idle_test/test_autoexpand.py +++ b/Lib/idlelib/idle_test/test_autoexpand.py @@ -1,8 +1,8 @@ -"""Unit tests for idlelib.autoexpand""" +"Test autoexpand, coverage 100%." + import unittest from test.support import requires from tkinter import Text, Tk -#from idlelib.idle_test.mock_tk import Text from idlelib.autoexpand import AutoExpand @@ -15,15 +15,27 @@ class AutoExpandTest(unittest.TestCase): @classmethod def setUpClass(cls): - if 'tkinter' in str(Text): - requires('gui') - cls.tk = Tk() - cls.text = Text(cls.tk) - else: - cls.text = Text() + requires('gui') + cls.tk = Tk() + cls.text = Text(cls.tk) cls.auto_expand = AutoExpand(Dummy_Editwin(cls.text)) cls.auto_expand.bell = lambda: None +# If mock_tk.Text._decode understood indexes 'insert' with suffixed 'linestart', +# 'wordstart', and 'lineend', used by autoexpand, we could use the following +# to run these test on non-gui machines (but check bell). +## try: +## requires('gui') +## #raise ResourceDenied() # Uncomment to test mock. +## except ResourceDenied: +## from idlelib.idle_test.mock_tk import Text +## cls.text = Text() +## cls.text.bell = lambda: None +## else: +## from tkinter import Tk, Text +## cls.tk = Tk() +## cls.text = Text(cls.tk) + @classmethod def tearDownClass(cls): del cls.text, cls.auto_expand From c19d810971b9880b14037b5569f85e7cd63e4c62 Mon Sep 17 00:00:00 2001 From: Terry Jan Reedy Date: Thu, 14 Jun 2018 11:36:33 -0400 Subject: [PATCH 08/30] Add blurb. --- Misc/NEWS.d/next/IDLE/2018-06-14-11-35-50.bpo-33855.XL230W.rst | 2 ++ 1 file changed, 2 insertions(+) create mode 100644 Misc/NEWS.d/next/IDLE/2018-06-14-11-35-50.bpo-33855.XL230W.rst diff --git a/Misc/NEWS.d/next/IDLE/2018-06-14-11-35-50.bpo-33855.XL230W.rst b/Misc/NEWS.d/next/IDLE/2018-06-14-11-35-50.bpo-33855.XL230W.rst new file mode 100644 index 00000000000000..aaf4f8fe2b0aed --- /dev/null +++ b/Misc/NEWS.d/next/IDLE/2018-06-14-11-35-50.bpo-33855.XL230W.rst @@ -0,0 +1,2 @@ +Minimally test all IDLE modules. Add missing files, import module, +instantiate classes, and check coverage. Check existing files. From dedc7264260864c0f5a14582333c6c0a38429e25 Mon Sep 17 00:00:00 2001 From: Terry Jan Reedy Date: Thu, 14 Jun 2018 11:37:07 -0400 Subject: [PATCH 09/30] Edit test_browser. --- Lib/idlelib/idle_test/test_browser.py | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/Lib/idlelib/idle_test/test_browser.py b/Lib/idlelib/idle_test/test_browser.py index 34eb332c1df434..27cb93afd87b53 100644 --- a/Lib/idlelib/idle_test/test_browser.py +++ b/Lib/idlelib/idle_test/test_browser.py @@ -1,8 +1,4 @@ -""" Test idlelib.browser. - -Coverage: 88% -(Higher, because should exclude 3 lines that .coveragerc won't exclude.) -""" +"Test browser, coverage 90%." from collections import deque import os.path From 8658eabea25ab9b4ad9abe6e727e1565c4504ccb Mon Sep 17 00:00:00 2001 From: Terry Jan Reedy Date: Thu, 14 Jun 2018 11:48:54 -0400 Subject: [PATCH 10/30] Edit template. --- Lib/idlelib/idle_test/template.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Lib/idlelib/idle_test/template.py b/Lib/idlelib/idle_test/template.py index 2bf69e4e48ac14..ba529a45946861 100644 --- a/Lib/idlelib/idle_test/template.py +++ b/Lib/idlelib/idle_test/template.py @@ -4,7 +4,7 @@ from test.support import requires from tkinter import Tk -import +import idlelib. class Test(unittest.TestCase): From 59b504b1907fd84643fd46bcbc6da3634ba10042 Mon Sep 17 00:00:00 2001 From: Terry Jan Reedy Date: Thu, 14 Jun 2018 11:55:47 -0400 Subject: [PATCH 11/30] Edit template. --- Lib/idlelib/idle_test/template.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/Lib/idlelib/idle_test/template.py b/Lib/idlelib/idle_test/template.py index ba529a45946861..e5f86b30836da5 100644 --- a/Lib/idlelib/idle_test/template.py +++ b/Lib/idlelib/idle_test/template.py @@ -18,6 +18,9 @@ def tearDownClass(cls): cls.root.destroy() del cls.root + def test_init(self): + self.assert + if __name__ == '__main__': unittest.main(verbosity=2) From 23375c7460b0a40323f6931e09ca19d10fed3d2f Mon Sep 17 00:00:00 2001 From: Terry Jan Reedy Date: Thu, 14 Jun 2018 12:00:14 -0400 Subject: [PATCH 12/30] Edit template. --- Lib/idlelib/idle_test/template.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Lib/idlelib/idle_test/template.py b/Lib/idlelib/idle_test/template.py index e5f86b30836da5..2e3730608f4fa3 100644 --- a/Lib/idlelib/idle_test/template.py +++ b/Lib/idlelib/idle_test/template.py @@ -4,7 +4,7 @@ from test.support import requires from tkinter import Tk -import idlelib. +from idlelib import class Test(unittest.TestCase): From 3d23f61e7cfc25e3e636570574c139732d87bb13 Mon Sep 17 00:00:00 2001 From: Terry Jan Reedy Date: Thu, 14 Jun 2018 12:02:42 -0400 Subject: [PATCH 13/30] Add test_calltip_w.py. --- Lib/idlelib/idle_test/test_calltip_w.py | 27 +++++++++++++++++++++++++ 1 file changed, 27 insertions(+) create mode 100644 Lib/idlelib/idle_test/test_calltip_w.py diff --git a/Lib/idlelib/idle_test/test_calltip_w.py b/Lib/idlelib/idle_test/test_calltip_w.py new file mode 100644 index 00000000000000..b80994f74a95dd --- /dev/null +++ b/Lib/idlelib/idle_test/test_calltip_w.py @@ -0,0 +1,27 @@ +"Test calltip_w, coverage 18%." + +import unittest +from test.support import requires +from tkinter import Tk, Text + +from idlelib import calltip_w + +class CallTipTest(unittest.TestCase): + + @classmethod + def setUpClass(cls): + requires('gui') + cls.root = Tk() + cls.text = Text(cls.root) + cls.calltip = calltip_w.CallTip(cls.text) + + @classmethod + def tearDownClass(cls): + cls.root.destroy() + del cls.text, cls.root + + def test_init(self): + self.assertEqual(self.calltip.widget, self.text) + +if __name__ == '__main__': + unittest.main(verbosity=2) From c0328ce961ff81ee31816c2ab0bd66f81eed93ae Mon Sep 17 00:00:00 2001 From: Terry Jan Reedy Date: Thu, 14 Jun 2018 12:32:05 -0400 Subject: [PATCH 14/30] Edit tests for codecontext, colorizer, config, and config_key. --- Lib/idlelib/idle_test/test_codecontext.py | 10 +++------- Lib/idlelib/idle_test/test_colorizer.py | 9 +++------ Lib/idlelib/idle_test/test_config.py | 9 ++++----- Lib/idlelib/idle_test/test_config_key.py | 4 +--- 4 files changed, 11 insertions(+), 21 deletions(-) diff --git a/Lib/idlelib/idle_test/test_codecontext.py b/Lib/idlelib/idle_test/test_codecontext.py index 2e59b8501c9116..c349456d741bdc 100644 --- a/Lib/idlelib/idle_test/test_codecontext.py +++ b/Lib/idlelib/idle_test/test_codecontext.py @@ -1,16 +1,12 @@ -"""Test idlelib.codecontext. - -Coverage: 100% -""" - -import re +"Test codecontext, coverage 100%" +from idlelib import codecontext import unittest from unittest import mock from test.support import requires from tkinter import Tk, Frame, Text, TclError -import idlelib.codecontext as codecontext +import re from idlelib import config diff --git a/Lib/idlelib/idle_test/test_colorizer.py b/Lib/idlelib/idle_test/test_colorizer.py index 238bc3e1141363..1e74bed1f0c0f0 100644 --- a/Lib/idlelib/idle_test/test_colorizer.py +++ b/Lib/idlelib/idle_test/test_colorizer.py @@ -1,10 +1,6 @@ -'''Test idlelib/colorizer.py +"Test colorizer, coverage 25%." -Perform minimal sanity checks that module imports and some things run. - -Coverage 22%. -''' -from idlelib import colorizer # always test import +from idlelib import colorizer from test.support import requires from tkinter import Tk, Text import unittest @@ -36,6 +32,7 @@ def tearDownClass(cls): def test_colorizer(self): colorizer.color_config(self.text) + class ColorDelegatorTest(unittest.TestCase): @classmethod diff --git a/Lib/idlelib/idle_test/test_config.py b/Lib/idlelib/idle_test/test_config.py index abfec7993e0744..e6f553d48471e5 100644 --- a/Lib/idlelib/idle_test/test_config.py +++ b/Lib/idlelib/idle_test/test_config.py @@ -1,9 +1,9 @@ -'''Test idlelib.config. - -Coverage: 96% (100% for IdleConfParser, IdleUserConfParser*, ConfigChanges). +"""Test config, coverage 93%. +(100% for IdleConfParser, IdleUserConfParser*, ConfigChanges). * Exception is OSError clause in Save method. Much of IdleConf is also exercised by ConfigDialog and test_configdialog. -''' +""" +from idlelib import config import copy import sys import os @@ -12,7 +12,6 @@ import unittest from unittest import mock import idlelib -from idlelib import config from idlelib.idle_test.mock_idle import Func # Tests should not depend on fortuitous user configurations. diff --git a/Lib/idlelib/idle_test/test_config_key.py b/Lib/idlelib/idle_test/test_config_key.py index 9074e23aab35d1..08471666a4529d 100644 --- a/Lib/idlelib/idle_test/test_config_key.py +++ b/Lib/idlelib/idle_test/test_config_key.py @@ -1,7 +1,5 @@ -''' Test idlelib.config_key. +"Test config_key, coverage 75%" -Coverage: 56% from creating and closing dialog. -''' from idlelib import config_key from test.support import requires import sys From d764c73e72c18529f09f87fcc5b672e5fdde88f6 Mon Sep 17 00:00:00 2001 From: Terry Jan Reedy Date: Thu, 14 Jun 2018 12:49:39 -0400 Subject: [PATCH 15/30] Edit test_calltips. --- Lib/idlelib/idle_test/test_calltips.py | 48 ++++++++++++++++---------- 1 file changed, 29 insertions(+), 19 deletions(-) diff --git a/Lib/idlelib/idle_test/test_calltips.py b/Lib/idlelib/idle_test/test_calltips.py index 34c06ef77e5a8d..2cf0e188dae63a 100644 --- a/Lib/idlelib/idle_test/test_calltips.py +++ b/Lib/idlelib/idle_test/test_calltips.py @@ -1,11 +1,11 @@ "Test calltips, coverage 60%" +from idlelib import calltips import unittest -import idlelib.calltips as ct import textwrap import types -default_tip = ct._default_callable_argspec +default_tip = calltips._default_callable_argspec # Test Class TC is used in multiple get_argspec test methods @@ -36,7 +36,7 @@ def sm(b): 'doc' tc = TC() -signature = ct.get_argspec # 2.7 and 3.x use different functions +signature = calltips.get_argspec # 2.7 and 3.x use different functions class Get_signatureTest(unittest.TestCase): @@ -59,14 +59,18 @@ def gtest(obj, out): self.assertEqual(signature(obj), out) if List.__doc__ is not None: - gtest(List, '(iterable=(), /)' + ct._argument_positional + '\n' + - List.__doc__) + gtest(List, '(iterable=(), /)' + calltips._argument_positional + + '\n' + List.__doc__) gtest(list.__new__, - '(*args, **kwargs)\nCreate and return a new object. See help(type) for accurate signature.') + '(*args, **kwargs)\n' + 'Create and return a new object. ' + 'See help(type) for accurate signature.') gtest(list.__init__, - '(self, /, *args, **kwargs)' + ct._argument_positional + '\n' + - 'Initialize self. See help(type(self)) for accurate signature.') - append_doc = ct._argument_positional + "\nAppend object to the end of the list." + '(self, /, *args, **kwargs)' + + calltips._argument_positional + '\n' + + 'Initialize self. See help(type(self)) for accurate signature.') + append_doc = (calltips._argument_positional + + "\nAppend object to the end of the list.") gtest(list.append, '(self, object, /)' + append_doc) gtest(List.append, '(self, object, /)' + append_doc) gtest([].append, '(object, /)' + append_doc) @@ -75,12 +79,17 @@ def gtest(obj, out): gtest(SB(), default_tip) import re p = re.compile('') - gtest(re.sub, '''(pattern, repl, string, count=0, flags=0)\nReturn the string obtained by replacing the leftmost + gtest(re.sub, '''\ +(pattern, repl, string, count=0, flags=0) +Return the string obtained by replacing the leftmost non-overlapping occurrences of the pattern in string by the replacement repl. repl can be either a string or a callable; if a string, backslash escapes in it are processed. If it is a callable, it's passed the Match object and must return''') - gtest(p.sub, '''(repl, string, count=0)\nReturn the string obtained by replacing the leftmost non-overlapping occurrences o...''') + gtest(p.sub, '''\ +(repl, string, count=0) +Return the string obtained by replacing the leftmost \ +non-overlapping occurrences o...''') def test_signature_wrap(self): if textwrap.TextWrapper.__doc__ is not None: @@ -93,7 +102,7 @@ def test_signature_wrap(self): def test_docline_truncation(self): def f(): pass f.__doc__ = 'a'*300 - self.assertEqual(signature(f), '()\n' + 'a' * (ct._MAX_COLS-3) + '...') + self.assertEqual(signature(f), '()\n' + 'a' * (calltips._MAX_COLS-3) + '...') def test_multiline_docstring(self): # Test fewer lines than max. @@ -112,7 +121,7 @@ def test_multiline_docstring(self): # Test more than max lines def f(): pass f.__doc__ = 'a\n' * 15 - self.assertEqual(signature(f), '()' + '\na' * ct._MAX_LINES) + self.assertEqual(signature(f), '()' + '\na' * calltips._MAX_LINES) def test_functions(self): def t1(): 'doc' @@ -140,8 +149,9 @@ def test_methods(self): def test_bound_methods(self): # test that first parameter is correctly removed from argspec doc = '\ndoc' if TC.__doc__ is not None else '' - for meth, mtip in ((tc.t1, "()"), (tc.t4, "(*args)"), (tc.t6, "(self)"), - (tc.__call__, '(ci)'), (tc, '(ci)'), (TC.cm, "(a)"),): + for meth, mtip in ((tc.t1, "()"), (tc.t4, "(*args)"), + (tc.t6, "(self)"), (tc.__call__, '(ci)'), + (tc, '(ci)'), (TC.cm, "(a)"),): self.assertEqual(signature(meth), mtip + doc) def test_starred_parameter(self): @@ -158,7 +168,7 @@ def m2(**kwargs): pass class Test: def __call__(*, a): pass - mtip = ct._invalid_method + mtip = calltips._invalid_method self.assertEqual(signature(C().m2), mtip) self.assertEqual(signature(Test()), mtip) @@ -166,7 +176,7 @@ def test_non_ascii_name(self): # test that re works to delete a first parameter name that # includes non-ascii chars, such as various forms of A. uni = "(A\u0391\u0410\u05d0\u0627\u0905\u1e00\u3042, a)" - assert ct._first_param.sub('', uni) == '(a)' + assert calltips._first_param.sub('', uni) == '(a)' def test_no_docstring(self): def nd(s): @@ -199,9 +209,9 @@ def test_non_callables(self): class Get_entityTest(unittest.TestCase): def test_bad_entity(self): - self.assertIsNone(ct.get_entity('1/0')) + self.assertIsNone(calltips.get_entity('1/0')) def test_good_entity(self): - self.assertIs(ct.get_entity('int'), int) + self.assertIs(calltips.get_entity('int'), int) if __name__ == '__main__': From 9248976cba97e1b8a8b71edc74a8a4bb06e3dda1 Mon Sep 17 00:00:00 2001 From: Terry Jan Reedy Date: Thu, 14 Jun 2018 12:53:21 -0400 Subject: [PATCH 16/30] Move tested module import first. --- Lib/idlelib/idle_test/template.py | 2 +- Lib/idlelib/idle_test/test_autoexpand.py | 2 +- Lib/idlelib/idle_test/test_browser.py | 12 ++++++------ Lib/idlelib/idle_test/test_calltip_w.py | 2 +- 4 files changed, 9 insertions(+), 9 deletions(-) diff --git a/Lib/idlelib/idle_test/template.py b/Lib/idlelib/idle_test/template.py index 2e3730608f4fa3..1a5acb7bea20af 100644 --- a/Lib/idlelib/idle_test/template.py +++ b/Lib/idlelib/idle_test/template.py @@ -1,10 +1,10 @@ "Test , coverage %." +from idlelib import import unittest from test.support import requires from tkinter import Tk -from idlelib import class Test(unittest.TestCase): diff --git a/Lib/idlelib/idle_test/test_autoexpand.py b/Lib/idlelib/idle_test/test_autoexpand.py index 9791df5dc97e1d..e5f44c46871325 100644 --- a/Lib/idlelib/idle_test/test_autoexpand.py +++ b/Lib/idlelib/idle_test/test_autoexpand.py @@ -1,9 +1,9 @@ "Test autoexpand, coverage 100%." +from idlelib.autoexpand import AutoExpand import unittest from test.support import requires from tkinter import Text, Tk -from idlelib.autoexpand import AutoExpand class Dummy_Editwin: diff --git a/Lib/idlelib/idle_test/test_browser.py b/Lib/idlelib/idle_test/test_browser.py index 27cb93afd87b53..905dc1f47e3438 100644 --- a/Lib/idlelib/idle_test/test_browser.py +++ b/Lib/idlelib/idle_test/test_browser.py @@ -1,16 +1,16 @@ "Test browser, coverage 90%." -from collections import deque -import os.path -import pyclbr -from tkinter import Tk - +from idlelib import browser from test.support import requires import unittest from unittest import mock from idlelib.idle_test.mock_idle import Func -from idlelib import browser +from collections import deque +import os.path +import pyclbr +from tkinter import Tk + from idlelib import filelist from idlelib.tree import TreeNode diff --git a/Lib/idlelib/idle_test/test_calltip_w.py b/Lib/idlelib/idle_test/test_calltip_w.py index b80994f74a95dd..8d81e7838307d8 100644 --- a/Lib/idlelib/idle_test/test_calltip_w.py +++ b/Lib/idlelib/idle_test/test_calltip_w.py @@ -1,10 +1,10 @@ "Test calltip_w, coverage 18%." +from idlelib import calltip_w import unittest from test.support import requires from tkinter import Tk, Text -from idlelib import calltip_w class CallTipTest(unittest.TestCase): From ce7c113a562d23feafd793e5cb00b863468c3259 Mon Sep 17 00:00:00 2001 From: Terry Jan Reedy Date: Thu, 14 Jun 2018 13:07:35 -0400 Subject: [PATCH 17/30] Edit template and test_autocomple_w. Prevent tcl event warning on shutdown --- Lib/idlelib/idle_test/test_autocomplete_w.py | 2 ++ Lib/idlelib/idle_test/test_calltip_w.py | 2 ++ 2 files changed, 4 insertions(+) diff --git a/Lib/idlelib/idle_test/test_autocomplete_w.py b/Lib/idlelib/idle_test/test_autocomplete_w.py index d360958d950cf9..b1bdc6c7c6e1a5 100644 --- a/Lib/idlelib/idle_test/test_autocomplete_w.py +++ b/Lib/idlelib/idle_test/test_autocomplete_w.py @@ -13,12 +13,14 @@ class AutoCompleteWindowTest(unittest.TestCase): def setUpClass(cls): requires('gui') cls.root = Tk() + cls.root.withdraw() cls.text = Text(cls.root) cls.acw = acw.AutoCompleteWindow(cls.text) @classmethod def tearDownClass(cls): del cls.text, cls.acw + cls.root.update_idletasks() cls.root.destroy() del cls.root diff --git a/Lib/idlelib/idle_test/test_calltip_w.py b/Lib/idlelib/idle_test/test_calltip_w.py index 8d81e7838307d8..03f1e9a68a2513 100644 --- a/Lib/idlelib/idle_test/test_calltip_w.py +++ b/Lib/idlelib/idle_test/test_calltip_w.py @@ -12,11 +12,13 @@ class CallTipTest(unittest.TestCase): def setUpClass(cls): requires('gui') cls.root = Tk() + cls.root.withdraw() cls.text = Text(cls.root) cls.calltip = calltip_w.CallTip(cls.text) @classmethod def tearDownClass(cls): + cls.root.update_idletasks() cls.root.destroy() del cls.text, cls.root From bc815989bd98875c19bd7acabae909c0feb17099 Mon Sep 17 00:00:00 2001 From: Terry Jan Reedy Date: Thu, 14 Jun 2018 17:50:07 -0400 Subject: [PATCH 18/30] templage whitespace --- Lib/idlelib/idle_test/template.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Lib/idlelib/idle_test/template.py b/Lib/idlelib/idle_test/template.py index 1a5acb7bea20af..42d0bb66b88acc 100644 --- a/Lib/idlelib/idle_test/template.py +++ b/Lib/idlelib/idle_test/template.py @@ -1,6 +1,6 @@ "Test , coverage %." -from idlelib import +from idlelib import import unittest from test.support import requires from tkinter import Tk From ad6232fc2fd4f6800d00a62ef793d8c318fabf35 Mon Sep 17 00:00:00 2001 From: Terry Jan Reedy Date: Thu, 14 Jun 2018 20:18:44 -0400 Subject: [PATCH 19/30] Edit test_configdialog and test_debugger. --- Lib/idlelib/idle_test/test_configdialog.py | 3 +-- Lib/idlelib/idle_test/test_debugger.py | 4 +--- 2 files changed, 2 insertions(+), 5 deletions(-) diff --git a/Lib/idlelib/idle_test/test_configdialog.py b/Lib/idlelib/idle_test/test_configdialog.py index 26aba32c47e6ab..fe712b18a5e088 100644 --- a/Lib/idlelib/idle_test/test_configdialog.py +++ b/Lib/idlelib/idle_test/test_configdialog.py @@ -1,7 +1,6 @@ -"""Test idlelib.configdialog. +"""Test configdialog, coverage 94%. Half the class creates dialog, half works with user customizations. -Coverage: 95%. """ from idlelib import configdialog from test.support import requires diff --git a/Lib/idlelib/idle_test/test_debugger.py b/Lib/idlelib/idle_test/test_debugger.py index bcba9a45c160a9..abe62fffb14618 100644 --- a/Lib/idlelib/idle_test/test_debugger.py +++ b/Lib/idlelib/idle_test/test_debugger.py @@ -1,7 +1,5 @@ -''' Test idlelib.debugger. +"Test debugger, coverage 19%" -Coverage: 19% -''' from idlelib import debugger from test.support import requires requires('gui') From e3b77a1a997b4fb4f026dcc9062c3b9f528ca868 Mon Sep 17 00:00:00 2001 From: Terry Jan Reedy Date: Thu, 14 Jun 2018 21:13:24 -0400 Subject: [PATCH 20/30] Edit autocomplete, autocomplete_w, calltip_w, colorizer. --- Lib/idlelib/autocomplete.py | 1 - Lib/idlelib/autocomplete_w.py | 7 +++++++ Lib/idlelib/calltip_w.py | 5 ++++- Lib/idlelib/colorizer.py | 5 ++--- 4 files changed, 13 insertions(+), 5 deletions(-) diff --git a/Lib/idlelib/autocomplete.py b/Lib/idlelib/autocomplete.py index edf445f08b5869..9caf50d5d0c21c 100644 --- a/Lib/idlelib/autocomplete.py +++ b/Lib/idlelib/autocomplete.py @@ -226,7 +226,6 @@ def get_entity(self, name): AutoComplete.reload() - if __name__ == '__main__': from unittest import main main('idlelib.idle_test.test_autocomplete', verbosity=2) diff --git a/Lib/idlelib/autocomplete_w.py b/Lib/idlelib/autocomplete_w.py index 12113f95e63aa6..66211d4554a246 100644 --- a/Lib/idlelib/autocomplete_w.py +++ b/Lib/idlelib/autocomplete_w.py @@ -458,3 +458,10 @@ def hide_window(self): self.listbox = None self.autocompletewindow.destroy() self.autocompletewindow = None + + +if __name__ == '__main__': + from unittest import main + main('idlelib.idle_test.test_autocomplete_w', verbosity=2, exit=False) + +# TODO: autocomplete/w htest here diff --git a/Lib/idlelib/calltip_w.py b/Lib/idlelib/calltip_w.py index bf967f40b6ab1c..122b73abef68f6 100644 --- a/Lib/idlelib/calltip_w.py +++ b/Lib/idlelib/calltip_w.py @@ -159,6 +159,9 @@ def calltip_hide(event): text.bind("<>", calltip_hide) text.focus_set() -if __name__=='__main__': +if __name__ == '__main__': + from unittest import main + main('idlelib.idle_test.test_calltips', verbosity=2, exit=False) + from idlelib.idle_test.htest import run run(_calltip_window) diff --git a/Lib/idlelib/colorizer.py b/Lib/idlelib/colorizer.py index 1f31ce22d7e510..d626d23121df74 100644 --- a/Lib/idlelib/colorizer.py +++ b/Lib/idlelib/colorizer.py @@ -286,9 +286,8 @@ def _color_delegator(parent): # htest # p.insertfilter(d) if __name__ == "__main__": - import unittest - unittest.main('idlelib.idle_test.test_colorizer', - verbosity=2, exit=False) + from unittest import main + main('idlelib.idle_test.test_colorizer', verbosity=2, exit=False) from idlelib.idle_test.htest import run run(_color_delegator) From 126d2d0d3552cd65c959e8330aa298b161d6bf0d Mon Sep 17 00:00:00 2001 From: Terry Jan Reedy Date: Thu, 14 Jun 2018 22:34:23 -0400 Subject: [PATCH 21/30] Add test_debugger_r, edit test_debugger, debugger, debugger_r. --- Lib/idlelib/debugger.py | 10 ++++++-- Lib/idlelib/debugger_r.py | 5 ++++ Lib/idlelib/idle_test/test_debugger.py | 4 +++- Lib/idlelib/idle_test/test_debugger_r.py | 29 ++++++++++++++++++++++++ 4 files changed, 45 insertions(+), 3 deletions(-) create mode 100644 Lib/idlelib/idle_test/test_debugger_r.py diff --git a/Lib/idlelib/debugger.py b/Lib/idlelib/debugger.py index 114d0d128e883e..477b514180c6ae 100644 --- a/Lib/idlelib/debugger.py +++ b/Lib/idlelib/debugger.py @@ -12,7 +12,7 @@ class Idb(bdb.Bdb): def __init__(self, gui): - self.gui = gui + self.gui = gui # An instance of Debugger or proxy of remote. bdb.Bdb.__init__(self) def user_line(self, frame): @@ -63,7 +63,7 @@ def __init__(self, pyshell, idb=None): if idb is None: idb = Idb(self) self.pyshell = pyshell - self.idb = idb + self.idb = idb # If passed, a proxy of remote instance. self.frame = None self.make_gui() self.interacting = 0 @@ -542,3 +542,9 @@ def load_dict(self, dict, force=0, rpc_client=None): def close(self): self.frame.destroy() + +if __name__ == "__main__": + from unittest import main + main('idlelib.idle_test.test_debugger', verbosity=2, exit=False) + +# TODO: htest? diff --git a/Lib/idlelib/debugger_r.py b/Lib/idlelib/debugger_r.py index bc971276de6727..01a3bd25998fc0 100644 --- a/Lib/idlelib/debugger_r.py +++ b/Lib/idlelib/debugger_r.py @@ -386,3 +386,8 @@ def restart_subprocess_debugger(rpcclt): idb_adap_oid_ret = rpcclt.remotecall("exec", "start_the_debugger",\ (gui_adap_oid,), {}) assert idb_adap_oid_ret == idb_adap_oid, 'Idb restarted with different oid' + + +if __name__ == "__main__": + from unittest import main + main('idlelib.idle_test.test_debugger', verbosity=2, exit=False) diff --git a/Lib/idlelib/idle_test/test_debugger.py b/Lib/idlelib/idle_test/test_debugger.py index abe62fffb14618..35efb3411c73b5 100644 --- a/Lib/idlelib/idle_test/test_debugger.py +++ b/Lib/idlelib/idle_test/test_debugger.py @@ -1,9 +1,9 @@ "Test debugger, coverage 19%" from idlelib import debugger +import unittest from test.support import requires requires('gui') -import unittest from tkinter import Tk @@ -23,5 +23,7 @@ def test_init(self): debugger.NamespaceViewer(self.root, 'Test') +# Other classes are Idb, Debugger, and StackViewer. + if __name__ == '__main__': unittest.main(verbosity=2) diff --git a/Lib/idlelib/idle_test/test_debugger_r.py b/Lib/idlelib/idle_test/test_debugger_r.py new file mode 100644 index 00000000000000..199f63447ce6ca --- /dev/null +++ b/Lib/idlelib/idle_test/test_debugger_r.py @@ -0,0 +1,29 @@ +"Test debugger_r, coverage 30%." + +from idlelib import debugger_r +import unittest +from test.support import requires +from tkinter import Tk + + +class Test(unittest.TestCase): + +## @classmethod +## def setUpClass(cls): +## requires('gui') +## cls.root = Tk() +## +## @classmethod +## def tearDownClass(cls): +## cls.root.destroy() +## del cls.root + + def test_init(self): + self.assertTrue(True) # Get coverage of import + + +# Classes GUIProxy, IdbAdapter, FrameProxy, CodeProxy, DictProxy, +# GUIAdapter, IdbProxy plus 7 module functions. + +if __name__ == '__main__': + unittest.main(verbosity=2) From 5a81d36d0b18f8477c21b3582a1ae7233c4d6e51 Mon Sep 17 00:00:00 2001 From: Terry Jan Reedy Date: Thu, 14 Jun 2018 23:58:17 -0400 Subject: [PATCH 22/30] Edit debugobj, debugobj_r, add test_debugobj, test_debugobj_r. --- Lib/idlelib/debugobj.py | 5 ++- Lib/idlelib/debugobj_r.py | 5 +++ Lib/idlelib/idle_test/test_debugobj.py | 57 ++++++++++++++++++++++++ Lib/idlelib/idle_test/test_debugobj_r.py | 22 +++++++++ 4 files changed, 88 insertions(+), 1 deletion(-) create mode 100644 Lib/idlelib/idle_test/test_debugobj.py create mode 100644 Lib/idlelib/idle_test/test_debugobj_r.py diff --git a/Lib/idlelib/debugobj.py b/Lib/idlelib/debugobj.py index b70b13cec481de..5a4c9978842035 100644 --- a/Lib/idlelib/debugobj.py +++ b/Lib/idlelib/debugobj.py @@ -71,7 +71,7 @@ def GetSubList(self): class AtomicObjectTreeItem(ObjectTreeItem): def IsExpandable(self): - return 0 + return False class SequenceTreeItem(ObjectTreeItem): def IsExpandable(self): @@ -135,5 +135,8 @@ def _object_browser(parent): # htest # node.update() if __name__ == '__main__': + from unittest import main + main('idlelib.idle_test.test_debugobj', verbosity=2, exit=False) + from idlelib.idle_test.htest import run run(_object_browser) diff --git a/Lib/idlelib/debugobj_r.py b/Lib/idlelib/debugobj_r.py index 8031aaeaf1f25a..75e75ebe5acafc 100644 --- a/Lib/idlelib/debugobj_r.py +++ b/Lib/idlelib/debugobj_r.py @@ -34,3 +34,8 @@ def __getattr__(self, name): def _GetSubList(self): sub_list = self.sockio.remotecall(self.oid, "_GetSubList", (), {}) return [StubObjectTreeItem(self.sockio, oid) for oid in sub_list] + + +if __name__ == '__main__': + from unittest import main + main('idlelib.idle_test.test_debugobj_r', verbosity=2) diff --git a/Lib/idlelib/idle_test/test_debugobj.py b/Lib/idlelib/idle_test/test_debugobj.py new file mode 100644 index 00000000000000..9e05ee28cac0a1 --- /dev/null +++ b/Lib/idlelib/idle_test/test_debugobj.py @@ -0,0 +1,57 @@ +"Test debugobj, coverage 40%." + +from idlelib import debugobj +import unittest + + +class ObjectTreeItemTest(unittest.TestCase): + + def test_init(self): + ti = debugobj.ObjectTreeItem('label', 22) + self.assertEqual(ti.labeltext, 'label') + self.assertEqual(ti.object, 22) + self.assertEqual(ti.setfunction, None) + + +class ClassTreeItemTest(unittest.TestCase): + + def test_isexpandable(self): + ti = debugobj.ClassTreeItem('label', 0) + self.assertTrue(ti.IsExpandable()) + + +class AtomicObjectTreeItemTest(unittest.TestCase): + + def test_isexpandable(self): + ti = debugobj.AtomicObjectTreeItem('label', 0) + self.assertFalse(ti.IsExpandable()) + + +class SequenceTreeItemTest(unittest.TestCase): + + def test_isexpandable(self): + ti = debugobj.SequenceTreeItem('label', ()) + self.assertFalse(ti.IsExpandable()) + ti = debugobj.SequenceTreeItem('label', (1,)) + self.assertTrue(ti.IsExpandable()) + + def test_keys(self): + ti = debugobj.SequenceTreeItem('label', 'abc') + self.assertEqual(list(ti.keys()), [0, 1, 2]) + + +class DictTreeItemTest(unittest.TestCase): + + def test_isexpandable(self): + ti = debugobj.DictTreeItem('label', {}) + self.assertFalse(ti.IsExpandable()) + ti = debugobj.DictTreeItem('label', {1:1}) + self.assertTrue(ti.IsExpandable()) + + def test_keys(self): + ti = debugobj.DictTreeItem('label', {1:1, 0:0, 2:2}) + self.assertEqual(ti.keys(), [0, 1, 2]) + + +if __name__ == '__main__': + unittest.main(verbosity=2) diff --git a/Lib/idlelib/idle_test/test_debugobj_r.py b/Lib/idlelib/idle_test/test_debugobj_r.py new file mode 100644 index 00000000000000..86e51b6cb2cb22 --- /dev/null +++ b/Lib/idlelib/idle_test/test_debugobj_r.py @@ -0,0 +1,22 @@ +"Test debugobj_r, coverage 56%." + +from idlelib import debugobj_r +import unittest + + +class WrappedObjectTreeItemTest(unittest.TestCase): + + def test_getattr(self): + ti = debugobj_r.WrappedObjectTreeItem(list) + self.assertEqual(ti.append, list.append) + +class StubObjectTreeItemTest(unittest.TestCase): + + def test_init(self): + ti = debugobj_r.StubObjectTreeItem('socket', 1111) + self.assertEqual(ti.sockio, 'socket') + self.assertEqual(ti.oid, 1111) + + +if __name__ == '__main__': + unittest.main(verbosity=2) From 7828bfc47de0aacb09fe669ba404c67cd3d97790 Mon Sep 17 00:00:00 2001 From: Terry Jan Reedy Date: Fri, 15 Jun 2018 00:15:30 -0400 Subject: [PATCH 23/30] Augment template.py. --- Lib/idlelib/idle_test/template.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/Lib/idlelib/idle_test/template.py b/Lib/idlelib/idle_test/template.py index 42d0bb66b88acc..83477a7b82ef3a 100644 --- a/Lib/idlelib/idle_test/template.py +++ b/Lib/idlelib/idle_test/template.py @@ -12,9 +12,11 @@ class Test(unittest.TestCase): 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 From 41b4d43f192dd00f04525b371afc6e22b8a66f2f Mon Sep 17 00:00:00 2001 From: Terry Jan Reedy Date: Fri, 15 Jun 2018 00:16:13 -0400 Subject: [PATCH 24/30] Edit test_delegator. --- Lib/idlelib/idle_test/test_delegator.py | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/Lib/idlelib/idle_test/test_delegator.py b/Lib/idlelib/idle_test/test_delegator.py index 85624fbc127c85..922416297a42e0 100644 --- a/Lib/idlelib/idle_test/test_delegator.py +++ b/Lib/idlelib/idle_test/test_delegator.py @@ -1,5 +1,8 @@ -import unittest +"Test delegator, coverage 100%." + from idlelib.delegator import Delegator +import unittest + class DelegatorTest(unittest.TestCase): @@ -36,5 +39,6 @@ def test_mydel(self): self.assertEqual(mydel._Delegator__cache, set()) self.assertIs(mydel.delegate, float) + if __name__ == '__main__': unittest.main(verbosity=2, exit=2) From 725645644abc6d7d39db8727270e18e66626a949 Mon Sep 17 00:00:00 2001 From: Terry Jan Reedy Date: Fri, 15 Jun 2018 01:42:33 -0400 Subject: [PATCH 25/30] Edit editor and test_editor. --- Lib/idlelib/editor.py | 4 +-- Lib/idlelib/idle_test/test_editor.py | 40 +++++++++++++++++++++++++--- 2 files changed, 38 insertions(+), 6 deletions(-) diff --git a/Lib/idlelib/editor.py b/Lib/idlelib/editor.py index 7c3f215e9f96a8..0095bd03bb7bfb 100644 --- a/Lib/idlelib/editor.py +++ b/Lib/idlelib/editor.py @@ -1706,8 +1706,8 @@ def _editor_window(parent): # htest # # edit.text.bind("<>", edit.close_event) if __name__ == '__main__': - import unittest - unittest.main('idlelib.idle_test.test_editor', verbosity=2, exit=False) + from unittest import main + main('idlelib.idle_test.test_editor', verbosity=2, exit=False) from idlelib.idle_test.htest import run run(_editor_window) diff --git a/Lib/idlelib/idle_test/test_editor.py b/Lib/idlelib/idle_test/test_editor.py index 64a2a88b7e3765..12bc8473668334 100644 --- a/Lib/idlelib/idle_test/test_editor.py +++ b/Lib/idlelib/idle_test/test_editor.py @@ -1,14 +1,46 @@ +"Test editor, coverage 35%." + +from idlelib import editor import unittest -from idlelib.editor import EditorWindow +from test.support import requires +from tkinter import Tk + +Editor = editor.EditorWindow + + +class EditorWindowTest(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) + cls.root.destroy() + del cls.root + + def test_init(self): + e = Editor(root=self.root) + self.assertEqual(e.root, self.root) + e._close() + + +class EditorFunctionTest(unittest.TestCase): -class Editor_func_test(unittest.TestCase): def test_filename_to_unicode(self): - func = EditorWindow._filename_to_unicode - class dummy(): filesystemencoding = 'utf-8' + func = Editor._filename_to_unicode + class dummy(): + filesystemencoding = 'utf-8' pairs = (('abc', 'abc'), ('a\U00011111c', 'a\ufffdc'), (b'abc', 'abc'), (b'a\xf0\x91\x84\x91c', 'a\ufffdc')) for inp, out in pairs: self.assertEqual(func(dummy, inp), out) + if __name__ == '__main__': unittest.main(verbosity=2) From 2eabc757ef1fc232877144ac4a59f17ae57f2316 Mon Sep 17 00:00:00 2001 From: Terry Jan Reedy Date: Fri, 15 Jun 2018 02:12:37 -0400 Subject: [PATCH 26/30] To template, add cleanup needed for EditorWindow. --- Lib/idlelib/idle_test/template.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/Lib/idlelib/idle_test/template.py b/Lib/idlelib/idle_test/template.py index 83477a7b82ef3a..34ceac3f405e18 100644 --- a/Lib/idlelib/idle_test/template.py +++ b/Lib/idlelib/idle_test/template.py @@ -17,6 +17,8 @@ def setUpClass(cls): @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 From 2cebaa1429aab27861af9545c0fac1d1d515989b Mon Sep 17 00:00:00 2001 From: Terry Jan Reedy Date: Fri, 15 Jun 2018 02:13:29 -0400 Subject: [PATCH 27/30] Edit filelist and add test_filelist. --- Lib/idlelib/filelist.py | 20 ++++++++-------- Lib/idlelib/idle_test/test_filelist.py | 33 ++++++++++++++++++++++++++ 2 files changed, 43 insertions(+), 10 deletions(-) create mode 100644 Lib/idlelib/idle_test/test_filelist.py diff --git a/Lib/idlelib/filelist.py b/Lib/idlelib/filelist.py index 5e1a3dcd77dc67..52628392e6170c 100644 --- a/Lib/idlelib/filelist.py +++ b/Lib/idlelib/filelist.py @@ -1,7 +1,7 @@ -import os +"idlelib.filelist" -from tkinter import * -import tkinter.messagebox as tkMessageBox +import os +from tkinter import messagebox as tkMessageBox class FileList: @@ -111,7 +111,8 @@ def canonize(self, filename): return os.path.normpath(filename) -def _test(): +def _test(): # TODO check and convert to htest + from tkinter import Tk from idlelib.editor import fixwordbreaks from idlelib.run import fix_scaling import sys @@ -120,13 +121,12 @@ def _test(): fixwordbreaks(root) root.withdraw() flist = FileList(root) - if sys.argv[1:]: - for filename in sys.argv[1:]: - flist.open(filename) - else: - flist.new() + flist.new() if flist.inversedict: root.mainloop() if __name__ == '__main__': - _test() + from unittest import main + main('idlelib.idle_test.test_filelist', verbosity=2) + +# _test() diff --git a/Lib/idlelib/idle_test/test_filelist.py b/Lib/idlelib/idle_test/test_filelist.py new file mode 100644 index 00000000000000..daab8057ca6d70 --- /dev/null +++ b/Lib/idlelib/idle_test/test_filelist.py @@ -0,0 +1,33 @@ +"Test filelist, coverage %." + +from idlelib import filelist +import unittest +from test.support import requires +from tkinter import Tk + +class FileListTest(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) + cls.root.destroy() + del cls.root + + def test_new_empty(self): + flist = filelist.FileList(self.root) + self.assertEqual(flist.root, self.root) + e = flist.new() + self.assertEqual(type(e), flist.EditorWindow) + e._close() + + +if __name__ == '__main__': + unittest.main(verbosity=2) From 2a86ca0ace23a2480d53830ce6b80135fe0c8cc1 Mon Sep 17 00:00:00 2001 From: Terry Jan Reedy Date: Fri, 15 Jun 2018 02:21:25 -0400 Subject: [PATCH 28/30] Edit grep and test_grep. --- Lib/idlelib/grep.py | 4 ++-- Lib/idlelib/idle_test/test_filelist.py | 2 +- Lib/idlelib/idle_test/test_grep.py | 12 +++++++++--- 3 files changed, 12 insertions(+), 6 deletions(-) diff --git a/Lib/idlelib/grep.py b/Lib/idlelib/grep.py index c55c48cf2d69bc..8cc293c380dec6 100644 --- a/Lib/idlelib/grep.py +++ b/Lib/idlelib/grep.py @@ -193,8 +193,8 @@ def show_grep_dialog(): button.pack() if __name__ == "__main__": - import unittest - unittest.main('idlelib.idle_test.test_grep', verbosity=2, exit=False) + from unittest import main + main('idlelib.idle_test.test_grep', verbosity=2, exit=False) from idlelib.idle_test.htest import run run(_grep_dialog) diff --git a/Lib/idlelib/idle_test/test_filelist.py b/Lib/idlelib/idle_test/test_filelist.py index daab8057ca6d70..731f1975e50e23 100644 --- a/Lib/idlelib/idle_test/test_filelist.py +++ b/Lib/idlelib/idle_test/test_filelist.py @@ -1,4 +1,4 @@ -"Test filelist, coverage %." +"Test filelist, coverage 19%." from idlelib import filelist import unittest diff --git a/Lib/idlelib/idle_test/test_grep.py b/Lib/idlelib/idle_test/test_grep.py index 6b54c1313153d1..ab0d7860f78953 100644 --- a/Lib/idlelib/idle_test/test_grep.py +++ b/Lib/idlelib/idle_test/test_grep.py @@ -3,14 +3,15 @@ dummy_command calls grep_it calls findfiles. An exception raised in one method will fail callers. Otherwise, tests are mostly independent. -*** Currently only test grep_it. +Currently only test grep_it, coverage 51%. """ +from idlelib.grep import GrepDialog import unittest from test.support import captured_stdout from idlelib.idle_test.mock_tk import Var -from idlelib.grep import GrepDialog import re + class Dummy_searchengine: '''GrepDialog.__init__ calls parent SearchDiabolBase which attaches the passed in SearchEngine instance as attribute 'engine'. Only a few of the @@ -21,6 +22,7 @@ def getpat(self): searchengine = Dummy_searchengine() + class Dummy_grep: # Methods tested #default_command = GrepDialog.default_command @@ -34,6 +36,7 @@ def close(self): # gui method grep = Dummy_grep() + class FindfilesTest(unittest.TestCase): # findfiles is really a function, not a method, could be iterator # test that filename return filename @@ -41,6 +44,7 @@ class FindfilesTest(unittest.TestCase): # test that recursive flag adds idle_test .py files pass + class Grep_itTest(unittest.TestCase): # Test captured reports with 0 and some hits. # Should test file names, but Windows reports have mixed / and \ separators @@ -71,10 +75,12 @@ def test_found(self): self.assertIn('2', lines[3]) # hits found 2 self.assertTrue(lines[4].startswith('(Hint:')) + class Default_commandTest(unittest.TestCase): # To write this, move outwin import to top of GrepDialog # so it can be replaced by captured_stdout in class setup/teardown. pass + if __name__ == '__main__': - unittest.main(verbosity=2, exit=False) + unittest.main(verbosity=2) From 7d26bf7a144081587d61563e47439d32273eab89 Mon Sep 17 00:00:00 2001 From: Terry Jan Reedy Date: Fri, 15 Jun 2018 02:26:03 -0400 Subject: [PATCH 29/30] Edit help and test_help. --- Lib/idlelib/help.py | 3 +++ Lib/idlelib/idle_test/test_help.py | 8 ++++---- 2 files changed, 7 insertions(+), 4 deletions(-) diff --git a/Lib/idlelib/help.py b/Lib/idlelib/help.py index fa6112a339444f..21b5ea5a816e3f 100644 --- a/Lib/idlelib/help.py +++ b/Lib/idlelib/help.py @@ -271,5 +271,8 @@ def show_idlehelp(parent): HelpWindow(parent, filename, 'IDLE Help (%s)' % python_version()) if __name__ == '__main__': + from unittest import main + main('idlelib.idle_test.test_help', verbosity=2, exit=False) + from idlelib.idle_test.htest import run run(show_idlehelp) diff --git a/Lib/idlelib/idle_test/test_help.py b/Lib/idlelib/idle_test/test_help.py index 2c68e23b328c24..b542659981894d 100644 --- a/Lib/idlelib/idle_test/test_help.py +++ b/Lib/idlelib/idle_test/test_help.py @@ -1,13 +1,12 @@ -'''Test idlelib.help. +"Test help, coverage 87%." -Coverage: 87% -''' from idlelib import help +import unittest from test.support import requires requires('gui') from os.path import abspath, dirname, join from tkinter import Tk -import unittest + class HelpFrameTest(unittest.TestCase): @@ -30,5 +29,6 @@ def test_line1(self): text = self.frame.text self.assertEqual(text.get('1.0', '1.end'), ' IDLE ') + if __name__ == '__main__': unittest.main(verbosity=2) From cce485cd3ce66e486bc8a1ad36a1293e8ef253b0 Mon Sep 17 00:00:00 2001 From: Terry Jan Reedy Date: Fri, 15 Jun 2018 02:36:31 -0400 Subject: [PATCH 30/30] whitespace --- Lib/idlelib/idle_test/test_debugobj.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Lib/idlelib/idle_test/test_debugobj.py b/Lib/idlelib/idle_test/test_debugobj.py index 9e05ee28cac0a1..131ce22b8bb69b 100644 --- a/Lib/idlelib/idle_test/test_debugobj.py +++ b/Lib/idlelib/idle_test/test_debugobj.py @@ -5,7 +5,7 @@ class ObjectTreeItemTest(unittest.TestCase): - + def test_init(self): ti = debugobj.ObjectTreeItem('label', 22) self.assertEqual(ti.labeltext, 'label')