diff --git a/Lib/idlelib/idle_test/test_textview.py b/Lib/idlelib/idle_test/test_textview.py
index 67fc0b7..57b886a 100644
--- a/Lib/idlelib/idle_test/test_textview.py
+++ b/Lib/idlelib/idle_test/test_textview.py
@@ -5,7 +5,7 @@
 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 @@
     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 @@
         view.destroy()
 
 
+# Call TextViewer with modal=False.
 class ViewFunctionTest(unittest.TestCase):
 
     @classmethod
@@ -77,26 +84,34 @@
         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
diff --git a/Lib/idlelib/textview.py b/Lib/idlelib/textview.py
index f33ac32..dc1a7bf 100644
--- a/Lib/idlelib/textview.py
+++ b/Lib/idlelib/textview.py
@@ -87,6 +87,7 @@
                   parent=parent)
     else:
         return view_text(parent, title, contents, modal, _utest=_utest)
+    return None
 
 
 if __name__ == '__main__':
