From 55dc13d729e451b01eb20723d3f6b8c38359abfa Mon Sep 17 00:00:00 2001 From: Josh Holtrop Date: Wed, 20 Sep 2017 20:00:19 -0400 Subject: [PATCH] Fix scrolling BufferView past empty lines --- src/core/BufferView.cc | 1 + test/src/test_BufferView.cc | 31 +++++++++++++++++++++++++++++++ 2 files changed, 32 insertions(+) diff --git a/src/core/BufferView.cc b/src/core/BufferView.cc index da5296c..fe802e8 100644 --- a/src/core/BufferView.cc +++ b/src/core/BufferView.cc @@ -401,6 +401,7 @@ void BufferView::move_forward_to_screen_position( std::shared_ptr line, int target_row_offset, bool allow_eol) { + *m_iterator = *line; for (auto it = horiz_iter(line); it.is_valid(); it++) { if ((allow_eol || (!it.is_eol())) && diff --git a/test/src/test_BufferView.cc b/test/src/test_BufferView.cc index 4669a12..adbd7a1 100644 --- a/test/src/test_BufferView.cc +++ b/test/src/test_BufferView.cc @@ -22,6 +22,21 @@ static std::shared_ptr buffer1() return std::make_shared((const uint8_t *)data, strlen(data)); } +static std::shared_ptr buffer2() +{ + static const char data[] = + "0\n" + "\n" + "2\n" + "3\n" + "4\n" + "\n" + "6\n" + "7\n" + "8\n"; + return std::make_shared((const uint8_t *)data, strlen(data)); +} + static std::shared_ptr buffer_empty() { return std::make_shared(nullptr, 0u); @@ -698,3 +713,19 @@ TEST(BufferViewTest, shows_only_lines_in_buffer_if_fewer_lines_in_buffer_than_vi } EXPECT_EQ(13, count); } + +TEST(BufferViewTest, scrolls_past_empty_lines) +{ + auto b = buffer2(); + auto iterator = b->add_cursor(); + BufferView bv(b, iterator, Cwd); + bv.resize(10, 1); + bv.update(); + EXPECT_EQ(0, LineNumber(iterator)); + bv.scroll_view_down(3, false); + bv.update(); + EXPECT_EQ(3, LineNumber(iterator)); + bv.scroll_view_up(3, false); + bv.update(); + EXPECT_EQ(0, LineNumber(iterator)); +}