mirror of
https://github.com/kovidgoyal/kitty
synced 2026-07-26 18:22:09 +02:00
test: Add more tests for scroll_to_prompt, fco, and lvco
This commit is contained in:
@@ -1147,22 +1147,44 @@ class TestScreen(BaseTest):
|
||||
s.toggle_alt_screen()
|
||||
self.assertFalse(str(s.line(s.cursor.y)))
|
||||
|
||||
s = self.create_screen()
|
||||
s = self.create_screen(scrollback=10)
|
||||
draw_output(1, 'start')
|
||||
for i in range(4):
|
||||
mark_prompt()
|
||||
s.draw(f'$ {i}')
|
||||
s.carriage_return()
|
||||
s.index(), s.index()
|
||||
draw_prompt(str(i) + 'ab')
|
||||
draw_output(1, 'ut')
|
||||
self.ae(s.scrolled_by, 0)
|
||||
self.ae(str(s.visual_line(0)), '$ 2ab')
|
||||
self.assertFalse(s.scroll_to_prompt(-3))
|
||||
self.assertTrue(s.scroll_to_prompt())
|
||||
self.ae(str(s.visual_line(0)), '$ 1ab')
|
||||
self.assertTrue(s.scroll_to_prompt())
|
||||
self.ae(str(s.visual_line(0)), '$ 0ab')
|
||||
self.assertFalse(s.scroll_to_prompt())
|
||||
self.assertFalse(s.scroll_to_prompt(4))
|
||||
self.assertTrue(s.scroll_to_prompt(1))
|
||||
self.ae(str(s.visual_line(0)), '$ 1ab')
|
||||
self.assertTrue(s.scroll_to_prompt(1))
|
||||
self.ae(str(s.visual_line(0)), '$ 2ab')
|
||||
self.assertFalse(s.scroll_to_prompt(1))
|
||||
# wrap prompts
|
||||
s.resize(s.lines + 1, s.columns - 2)
|
||||
self.ae(s.scrolled_by, 0)
|
||||
self.ae(str(s.visual_line(0)), 'ab')
|
||||
self.assertFalse(s.scroll_to_prompt(-4))
|
||||
self.assertTrue(s.scroll_to_prompt())
|
||||
self.ae(str(s.visual_line(0)), '$ 2')
|
||||
self.assertTrue(s.scroll_to_prompt())
|
||||
self.ae(str(s.visual_line(0)), '$ 1')
|
||||
self.assertTrue(s.scroll_to_prompt())
|
||||
self.ae(str(s.visual_line(0)), '$ 0')
|
||||
self.assertFalse(s.scroll_to_prompt())
|
||||
self.assertFalse(s.scroll_to_prompt(4))
|
||||
self.assertTrue(s.scroll_to_prompt(1))
|
||||
self.ae(str(s.visual_line(0)), '$ 1')
|
||||
self.assertTrue(s.scroll_to_prompt(1))
|
||||
self.ae(str(s.visual_line(0)), '$ 2')
|
||||
self.assertTrue(s.scroll_to_prompt(1))
|
||||
self.ae(str(s.visual_line(0)), 'ab')
|
||||
self.assertFalse(s.scroll_to_prompt(1))
|
||||
|
||||
s = self.create_screen()
|
||||
@@ -1244,10 +1266,19 @@ class TestScreen(BaseTest):
|
||||
s.scroll(2, False)
|
||||
self.ae(str(s.visual_line(0)), '$ 1')
|
||||
self.ae(fco(), '0x\n1x\n')
|
||||
# test: obscure prompt in scrollback
|
||||
s.resize(3, 5)
|
||||
self.ae(str(s.visual_line(0)), '0x')
|
||||
# without succeeding prompt
|
||||
self.ae(fco(), '0x\n1x\n')
|
||||
s.resize(4, 5)
|
||||
draw_prompt('3')
|
||||
# with succeeding prompt
|
||||
self.ae(fco(), '0x\n1x')
|
||||
|
||||
# resize
|
||||
# get last cmd output with continued output mark
|
||||
draw_prompt('3'), draw_output(1, 'long_line'), draw_output(2, 'l', False)
|
||||
draw_output(1, 'long_line'), draw_output(2, 'l', False)
|
||||
s.resize(4, 5)
|
||||
s.scroll_to_prompt(-4)
|
||||
self.ae(str(s.visual_line(0)), '$ 0')
|
||||
@@ -1257,6 +1288,44 @@ class TestScreen(BaseTest):
|
||||
self.ae(lvco(), '0\n1\n2')
|
||||
s.scroll_to_prompt(1)
|
||||
self.ae(lvco(), '0x\n1x')
|
||||
# test: obscure prompt
|
||||
s.scroll(2, False)
|
||||
self.ae(lvco(), '0x\n1x')
|
||||
# test: prompts without output
|
||||
s.scroll(s.scrolled_by, False)
|
||||
draw_prompt('4')
|
||||
# resizing resets last visited, rely on scroll_to_prompt
|
||||
s.resize(2, s.columns + 4)
|
||||
s.scroll_to_prompt()
|
||||
s.scroll_to_prompt(1)
|
||||
self.ae(str(s.visual_line(0)), '$ 4')
|
||||
self.ae(lvco(), '')
|
||||
s.resize(5, s.columns)
|
||||
draw_prompt('wrapcmd')
|
||||
s.scroll_to_prompt(1)
|
||||
self.ae(lvco(), '')
|
||||
draw_output(1, 'wrapout'), draw_output(1, 'y', False)
|
||||
self.ae(lvco(), '0wrapout\n0y\n')
|
||||
# wrap long prompt with long output
|
||||
s.resize(5, s.columns - 4)
|
||||
self.ae(str(s.visual_line(0)), 'pcmd')
|
||||
# test: set last visited to previous empty prompt
|
||||
s.scroll_to_prompt(-2)
|
||||
self.ae(str(s.visual_line(0)), '$ 4')
|
||||
self.ae(lvco(), '0wrapout\n0y\n')
|
||||
mark_prompt(), s.draw('$ end')
|
||||
self.ae(lvco(), '0wrapout\n0y')
|
||||
# test: set last visited to continued line of long prompt
|
||||
s.scroll_to_prompt(2)
|
||||
self.ae(str(s.visual_line(0)), 'pcmd')
|
||||
self.ae(lvco(), '0wrapout\n0y')
|
||||
s.scroll_to_prompt()
|
||||
self.ae(lvco(), '0wrapout\n0y')
|
||||
# test: set last visited to continued line of output
|
||||
s.carriage_return(), s.index()
|
||||
draw_output(1, 'z')
|
||||
s.scroll_to_prompt(1)
|
||||
self.ae(lvco(), '0wrapout\n0y')
|
||||
|
||||
# test that post rewrap prompt lines have correct attributes
|
||||
s = self.create_screen(cols=5, lines=5, scrollback=15)
|
||||
|
||||
Reference in New Issue
Block a user