From edf29f0bac3041a1d1b179dc25e0c87416d4219e Mon Sep 17 00:00:00 2001 From: Josh Holtrop Date: Sun, 15 Jan 2017 20:46:09 -0500 Subject: [PATCH] add tests for modifying uncommitted insert change units --- test/src/test_Buffer.cc | 47 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 47 insertions(+) diff --git a/test/src/test_Buffer.cc b/test/src/test_Buffer.cc index 257c831..d20aa00 100644 --- a/test/src/test_Buffer.cc +++ b/test/src/test_Buffer.cc @@ -280,3 +280,50 @@ TEST(BufferTest, erase_chunks_are_coalesced_within_a_change_operation) EXPECT_EQ(C('e'), **it); EXPECT_EQ(ss("abcdef\n"), b.get_string()); } + +TEST(BufferTest, erases_in_uncommitted_insert_units_modify_the_insert_units) +{ + std::string s("abcdef\n"); + Buffer b((const uint8_t *)&s[0], s.size()); + auto it = b.add_cursor(); + + it->go_right_in_line(false); + b.enter_insert_mode(); + b.insert_code_point(*it, C('1')); + b.insert_code_point(*it, C('2')); + b.insert_code_point(*it, C('3')); + it->go_left_in_line(); + b.erase_code_point(*it); + b.exit_insert_mode(); + EXPECT_EQ(1u, b.m_change_operations.size()); + EXPECT_EQ(ss("a12bcdef\n"), b.get_string()); + EXPECT_EQ(C('b'), **it); + + b.undo(); + EXPECT_EQ(ss("abcdef\n"), b.get_string()); + EXPECT_EQ(C('b'), **it); + + b.redo(); + EXPECT_EQ(ss("a12bcdef\n"), b.get_string()); + EXPECT_EQ(C('b'), **it); +} + +TEST(BufferTest, a_insert_change_unit_is_dropped_if_everything_in_it_is_erased_before_committing) +{ + std::string s("abc\n"); + Buffer b((const uint8_t *)&s[0], s.size()); + auto it = b.add_cursor(); + + it->go_right_in_line(false); + b.enter_insert_mode(); + b.insert_code_point(*it, C('1')); + b.insert_code_point(*it, C('2')); + it->go_left_in_line(); + b.erase_code_point(*it); /* backspace */ + it->go_left_in_line(); + b.erase_code_point(*it); /* backspace */ + b.exit_insert_mode(); + EXPECT_EQ(ss("abc\n"), b.get_string()); + EXPECT_EQ(0u, b.m_change_operations.size()); + EXPECT_EQ(C('b'), **it); +}