diff -r 5c7697f28ee4 Lib/idlelib/idle_test/test_textview.py --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Lib/idlelib/idle_test/test_textview.py Mon Sep 02 21:50:26 2013 -0400 @@ -0,0 +1,92 @@ +'''Test the functions and main class method of textView.py.''' + +import unittest +import os +from test.support import requires +from tkinter import Tk, Text, TclError +from idlelib import textView as tv +from idlelib.idle_test.mock_tk import Mbox + +orig_mbox = tv.tkMessageBox + +class tv_func: + def __init__(self): + self.result = None + self.called = False + + def __call__(self, *args, **kwds): + self.called = True + return self.result + +class textviewClassTest(unittest.TestCase): + + @classmethod + def setUpClass(cls): + requires('gui') + cls.root = Tk() + + @classmethod + def tearDownClass(cls): + cls.root.destroy() + + def test_init_modal(self): + view = tv.TextViewer.__new__(tv.TextViewer) + view.transient = tv_func() + view.grab_set = tv_func() + view.wait_window = tv_func() + + view.__init__(self.root, 'Title', 'test text') + self.assertIsInstance(view, tv.TextViewer) + self.assertTrue(view.transient.called) + self.assertTrue(view.grab_set.called) + self.assertTrue(view.wait_window.called) + view.Ok() + + def test_init_nonmodal(self): + view = tv.TextViewer(self.root, 'Title', 'test text', modal=False) + self.assertIsInstance(view, tv.TextViewer) + view.Ok() + + def test_createwidgets(self): + pass + + def test_ok(self): + view = tv.TextViewer(self.root, 'Title', 'test text', modal=False) + view.destroy = tv_func() + view.Ok() + self.assertTrue(view.destroy.called) + + +class textviewTest(unittest.TestCase): + + @classmethod + def setUpClass(cls): + requires('gui') + cls.root = Tk() + tv.tkMessageBox = Mbox + + @classmethod + def tearDownClass(cls): + cls.root.destroy() + tv.tkMessageBox = orig_mbox + + def test_view_text(self): + # If modal True, tkinter will error with 'can't invoke "event" command' + view = tv.view_text(self.root, 'Title', 'test text', modal=False) + self.assertIsInstance(view, tv.TextViewer) + + def test_view_file(self): + file = __file__ + test_dir = os.path.dirname(file) + testfile = os.path.join(test_dir, '../testcode.py') + view = tv.view_file(self.root, 'Title', testfile, modal=False) + self.assertIsInstance(view, tv.TextViewer) + view.Ok() + + # Mock messagebox will be used and view_file will not return anything + testfile = os.path.join(test_dir, '../notthere.py') + view = tv.view_file(self.root, 'Title', testfile, modal=False) + self.assertIsNone(view) + +if __name__ == '__main__': + unittest.main(verbosity=2, exit=2) diff -r 5c7697f28ee4 Lib/idlelib/textView.py --- a/Lib/idlelib/textView.py Mon Sep 02 08:57:21 2013 -0700 +++ b/Lib/idlelib/textView.py Mon Sep 02 21:50:26 2013 -0400 @@ -12,6 +12,9 @@ def __init__(self, parent, title, text, modal=True): """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. """ Toplevel.__init__(self, parent) self.configure(borderwidth=5) @@ -67,7 +70,6 @@ with open(filename, 'r', encoding=encoding) as file: contents = file.read() except OSError: - import tkinter.messagebox as tkMessageBox tkMessageBox.showerror(title='File Load Error', message='Unable to load file %r .' % filename, parent=parent) @@ -75,23 +77,7 @@ return view_text(parent, title, contents, modal) -if __name__ == '__main__': - #test the dialog - root=Tk() - root.title('textView test') - filename = './textView.py' - with open(filename, 'r') as f: - text = f.read() - btn1 = Button(root, text='view_text', - command=lambda:view_text(root, 'view_text', text)) - btn1.pack(side=LEFT) - btn2 = Button(root, text='view_file', - command=lambda:view_file(root, 'view_file', filename)) - btn2.pack(side=LEFT) - btn3 = Button(root, text='nonmodal view_text', - command=lambda:view_text(root, 'nonmodal view_text', text, - modal=False)) - btn3.pack(side=LEFT) - close = Button(root, text='Close', command=root.destroy) - close.pack(side=RIGHT) - root.mainloop() +if __name__ == "__main__": + from test import support; support.use_resources = ['gui'] + import unittest + unittest.main('idlelib.idle_test.test_textview', verbosity=2, exit=False)