Scrollback filling should happen after cursor position is finalized

This commit is contained in:
Kovid Goyal
2021-03-17 21:59:11 +05:30
parent a4d9d948ab
commit 0f3ff4e2d9
3 changed files with 67 additions and 68 deletions

View File

@@ -91,14 +91,10 @@ class BaseTest(TestCase):
options = Options(merge_configs(defaults._asdict(), final_options))
set_options(options)
def create_screen(self, cols=5, lines=5, scrollback=5, cell_width=10, cell_height=20, options=None, content=()):
def create_screen(self, cols=5, lines=5, scrollback=5, cell_width=10, cell_height=20, options=None):
self.set_options(options)
c = Callbacks()
s = Screen(c, lines, cols, scrollback, cell_width, cell_height, 0, c)
for content_line in content:
s.draw(content_line)
s.linefeed()
s.carriage_return()
return s
def assertEqualAttributes(self, c1, c2):

View File

@@ -305,45 +305,45 @@ class TestScreen(BaseTest):
def test_scrollback_fill_after_resize(self):
def prepare_screen(content=()):
return self.create_screen(
lines=5,
cols=5,
options={'scrollback_fill_enlarged_window': True},
content=content,
)
ans = self.create_screen(options={'scrollback_fill_enlarged_window': True})
for line in content:
ans.draw(line)
ans.linefeed()
ans.carriage_return()
return ans
def assert_lines(lines, s):
return self.ae(lines, str(s.linebuf).split("\n"))
def assert_lines(*lines):
return self.ae(lines, tuple(str(s.line(i)) for i in range(s.lines)))
# Height increased, width unchanged → pull down lines to fill new space at the top
s = prepare_screen([str(i) for i in range(0, 6)])
assert_lines(['2', '3', '4', '5', ''], s)
s = prepare_screen(map(str, range(6)))
assert_lines('2', '3', '4', '5', '')
s.resize(7, s.columns)
assert_lines(['0', '1', '2', '3', '4', '5', ''], s)
assert_lines('0', '1', '2', '3', '4', '5', '')
# Height increased, width increased → rewrap, pull down
s = prepare_screen(['0', '1', '2', '3' * 15])
assert_lines(['2', '33333', '33333', '33333', ''], s)
assert_lines('2', '33333', '33333', '33333', '')
s.resize(7, 12)
assert_lines(['0', '1', '2', '333333333333', '333', '', ''], s)
assert_lines('0', '1', '2', '333333333333', '333', '', '')
# Height increased, width decreased → rewrap, pull down if possible
s = prepare_screen(['0', '1', '2', '3' * 5])
assert_lines(['0', '1', '2', '33333', ''], s)
assert_lines('0', '1', '2', '33333', '')
s.resize(6, 4)
assert_lines(['0', '1', '2', '3333', '3', ''], s)
assert_lines('0', '1', '2', '3333', '3', '')
# Height unchanged, width increased → rewrap, pull down if possible
s = prepare_screen(['0', '1', '2', '3' * 15])
assert_lines(['2', '33333', '33333', '33333', ''], s)
assert_lines('2', '33333', '33333', '33333', '')
s.resize(s.lines, 12)
assert_lines(['1', '2', '333333333333', '333', ''], s)
assert_lines('1', '2', '333333333333', '333', '')
# Height decreased, width increased → rewrap, pull down if possible
s = prepare_screen(['0', '1', '2', '3' * 15])
assert_lines(['2', '33333', '33333', '33333', ''], s)
assert_lines('2', '33333', '33333', '33333', '')
s.resize(4, 12)
assert_lines(['2', '333333333333', '333', ''], s)
assert_lines('2', '333333333333', '333', '')
def test_tab_stops(self):
# Taken from vttest/main.c