test more undo/redo change unit combinations
This commit is contained in:
parent
af77c97394
commit
cd0efc431d
@ -308,6 +308,55 @@ TEST(BufferTest, erases_in_uncommitted_insert_units_modify_the_insert_units)
|
||||
EXPECT_EQ(C('b'), **it);
|
||||
}
|
||||
|
||||
TEST(BufferTest, erases_outside_uncommitted_insert_units_start_new_units_within_the_same_operation)
|
||||
{
|
||||
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.erase_code_point(*it);
|
||||
b.exit_insert_mode();
|
||||
EXPECT_EQ(1u, b.m_change_operations.size());
|
||||
EXPECT_EQ(ss("a12cdef\n"), b.get_string());
|
||||
EXPECT_EQ(C('c'), **it);
|
||||
|
||||
b.undo();
|
||||
EXPECT_EQ(ss("abcdef\n"), b.get_string());
|
||||
EXPECT_EQ(C('c'), **it);
|
||||
|
||||
b.redo();
|
||||
EXPECT_EQ(ss("a12cdef\n"), b.get_string());
|
||||
EXPECT_EQ(C('c'), **it);
|
||||
|
||||
b.enter_insert_mode();
|
||||
b.insert_code_point(*it, C('3'));
|
||||
it->go_start_of_line();
|
||||
b.erase_code_point(*it);
|
||||
b.exit_insert_mode();
|
||||
EXPECT_EQ("123cdef\n", b.get_string());
|
||||
EXPECT_EQ(C('1'), **it);
|
||||
|
||||
b.undo();
|
||||
EXPECT_EQ("a12cdef\n", b.get_string());
|
||||
EXPECT_EQ(C('1'), **it);
|
||||
|
||||
b.undo();
|
||||
EXPECT_EQ("abcdef\n", b.get_string());
|
||||
EXPECT_EQ(C('b'), **it);
|
||||
|
||||
b.redo();
|
||||
EXPECT_EQ("a12cdef\n", b.get_string());
|
||||
EXPECT_EQ(C('c'), **it);
|
||||
|
||||
b.redo();
|
||||
EXPECT_EQ("123cdef\n", b.get_string());
|
||||
EXPECT_EQ(C('c'), **it);
|
||||
}
|
||||
|
||||
TEST(BufferTest, a_insert_change_unit_is_dropped_if_everything_in_it_is_erased_before_committing)
|
||||
{
|
||||
std::string s("abc\n");
|
||||
@ -355,3 +404,36 @@ TEST(BufferTest, non_adjacent_inserts_in_insert_mode_create_a_single_change_oper
|
||||
b.undo();
|
||||
EXPECT_EQ("abc\n", b.get_string());
|
||||
}
|
||||
|
||||
TEST(BufferTest, erase_then_insert_creates_single_change_operation)
|
||||
{
|
||||
std::string s("abc\n");
|
||||
Buffer b((const uint8_t *)&s[0], s.size());
|
||||
auto it = b.add_cursor();
|
||||
|
||||
b.enter_insert_mode();
|
||||
b.erase_code_point(*it);
|
||||
b.insert_code_point(*it, C('1'));
|
||||
b.exit_insert_mode();
|
||||
EXPECT_EQ("1bc\n", b.get_string());
|
||||
|
||||
b.undo();
|
||||
EXPECT_EQ("abc\n", b.get_string());
|
||||
}
|
||||
|
||||
TEST(BufferTest, non_adjacent_erases_create_a_single_change_operation)
|
||||
{
|
||||
std::string s("abc\n");
|
||||
Buffer b((const uint8_t *)&s[0], s.size());
|
||||
auto it = b.add_cursor();
|
||||
|
||||
b.enter_insert_mode();
|
||||
b.erase_code_point(*it);
|
||||
it->go_right_in_line(false);
|
||||
b.erase_code_point(*it);
|
||||
b.exit_insert_mode();
|
||||
EXPECT_EQ("b\n", b.get_string());
|
||||
|
||||
b.undo();
|
||||
EXPECT_EQ(ss("abc\n"), b.get_string());
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user