5
5
except ImportError :
6
6
from tkinter import ttk
7
7
import os
8
+ from pynput .keyboard import Key , Controller
8
9
9
10
10
11
class TestFileBrowser (BaseWidgetTest ):
@@ -104,7 +105,8 @@ def test_filebrowser_save(self):
104
105
foldercreation = True )
105
106
self .window .update ()
106
107
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' ))
108
110
fb = FileBrowser (self .window , initialdir = "/" , initialfile = "test.png" , mode = "save" ,
109
111
filetypes = [("PNG" , '*.png|*.PNG' ), ("JPG" , '*.jpg|*.JPG' ),
110
112
('ALL' , '*' )])
@@ -134,26 +136,31 @@ def test_filebrowser_keybrowse(self):
134
136
self .window .update ()
135
137
fb .right_tree .focus_force ()
136
138
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 ]
139
141
i = 65
140
- while chr (i ) in letters :
142
+ while chr (i ). lower () in letters :
141
143
i += 1
142
- letter = chr (i )
144
+ letter = chr (i ).lower ()
145
+ keyboard = Controller ()
143
146
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 )
145
150
self .window .update ()
146
151
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 >' )
149
154
self .window .update ()
150
155
self .assertFalse (fb .key_browse_entry .winfo_ismapped ())
151
156
if ch :
157
+ fb .right_tree .focus_force ()
152
158
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 )
154
161
self .window .update ()
155
162
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 )
157
164
self .assertEqual (fb .right_tree .selection (), (ch [0 ],))
158
165
l = [c for c in ch if fb .right_tree .item (c , 'text' )[0 ] == letter ]
159
166
fb .key_browse_entry .focus_force ()
@@ -172,11 +179,16 @@ def test_filebrowser_keybrowse(self):
172
179
self .window .update ()
173
180
self .assertFalse (fb .key_browse_entry .winfo_ismapped ())
174
181
fb .right_tree .focus_force ()
175
- fb .right_tree .event_generate ('<%s>' % letter )
182
+ keyboard .press (letter )
183
+ keyboard .release (letter )
176
184
self .window .update ()
177
185
fb .right_tree .event_generate ('<Return>' )
178
186
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 ,))
180
192
181
193
# --- opendir
182
194
fb = FileBrowser (self .window , initialdir = "/" , mode = "opendir" ,
@@ -185,27 +197,31 @@ def test_filebrowser_keybrowse(self):
185
197
fb .right_tree .focus_force ()
186
198
self .window .update ()
187
199
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 ]
189
201
i = 65
190
- while chr (i ) in letters :
202
+ while chr (i ). lower () in letters :
191
203
i += 1
192
- letter = chr (i )
204
+ letter = chr (i ). lower ()
193
205
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 )
195
209
self .window .update ()
196
210
self .assertTrue (fb .key_browse_entry .winfo_ismapped ())
197
211
self .assertEqual (fb .key_browse_entry .get (), letter )
198
212
fb .right_tree .event_generate ('<Return>' )
199
213
self .window .update ()
200
- self .assertEqual (fb .get_result (), ('/' ,))
214
+ self .assertEqual (fb .get_result (), (os . path . abspath ( '/' ) ,))
201
215
fb = FileBrowser (self .window , initialdir = "/" , mode = "opendir" ,
202
216
multiple_selection = True )
203
217
self .window .update ()
204
218
fb .right_tree .focus_force ()
205
219
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 )
209
225
self .window .update ()
210
226
self .assertTrue (fb .key_browse_entry .winfo_ismapped ())
211
227
self .assertEqual (fb .key_browse_entry .get (), letter )
@@ -226,7 +242,8 @@ def test_filebrowser_keybrowse(self):
226
242
self .window .update ()
227
243
self .assertFalse (fb .key_browse_entry .winfo_ismapped ())
228
244
fb .right_tree .focus_force ()
229
- fb .right_tree .event_generate ('<%s>' % letter )
245
+ keyboard .press (letter )
246
+ keyboard .release (letter )
230
247
self .window .update ()
231
248
fb .right_tree .event_generate ('<Return>' )
232
249
self .window .update ()
@@ -266,11 +283,12 @@ def test_filebrowser_keybrowse(self):
266
283
self .window .update ()
267
284
268
285
def test_filebowser_foldercreation (self ):
269
- fb = FileBrowser (self .window , initialdir = "/" ,
286
+ initdir = os .path .abspath ('/' )
287
+ fb = FileBrowser (self .window , initialdir = initdir ,
270
288
foldercreation = True )
271
289
self .window .update ()
272
290
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 ))
274
292
fb .display_folder (os .path .expanduser ('~' ))
275
293
self .window .update ()
276
294
self .assertTrue (fb .b_new_folder .winfo_ismapped ())
@@ -287,7 +305,7 @@ def test_filebrowser_sorting(self):
287
305
okbuttontext = None , cancelbuttontext = "Cancel" ,
288
306
foldercreation = True )
289
307
self .window .update ()
290
- walk = os .walk ('/' )
308
+ walk = os .walk (os . path . abspath ( '/' ) )
291
309
root , dirs , files = walk .send (None )
292
310
dirs = [os .path .join (root , d ) for d in dirs ]
293
311
files = [os .path .join (root , f ) for f in files ]
@@ -363,8 +381,8 @@ def test_filebrowser_on_selection(self):
363
381
fb .right_tree .selection_clear ()
364
382
fb .right_tree .selection_set (ch [0 ])
365
383
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' ), '' ) ))
368
386
fb .focus_force ()
369
387
fb .event_generate ("<Control-l>" )
370
388
self .window .update ()
@@ -390,8 +408,8 @@ def test_filebrowser_on_selection(self):
390
408
fb .right_tree .selection_clear ()
391
409
fb .right_tree .selection_set (ch [0 ])
392
410
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' ), '' ) ))
395
413
ch = fb .right_tree .tag_has ('file' )
396
414
if ch :
397
415
fb .right_tree .selection_clear ()
0 commit comments