11'''Test idlelib.textview.
22
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.
3+ Since all methods and functions create (or destroy) a ViewWindow , which
4+ is a widget containing a widget, etcetera , all tests must be gui tests.
55Using mock Text would not change this. Other mocks are used to retrieve
66information about calls.
77
1313
1414import unittest
1515import os
16- from tkinter import Tk , Button
16+ from tkinter import Tk
17+ from tkinter .ttk import Button
1718from idlelib .idle_test .mock_idle import Func
1819from idlelib .idle_test .mock_tk import Mbox_func
1920
@@ -25,52 +26,73 @@ def setUpModule():
2526def tearDownModule ():
2627 global root
2728 root .update_idletasks ()
28- root .destroy () # Pyflakes falsely sees root as undefined.
29+ root .destroy ()
2930 del root
3031
31- # If we call TextViewer or wrapper functions with defaults
32+ # If we call ViewWindow or wrapper functions with defaults
3233# modal=True, _utest=False, test hangs on call to wait_window.
3334# Have also gotten tk error 'can't invoke "event" command'.
3435
3536
36- class TV (tv .TextViewer ): # Used in TextViewTest .
37+ class VW (tv .ViewWindow ): # Used in ViewWindowTest .
3738 transient = Func ()
3839 grab_set = Func ()
3940 wait_window = Func ()
4041
4142
42- # Call wrapper class with mock wait_window.
43- class TextViewTest (unittest .TestCase ):
43+ # Call wrapper class VW with mock wait_window.
44+ class ViewWindowTest (unittest .TestCase ):
4445
4546 def setUp (self ):
46- TV .transient .__init__ ()
47- TV .grab_set .__init__ ()
48- TV .wait_window .__init__ ()
47+ VW .transient .__init__ ()
48+ VW .grab_set .__init__ ()
49+ VW .wait_window .__init__ ()
4950
5051 def test_init_modal (self ):
51- view = TV (root , 'Title' , 'test text' )
52- self .assertTrue (TV .transient .called )
53- self .assertTrue (TV .grab_set .called )
54- self .assertTrue (TV .wait_window .called )
52+ view = VW (root , 'Title' , 'test text' )
53+ self .assertTrue (VW .transient .called )
54+ self .assertTrue (VW .grab_set .called )
55+ self .assertTrue (VW .wait_window .called )
5556 view .ok ()
5657
5758 def test_init_nonmodal (self ):
58- view = TV (root , 'Title' , 'test text' , modal = False )
59- self .assertFalse (TV .transient .called )
60- self .assertFalse (TV .grab_set .called )
61- self .assertFalse (TV .wait_window .called )
59+ view = VW (root , 'Title' , 'test text' , modal = False )
60+ self .assertFalse (VW .transient .called )
61+ self .assertFalse (VW .grab_set .called )
62+ self .assertFalse (VW .wait_window .called )
6263 view .ok ()
6364
6465 def test_ok (self ):
65- view = TV (root , 'Title' , 'test text' , modal = False )
66+ view = VW (root , 'Title' , 'test text' , modal = False )
6667 view .destroy = Func ()
6768 view .ok ()
6869 self .assertTrue (view .destroy .called )
6970 del view .destroy # Unmask real function.
7071 view .destroy ()
7172
7273
73- # Call TextViewer with modal=False.
74+ class TextFrameTest (unittest .TestCase ):
75+
76+ @classmethod
77+ def setUpClass (cls ):
78+ "By itself, this tests that file parsed without exception."
79+ cls .root = root = Tk ()
80+ root .withdraw ()
81+ cls .frame = tv .TextFrame (root , 'test text' )
82+
83+ @classmethod
84+ def tearDownClass (cls ):
85+ del cls .frame
86+ cls .root .update_idletasks ()
87+ cls .root .destroy ()
88+ del cls .root
89+
90+ def test_line1 (self ):
91+ get = self .frame .text .get
92+ self .assertEqual (get ('1.0' , '1.end' ), 'test text' )
93+
94+
95+ # Call ViewWindow with modal=False.
7496class ViewFunctionTest (unittest .TestCase ):
7597
7698 @classmethod
@@ -85,13 +107,16 @@ def tearDownClass(cls):
85107
86108 def test_view_text (self ):
87109 view = tv .view_text (root , 'Title' , 'test text' , modal = False )
88- self .assertIsInstance (view , tv .TextViewer )
110+ self .assertIsInstance (view , tv .ViewWindow )
111+ self .assertIsInstance (view .viewframe , tv .ViewFrame )
89112 view .ok ()
90113
91114 def test_view_file (self ):
92115 view = tv .view_file (root , 'Title' , __file__ , modal = False )
93- self .assertIsInstance (view , tv .TextViewer )
94- self .assertIn ('Test' , view .text .get ('1.0' , '1.end' ))
116+ self .assertIsInstance (view , tv .ViewWindow )
117+ self .assertIsInstance (view .viewframe , tv .ViewFrame )
118+ get = view .viewframe .textframe .text .get
119+ self .assertIn ('Test' , get ('1.0' , '1.end' ))
95120 view .ok ()
96121
97122 def test_bad_file (self ):
@@ -109,8 +134,7 @@ def test_bad_encoding(self):
109134 self .assertEqual (tv .showerror .title , 'Unicode Decode Error' )
110135
111136
112-
113- # Call TextViewer with _utest=True.
137+ # Call ViewWindow with _utest=True.
114138class ButtonClickTest (unittest .TestCase ):
115139
116140 def setUp (self ):
@@ -131,7 +155,8 @@ def _command():
131155
132156 self .assertEqual (self .called , True )
133157 self .assertEqual (self .view .title (), 'TITLE_TEXT' )
134- self .assertEqual (self .view .text .get ('1.0' , '1.end' ), 'COMMAND' )
158+ self .assertEqual (self .view .viewframe .textframe .text .get ('1.0' , '1.end' ),
159+ 'COMMAND' )
135160
136161 def test_view_file_bind_with_button (self ):
137162 def _command ():
@@ -143,12 +168,11 @@ def _command():
143168
144169 self .assertEqual (self .called , True )
145170 self .assertEqual (self .view .title (), 'TITLE_FILE' )
171+ get = self .view .viewframe .textframe .text .get
146172 with open (__file__ ) as f :
147- self .assertEqual (self .view .text .get ('1.0' , '1.end' ),
148- f .readline ().strip ())
173+ self .assertEqual (get ('1.0' , '1.end' ), f .readline ().strip ())
149174 f .readline ()
150- self .assertEqual (self .view .text .get ('3.0' , '3.end' ),
151- f .readline ().strip ())
175+ self .assertEqual (get ('3.0' , '3.end' ), f .readline ().strip ())
152176
153177
154178if __name__ == '__main__' :
0 commit comments