diff options
author | Terry Jan Reedy <tjreedy@udel.edu> | 2014-06-06 21:43:19 (GMT) |
---|---|---|
committer | Terry Jan Reedy <tjreedy@udel.edu> | 2014-06-06 21:43:19 (GMT) |
commit | 4a3f135c8d623d97782ccaea6bb37b1786f86de0 (patch) | |
tree | 3a68308719b030081b6c635b4582dcf772a16510 | |
parent | 780b585fbceb94ce0feb4faffa10e16591284d33 (diff) | |
download | cpython-4a3f135c8d623d97782ccaea6bb37b1786f86de0.zip cpython-4a3f135c8d623d97782ccaea6bb37b1786f86de0.tar.gz cpython-4a3f135c8d623d97782ccaea6bb37b1786f86de0.tar.bz2 |
Issue #18910: test_textView - since all tests require 'gui', make root global.
Subclass TextViewer to add mock methods instead of monkey-patching it.
-rw-r--r-- | Lib/idlelib/idle_test/test_textview.py | 67 |
1 files changed, 34 insertions, 33 deletions
diff --git a/Lib/idlelib/idle_test/test_textview.py b/Lib/idlelib/idle_test/test_textview.py index a3b0e3c..a9b60ca 100644 --- a/Lib/idlelib/idle_test/test_textview.py +++ b/Lib/idlelib/idle_test/test_textview.py @@ -1,58 +1,60 @@ -'''Test the functions and main class method of textView.py.''' +'''Test the functions and main class method of textView.py. + +Since all methods and functions create (or destroy) a TextViewer, which +is a widget containing multiple widgets, all tests must be gui tests. +Using mock Text would not change this. Other mocks are used to retrieve +information about calls. + +The coverage is essentially 100%. +''' +from test.support import requires +requires('gui') 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_idle import Func from idlelib.idle_test.mock_tk import Mbox -orig_mbox = tv.tkMessageBox +def setUpModule(): + global root + root = Tk() -class TextViewTest(unittest.TestCase): +def tearDownModule(): + global root + root.destroy() + del root - @classmethod - def setUpClass(cls): - requires('gui') - cls.root = Tk() - cls.TV = TV = tv.TextViewer - TV.transient = Func() - TV.grab_set = Func() - TV.wait_window = Func() - @classmethod - def tearDownClass(cls): - cls.root.destroy() - TV = cls.TV - del cls.root, cls.TV - del TV.transient, TV.grab_set, TV.wait_window +class TV(tv.TextViewer): # used by TextViewTest + transient = Func() + grab_set = Func() + wait_window = Func() + +class TextViewTest(unittest.TestCase): def setUp(self): - TV = self.TV TV.transient.__init__() TV.grab_set.__init__() TV.wait_window.__init__() - def test_init_modal(self): - TV = self.TV - view = TV(self.root, 'Title', 'test text') + view = TV(root, 'Title', 'test text') self.assertTrue(TV.transient.called) self.assertTrue(TV.grab_set.called) self.assertTrue(TV.wait_window.called) view.Ok() def test_init_nonmodal(self): - TV = self.TV - view = TV(self.root, 'Title', 'test text', modal=False) + view = TV(root, 'Title', 'test text', modal=False) self.assertFalse(TV.transient.called) self.assertFalse(TV.grab_set.called) self.assertFalse(TV.wait_window.called) view.Ok() def test_ok(self): - view = self.TV(self.root, 'Title', 'test text', modal=False) + view = TV(root, 'Title', 'test text', modal=False) view.destroy = Func() view.Ok() self.assertTrue(view.destroy.called) @@ -64,33 +66,32 @@ class textviewTest(unittest.TestCase): @classmethod def setUpClass(cls): - requires('gui') - cls.root = Tk() + cls.orig_mbox = tv.tkMessageBox tv.tkMessageBox = Mbox @classmethod def tearDownClass(cls): - cls.root.destroy() - del cls.root - tv.tkMessageBox = orig_mbox + tv.tkMessageBox = cls.orig_mbox + del cls.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) + view = tv.view_text(root, 'Title', 'test text', modal=False) self.assertIsInstance(view, tv.TextViewer) def test_view_file(self): test_dir = os.path.dirname(__file__) testfile = os.path.join(test_dir, 'test_textview.py') - view = tv.view_file(self.root, 'Title', testfile, modal=False) + view = tv.view_file(root, 'Title', testfile, modal=False) self.assertIsInstance(view, tv.TextViewer) self.assertIn('Test', view.textView.get('1.0', '1.end')) 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) + view = tv.view_file(root, 'Title', testfile, modal=False) self.assertIsNone(view) + if __name__ == '__main__': unittest.main(verbosity=2) |