Skip to content

Commit cfdb38d

Browse files
committed
Add tests
1 parent e630abe commit cfdb38d

1 file changed

Lines changed: 247 additions & 0 deletions

File tree

tests/test_filebrowser.py

Lines changed: 247 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)