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 /Lib/idlelib/idle_test/test_textview.py | |
| 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.
Diffstat (limited to 'Lib/idlelib/idle_test/test_textview.py')
| -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)  | 
