55except ImportError :
66 from tkinter import ttk
77import os
8+ from pynput .keyboard import Key , Controller
89
910
1011class TestFileBrowser (BaseWidgetTest ):
@@ -104,7 +105,8 @@ def test_filebrowser_save(self):
104105 foldercreation = True )
105106 self .window .update ()
106107 fb .validate ()
107- self .assertEqual (fb .get_result (), '/test.png' )
108+ self .assertEqual (os .path .abspath (fb .get_result ()),
109+ os .path .abspath ('/test.png' ))
108110 fb = FileBrowser (self .window , initialdir = "/" , initialfile = "test.png" , mode = "save" ,
109111 filetypes = [("PNG" , '*.png|*.PNG' ), ("JPG" , '*.jpg|*.JPG' ),
110112 ('ALL' , '*' )])
@@ -134,26 +136,31 @@ def test_filebrowser_keybrowse(self):
134136 self .window .update ()
135137 fb .right_tree .focus_force ()
136138 self .window .update ()
137- ch = fb .right_tree .tag_has ( 'file ' )
138- letters = [fb .right_tree .item (c , 'text' )[0 ] for c in ch ]
139+ ch = fb .right_tree .get_children ( ' ' )
140+ letters = [fb .right_tree .item (c , 'text' )[0 ]. lower () for c in ch ]
139141 i = 65
140- while chr (i ) in letters :
142+ while chr (i ). lower () in letters :
141143 i += 1
142- letter = chr (i )
144+ letter = chr (i ).lower ()
145+ keyboard = Controller ()
143146 if letter .isalnum ():
144- fb .right_tree .event_generate ('<%s>' % letter )
147+ fb .right_tree .focus_force ()
148+ keyboard .press (letter )
149+ keyboard .release (letter )
145150 self .window .update ()
146151 self .assertTrue (fb .key_browse_entry .winfo_ismapped ())
147- self .assertEqual (fb .key_browse_entry .get (), letter )
148- fb .right_tree .event_generate ('<Return >' )
152+ self .assertEqual (fb .key_browse_entry .get (). lower () , letter )
153+ fb .right_tree .event_generate ('<Escape >' )
149154 self .window .update ()
150155 self .assertFalse (fb .key_browse_entry .winfo_ismapped ())
151156 if ch :
157+ fb .right_tree .focus_force ()
152158 letter = fb .right_tree .item (ch [0 ], 'text' )[0 ]
153- fb .right_tree .event_generate ('<%s>' % letter )
159+ keyboard .press (letter )
160+ keyboard .release (letter )
154161 self .window .update ()
155162 self .assertTrue (fb .key_browse_entry .winfo_ismapped ())
156- self .assertEqual (fb .key_browse_entry .get (), letter )
163+ self .assertEqual (fb .key_browse_entry .get (). lower () , letter )
157164 self .assertEqual (fb .right_tree .selection (), (ch [0 ],))
158165 l = [c for c in ch if fb .right_tree .item (c , 'text' )[0 ] == letter ]
159166 fb .key_browse_entry .focus_force ()
@@ -172,11 +179,16 @@ def test_filebrowser_keybrowse(self):
172179 self .window .update ()
173180 self .assertFalse (fb .key_browse_entry .winfo_ismapped ())
174181 fb .right_tree .focus_force ()
175- fb .right_tree .event_generate ('<%s>' % letter )
182+ keyboard .press (letter )
183+ keyboard .release (letter )
176184 self .window .update ()
177185 fb .right_tree .event_generate ('<Return>' )
178186 self .window .update ()
179- self .assertEqual (fb .get_result (), (ch [0 ],))
187+ item = os .path .realpath (ch [0 ])
188+ if os .path .isdir (item ):
189+ self .assertEqual (fb .history [- 1 ], ch [0 ])
190+ else :
191+ self .assertEqual (fb .get_result (), (item ,))
180192
181193 # --- opendir
182194 fb = FileBrowser (self .window , initialdir = "/" , mode = "opendir" ,
@@ -185,27 +197,31 @@ def test_filebrowser_keybrowse(self):
185197 fb .right_tree .focus_force ()
186198 self .window .update ()
187199 ch = fb .right_tree .tag_has ('folder' )
188- letters = [fb .right_tree .item (c , 'text' )[0 ] for c in ch ]
200+ letters = [fb .right_tree .item (c , 'text' )[0 ]. lower () for c in ch ]
189201 i = 65
190- while chr (i ) in letters :
202+ while chr (i ). lower () in letters :
191203 i += 1
192- letter = chr (i )
204+ letter = chr (i ). lower ()
193205 if letter .isalnum ():
194- fb .right_tree .event_generate ('<%s>' % letter )
206+ fb .right_tree .focus_force ()
207+ keyboard .press (letter )
208+ keyboard .release (letter )
195209 self .window .update ()
196210 self .assertTrue (fb .key_browse_entry .winfo_ismapped ())
197211 self .assertEqual (fb .key_browse_entry .get (), letter )
198212 fb .right_tree .event_generate ('<Return>' )
199213 self .window .update ()
200- self .assertEqual (fb .get_result (), ('/' ,))
214+ self .assertEqual (fb .get_result (), (os . path . abspath ( '/' ) ,))
201215 fb = FileBrowser (self .window , initialdir = "/" , mode = "opendir" ,
202216 multiple_selection = True )
203217 self .window .update ()
204218 fb .right_tree .focus_force ()
205219 if ch :
206- letter = fb .right_tree .item (ch [- 1 ], 'text' )[0 ]
207- l = [c for c in ch if fb .right_tree .item (c , 'text' )[0 ] == letter ]
208- fb .right_tree .event_generate ('<%s>' % letter )
220+ letter = fb .right_tree .item (ch [- 1 ], 'text' )[0 ].lower ()
221+ l = [c for c in ch if fb .right_tree .item (c , 'text' )[0 ].lower () == letter ]
222+ fb .right_tree .focus_force ()
223+ keyboard .press (letter )
224+ keyboard .release (letter )
209225 self .window .update ()
210226 self .assertTrue (fb .key_browse_entry .winfo_ismapped ())
211227 self .assertEqual (fb .key_browse_entry .get (), letter )
@@ -226,7 +242,8 @@ def test_filebrowser_keybrowse(self):
226242 self .window .update ()
227243 self .assertFalse (fb .key_browse_entry .winfo_ismapped ())
228244 fb .right_tree .focus_force ()
229- fb .right_tree .event_generate ('<%s>' % letter )
245+ keyboard .press (letter )
246+ keyboard .release (letter )
230247 self .window .update ()
231248 fb .right_tree .event_generate ('<Return>' )
232249 self .window .update ()
@@ -266,11 +283,12 @@ def test_filebrowser_keybrowse(self):
266283 self .window .update ()
267284
268285 def test_filebowser_foldercreation (self ):
269- fb = FileBrowser (self .window , initialdir = "/" ,
286+ initdir = os .path .abspath ('/' )
287+ fb = FileBrowser (self .window , initialdir = initdir ,
270288 foldercreation = True )
271289 self .window .update ()
272290 self .assertTrue (fb .b_new_folder .winfo_ismapped ())
273- self .assertTrue ('disabled' in fb .b_new_folder .state ())
291+ self .assertIs ('disabled' not in fb .b_new_folder .state (), os . access ( initdir , os . W_OK ))
274292 fb .display_folder (os .path .expanduser ('~' ))
275293 self .window .update ()
276294 self .assertTrue (fb .b_new_folder .winfo_ismapped ())
@@ -287,7 +305,7 @@ def test_filebrowser_sorting(self):
287305 okbuttontext = None , cancelbuttontext = "Cancel" ,
288306 foldercreation = True )
289307 self .window .update ()
290- walk = os .walk ('/' )
308+ walk = os .walk (os . path . abspath ( '/' ) )
291309 root , dirs , files = walk .send (None )
292310 dirs = [os .path .join (root , d ) for d in dirs ]
293311 files = [os .path .join (root , f ) for f in files ]
@@ -363,8 +381,8 @@ def test_filebrowser_on_selection(self):
363381 fb .right_tree .selection_clear ()
364382 fb .right_tree .selection_set (ch [0 ])
365383 self .window .update ()
366- self .assertEqual (fb .entry .get (),
367- os .path .join (fb .right_tree .item (ch [0 ], 'text' ), '' ))
384+ self .assertEqual (os . path . abspath ( fb .entry .get () ),
385+ os .path .abspath ( os . path . join (fb .right_tree .item (ch [0 ], 'text' ), '' ) ))
368386 fb .focus_force ()
369387 fb .event_generate ("<Control-l>" )
370388 self .window .update ()
@@ -390,8 +408,8 @@ def test_filebrowser_on_selection(self):
390408 fb .right_tree .selection_clear ()
391409 fb .right_tree .selection_set (ch [0 ])
392410 self .window .update ()
393- self .assertEqual (fb .entry .get (),
394- os .path .join (fb .right_tree .item (ch [0 ], 'text' ), '' ))
411+ self .assertEqual (os . path . abspath ( fb .entry .get () ),
412+ os .path .abspath ( os . path . join (fb .right_tree .item (ch [0 ], 'text' ), '' ) ))
395413 ch = fb .right_tree .tag_has ('file' )
396414 if ch :
397415 fb .right_tree .selection_clear ()
0 commit comments