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