88from unittest import mock
99from idlelib .idle_test .mock_tk import Var , Mbox_func
1010from idlelib import query
11- Query , SectionName = query .Query , query .SectionName
1211
12+ Query = query .Query
1313class Dummy_Query :
1414 # Mock for testing the following methods Query
1515 entry_ok = Query .entry_ok
@@ -23,7 +23,7 @@ def destroy(self):
2323 self .destroyed = True
2424
2525# entry_ok calls modal messagebox.showerror if entry is not ok.
26- # Mock showerrer returns, so don't need to click to continue.
26+ # Mock showerrer so don't need to click to continue.
2727orig_showerror = query .showerror
2828showerror = Mbox_func () # Instance has __call__ method.
2929
@@ -46,7 +46,7 @@ def test_blank_entry(self):
4646 dialog = self .dialog
4747 Equal = self .assertEqual
4848 dialog .entry .set (' ' )
49- Equal (dialog .entry_ok (), '' )
49+ Equal (dialog .entry_ok (), None )
5050 Equal ((dialog .result , dialog .destroyed ), (None , False ))
5151 Equal (showerror .title , 'Entry Error' )
5252 self .assertIn ('Blank' , showerror .message )
@@ -74,58 +74,98 @@ def test_cancel(self):
7474
7575
7676class Dummy_SectionName :
77- # Mock for testing the following method of Section_Name
78- entry_ok = SectionName .entry_ok
79- # Attributes, constant or variable, needed for tests
77+ entry_ok = query .SectionName .entry_ok # Test override.
8078 used_names = ['used' ]
8179 entry = Var ()
8280
8381class SectionNameTest (unittest .TestCase ):
8482 dialog = Dummy_SectionName ()
8583
86-
8784 def setUp (self ):
8885 showerror .title = None
8986
90- def test_blank_name (self ):
87+ def test_blank_section_name (self ):
9188 dialog = self .dialog
9289 Equal = self .assertEqual
9390 dialog .entry .set (' ' )
94- Equal (dialog .entry_ok (), '' )
91+ Equal (dialog .entry_ok (), None )
9592 Equal (showerror .title , 'Name Error' )
9693 self .assertIn ('No' , showerror .message )
9794
98- def test_used_name (self ):
95+ def test_used_section_name (self ):
9996 dialog = self .dialog
10097 Equal = self .assertEqual
10198 dialog .entry .set ('used' )
102- Equal (self .dialog .entry_ok (), '' )
99+ Equal (self .dialog .entry_ok (), None )
103100 Equal (showerror .title , 'Name Error' )
104101 self .assertIn ('use' , showerror .message )
105102
106- def test_long_name (self ):
103+ def test_long_section_name (self ):
107104 dialog = self .dialog
108105 Equal = self .assertEqual
109106 dialog .entry .set ('good' * 8 )
110- Equal (self .dialog .entry_ok (), '' )
107+ Equal (self .dialog .entry_ok (), None )
111108 Equal (showerror .title , 'Name Error' )
112109 self .assertIn ('too long' , showerror .message )
113110
114- def test_good_entry (self ):
111+ def test_good_section_name (self ):
115112 dialog = self .dialog
116113 Equal = self .assertEqual
117114 dialog .entry .set (' good ' )
118115 Equal (dialog .entry_ok (), 'good' )
119116 Equal (showerror .title , None )
120117
121118
119+ class Dummy_ModuleName :
120+ entry_ok = query .ModuleName .entry_ok # Test override
121+ text0 = ''
122+ entry = Var ()
123+
124+ class ModuleNameTest (unittest .TestCase ):
125+ dialog = Dummy_ModuleName ()
126+
127+ def setUp (self ):
128+ showerror .title = None
129+
130+ def test_blank_module_name (self ):
131+ dialog = self .dialog
132+ Equal = self .assertEqual
133+ dialog .entry .set (' ' )
134+ Equal (dialog .entry_ok (), None )
135+ Equal (showerror .title , 'Name Error' )
136+ self .assertIn ('No' , showerror .message )
137+
138+ def test_bogus_module_name (self ):
139+ dialog = self .dialog
140+ Equal = self .assertEqual
141+ dialog .entry .set ('__name_xyz123_should_not_exist__' )
142+ Equal (self .dialog .entry_ok (), None )
143+ Equal (showerror .title , 'Import Error' )
144+ self .assertIn ('not found' , showerror .message )
145+
146+ def test_c_source_name (self ):
147+ dialog = self .dialog
148+ Equal = self .assertEqual
149+ dialog .entry .set ('itertools' )
150+ Equal (self .dialog .entry_ok (), None )
151+ Equal (showerror .title , 'Import Error' )
152+ self .assertIn ('source-based' , showerror .message )
153+
154+ def test_good_module_name (self ):
155+ dialog = self .dialog
156+ Equal = self .assertEqual
157+ dialog .entry .set ('idlelib' )
158+ self .assertTrue (dialog .entry_ok ().endswith ('__init__.py' ))
159+ Equal (showerror .title , None )
160+
161+
122162class QueryGuiTest (unittest .TestCase ):
123163
124164 @classmethod
125165 def setUpClass (cls ):
126166 requires ('gui' )
127- cls .root = Tk ()
128- cls .dialog = Query (cls . root , 'TEST' , 'test' , _utest = True )
167+ cls .root = root = Tk ()
168+ cls .dialog = Query (root , 'TEST' , 'test' , _utest = True )
129169 cls .dialog .destroy = mock .Mock ()
130170
131171 @classmethod
@@ -160,5 +200,43 @@ def test_click_cancel(self):
160200 self .assertTrue (dialog .destroy .called )
161201
162202
203+ class SectionnameGuiTest (unittest .TestCase ):
204+
205+ @classmethod
206+ def setUpClass (cls ):
207+ requires ('gui' )
208+
209+ def test_click_section_name (self ):
210+ root = Tk ()
211+ dialog = query .SectionName (root , 'T' , 't' , {'abc' }, _utest = True )
212+ Equal = self .assertEqual
213+ Equal (dialog .used_names , {'abc' })
214+ dialog .entry .insert (0 , 'okay' )
215+ dialog .button_ok .invoke ()
216+ Equal (dialog .result , 'okay' )
217+ del dialog
218+ root .destroy ()
219+ del root
220+
221+
222+ class ModulenameGuiTest (unittest .TestCase ):
223+
224+ @classmethod
225+ def setUpClass (cls ):
226+ requires ('gui' )
227+
228+ def test_click_module_name (self ):
229+ root = Tk ()
230+ dialog = query .ModuleName (root , 'T' , 't' , 'idlelib' , _utest = True )
231+ Equal = self .assertEqual
232+ Equal (dialog .text0 , 'idlelib' )
233+ Equal (dialog .entry .get (), 'idlelib' )
234+ dialog .button_ok .invoke ()
235+ self .assertTrue (dialog .result .endswith ('__init__.py' ))
236+ del dialog
237+ root .destroy ()
238+ del root
239+
240+
163241if __name__ == '__main__' :
164242 unittest .main (verbosity = 2 , exit = False )
0 commit comments