Skip to content

Commit 4d92158

Browse files
authored
bpo-33855: Still more edits and minimal tests for IDLE (GH-7784)
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).
1 parent 00f9edb commit 4d92158

36 files changed

+356
-95
lines changed

Lib/idlelib/autoexpand.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -92,5 +92,5 @@ def getprevword(self):
9292

9393

9494
if __name__ == '__main__':
95-
import unittest
96-
unittest.main('idlelib.idle_test.test_autoexpand', verbosity=2)
95+
from unittest import main
96+
main('idlelib.idle_test.test_autoexpand', verbosity=2)

Lib/idlelib/codecontext.py

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -233,6 +233,8 @@ def config_timer_event(self):
233233
CodeContext.reload()
234234

235235

236-
if __name__ == "__main__": # pragma: no cover
237-
import unittest
238-
unittest.main('idlelib.idle_test.test_codecontext', verbosity=2, exit=False)
236+
if __name__ == "__main__":
237+
from unittest import main
238+
main('idlelib.idle_test.test_codecontext', verbosity=2, exit=False)
239+
240+
# Add htest.

Lib/idlelib/config.py

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -925,7 +925,7 @@ def dumpCfg(cfg):
925925
print('\nlines = ', line, ', crc = ', crc, sep='')
926926

927927
if __name__ == '__main__':
928-
import unittest
929-
unittest.main('idlelib.idle_test.test_config',
930-
verbosity=2, exit=False)
931-
#_dump()
928+
from unittest import main
929+
main('idlelib.idle_test.test_config', verbosity=2, exit=False)
930+
931+
# Run revised _dump() as htest?

Lib/idlelib/config_key.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -291,8 +291,8 @@ def bind_ok(self, keys):
291291

292292

293293
if __name__ == '__main__':
294-
import unittest
295-
unittest.main('idlelib.idle_test.test_config_key', verbosity=2, exit=False)
294+
from unittest import main
295+
main('idlelib.idle_test.test_config_key', verbosity=2, exit=False)
296296

297297
from idlelib.idle_test.htest import run
298298
run(GetKeysDialog)

Lib/idlelib/configdialog.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2269,8 +2269,8 @@ def _configure_canvas(event):
22692269

22702270

22712271
if __name__ == '__main__':
2272-
import unittest
2273-
unittest.main('idlelib.idle_test.test_configdialog',
2274-
verbosity=2, exit=False)
2272+
from unittest import main
2273+
main('idlelib.idle_test.test_configdialog', verbosity=2, exit=False)
2274+
22752275
from idlelib.idle_test.htest import run
22762276
run(ConfigDialog)

Lib/idlelib/idle_test/test_codecontext.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,10 +2,10 @@
22

33
from idlelib import codecontext
44
import unittest
5-
from unittest import mock
65
from test.support import requires
76
from tkinter import Tk, Frame, Text, TclError
87

8+
from unittest import mock
99
import re
1010
from idlelib import config
1111

Lib/idlelib/idle_test/test_rpc.py

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
"Test rpc, coverage 20%."
2+
3+
from idlelib import rpc
4+
import unittest
5+
6+
import marshal
7+
8+
9+
class CodePicklerTest(unittest.TestCase):
10+
11+
def test_pickle_unpickle(self):
12+
def f(): return a + b + c
13+
func, (cbytes,) = rpc.pickle_code(f.__code__)
14+
self.assertIs(func, rpc.unpickle_code)
15+
self.assertIn(b'test_rpc.py', cbytes)
16+
code = rpc.unpickle_code(cbytes)
17+
self.assertEqual(code.co_names, ('a', 'b', 'c'))
18+
19+
def test_code_pickler(self):
20+
self.assertIn(type((lambda:None).__code__),
21+
rpc.CodePickler.dispatch_table)
22+
23+
def test_dumps(self):
24+
def f(): pass
25+
# The main test here is that pickling code does not raise.
26+
self.assertIn(b'test_rpc.py', rpc.dumps(f.__code__))
27+
28+
29+
if __name__ == '__main__':
30+
unittest.main(verbosity=2)

Lib/idlelib/idle_test/test_rstrip.py

Lines changed: 12 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,15 @@
1+
"Test rstrip, coverage 100%."
2+
3+
from idlelib import rstrip
14
import unittest
2-
import idlelib.rstrip as rs
35
from idlelib.idle_test.mock_idle import Editor
46

57
class rstripTest(unittest.TestCase):
68

79
def test_rstrip_line(self):
810
editor = Editor()
911
text = editor.text
10-
do_rstrip = rs.RstripExtension(editor).do_rstrip
12+
do_rstrip = rstrip.RstripExtension(editor).do_rstrip
1113

1214
do_rstrip()
1315
self.assertEqual(text.get('1.0', 'insert'), '')
@@ -20,12 +22,12 @@ def test_rstrip_line(self):
2022

2123
def test_rstrip_multiple(self):
2224
editor = Editor()
23-
# Uncomment following to verify that test passes with real widgets.
24-
## from idlelib.editor import EditorWindow as Editor
25-
## from tkinter import Tk
26-
## editor = Editor(root=Tk())
25+
# Comment above, uncomment 3 below to test with real Editor & Text.
26+
#from idlelib.editor import EditorWindow as Editor
27+
#from tkinter import Tk
28+
#editor = Editor(root=Tk())
2729
text = editor.text
28-
do_rstrip = rs.RstripExtension(editor).do_rstrip
30+
do_rstrip = rstrip.RstripExtension(editor).do_rstrip
2931

3032
original = (
3133
"Line with an ending tab \n"
@@ -45,5 +47,7 @@ def test_rstrip_multiple(self):
4547
do_rstrip()
4648
self.assertEqual(text.get('1.0', 'insert'), stripped)
4749

50+
51+
4852
if __name__ == '__main__':
49-
unittest.main(verbosity=2, exit=False)
53+
unittest.main(verbosity=2)
Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
"Test runscript, coverage 16%."
2+
3+
from idlelib import runscript
4+
import unittest
5+
from test.support import requires
6+
from tkinter import Tk
7+
from idlelib.editor import EditorWindow
8+
9+
10+
class ScriptBindingTest(unittest.TestCase):
11+
12+
@classmethod
13+
def setUpClass(cls):
14+
requires('gui')
15+
cls.root = Tk()
16+
cls.root.withdraw()
17+
18+
@classmethod
19+
def tearDownClass(cls):
20+
cls.root.update_idletasks()
21+
for id in cls.root.tk.call('after', 'info'):
22+
cls.root.after_cancel(id) # Need for EditorWindow.
23+
cls.root.destroy()
24+
del cls.root
25+
26+
def test_init(self):
27+
ew = EditorWindow(root=self.root)
28+
sb = runscript.ScriptBinding(ew)
29+
ew._close()
30+
31+
32+
if __name__ == '__main__':
33+
unittest.main(verbosity=2)

Lib/idlelib/idle_test/test_scrolledlist.py

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,9 @@
1-
''' Test idlelib.scrolledlist.
1+
"Test scrolledlist, coverage 38%."
22

3-
Coverage: 39%
4-
'''
5-
from idlelib import scrolledlist
3+
from idlelib.scrolledlist import ScrolledList
4+
import unittest
65
from test.support import requires
76
requires('gui')
8-
import unittest
97
from tkinter import Tk
108

119

@@ -22,7 +20,7 @@ def tearDownClass(cls):
2220

2321

2422
def test_init(self):
25-
scrolledlist.ScrolledList(self.root)
23+
ScrolledList(self.root)
2624

2725

2826
if __name__ == '__main__':

0 commit comments

Comments
 (0)