diff --git a/test/src/test_BufferView.cc b/test/src/test_BufferView.cc index a3418ea..9238df9 100644 --- a/test/src/test_BufferView.cc +++ b/test/src/test_BufferView.cc @@ -189,3 +189,96 @@ TEST(BufferViewTest, adjusts_cursor_row_as_cursor_moves) bv.update(); EXPECT_EQ(0, bv.cursor_screen_row()); } + +TEST(BufferViewTest, adjusts_cursor_row_as_cursor_moves_with_scroll_offset_1) +{ + auto b = buffer1(); + auto iterator = b->add_iterator(); + BufferView bv(b, iterator, Cwd); + bv.resize(5, 5); + bv.set_scroll_offset(1); + bv.update(); + EXPECT_EQ(0, bv.cursor_screen_row()); + iterator->go_next_line(); // to 1 + bv.update(); + EXPECT_EQ(1, bv.cursor_screen_row()); + iterator->go_next_line(); // to 2 + bv.update(); + EXPECT_EQ(2, bv.cursor_screen_row()); + iterator->go_next_line(); // to 3 + bv.update(); + EXPECT_EQ(3, bv.cursor_screen_row()); + iterator->go_next_line(); // to 4 + bv.update(); + EXPECT_EQ(3, bv.cursor_screen_row()); + iterator->go_next_line(); // to 5 + bv.update(); + EXPECT_EQ(3, bv.cursor_screen_row()); + iterator->go_next_line(); // to 6 + bv.update(); + EXPECT_EQ(3, bv.cursor_screen_row()); + iterator->go_next_line(); // to 7 + bv.update(); + EXPECT_EQ(3, bv.cursor_screen_row()); + iterator->go_previous_line(); // to 6 + bv.update(); + EXPECT_EQ(1, bv.cursor_screen_row()); + iterator->go_previous_line(); // to 5 + bv.update(); + EXPECT_EQ(1, bv.cursor_screen_row()); + iterator->go_previous_line(); // to 4 + bv.update(); + EXPECT_EQ(1, bv.cursor_screen_row()); + iterator->go_previous_line(); // to 3 + bv.update(); + EXPECT_EQ(1, bv.cursor_screen_row()); + iterator->go_previous_line(); // to 2 + bv.update(); + EXPECT_EQ(1, bv.cursor_screen_row()); + iterator->go_previous_line(); // to 1 + bv.update(); + EXPECT_EQ(1, bv.cursor_screen_row()); + iterator->go_previous_line(); // to 0 + bv.update(); + EXPECT_EQ(0, bv.cursor_screen_row()); +} + +TEST(BufferViewTest, moves_view_down_while_traversing_a_wrapped_line) +{ + auto b = buffer1(); + auto iterator = b->add_iterator(); + BufferView bv(b, iterator, Cwd); + bv.resize(4, 10); + for (int i = 0; i < 9; i++) + { + iterator->go_next_line(); + bv.update(); + } + EXPECT_EQ(9, bv.cursor_screen_row()); + EXPECT_EQ(0, bv.cursor_screen_column()); + EXPECT_EQ(0, bv.cursor_virtual_column()); + for (int i = 0; i < 3; i++) + { + iterator->go_forward(); + bv.update(); + EXPECT_EQ(9, bv.cursor_screen_row()); + EXPECT_EQ(1 + i, bv.cursor_screen_column()); + EXPECT_EQ(1 + i, bv.cursor_virtual_column()); + } + for (int i = 0; i < 4; i++) + { + iterator->go_forward(); + bv.update(); + EXPECT_EQ(9, bv.cursor_screen_row()); + EXPECT_EQ(i, bv.cursor_screen_column()); + EXPECT_EQ(4 + i, bv.cursor_virtual_column()); + } + for (int i = 0; i < 4; i++) + { + iterator->go_forward(); + bv.update(); + EXPECT_EQ(9, bv.cursor_screen_row()); + EXPECT_EQ(i, bv.cursor_screen_column()); + EXPECT_EQ(8 + i, bv.cursor_virtual_column()); + } +}