summaryrefslogtreecommitdiff
path: root/src/plugins/fakevim/fakevim_test.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/plugins/fakevim/fakevim_test.cpp')
-rw-r--r--src/plugins/fakevim/fakevim_test.cpp147
1 files changed, 147 insertions, 0 deletions
diff --git a/src/plugins/fakevim/fakevim_test.cpp b/src/plugins/fakevim/fakevim_test.cpp
index eef9ab0874..037eb3ef27 100644
--- a/src/plugins/fakevim/fakevim_test.cpp
+++ b/src/plugins/fakevim/fakevim_test.cpp
@@ -1902,6 +1902,19 @@ void FakeVimPlugin::test_vim_letter_case()
KEYS("2gUU", " " X "ABC" N "DEF");
KEYS("u", " " X "abc" N "def");
KEYS("<c-r>", " " X "ABC" N "DEF");
+
+ // undo, redo and dot command
+ data.setText(" abcde" N " fgh" N " ijk");
+ KEYS("3l" "<C-V>2l2j" "U", " a" X "BCDe" N " fGH" N " iJK");
+ KEYS("u", " a" X "bcde" N " fgh" N " ijk");
+ KEYS("<C-R>", " a" X "BCDe" N " fGH" N " iJK");
+ KEYS("u", " a" X "bcde" N " fgh" N " ijk");
+ KEYS("h.", " " X "ABCde" N " FGH" N " IJK");
+ KEYS("u", " " X "abcde" N " fgh" N " ijk");
+ KEYS("h.", " " X " ABcde" N " FGh" N " IJk");
+ KEYS("u", " " X " abcde" N " fgh" N " ijk");
+ KEYS("j.", " abcde" N " " X " FGh" N " IJk");
+ KEYS("u", " abcde" N " " X " fgh" N " ijk");
}
void FakeVimPlugin::test_vim_code_autoindent()
@@ -2246,6 +2259,45 @@ void FakeVimPlugin::test_vim_ex_yank()
data.setText("abc" N "def");
KEYS("\"xy$", X "abc" N "def");
KEYS("\"xP", "ab" X "cabc" N "def");
+
+ data.setText(
+ "abc def" N
+ "ghi jkl" N
+ );
+ KEYS("yiwp",
+ "aab" X "cbc def" N
+ "ghi jkl" N
+ );
+ KEYS("u",
+ X "abc def" N
+ "ghi jkl" N
+ );
+ KEYS("\"0p",
+ "aab" X "cbc def" N
+ "ghi jkl" N
+ );
+ KEYS("\"xyiw",
+ X "aabcbc def" N
+ "ghi jkl" N
+ );
+ KEYS("\"0p",
+ "aab" X "cabcbc def" N
+ "ghi jkl" N
+ );
+ KEYS("\"xp",
+ "aabcaabcb" X "cabcbc def" N
+ "ghi jkl" N
+ );
+
+ // register " is last yank
+ data.setText(
+ "abc def" N
+ "ghi jkl" N
+ );
+ KEYS("yiwp\"xyiw\"\"p",
+ "aaabcb" X "cabcbc def" N
+ "ghi jkl" N
+ );
}
void FakeVimPlugin::test_vim_ex_delete()
@@ -2551,6 +2603,7 @@ void FakeVimPlugin::test_map()
data.setText("abc" N "def");
data.doCommand(QString::fromUtf8("no \xc3\xb8 l|no l k|no k j|no j h"));
KEYS(QString::fromUtf8("\xc3\xb8"), "a" X "bc" N "def");
+ data.doCommand(QString::fromUtf8("unmap \xc3\xb8|unmap l|unmap k|unmap j"));
// Don't handle mapping in sub-modes that are not followed by movement command.
data.setText("abc" N "def");
@@ -2575,6 +2628,16 @@ void FakeVimPlugin::test_map()
data.doCommand("onoremap iwwX 3iwX Y");
KEYS("ciwwX Z<esc>", "X Y " X "Z" N "ghi jkl");
data.doCommand("unmap <SPACE>X");
+
+ // use mapping for <ESC> in insert
+ data.setText("ab" X "c def" N "ghi jkl");
+ data.doCommand("inoremap jk <ESC>");
+ KEYS("<C-V>jll" "I__jk", "ab" X "__c def" N "gh__i jkl");
+ INTEGRITY(false);
+ data.doCommand("unmap jk"); // shouldn't unmap for insert mode
+ KEYS("ijk", "a" X "b__c def" N "gh__i jkl");
+ data.doCommand("iunmap jk");
+ KEYS("ijk<ESC>", "aj" X "kb__c def" N "gh__i jkl");
}
void FakeVimPlugin::test_vim_command_cc()
@@ -3012,6 +3075,90 @@ void FakeVimPlugin::test_vim_command_y_dollar()
KEYS("$y$P", l[0]+'\n'+ l[1]+">>|>>\n" + lmid(2));
}
+void FakeVimPlugin::test_vim_command_percent()
+{
+ TestData data;
+ setup(&data);
+
+ data.setText(
+ "bool f(int arg1) {" N
+ " Q_ASSERT(arg1 >= 0);" N
+ " if (arg1 > 0) return true; else if (arg1 <= 0) return false;" N
+ "}" N
+ );
+
+ KEYS("%",
+ "bool f(int arg1" X ") {" N
+ " Q_ASSERT(arg1 >= 0);" N
+ " if (arg1 > 0) return true; else if (arg1 <= 0) return false;" N
+ "}" N
+ );
+
+ KEYS("%",
+ "bool f" X "(int arg1) {" N
+ " Q_ASSERT(arg1 >= 0);" N
+ " if (arg1 > 0) return true; else if (arg1 <= 0) return false;" N
+ "}" N
+ );
+
+ KEYS("$h%",
+ "bool f(int arg1) {" N
+ " Q_ASSERT(arg1 >= 0);" N
+ " if (arg1 > 0) return true; else if (arg1 <= 0) return false;" N
+ X "}" N
+ );
+
+ KEYS("%",
+ "bool f(int arg1) " X "{" N
+ " Q_ASSERT(arg1 >= 0);" N
+ " if (arg1 > 0) return true; else if (arg1 <= 0) return false;" N
+ "}" N
+ );
+
+ KEYS("j%",
+ "bool f(int arg1) {" N
+ " Q_ASSERT" X "(arg1 >= 0);" N
+ " if (arg1 > 0) return true; else if (arg1 <= 0) return false;" N
+ "}" N
+ );
+
+ KEYS("%",
+ "bool f(int arg1) {" N
+ " Q_ASSERT(arg1 >= 0" X ");" N
+ " if (arg1 > 0) return true; else if (arg1 <= 0) return false;" N
+ "}" N
+ );
+
+ KEYS("j%",
+ "bool f(int arg1) {" N
+ " Q_ASSERT(arg1 >= 0);" N
+ " if (arg1 > 0) return true; else if (arg1 <= 0" X ") return false;" N
+ "}" N
+ );
+
+ KEYS("0%",
+ "bool f(int arg1) {" N
+ " Q_ASSERT(arg1 >= 0);" N
+ " if (arg1 > 0" X ") return true; else if (arg1 <= 0) return false;" N
+ "}" N
+ );
+
+ KEYS("%",
+ "bool f(int arg1) {" N
+ " Q_ASSERT(arg1 >= 0);" N
+ " if " X "(arg1 > 0) return true; else if (arg1 <= 0) return false;" N
+ "}" N
+ );
+
+ // jump to 50% of buffer
+ KEYS("50%",
+ "bool f(int arg1) {" N
+ " Q_ASSERT(arg1 >= 0);" N
+ " " X "if (arg1 > 0) return true; else if (arg1 <= 0) return false;" N
+ "}" N
+ );
+}
+
void FakeVimPlugin::test_vim_command_Yp()
{
TestData data;