Fix cursor go_up()/go_down(), turn on unit tests

This commit is contained in:
Josh Holtrop 2016-11-07 22:42:54 -05:00
parent 5c9f7a7645
commit abb11a0b8c
4 changed files with 34 additions and 11 deletions

View File

@ -12,6 +12,7 @@ class Buffer
public:
Buffer(const char * filename = nullptr);
bool write_to_file(const char * filename);
auto add_cursor() { return m_gap_buffer->add_cursor(); }
protected:
bool m_eol_at_eof;

View File

@ -223,6 +223,7 @@ bool GapBuffer::Cursor::go_up(size_t target_column)
c2.go_start_of_line();
*this = c2;
m_line--;
m_column = 0u;
forward_to_column(target_column);
return true;
}
@ -237,6 +238,7 @@ bool GapBuffer::Cursor::go_down(size_t target_column)
}
*this = c2;
m_line++;
m_column = 0u;
forward_to_column(target_column);
return true;
}

View File

@ -76,6 +76,8 @@ public:
uint32_t operator*() const { return *m_iterator; }
uint8_t * address() const { return m_iterator.address(); }
bool valid() const { return m_iterator.valid(); }
size_t line() const { return m_line; }
size_t column() const { return m_column; }
protected:
Iterator m_iterator;

View File

@ -28,24 +28,42 @@ TEST(BufferTest, writes_an_empty_file_for_an_empty_buffer)
TestSupport::compare_files("test/files/empty.txt", "test/tmp/f");
}
#if 0
TEST(BufferTest, allows_navigating_using_cursors)
{
Buffer b;
ASSERT_TRUE(b.load_from_file("test/files/line_endings/lf_format.txt"));
std::shared_ptr<PieceTable::Cursor> cursor = b.piece_table->add_cursor();
Buffer b("test/files/line_endings/lf_format.txt");
auto cursor = b.add_cursor();
EXPECT_EQ(0u, cursor->column());
EXPECT_EQ(0u, cursor->line());
ASSERT_EQ((uint32_t)'H', **cursor);
EXPECT_FALSE(cursor->check_go_up(1, cursor->column));
EXPECT_FALSE(cursor->go_up(cursor->column()));
EXPECT_EQ(0u, cursor->column());
EXPECT_EQ(0u, cursor->line());
ASSERT_EQ((uint32_t)'H', **cursor);
EXPECT_TRUE(cursor->check_go_right(1, false));
EXPECT_TRUE(cursor->go_right(false));
EXPECT_EQ(1u, cursor->column());
EXPECT_EQ(0u, cursor->line());
ASSERT_EQ((uint32_t)'e', **cursor);
EXPECT_TRUE(cursor->check_go_down(1, cursor->column));
EXPECT_TRUE(cursor->go_down(cursor->column()));
EXPECT_EQ(1u, cursor->column());
EXPECT_EQ(1u, cursor->line());
ASSERT_EQ((uint32_t)'h', **cursor);
EXPECT_TRUE(cursor->check_go_left(1));
EXPECT_TRUE(cursor->go_left());
EXPECT_EQ(0u, cursor->column());
EXPECT_EQ(1u, cursor->line());
ASSERT_EQ((uint32_t)'T', **cursor);
EXPECT_FALSE(cursor->check_go_left(1));
EXPECT_FALSE(cursor->go_left());
EXPECT_EQ(0u, cursor->column());
EXPECT_EQ(1u, cursor->line());
ASSERT_EQ((uint32_t)'T', **cursor);
EXPECT_FALSE(cursor->check_go_down(1, cursor->column));
EXPECT_FALSE(cursor->go_down(cursor->column()));
EXPECT_EQ(0u, cursor->column());
EXPECT_EQ(1u, cursor->line());
ASSERT_EQ((uint32_t)'T', **cursor);
}
#endif