BufferView: test and fix scrolling through super long lines
This commit is contained in:
parent
70aba6e2d4
commit
5c3a095aeb
@ -407,6 +407,7 @@ void BufferView::move_forward_to_screen_position(
|
||||
(it.screen_column() <= m_target_screen_column)))
|
||||
{
|
||||
*m_iterator = *it.iterator();
|
||||
m_cursor_row_offset = it.row_offset();
|
||||
}
|
||||
else
|
||||
{
|
||||
|
@ -633,3 +633,52 @@ TEST(BufferViewTest, scrolls_the_view_up_and_down_with_nonzero_scroll_offset)
|
||||
EXPECT_EQ(3, LineNumber(iterator));
|
||||
EXPECT_EQ(3, bv.cursor_screen_row());
|
||||
}
|
||||
|
||||
TEST(BufferViewTest, scrolls_window_through_a_very_long_single_line_file)
|
||||
{
|
||||
auto b = std::make_shared<Buffer>();
|
||||
auto iterator = b->add_cursor();
|
||||
for (int row = 0; row < 120; row++)
|
||||
{
|
||||
for (int col = 0; col < 10; col++)
|
||||
{
|
||||
b->insert_code_point(*iterator, (uint32_t)(row + 1000));
|
||||
}
|
||||
}
|
||||
iterator->go_start_of_line();
|
||||
BufferView bv(b, iterator, Cwd);
|
||||
bv.resize(10, 10);
|
||||
bv.update();
|
||||
EXPECT_EQ(0, bv.cursor_screen_row());
|
||||
EXPECT_EQ(1000u, **iterator);
|
||||
for (uint32_t i = 0u; i < 100u; i++)
|
||||
{
|
||||
bv.scroll_view_down(1, false);
|
||||
bv.update();
|
||||
EXPECT_EQ(0, bv.cursor_screen_row());
|
||||
EXPECT_EQ(i + 1001u, **iterator);
|
||||
}
|
||||
bv.scroll_view_down(20, false);
|
||||
bv.update();
|
||||
EXPECT_EQ(0, bv.cursor_screen_row());
|
||||
EXPECT_EQ(1110u, **iterator);
|
||||
|
||||
for (int i = 0; i < 9; i++)
|
||||
{
|
||||
bv.scroll_view_up(1, false);
|
||||
bv.update();
|
||||
EXPECT_EQ(i + 1, bv.cursor_screen_row());
|
||||
EXPECT_EQ(1110u, **iterator);
|
||||
}
|
||||
for (uint32_t i = 0; i < 50; i++)
|
||||
{
|
||||
bv.scroll_view_up(1, false);
|
||||
bv.update();
|
||||
EXPECT_EQ(9, bv.cursor_screen_row());
|
||||
EXPECT_EQ(1109u - i, **iterator);
|
||||
}
|
||||
bv.scroll_view_up(1000u, false);
|
||||
bv.update();
|
||||
EXPECT_EQ(9, bv.cursor_screen_row());
|
||||
EXPECT_EQ(1009u, **iterator);
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user