Home | History | Annotate | Download | only in idle_test
      1 '''Test the functions and main class method of textView.py.'''
      2 
      3 import unittest
      4 import os
      5 from test.test_support import requires
      6 from Tkinter import Tk
      7 from idlelib import textView as tv
      8 from idlelib.idle_test.mock_idle import Func
      9 from idlelib.idle_test.mock_tk import Mbox
     10 
     11 
     12 class TV(tv.TextViewer):  # Use in TextViewTest
     13     transient = Func()
     14     grab_set = Func()
     15     wait_window = Func()
     16 
     17 class textviewClassTest(unittest.TestCase):
     18 
     19     @classmethod
     20     def setUpClass(cls):
     21         requires('gui')
     22         cls.root = Tk()
     23         cls.root.withdraw()
     24 
     25     @classmethod
     26     def tearDownClass(cls):
     27         cls.root.destroy()
     28         del cls.root
     29 
     30     def setUp(self):
     31         TV.transient.__init__()
     32         TV.grab_set.__init__()
     33         TV.wait_window.__init__()
     34 
     35     def test_init_modal(self):
     36         view = TV(self.root, 'Title', 'test text')
     37         self.assertTrue(TV.transient.called)
     38         self.assertTrue(TV.grab_set.called)
     39         self.assertTrue(TV.wait_window.called)
     40         view.Ok()
     41 
     42     def test_init_nonmodal(self):
     43         view = TV(self.root, 'Title', 'test text', modal=False)
     44         self.assertFalse(TV.transient.called)
     45         self.assertFalse(TV.grab_set.called)
     46         self.assertFalse(TV.wait_window.called)
     47         view.Ok()
     48 
     49     def test_ok(self):
     50         view = TV(self.root, 'Title', 'test text', modal=False)
     51         view.destroy = Func()
     52         view.Ok()
     53         self.assertTrue(view.destroy.called)
     54         del view.destroy  # Unmask the real function.
     55         view.destroy()
     56 
     57 
     58 class ViewFunctionTest(unittest.TestCase):
     59 
     60     @classmethod
     61     def setUpClass(cls):
     62         requires('gui')
     63         cls.root = Tk()
     64         cls.root.withdraw()
     65         cls.orig_mbox = tv.tkMessageBox
     66         tv.tkMessageBox = Mbox
     67 
     68     @classmethod
     69     def tearDownClass(cls):
     70         cls.root.destroy()
     71         del cls.root
     72         tv.tkMessageBox = cls.orig_mbox
     73         del cls.orig_mbox
     74 
     75     def test_view_text(self):
     76         # If modal True, get tkinter error 'can't invoke "event" command'.
     77         view = tv.view_text(self.root, 'Title', 'test text', modal=False)
     78         self.assertIsInstance(view, tv.TextViewer)
     79         view.Ok()
     80 
     81     def test_view_file(self):
     82         test_dir = os.path.dirname(__file__)
     83         testfile = os.path.join(test_dir, 'test_textview.py')
     84         view = tv.view_file(self.root, 'Title', testfile, modal=False)
     85         self.assertIsInstance(view, tv.TextViewer)
     86         self.assertIn('Test', view.textView.get('1.0', '1.end'))
     87         view.Ok()
     88 
     89         # Mock messagebox will be used; view_file will return None.
     90         testfile = os.path.join(test_dir, '../notthere.py')
     91         view = tv.view_file(self.root, 'Title', testfile, modal=False)
     92         self.assertIsNone(view)
     93 
     94 
     95 if __name__ == '__main__':
     96     unittest.main(verbosity=2)
     97