[3.6] bpo-30495: IDLE: improve textview with docstrings, PEP8 names, … · python/cpython@6f31717 (original) (raw)
1
1
`'''Test idlelib.textview.
`
2
2
``
3
``
`-
Since all methods and functions create (or destroy) a TextViewer, which
`
4
``
`-
is a widget containing multiple widgets, all tests must be gui tests.
`
``
3
`+
Since all methods and functions create (or destroy) a ViewWindow, which
`
``
4
`+
is a widget containing a widget, etcetera, all tests must be gui tests.
`
5
5
`Using mock Text would not change this. Other mocks are used to retrieve
`
6
6
`information about calls.
`
7
7
``
`@@ -13,7 +13,8 @@
`
13
13
``
14
14
`import unittest
`
15
15
`import os
`
16
``
`-
from tkinter import Tk, Button
`
``
16
`+
from tkinter import Tk
`
``
17
`+
from tkinter.ttk import Button
`
17
18
`from idlelib.idle_test.mock_idle import Func
`
18
19
`from idlelib.idle_test.mock_tk import Mbox_func
`
19
20
``
`@@ -25,52 +26,73 @@ def setUpModule():
`
25
26
`def tearDownModule():
`
26
27
`global root
`
27
28
`root.update_idletasks()
`
28
``
`-
root.destroy() # Pyflakes falsely sees root as undefined.
`
``
29
`+
root.destroy()
`
29
30
`del root
`
30
31
``
31
``
`-
If we call TextViewer or wrapper functions with defaults
`
``
32
`+
If we call ViewWindow or wrapper functions with defaults
`
32
33
`# modal=True, _utest=False, test hangs on call to wait_window.
`
33
34
`# Have also gotten tk error 'can't invoke "event" command'.
`
34
35
``
35
36
``
36
``
`-
class TV(tv.TextViewer): # Used in TextViewTest.
`
``
37
`+
class VW(tv.ViewWindow): # Used in ViewWindowTest.
`
37
38
`transient = Func()
`
38
39
`grab_set = Func()
`
39
40
`wait_window = Func()
`
40
41
``
41
42
``
42
``
`-
Call wrapper class with mock wait_window.
`
43
``
`-
class TextViewTest(unittest.TestCase):
`
``
43
`+
Call wrapper class VW with mock wait_window.
`
``
44
`+
class ViewWindowTest(unittest.TestCase):
`
44
45
``
45
46
`def setUp(self):
`
46
``
`-
TV.transient.init()
`
47
``
`-
TV.grab_set.init()
`
48
``
`-
TV.wait_window.init()
`
``
47
`+
VW.transient.init()
`
``
48
`+
VW.grab_set.init()
`
``
49
`+
VW.wait_window.init()
`
49
50
``
50
51
`def test_init_modal(self):
`
51
``
`-
view = TV(root, 'Title', 'test text')
`
52
``
`-
self.assertTrue(TV.transient.called)
`
53
``
`-
self.assertTrue(TV.grab_set.called)
`
54
``
`-
self.assertTrue(TV.wait_window.called)
`
``
52
`+
view = VW(root, 'Title', 'test text')
`
``
53
`+
self.assertTrue(VW.transient.called)
`
``
54
`+
self.assertTrue(VW.grab_set.called)
`
``
55
`+
self.assertTrue(VW.wait_window.called)
`
55
56
`view.ok()
`
56
57
``
57
58
`def test_init_nonmodal(self):
`
58
``
`-
view = TV(root, 'Title', 'test text', modal=False)
`
59
``
`-
self.assertFalse(TV.transient.called)
`
60
``
`-
self.assertFalse(TV.grab_set.called)
`
61
``
`-
self.assertFalse(TV.wait_window.called)
`
``
59
`+
view = VW(root, 'Title', 'test text', modal=False)
`
``
60
`+
self.assertFalse(VW.transient.called)
`
``
61
`+
self.assertFalse(VW.grab_set.called)
`
``
62
`+
self.assertFalse(VW.wait_window.called)
`
62
63
`view.ok()
`
63
64
``
64
65
`def test_ok(self):
`
65
``
`-
view = TV(root, 'Title', 'test text', modal=False)
`
``
66
`+
view = VW(root, 'Title', 'test text', modal=False)
`
66
67
`view.destroy = Func()
`
67
68
`view.ok()
`
68
69
`self.assertTrue(view.destroy.called)
`
69
70
`del view.destroy # Unmask real function.
`
70
71
`view.destroy()
`
71
72
``
72
73
``
73
``
`-
Call TextViewer with modal=False.
`
``
74
`+
class TextFrameTest(unittest.TestCase):
`
``
75
+
``
76
`+
@classmethod
`
``
77
`+
def setUpClass(cls):
`
``
78
`+
"By itself, this tests that file parsed without exception."
`
``
79
`+
cls.root = root = Tk()
`
``
80
`+
root.withdraw()
`
``
81
`+
cls.frame = tv.TextFrame(root, 'test text')
`
``
82
+
``
83
`+
@classmethod
`
``
84
`+
def tearDownClass(cls):
`
``
85
`+
del cls.frame
`
``
86
`+
cls.root.update_idletasks()
`
``
87
`+
cls.root.destroy()
`
``
88
`+
del cls.root
`
``
89
+
``
90
`+
def test_line1(self):
`
``
91
`+
get = self.frame.text.get
`
``
92
`+
self.assertEqual(get('1.0', '1.end'), 'test text')
`
``
93
+
``
94
+
``
95
`+
Call ViewWindow with modal=False.
`
74
96
`class ViewFunctionTest(unittest.TestCase):
`
75
97
``
76
98
`@classmethod
`
`@@ -85,13 +107,16 @@ def tearDownClass(cls):
`
85
107
``
86
108
`def test_view_text(self):
`
87
109
`view = tv.view_text(root, 'Title', 'test text', modal=False)
`
88
``
`-
self.assertIsInstance(view, tv.TextViewer)
`
``
110
`+
self.assertIsInstance(view, tv.ViewWindow)
`
``
111
`+
self.assertIsInstance(view.viewframe, tv.ViewFrame)
`
89
112
`view.ok()
`
90
113
``
91
114
`def test_view_file(self):
`
92
115
`view = tv.view_file(root, 'Title', file, modal=False)
`
93
``
`-
self.assertIsInstance(view, tv.TextViewer)
`
94
``
`-
self.assertIn('Test', view.text.get('1.0', '1.end'))
`
``
116
`+
self.assertIsInstance(view, tv.ViewWindow)
`
``
117
`+
self.assertIsInstance(view.viewframe, tv.ViewFrame)
`
``
118
`+
get = view.viewframe.textframe.text.get
`
``
119
`+
self.assertIn('Test', get('1.0', '1.end'))
`
95
120
`view.ok()
`
96
121
``
97
122
`def test_bad_file(self):
`
`@@ -109,8 +134,7 @@ def test_bad_encoding(self):
`
109
134
`self.assertEqual(tv.showerror.title, 'Unicode Decode Error')
`
110
135
``
111
136
``
112
``
-
113
``
`-
Call TextViewer with _utest=True.
`
``
137
`+
Call ViewWindow with _utest=True.
`
114
138
`class ButtonClickTest(unittest.TestCase):
`
115
139
``
116
140
`def setUp(self):
`
`@@ -131,7 +155,8 @@ def _command():
`
131
155
``
132
156
`self.assertEqual(self.called, True)
`
133
157
`self.assertEqual(self.view.title(), 'TITLE_TEXT')
`
134
``
`-
self.assertEqual(self.view.text.get('1.0', '1.end'), 'COMMAND')
`
``
158
`+
self.assertEqual(self.view.viewframe.textframe.text.get('1.0', '1.end'),
`
``
159
`+
'COMMAND')
`
135
160
``
136
161
`def test_view_file_bind_with_button(self):
`
137
162
`def _command():
`
`@@ -143,12 +168,11 @@ def _command():
`
143
168
``
144
169
`self.assertEqual(self.called, True)
`
145
170
`self.assertEqual(self.view.title(), 'TITLE_FILE')
`
``
171
`+
get = self.view.viewframe.textframe.text.get
`
146
172
`with open(file) as f:
`
147
``
`-
self.assertEqual(self.view.text.get('1.0', '1.end'),
`
148
``
`-
f.readline().strip())
`
``
173
`+
self.assertEqual(get('1.0', '1.end'), f.readline().strip())
`
149
174
`f.readline()
`
150
``
`-
self.assertEqual(self.view.text.get('3.0', '3.end'),
`
151
``
`-
f.readline().strip())
`
``
175
`+
self.assertEqual(get('3.0', '3.end'), f.readline().strip())
`
152
176
``
153
177
``
154
178
`if name == 'main':
`