@@ -105,3 +105,250 @@ def test_filebrowser_save(self):
105105 self .window .update ()
106106 fb .validate ()
107107 self .assertEqual (fb .get_result (), '/test.png' )
108+
109+ def test_filebrowser_keybrowse (self ):
110+ # --- openfile
111+ fb = FileBrowser (self .window , initialdir = "/" , mode = "openfile" ,
112+ multiple_selection = True )
113+ self .window .update ()
114+ fb .right_tree .focus_force ()
115+ self .window .update ()
116+ ch = fb .right_tree .tag_has ('file' )
117+ letters = [fb .right_tree .item (c , 'text' )[0 ] for c in ch ]
118+ i = 65
119+ while chr (i ) in letters :
120+ i += 1
121+ letter = chr (i )
122+ if letter .isalnum ():
123+ fb .right_tree .event_generate ('<%s>' % letter )
124+ self .window .update ()
125+ self .assertTrue (fb .key_browse_entry .winfo_ismapped ())
126+ self .assertEqual (fb .key_browse_entry .get (), letter )
127+ fb .right_tree .event_generate ('<Return>' )
128+ self .window .update ()
129+ self .assertFalse (fb .key_browse_entry .winfo_ismapped ())
130+ if ch :
131+ letter = fb .right_tree .item (ch [0 ], 'text' )[0 ]
132+ fb .right_tree .event_generate ('<%s>' % letter )
133+ self .window .update ()
134+ self .assertTrue (fb .key_browse_entry .winfo_ismapped ())
135+ self .assertEqual (fb .key_browse_entry .get (), letter )
136+ self .assertEqual (fb .right_tree .selection (), (ch [0 ],))
137+ l = [c for c in ch if fb .right_tree .item (c , 'text' )[0 ] == letter ]
138+ fb .key_browse_entry .focus_force ()
139+ fb .key_browse_entry .event_generate ('<Down>' )
140+ self .window .update ()
141+ if len (l ) > 1 :
142+ self .assertEqual (tuple (fb .right_tree .selection ()), (l [1 ],))
143+ else :
144+ self .assertEqual (tuple (fb .right_tree .selection ()), (l [0 ],))
145+ fb .key_browse_entry .focus_force ()
146+ fb .key_browse_entry .event_generate ('<Up>' )
147+ self .window .update ()
148+ self .assertEqual (tuple (fb .right_tree .selection ()), (l [0 ],))
149+ fb .key_browse_entry .focus_force ()
150+ fb .key_browse_entry .event_generate ('<Escape>' )
151+ self .window .update ()
152+ self .assertFalse (fb .key_browse_entry .winfo_ismapped ())
153+ fb .right_tree .focus_force ()
154+ fb .right_tree .event_generate ('<%s>' % letter )
155+ self .window .update ()
156+ fb .right_tree .event_generate ('<Return>' )
157+ self .window .update ()
158+ self .assertEqual (fb .get_result (), (ch [0 ],))
159+
160+ # --- opendir
161+ fb = FileBrowser (self .window , initialdir = "/" , mode = "opendir" ,
162+ multiple_selection = True )
163+ self .window .update ()
164+ fb .right_tree .focus_force ()
165+ self .window .update ()
166+ ch = fb .right_tree .tag_has ('folder' )
167+ letters = [fb .right_tree .item (c , 'text' )[0 ] for c in ch ]
168+ i = 65
169+ while chr (i ) in letters :
170+ i += 1
171+ letter = chr (i )
172+ if letter .isalnum ():
173+ fb .right_tree .event_generate ('<%s>' % letter )
174+ self .window .update ()
175+ self .assertTrue (fb .key_browse_entry .winfo_ismapped ())
176+ self .assertEqual (fb .key_browse_entry .get (), letter )
177+ fb .right_tree .event_generate ('<Return>' )
178+ self .window .update ()
179+ self .assertEqual (fb .get_result (), ('/' ,))
180+ fb = FileBrowser (self .window , initialdir = "/" , mode = "opendir" ,
181+ multiple_selection = True )
182+ self .window .update ()
183+ fb .right_tree .focus_force ()
184+ if ch :
185+ letter = fb .right_tree .item (ch [- 1 ], 'text' )[0 ]
186+ l = [c for c in ch if fb .right_tree .item (c , 'text' )[0 ] == letter ]
187+ fb .right_tree .event_generate ('<%s>' % letter )
188+ self .window .update ()
189+ self .assertTrue (fb .key_browse_entry .winfo_ismapped ())
190+ self .assertEqual (fb .key_browse_entry .get (), letter )
191+ self .assertEqual (fb .right_tree .selection (), (l [0 ],))
192+ fb .key_browse_entry .focus_force ()
193+ fb .key_browse_entry .event_generate ('<Down>' )
194+ self .window .update ()
195+ if len (l ) > 1 :
196+ self .assertEqual (tuple (fb .right_tree .selection ()), (l [1 ],))
197+ else :
198+ self .assertEqual (tuple (fb .right_tree .selection ()), (l [0 ],))
199+ fb .key_browse_entry .focus_force ()
200+ fb .key_browse_entry .event_generate ('<Up>' )
201+ self .window .update ()
202+ self .assertEqual (tuple (fb .right_tree .selection ()), (l [0 ],))
203+ fb .key_browse_entry .focus_force ()
204+ fb .key_browse_entry .event_generate ('<Escape>' )
205+ self .window .update ()
206+ self .assertFalse (fb .key_browse_entry .winfo_ismapped ())
207+ fb .right_tree .focus_force ()
208+ fb .right_tree .event_generate ('<%s>' % letter )
209+ self .window .update ()
210+ fb .right_tree .event_generate ('<Return>' )
211+ self .window .update ()
212+ self .assertEqual (fb .get_result (), (l [0 ],))
213+
214+ def test_filebrowser_sorting (self ):
215+ fb = FileBrowser (self .window , initialdir = "/" ,
216+ multiple_selection = True , defaultext = ".png" ,
217+ title = "Test" , filetypes = [], mode = "opendir" ,
218+ okbuttontext = None , cancelbuttontext = "Cancel" ,
219+ foldercreation = True )
220+ self .window .update ()
221+ walk = os .walk ('/' )
222+ root , dirs , files = walk .send (None )
223+ dirs = [os .path .join (root , d ) for d in dirs ]
224+ files = [os .path .join (root , f ) for f in files ]
225+
226+ # --- sort by name
227+ fb ._sort_files_by_name (True )
228+ self .window .update ()
229+ ch = fb .right_tree .get_children ()
230+ dirs .sort (reverse = True )
231+ files .sort (reverse = True )
232+ self .assertEqual (ch , tuple (dirs ) + tuple (files ))
233+
234+ fb ._sort_files_by_name (False )
235+ self .window .update ()
236+ ch = fb .right_tree .get_children ()
237+ dirs .sort ()
238+ files .sort ()
239+ self .assertEqual (ch , tuple (dirs ) + tuple (files ))
240+
241+ # --- sort by size
242+ fb ._sort_by_size (False )
243+ self .window .update ()
244+ ch = fb .right_tree .get_children ()
245+ files .sort (key = os .path .getsize )
246+ self .assertEqual (ch , tuple (dirs ) + tuple (files ))
247+ fb ._sort_by_size (True )
248+ ch = fb .right_tree .get_children ()
249+ files .sort (key = os .path .getsize , reverse = True )
250+ self .assertEqual (ch , tuple (dirs ) + tuple (files ))
251+
252+ # --- sort by date
253+ fb ._sort_by_date (False )
254+ self .window .update ()
255+ ch = fb .right_tree .get_children ()
256+ dirs .sort (key = lambda d : os .path .getmtime (d ))
257+ files .sort (key = lambda f : os .path .getmtime (f ))
258+ self .assertEqual (ch , tuple (dirs ) + tuple (files ))
259+
260+ fb ._sort_by_date (True )
261+ self .window .update ()
262+ ch = fb .right_tree .get_children ()
263+ dirs .sort (key = os .path .getmtime , reverse = True )
264+ files .sort (key = os .path .getmtime , reverse = True )
265+ self .assertEqual (ch , tuple (dirs ) + tuple (files ))
266+
267+ # --- sort by location
268+ fb .left_tree .selection_clear ()
269+ fb .left_tree .selection_set ('recent' )
270+ self .window .update ()
271+ locations = list (fb .right_tree .get_children ())
272+ fb ._sort_by_location (True )
273+ self .window .update ()
274+ ch = fb .right_tree .get_children ()
275+ locations .sort (reverse = True )
276+ self .assertEqual (ch , tuple (locations ))
277+
278+ fb ._sort_by_location (False )
279+ self .window .update ()
280+ ch = fb .right_tree .get_children ()
281+ locations .sort ()
282+ self .assertEqual (ch , tuple (locations ))
283+
284+ def test_filebrowser_on_selection (self ):
285+ fb = FileBrowser (self .window , initialdir = "/etc" , mode = "opendir" )
286+ fb .event_generate ("<Control-l>" )
287+ self .window .update ()
288+ self .assertTrue (fb .entry .winfo_ismapped ())
289+ self .assertEqual (fb .entry .get (), '' )
290+ ch = fb .right_tree .tag_has ('folder' )
291+ if ch :
292+ fb .right_tree .selection_clear ()
293+ fb .right_tree .selection_set (ch [0 ])
294+ self .window .update ()
295+ self .assertEqual (fb .entry .get (),
296+ os .path .join (fb .right_tree .item (ch [0 ], 'text' ), '' ))
297+ fb .event_generate ("<Control-l>" )
298+ self .window .update ()
299+ self .assertFalse (fb .entry .winfo_ismapped ())
300+ fb .event_generate ("<Control-l>" )
301+ self .window .update ()
302+ ch = fb .right_tree .tag_has ('file' )
303+ if ch :
304+ fb .right_tree .selection_clear ()
305+ fb .right_tree .selection_set (ch [0 ])
306+ self .window .update ()
307+ self .assertEqual (fb .entry .get (),
308+ '' )
309+ fb = FileBrowser (self .window , initialdir = "/etc" , mode = "openfile" )
310+ fb .event_generate ("<Control-l>" )
311+ self .window .update ()
312+ self .assertTrue (fb .entry .winfo_ismapped ())
313+ self .assertEqual (fb .entry .get (), '' )
314+ ch = fb .right_tree .tag_has ('folder' )
315+ if ch :
316+ fb .right_tree .selection_clear ()
317+ fb .right_tree .selection_set (ch [0 ])
318+ self .window .update ()
319+ self .assertEqual (fb .entry .get (),
320+ os .path .join (fb .right_tree .item (ch [0 ], 'text' ), '' ))
321+ ch = fb .right_tree .tag_has ('file' )
322+ if ch :
323+ fb .right_tree .selection_clear ()
324+ fb .right_tree .selection_set (ch [0 ])
325+ self .window .update ()
326+ self .assertEqual (fb .entry .get (),
327+ fb .right_tree .item (ch [0 ], 'text' ))
328+ fb = FileBrowser (self .window , initialdir = "/etc" , mode = "save" )
329+ self .assertTrue (fb .entry .winfo_ismapped ())
330+ self .assertEqual (fb .entry .get (), '' )
331+ ch = fb .right_tree .tag_has ('folder' )
332+ if ch :
333+ fb .right_tree .selection_clear ()
334+ fb .right_tree .selection_set (ch [0 ])
335+ self .window .update ()
336+ self .assertEqual (fb .entry .get (),
337+ '' )
338+ ch = fb .right_tree .tag_has ('file' )
339+ if ch :
340+ fb .right_tree .selection_clear ()
341+ fb .right_tree .selection_set (ch [0 ])
342+ self .window .update ()
343+ self .assertEqual (fb .entry .get (),
344+ fb .right_tree .item (ch [0 ], 'text' ))
345+ fb .left_tree .selection_clear ()
346+ fb .left_tree .selection_set ('recent' )
347+ self .window .update ()
348+ ch = fb .right_tree .tag_has ('file' )
349+ if ch :
350+ fb .right_tree .selection_clear ()
351+ fb .right_tree .selection_set (ch [0 ])
352+ self .window .update ()
353+ self .assertEqual (fb .entry .get (),
354+ ch [0 ], 'text' )
0 commit comments