Skip to content

Commit ba365da

Browse files
louisomterryjreedy
authored andcommitted
bpo-30303: IDLE: Add _utest argument to textview (#1499)
1 parent ab4413a commit ba365da

File tree

2 files changed

+57
-11
lines changed

2 files changed

+57
-11
lines changed

Lib/idlelib/idle_test/test_textview.py

+41-1
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@
1313

1414
import unittest
1515
import os
16-
from tkinter import Tk
16+
from tkinter import Tk, Button
1717
from idlelib.idle_test.mock_idle import Func
1818
from idlelib.idle_test.mock_tk import Mbox_func
1919

@@ -96,5 +96,45 @@ def test_view_file(self):
9696
self.assertIsNone(view)
9797

9898

99+
class ButtonClickTextViewTest(unittest.TestCase):
100+
101+
def setUp(self):
102+
self.view = None
103+
self.called = False
104+
105+
def tearDown(self):
106+
if self.view:
107+
self.view.destroy()
108+
109+
def test_view_text_bind_with_button(self):
110+
def _command():
111+
self.called = True
112+
self.view = tv.view_text(root, 'TITLE_TEXT', 'COMMAND', _utest=True)
113+
button = Button(root, text='BUTTON', command=_command)
114+
button.invoke()
115+
self.addCleanup(button.destroy)
116+
117+
self.assertEqual(self.called, True)
118+
self.assertEqual(self.view.title(), 'TITLE_TEXT')
119+
self.assertEqual(self.view.textView.get('1.0', '1.end'), 'COMMAND')
120+
121+
def test_view_file_bind_with_button(self):
122+
def _command():
123+
self.called = True
124+
self.view = tv.view_file(root, 'TITLE_FILE', __file__, _utest=True)
125+
button = Button(root, text='BUTTON', command=_command)
126+
button.invoke()
127+
self.addCleanup(button.destroy)
128+
129+
self.assertEqual(self.called, True)
130+
self.assertEqual(self.view.title(), 'TITLE_FILE')
131+
with open(__file__) as f:
132+
self.assertEqual(self.view.textView.get('1.0', '1.end'),
133+
f.readline().strip())
134+
f.readline()
135+
self.assertEqual(self.view.textView.get('3.0', '3.end'),
136+
f.readline().strip())
137+
138+
99139
if __name__ == '__main__':
100140
unittest.main(verbosity=2)

Lib/idlelib/textview.py

+16-10
Original file line numberDiff line numberDiff line change
@@ -9,14 +9,15 @@
99
class TextViewer(Toplevel):
1010
"A simple text viewer dialog for IDLE."
1111

12-
def __init__(self, parent, title, text, modal=True, _htest=False):
13-
"""Show the given text in a scrollable window with a 'close' button
12+
def __init__(self, parent, title, text, modal=True,
13+
_htest=False, _utest=False):
14+
"""Show the given text in a scrollable window with a 'close' button.
1415
15-
If modal option set to False, user can interact with other windows,
16-
otherwise they will be unable to interact with other windows until
17-
the textview window is closed.
16+
If modal is left True, users cannot interact with other windows
17+
until the textview window is closed.
1818
1919
_htest - bool; change box location when running htest.
20+
_utest - bool; don't wait_window when running unittest.
2021
"""
2122
Toplevel.__init__(self, parent)
2223
self.configure(borderwidth=5)
@@ -42,9 +43,11 @@ def __init__(self, parent, title, text, modal=True, _htest=False):
4243
if modal:
4344
self.transient(parent)
4445
self.grab_set()
45-
self.wait_window()
46+
if not _utest:
47+
self.wait_window()
4648

4749
def CreateWidgets(self):
50+
"Create Frame with Text (with vertical Scrollbar) and Button."
4851
frameText = Frame(self, relief=SUNKEN, height=700)
4952
frameButtons = Frame(self)
5053
self.buttonOk = Button(frameButtons, text='Close',
@@ -65,10 +68,12 @@ def Ok(self, event=None):
6568
self.destroy()
6669

6770

68-
def view_text(parent, title, text, modal=True):
69-
return TextViewer(parent, title, text, modal)
71+
def view_text(parent, title, text, modal=True, _utest=False):
72+
"Display text in a TextViewer."
73+
return TextViewer(parent, title, text, modal, _utest=_utest)
7074

71-
def view_file(parent, title, filename, encoding=None, modal=True):
75+
def view_file(parent, title, filename, encoding=None, modal=True, _utest=False):
76+
"Display file in a TextViever or show error message."
7277
try:
7378
with open(filename, 'r', encoding=encoding) as file:
7479
contents = file.read()
@@ -81,7 +86,8 @@ def view_file(parent, title, filename, encoding=None, modal=True):
8186
message=str(err),
8287
parent=parent)
8388
else:
84-
return view_text(parent, title, contents, modal)
89+
return view_text(parent, title, contents, modal, _utest=_utest)
90+
8591

8692
if __name__ == '__main__':
8793
import unittest

0 commit comments

Comments
 (0)