]> granicus.if.org Git - python/commitdiff
[3.6] IDLE test_textview: add comments and test, increase coverage to 100% (GH-1641...
authorterryjreedy <tjreedy@udel.edu>
Fri, 9 Jun 2017 19:59:31 +0000 (15:59 -0400)
committerGitHub <noreply@github.com>
Fri, 9 Jun 2017 19:59:31 +0000 (15:59 -0400)
(cherry picked from commit 295304d412700cc6621bb592109fa42249a9dcdb)

Lib/idlelib/idle_test/test_textview.py
Lib/idlelib/textview.py

index 67fc0b7c4f1c6d31a45eca5d36002a9c67dd4407..57b886aba11f31e5c1699894e95a7e7eb4d3090d 100644 (file)
@@ -5,7 +5,7 @@ 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.
 
-Coverage: 94%.
+Coverage: 100%.
 '''
 from idlelib import textview as tv
 from test.support import requires
@@ -28,14 +28,20 @@ def tearDownModule():
     root.destroy()  # Pyflakes falsely sees root as undefined.
     del root
 
+# If we call TextViewer or wrapper functions with defaults
+# modal=True, _utest=False, test hangs on call to wait_window.
+# Have also gotten tk error 'can't invoke "event" command'.
+
 
 class TV(tv.TextViewer):  # Used in TextViewTest.
     transient = Func()
     grab_set = Func()
     wait_window = Func()
 
-class TextViewTest(unittest.TestCase):
 
+# Call wrapper class with mock wait_window.
+class TextViewTest(unittest.TestCase):
+    
     def setUp(self):
         TV.transient.__init__()
         TV.grab_set.__init__()
@@ -64,6 +70,7 @@ class TextViewTest(unittest.TestCase):
         view.destroy()
 
 
+# Call TextViewer with modal=False.
 class ViewFunctionTest(unittest.TestCase):
 
     @classmethod
@@ -77,26 +84,34 @@ class ViewFunctionTest(unittest.TestCase):
         del cls.orig_error
 
     def test_view_text(self):
-        # If modal True, get tk error 'can't invoke "event" command'.
         view = tv.view_text(root, 'Title', 'test text', modal=False)
         self.assertIsInstance(view, tv.TextViewer)
         view.Ok()
 
     def test_view_file(self):
-        test_dir = os.path.dirname(__file__)
-        testfile = os.path.join(test_dir, 'test_textview.py')
-        view = tv.view_file(root, 'Title', testfile, modal=False)
+        view = tv.view_file(root, 'Title', __file__, modal=False)
         self.assertIsInstance(view, tv.TextViewer)
         self.assertIn('Test', view.textView.get('1.0', '1.end'))
         view.Ok()
 
+    def test_bad_file(self):
         # Mock showerror will be used; view_file will return None.
-        testfile = os.path.join(test_dir, '../notthere.py')
-        view = tv.view_file(root, 'Title', testfile, modal=False)
+        view = tv.view_file(root, 'Title', 'abc.xyz', modal=False)
         self.assertIsNone(view)
+        self.assertEqual(tv.showerror.title, 'File Load Error')
+
+    def test_bad_encoding(self):
+        p = os.path
+        fn = p.abspath(p.join(p.dirname(__file__), '..', 'CREDITS.txt'))
+        tv.showerror.title = None
+        view = tv.view_file(root, 'Title', fn, 'ascii', modal=False)
+        self.assertIsNone(view)
+        self.assertEqual(tv.showerror.title, 'Unicode Decode Error')
+
 
 
-class ButtonClickTextViewTest(unittest.TestCase):
+# Call TextViewer with _utest=True.
+class ButtonClickTest(unittest.TestCase):
 
     def setUp(self):
         self.view = None
index f33ac32a33a3bbd6d4b03b6c3703971d471546a9..dc1a7bfc9eff3885d677d3f689a754770c1a7d27 100644 (file)
@@ -87,6 +87,7 @@ def view_file(parent, title, filename, encoding=None, modal=True, _utest=False):
                   parent=parent)
     else:
         return view_text(parent, title, contents, modal, _utest=_utest)
+    return None
 
 
 if __name__ == '__main__':