From d2fa28c5e1c02b1642ff2032696d54f949b7ab1f Mon Sep 17 00:00:00 2001 From: Josh Holtrop Date: Wed, 20 Sep 2017 19:40:51 -0400 Subject: [PATCH] Fix BufferView repeating last line for the remainder of the view --- src/core/BufferView.cc | 3 ++- test/src/test_BufferView.cc | 16 ++++++++++++++++ 2 files changed, 18 insertions(+), 1 deletion(-) diff --git a/src/core/BufferView.cc b/src/core/BufferView.cc index 3ceb8ad..da5296c 100644 --- a/src/core/BufferView.cc +++ b/src/core/BufferView.cc @@ -88,7 +88,8 @@ void BufferView::update() ld.line = std::make_shared(*line_iterator); m_lines.push_back(ld); row_offset += ld.n_rows; - line_iterator->go_next_line(); + if (!line_iterator->go_next_line()) + break; } /* Reset some fields if buffer becomes empty. */ diff --git a/test/src/test_BufferView.cc b/test/src/test_BufferView.cc index ccfa022..4669a12 100644 --- a/test/src/test_BufferView.cc +++ b/test/src/test_BufferView.cc @@ -682,3 +682,19 @@ TEST(BufferViewTest, scrolls_window_through_a_very_long_single_line_file) EXPECT_EQ(9, bv.cursor_screen_row()); EXPECT_EQ(1009u, **iterator); } + +TEST(BufferViewTest, shows_only_lines_in_buffer_if_fewer_lines_in_buffer_than_view) +{ + auto b = buffer1(); + auto iterator = b->add_iterator(); + BufferView bv(b, iterator, Cwd); + bv.resize(50, 50); + bv.update(); + int count = 0; + for (auto it = bv.vert_iter(); it.is_valid(); it++) + { + EXPECT_EQ(count, it.row_offset()); + count++; + } + EXPECT_EQ(13, count); +}