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)))
|
(it.screen_column() <= m_target_screen_column)))
|
||||||
{
|
{
|
||||||
*m_iterator = *it.iterator();
|
*m_iterator = *it.iterator();
|
||||||
|
m_cursor_row_offset = it.row_offset();
|
||||||
}
|
}
|
||||||
else
|
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, LineNumber(iterator));
|
||||||
EXPECT_EQ(3, bv.cursor_screen_row());
|
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