From 441c33821e6e53e3b82471c094adb79b89c364f1 Mon Sep 17 00:00:00 2001 From: Josh Holtrop Date: Sun, 15 Jan 2017 20:02:12 -0500 Subject: [PATCH] add unit test for basic undo/redo of inserts --- test/src/test_Buffer.cc | 54 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 54 insertions(+) diff --git a/test/src/test_Buffer.cc b/test/src/test_Buffer.cc index 0a379d5..49c1873 100644 --- a/test/src/test_Buffer.cc +++ b/test/src/test_Buffer.cc @@ -139,3 +139,57 @@ TEST(BufferTest, adds_a_newline_after_inserted_character_when_inserting_in_an_em EXPECT_EQ(ss("J\n"), b.get_string()); EXPECT_EQ(C('\n'), **it); } + +TEST(BufferTest, allows_undo_and_redo_of_inserts) +{ + std::string s("abc\ndef\nghi\n"); + Buffer b((const uint8_t *)&s[0], s.size()); + auto it = b.add_cursor(); + + b.enter_insert_mode(); + b.insert_code_point(*it, C('1')); + b.insert_code_point(*it, C('2')); + b.exit_insert_mode(); + EXPECT_EQ(ss("12abc\ndef\nghi\n"), b.get_string()); + EXPECT_EQ(C('a'), **it); + + it->go_next_line(); + it->go_right_in_line(false); + b.enter_insert_mode(); + b.insert_code_point(*it, C('3')); + b.exit_insert_mode(); + EXPECT_EQ(ss("12abc\nd3ef\nghi\n"), b.get_string()); + EXPECT_EQ(C('e'), **it); + + it->go_end_of_line(true); + b.insert_code_point(*it, C('$')); + EXPECT_EQ(ss("12abc\nd3ef$\nghi\n"), b.get_string()); + EXPECT_EQ(C('\n'), **it); + + it->go_start_of_line(); + EXPECT_EQ(C('d'), **it); + + b.undo(); + EXPECT_EQ(ss("12abc\nd3ef\nghi\n"), b.get_string()); + EXPECT_EQ(C('d'), **it); + + b.undo(); + EXPECT_EQ(ss("12abc\ndef\nghi\n"), b.get_string()); + EXPECT_EQ(C('d'), **it); + + b.undo(); + EXPECT_EQ(ss("abc\ndef\nghi\n"), b.get_string()); + EXPECT_EQ(C('d'), **it); + + b.redo(); + EXPECT_EQ(ss("12abc\ndef\nghi\n"), b.get_string()); + EXPECT_EQ(C('d'), **it); + + b.redo(); + EXPECT_EQ(ss("12abc\nd3ef\nghi\n"), b.get_string()); + EXPECT_EQ(C('d'), **it); + + b.redo(); + EXPECT_EQ(ss("12abc\nd3ef$\nghi\n"), b.get_string()); + EXPECT_EQ(C('d'), **it); +}