Fix Buffer::Iterator::go_previous_line()
This commit is contained in:
parent
3c73b9ae97
commit
1862d867f6
@ -153,19 +153,17 @@ 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())
|
||||
if (*i2 == '\n')
|
||||
{
|
||||
i2.go_start_of_line();
|
||||
m_line--;
|
||||
m_offset = i2.m_offset;
|
||||
go_start_of_line();
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
|
5
test/files/blank_lines.txt
Normal file
5
test/files/blank_lines.txt
Normal file
@ -0,0 +1,5 @@
|
||||
abc
|
||||
|
||||
def
|
||||
|
||||
end
|
@ -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);
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user