BufferView: test and fix scrolling through super long lines
This commit is contained in:
1 parent
70aba6e2d4
commit
5c3a095aeb
2 files changed
+50
No files matched your search
@@ -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);
|
||||
}
|
||||
Reference in new issue
Block a user