1
- '''Test the functions and main class method of textView.py.'''
1
+ '''Test the functions and main class method of textView.py.
2
+
3
+ Since all methods and functions create (or destroy) a TextViewer, which
4
+ is a widget containing multiple widgets, all tests must be gui tests.
5
+ Using mock Text would not change this. Other mocks are used to retrieve
6
+ information about calls.
7
+
8
+ The coverage is essentially 100%.
9
+ '''
10
+ from test .support import requires
11
+ requires ('gui' )
2
12
3
13
import unittest
4
14
import os
5
- from test .support import requires
6
15
from tkinter import Tk , Text , TclError
7
16
from idlelib import textView as tv
8
17
from idlelib .idle_test .mock_idle import Func
9
18
from idlelib .idle_test .mock_tk import Mbox
10
19
11
- orig_mbox = tv .tkMessageBox
20
+ def setUpModule ():
21
+ global root
22
+ root = Tk ()
12
23
13
- class TextViewTest (unittest .TestCase ):
24
+ def tearDownModule ():
25
+ global root
26
+ root .destroy ()
27
+ del root
14
28
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
29
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
+ class TV ( tv . TextViewer ): # used by TextViewTest
31
+ transient = Func ()
32
+ grab_set = Func ()
33
+ wait_window = Func ()
34
+
35
+ class TextViewTest ( unittest . TestCase ):
30
36
31
37
def setUp (self ):
32
- TV = self .TV
33
38
TV .transient .__init__ ()
34
39
TV .grab_set .__init__ ()
35
40
TV .wait_window .__init__ ()
36
41
37
-
38
42
def test_init_modal (self ):
39
- TV = self .TV
40
- view = TV (self .root , 'Title' , 'test text' )
43
+ view = TV (root , 'Title' , 'test text' )
41
44
self .assertTrue (TV .transient .called )
42
45
self .assertTrue (TV .grab_set .called )
43
46
self .assertTrue (TV .wait_window .called )
44
47
view .Ok ()
45
48
46
49
def test_init_nonmodal (self ):
47
- TV = self .TV
48
- view = TV (self .root , 'Title' , 'test text' , modal = False )
50
+ view = TV (root , 'Title' , 'test text' , modal = False )
49
51
self .assertFalse (TV .transient .called )
50
52
self .assertFalse (TV .grab_set .called )
51
53
self .assertFalse (TV .wait_window .called )
52
54
view .Ok ()
53
55
54
56
def test_ok (self ):
55
- view = self . TV (self . root , 'Title' , 'test text' , modal = False )
57
+ view = TV (root , 'Title' , 'test text' , modal = False )
56
58
view .destroy = Func ()
57
59
view .Ok ()
58
60
self .assertTrue (view .destroy .called )
@@ -64,33 +66,32 @@ class textviewTest(unittest.TestCase):
64
66
65
67
@classmethod
66
68
def setUpClass (cls ):
67
- requires ('gui' )
68
- cls .root = Tk ()
69
+ cls .orig_mbox = tv .tkMessageBox
69
70
tv .tkMessageBox = Mbox
70
71
71
72
@classmethod
72
73
def tearDownClass (cls ):
73
- cls .root .destroy ()
74
- del cls .root
75
- tv .tkMessageBox = orig_mbox
74
+ tv .tkMessageBox = cls .orig_mbox
75
+ del cls .orig_mbox
76
76
77
77
def test_view_text (self ):
78
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 )
79
+ view = tv .view_text (root , 'Title' , 'test text' , modal = False )
80
80
self .assertIsInstance (view , tv .TextViewer )
81
81
82
82
def test_view_file (self ):
83
83
test_dir = os .path .dirname (__file__ )
84
84
testfile = os .path .join (test_dir , 'test_textview.py' )
85
- view = tv .view_file (self . root , 'Title' , testfile , modal = False )
85
+ view = tv .view_file (root , 'Title' , testfile , modal = False )
86
86
self .assertIsInstance (view , tv .TextViewer )
87
87
self .assertIn ('Test' , view .textView .get ('1.0' , '1.end' ))
88
88
view .Ok ()
89
89
90
90
# Mock messagebox will be used and view_file will not return anything
91
91
testfile = os .path .join (test_dir , '../notthere.py' )
92
- view = tv .view_file (self . root , 'Title' , testfile , modal = False )
92
+ view = tv .view_file (root , 'Title' , testfile , modal = False )
93
93
self .assertIsNone (view )
94
94
95
+
95
96
if __name__ == '__main__' :
96
97
unittest .main (verbosity = 2 )
0 commit comments