summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTerry Jan Reedy <tjreedy@udel.edu>2014-06-06 21:43:19 (GMT)
committerTerry Jan Reedy <tjreedy@udel.edu>2014-06-06 21:43:19 (GMT)
commit4a3f135c8d623d97782ccaea6bb37b1786f86de0 (patch)
tree3a68308719b030081b6c635b4582dcf772a16510
parent780b585fbceb94ce0feb4faffa10e16591284d33 (diff)
downloadcpython-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.py67
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)