From ba365da9cee8901fad08ab0b61c7489c110e5c97 Mon Sep 17 00:00:00 2001 From: Louie Lu Date: Thu, 18 May 2017 05:51:31 +0800 Subject: [PATCH] bpo-30303: IDLE: Add _utest argument to textview (#1499) --- Lib/idlelib/idle_test/test_textview.py | 42 +++++++++++++++++++++++++- Lib/idlelib/textview.py | 26 ++++++++++------ 2 files changed, 57 insertions(+), 11 deletions(-) diff --git a/Lib/idlelib/idle_test/test_textview.py b/Lib/idlelib/idle_test/test_textview.py index f018f5ef1975ba..67fc0b7c4f1c6d 100644 --- a/Lib/idlelib/idle_test/test_textview.py +++ b/Lib/idlelib/idle_test/test_textview.py @@ -13,7 +13,7 @@ import unittest import os -from tkinter import Tk +from tkinter import Tk, Button from idlelib.idle_test.mock_idle import Func from idlelib.idle_test.mock_tk import Mbox_func @@ -96,5 +96,45 @@ def test_view_file(self): self.assertIsNone(view) +class ButtonClickTextViewTest(unittest.TestCase): + + def setUp(self): + self.view = None + self.called = False + + def tearDown(self): + if self.view: + self.view.destroy() + + def test_view_text_bind_with_button(self): + def _command(): + self.called = True + self.view = tv.view_text(root, 'TITLE_TEXT', 'COMMAND', _utest=True) + button = Button(root, text='BUTTON', command=_command) + button.invoke() + self.addCleanup(button.destroy) + + self.assertEqual(self.called, True) + self.assertEqual(self.view.title(), 'TITLE_TEXT') + self.assertEqual(self.view.textView.get('1.0', '1.end'), 'COMMAND') + + def test_view_file_bind_with_button(self): + def _command(): + self.called = True + self.view = tv.view_file(root, 'TITLE_FILE', __file__, _utest=True) + button = Button(root, text='BUTTON', command=_command) + button.invoke() + self.addCleanup(button.destroy) + + self.assertEqual(self.called, True) + self.assertEqual(self.view.title(), 'TITLE_FILE') + with open(__file__) as f: + self.assertEqual(self.view.textView.get('1.0', '1.end'), + f.readline().strip()) + f.readline() + self.assertEqual(self.view.textView.get('3.0', '3.end'), + f.readline().strip()) + + if __name__ == '__main__': unittest.main(verbosity=2) diff --git a/Lib/idlelib/textview.py b/Lib/idlelib/textview.py index adee326e1deb91..f33ac32a33a3bb 100644 --- a/Lib/idlelib/textview.py +++ b/Lib/idlelib/textview.py @@ -9,14 +9,15 @@ class TextViewer(Toplevel): "A simple text viewer dialog for IDLE." - def __init__(self, parent, title, text, modal=True, _htest=False): - """Show the given text in a scrollable window with a 'close' button + def __init__(self, parent, title, text, modal=True, + _htest=False, _utest=False): + """Show the given text in a scrollable window with a 'close' button. - If modal option set to False, user can interact with other windows, - otherwise they will be unable to interact with other windows until - the textview window is closed. + If modal is left True, users cannot interact with other windows + until the textview window is closed. _htest - bool; change box location when running htest. + _utest - bool; don't wait_window when running unittest. """ Toplevel.__init__(self, parent) self.configure(borderwidth=5) @@ -42,9 +43,11 @@ def __init__(self, parent, title, text, modal=True, _htest=False): if modal: self.transient(parent) self.grab_set() - self.wait_window() + if not _utest: + self.wait_window() def CreateWidgets(self): + "Create Frame with Text (with vertical Scrollbar) and Button." frameText = Frame(self, relief=SUNKEN, height=700) frameButtons = Frame(self) self.buttonOk = Button(frameButtons, text='Close', @@ -65,10 +68,12 @@ def Ok(self, event=None): self.destroy() -def view_text(parent, title, text, modal=True): - return TextViewer(parent, title, text, modal) +def view_text(parent, title, text, modal=True, _utest=False): + "Display text in a TextViewer." + return TextViewer(parent, title, text, modal, _utest=_utest) -def view_file(parent, title, filename, encoding=None, modal=True): +def view_file(parent, title, filename, encoding=None, modal=True, _utest=False): + "Display file in a TextViever or show error message." try: with open(filename, 'r', encoding=encoding) as file: contents = file.read() @@ -81,7 +86,8 @@ def view_file(parent, title, filename, encoding=None, modal=True): message=str(err), parent=parent) else: - return view_text(parent, title, contents, modal) + return view_text(parent, title, contents, modal, _utest=_utest) + if __name__ == '__main__': import unittest