subiquity/subiquitycore/testing/view_helpers.py

57 lines
1.4 KiB
Python
Raw Normal View History

2017-11-07 22:59:13 +00:00
import re
import urwid
def find_with_pred(w, pred):
def _walk(w):
if pred(w):
return w
if hasattr(w, '_wrapped_widget'):
return _walk(w._wrapped_widget)
if hasattr(w, 'original_widget'):
return _walk(w.original_widget)
if isinstance(w, urwid.ListBox):
for w in w.body:
r = _walk(w)
if r:
return r
elif hasattr(w, 'contents'):
contents = w.contents
for w, _ in contents:
r = _walk(w)
if r:
return r
return _walk(w)
def find_button_matching(w, pat):
def pred(w):
return isinstance(w, urwid.Button) and re.match(pat, w.label)
return find_with_pred(w, pred)
def click(but):
but._emit('click')
def keypress(w, key, size=(30, 1)):
w.keypress(size, key)
def get_focus_path(w):
path = []
while True:
path.append(w)
2017-12-03 21:29:06 +00:00
if isinstance(w, urwid.ListBox) and w.set_focus_pending == "first selectable":
for w2 in w.body:
if w2.selectable():
w = w2
break
else:
break
2017-11-07 22:59:13 +00:00
if w.focus is not None:
w = w.focus
elif hasattr(w, '_wrapped_widget'):
w = w._wrapped_widget
elif hasattr(w, 'original_widget'):
w = w.original_widget
else:
break
return path