diff --git a/src/core/Buffer-Iterator.cc b/src/core/Buffer-Iterator.cc index 23ff99f..2a0b901 100644 --- a/src/core/Buffer-Iterator.cc +++ b/src/core/Buffer-Iterator.cc @@ -153,18 +153,16 @@ bool Buffer::Iterator::go_right_in_line(bool allow_eol) bool Buffer::Iterator::go_previous_line() { Iterator i2 = *this; - i2.go_back(); - while (i2.valid() && (*i2 != '\n')) + while (i2.valid()) { i2.go_back(); - } - i2.go_back(); - if (i2.valid()) - { - m_line--; - m_offset = i2.m_offset; - go_start_of_line(); - return true; + if (*i2 == '\n') + { + i2.go_start_of_line(); + m_line--; + m_offset = i2.m_offset; + return true; + } } return false; } diff --git a/test/files/blank_lines.txt b/test/files/blank_lines.txt new file mode 100644 index 0000000..7af78dc --- /dev/null +++ b/test/files/blank_lines.txt @@ -0,0 +1,5 @@ +abc + +def + +end diff --git a/test/src/test_Buffer.cc b/test/src/test_Buffer.cc index 7ee5ad5..1fd5c1a 100644 --- a/test/src/test_Buffer.cc +++ b/test/src/test_Buffer.cc @@ -67,3 +67,28 @@ TEST(BufferTest, allows_navigating_using_iterators) EXPECT_EQ(0u, iterator->line()); ASSERT_EQ((uint32_t)'H', **iterator); } + +TEST(BufferTest, allows_navigating_using_iterators2) +{ + Buffer b("test/files/blank_lines.txt"); + auto iterator = b.add_iterator(); + + EXPECT_EQ(0u, iterator->line()); + EXPECT_EQ((uint32_t)'a', **iterator); + + EXPECT_TRUE(iterator->go_next_line()); + EXPECT_EQ(1u, iterator->line()); + EXPECT_EQ((uint32_t)'\n', **iterator); + + EXPECT_TRUE(iterator->go_next_line()); + EXPECT_EQ(2u, iterator->line()); + EXPECT_EQ((uint32_t)'d', **iterator); + + EXPECT_TRUE(iterator->go_previous_line()); + EXPECT_EQ(1u, iterator->line()); + EXPECT_EQ((uint32_t)'\n', **iterator); + + EXPECT_TRUE(iterator->go_previous_line()); + EXPECT_EQ(0u, iterator->line()); + EXPECT_EQ((uint32_t)'a', **iterator); +}