📄 test_urwid.py
字号:
def test2_right(self): self.ktest(self.t1,'right','right',9,"right at right edge") self.t2.set_edit_pos(8) self.ktest(self.t2,'right',None,9,"right at right edge-1") self.t3.set_edit_pos(0) self.t3.keypress((12,),'right') assert self.t3.get_pref_col((12,)) == 1 def test3_up(self): self.ktest(self.t1,'up','up',9,"up at top") self.t2.set_edit_pos(2) self.t2.keypress((12,),"left") assert self.t2.get_pref_col((12,)) == 7 self.ktest(self.t2,'up','up',1,"up at top again") assert self.t2.get_pref_col((12,)) == 7 self.t3.set_edit_pos(10) self.ktest(self.t3,'up',None,0,"up at top+1") def test4_down(self): self.ktest(self.t1,'down','down',9,"down single line") self.t3.set_edit_pos(5) self.ktest(self.t3,'down',None,10,"down line 1 to 2") self.ktest(self.t3,'down',None,15,"down line 2 to 3") self.ktest(self.t3,'down','down',15,"down at bottom")class EditRenderTest(unittest.TestCase): def rtest(self, w, expected_text, expected_cursor): get_cursor = w.get_cursor_coords((4,)) assert get_cursor == expected_cursor, "got: "+`get_cursor`+" expected: "+`expected_cursor` r = w.render((4,), focus = 1) text = [t for a, cs, t in [ln[0] for ln in r.content()]] assert text == expected_text, "got: "+`text`+" expected: "+`expected_text` assert r.cursor == expected_cursor, "got: "+`r.cursor`+" expected: "+`expected_cursor` def test1_SpaceWrap(self): w = urwid.Edit("","blah blah") w.set_edit_pos(0) self.rtest(w,["blah","blah"],(0,0)) w.set_edit_pos(4) self.rtest(w,["lah ","blah"],(3,0)) w.set_edit_pos(5) self.rtest(w,["blah","blah"],(0,1)) w.set_edit_pos(9) self.rtest(w,["blah","lah "],(3,1)) def test2_ClipWrap(self): w = urwid.Edit("","blah\nblargh",1) w.set_wrap_mode('clip') w.set_edit_pos(0) self.rtest(w,["blah","blar"],(0,0)) w.set_edit_pos(10) self.rtest(w,["blah","argh"],(3,1)) w.set_align_mode('right') w.set_edit_pos(6) self.rtest(w,["blah","larg"],(0,1)) def test3_AnyWrap(self): w = urwid.Edit("","blah blah") w.set_wrap_mode('any') self.rtest(w,["blah"," bla","h "],(1,2)) def test4_CursorNudge(self): w = urwid.Edit("","hi",align='right') w.keypress((4,),'end') self.rtest(w,[" hi "],(3,0)) w.keypress((4,),'left') self.rtest(w,[" hi"],(3,0)) class SelectableText(urwid.Text): def selectable(self): return 1 def keypress(self, size, key): return key class ListBoxCalculateVisibleTest(unittest.TestCase): def cvtest(self, desc, body, focus, offset_rows, inset_fraction, exp_offset_inset, exp_cur ): lbox = urwid.ListBox(body) lbox.body.set_focus( focus ) lbox.offset_rows = offset_rows lbox.inset_fraction = inset_fraction middle, top, bottom = lbox.calculate_visible((4,5),focus=1) offset_inset, focus_widget, focus_pos, _ign, cursor = middle if cursor is not None: x, y = cursor y += offset_inset cursor = x, y assert offset_inset == exp_offset_inset, "%s got: %s expected: %s" %(desc,`offset_inset`,`exp_offset_inset`) assert cursor == exp_cur, "%s (cursor) got: %s expected: %s" %(desc,`cursor`,`exp_cur`) def test1_simple(self): T = urwid.Text l = [T(""),T(""),T("\n"),T("\n\n"),T("\n"),T(""),T("")] self.cvtest( "simple top position", l, 3, 0, (0,1), 0, None ) self.cvtest( "simple middle position", l, 3, 1, (0,1), 1, None ) self.cvtest( "simple bottom postion", l, 3, 2, (0,1), 2, None ) self.cvtest( "straddle top edge", l, 3, 0, (1,2), -1, None ) self.cvtest( "straddle bottom edge", l, 3, 4, (0,1), 4, None ) self.cvtest( "off bottom edge", l, 3, 5, (0,1), 4, None ) self.cvtest( "way off bottom edge", l, 3, 100, (0,1), 4, None ) self.cvtest( "gap at top", l, 0, 2, (0,1), 0, None ) self.cvtest( "gap at top and off bottom edge", l, 2, 5, (0,1), 2, None ) self.cvtest( "gap at bottom", l, 6, 1, (0,1), 4, None ) self.cvtest( "gap at bottom and straddling top edge", l, 4, 0, (1,2), 1, None ) self.cvtest( "gap at bottom cannot completely fill", [T(""),T(""),T("")], 1, 0, (0,1), 1, None ) self.cvtest( "gap at top and bottom", [T(""),T(""),T("")], 1, 2, (0,1), 1, None ) def test2_cursor(self): T, E = urwid.Text, urwid.Edit l1 = [T(""),T(""),T("\n"),E("","\n\nX"),T("\n"),T(""),T("")] l2 = [T(""),T(""),T("\n"),E("","YY\n\n"),T("\n"),T(""),T("")] l2[3].set_edit_pos(2) self.cvtest( "plain cursor in view", l1, 3, 1, (0,1), 1, (1,3) ) self.cvtest( "cursor off top", l2, 3, 0, (1,3), 0, (2, 0) ) self.cvtest( "cursor further off top", l2, 3, 0, (2,3), 0, (2, 0) ) self.cvtest( "cursor off bottom", l1, 3, 3, (0,1), 2, (1, 4) ) self.cvtest( "cursor way off bottom", l1, 3, 100, (0,1), 2, (1, 4) ) class ListBoxChangeFocusTest(unittest.TestCase): def cftest(self, desc, body, pos, offset_inset, coming_from, cursor, snap_rows, exp_offset_rows, exp_inset_fraction, exp_cur ): lbox = urwid.ListBox(body) lbox.change_focus( (4,5), pos, offset_inset, coming_from, cursor, snap_rows ) exp = exp_offset_rows, exp_inset_fraction act = lbox.offset_rows, lbox.inset_fraction cursor = None focus_widget, focus_pos = lbox.body.get_focus() if focus_widget.selectable(): if hasattr(focus_widget,'get_cursor_coords'): cursor=focus_widget.get_cursor_coords((4,)) assert act == exp, "%s got: %s expected: %s" %(desc, act, exp) assert cursor == exp_cur, "%s (cursor) got: %s expected: %s" %(desc,`cursor`,`exp_cur`) def test1unselectable(self): T = urwid.Text l = [T("\n"),T("\n\n"),T("\n\n"),T("\n\n"),T("\n")] self.cftest( "simple unselectable", l, 2, 0, None, None, None, 0, (0,1), None ) self.cftest( "unselectable", l, 2, 1, None, None, None, 1, (0,1), None ) self.cftest( "unselectable off top", l, 2, -2, None, None, None, 0, (2,3), None ) self.cftest( "unselectable off bottom", l, 3, 2, None, None, None, 2, (0,1), None ) def test2selectable(self): T, S = urwid.Text, SelectableText l = [T("\n"),T("\n\n"),S("\n\n"),T("\n\n"),T("\n")] self.cftest( "simple selectable", l, 2, 0, None, None, None, 0, (0,1), None ) self.cftest( "selectable", l, 2, 1, None, None, None, 1, (0,1), None ) self.cftest( "selectable at top", l, 2, 0, 'below', None, None, 0, (0,1), None ) self.cftest( "selectable at bottom", l, 2, 2, 'above', None, None, 2, (0,1), None ) self.cftest( "selectable off top snap", l, 2, -1, 'below', None, None, 0, (0,1), None ) self.cftest( "selectable off bottom snap", l, 2, 3, 'above', None, None, 2, (0,1), None ) self.cftest( "selectable off top no snap", l, 2, -1, 'above', None, None, 0, (1,3), None ) self.cftest( "selectable off bottom no snap", l, 2, 3, 'below', None, None, 3, (0,1), None ) def test3large_selectable(self): T, S = urwid.Text, SelectableText l = [T("\n"),S("\n\n\n\n\n\n"),T("\n")] self.cftest( "large selectable no snap", l, 1, -1, None, None, None, 0, (1,7), None ) self.cftest( "large selectable snap up", l, 1, -2, 'below', None, None, 0, (0,1), None ) self.cftest( "large selectable snap up2", l, 1, -2, 'below', None, 2, 0, (0,1), None ) self.cftest( "large selectable almost snap up", l, 1, -2, 'below', None, 1, 0, (2,7), None ) self.cftest( "large selectable snap down", l, 1, 0, 'above', None, None, 0, (2,7), None ) self.cftest( "large selectable snap down2", l, 1, 0, 'above', None, 2, 0, (2,7), None ) self.cftest( "large selectable almost snap down", l, 1, 0, 'above', None, 1, 0, (0,1), None ) def test4cursor(self): T,E = urwid.Text, urwid.Edit #... class ListBoxRenderTest(unittest.TestCase): def ltest(self,desc,body,focus,offset_inset_rows,exp_text,exp_cur): lbox = urwid.ListBox(body) lbox.body.set_focus( focus ) lbox.shift_focus((4,10), offset_inset_rows ) canvas = lbox.render( (4,5), focus=1 ) text = ["".join([t for at, cs, t in ln]) for ln in canvas.content()] cursor = canvas.cursor assert text == exp_text, "%s (text) got: %s expected: %s" %(desc,`text`,`exp_text`) assert cursor == exp_cur, "%s (cursor) got: %s expected: %s" %(desc,`cursor`,`exp_cur`) def test1Simple(self): T = urwid.Text self.ltest( "simple one text item render", [T("1\n2")], 0, 0, ["1 ","2 "," "," "," "],None) self.ltest( "simple multi text item render off bottom", [T("1"),T("2"),T("3\n4"),T("5"),T("6")], 2, 2, ["1 ","2 ","3 ","4 ","5 "],None) self.ltest( "simple multi text item render off top", [T("1"),T("2"),T("3\n4"),T("5"),T("6")], 2, 1, ["2 ","3 ","4 ","5 ","6 "],None) def test2Trim(self): T = urwid.Text self.ltest( "trim unfocused bottom", [T("1\n2"),T("3\n4"),T("5\n6")], 1, 2, ["1 ","2 ","3 ","4 ","5 "],None) self.ltest( "trim unfocused top", [T("1\n2"),T("3\n4"),T("5\n6")], 1, 1, ["2 ","3 ","4 ","5 ","6 "],None) self.ltest( "trim none full focus", [T("1\n2\n3\n4\n5")], 0, 0, ["1 ","2 ","3 ","4 ","5 "],None) self.ltest( "trim focus bottom", [T("1\n2\n3\n4\n5\n6")], 0, 0, ["1 ","2 ","3 ","4 ","5 "],None) self.ltest( "trim focus top", [T("1\n2\n3\n4\n5\n6")], 0, -1, ["2 ","3 ","4 ","5 ","6 "],None) self.ltest( "trim focus top and bottom", [T("1\n2\n3\n4\n5\n6\n7")], 0, -1, ["2 ","3 ","4 ","5 ","6 "],None) def test3Shift(self): T,E = urwid.Text, urwid.Edit self.ltest( "shift up one fit", [T("1\n2"),T("3"),T("4"),T("5"),T("6")], 4, 5, ["2 ","3 ","4 ","5 ","6 "],None) e = E("","ab\nc",1) e.set_edit_pos( 2 ) self.ltest( "shift down one cursor over edge", [e,T("3"),T("4"),T("5\n6")], 0, -1, ["ab ","c ","3 ","4 ","5 "], (2,0)) self.ltest( "shift up one cursor over edge", [T("1\n2"),T("3"),T("4"),E("","d\ne")], 3, 4, ["2 ","3 ","4 ","d ","e "], (1,4)) self.ltest( "shift none cursor top focus over edge", [E("","ab\n"),T("3"),T("4"),T("5\n6")], 0, -1, [" ","3 ","4 ","5 ","6 "], (0,0)) e = E("","abc\nd") e.set_edit_pos( 3 ) self.ltest( "shift none cursor bottom focus over edge", [T("1\n2"),T("3"),T("4"),e], 3, 4, ["1 ","2 ","3 ","4 ","abc "], (3,4)) class ListBoxKeypressTest(unittest.TestCase): def ktest(self, desc, key, body, focus, offset_inset, exp_focus, exp_offset_inset, exp_cur, lbox = None): if lbox is None: lbox = urwid.ListBox(body) lbox.body.set_focus( focus ) lbox.shift_focus((4,10), offset_inset ) ret_key = lbox.keypress((4,5),key) middle, top, bottom = lbox.calculate_visible((4,5),focus=1) offset_inset, focus_widget, focus_pos, _ign, cursor = middle if cursor is not None: x, y = cursor y += offset_inset cursor = x, y exp = exp_focus, exp_offset_inset act = focus_pos, offset_inset assert act == exp, "%s got: %s expected: %s" %(desc,`act`,`exp`) assert cursor == exp_cur, "%s (cursor) got: %s expected: %s" %(desc,`cursor`,`exp_cur`) return ret_key,lbox def test1_up(self): T,S,E = urwid.Text, SelectableText, urwid.Edit self.ktest( "direct selectable both visible", 'up', [S(""),S("")], 1, 1, 0, 0, None ) self.ktest( "selectable skip one all visible", 'up', [S(""),T(""),S("")], 2, 2, 0, 0, None ) key,lbox = self.ktest( "nothing above no scroll", 'up', [S("")], 0, 0, 0, 0, None ) assert key == 'up' key, lbox = self.ktest( "unselectable above no scroll", 'up', [T(""),T(""),S("")], 2, 2, 2, 2, None ) assert key == 'up'
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -