From 06140f9c7a06680e070b806056618569361dc549 Mon Sep 17 00:00:00 2001
From: hjk <qtc-committer@nokia.com>
Date: Tue, 18 Aug 2009 09:46:42 +0200
Subject: [PATCH] fakevim: fix 'ddp'

Was broken recently during the yank/paste rework.
---
 src/plugins/fakevim/fakevimhandler.cpp | 11 +++++++----
 tests/auto/fakevim/main.cpp            | 17 ++++++++++++++---
 2 files changed, 21 insertions(+), 7 deletions(-)

diff --git a/src/plugins/fakevim/fakevimhandler.cpp b/src/plugins/fakevim/fakevimhandler.cpp
index 7a6f901b4b3..eb98ead8fc4 100644
--- a/src/plugins/fakevim/fakevimhandler.cpp
+++ b/src/plugins/fakevim/fakevimhandler.cpp
@@ -954,12 +954,15 @@ EventResult FakeVimHandler::Private::handleCommandMode(int key, int unmodified,
         setDotCommand("%1cc", count());
         finishMovement();
     } else if (m_submode == DeleteSubMode && key == 'd') { // tested
-        moveToStartOfLine();
-        setTargetColumn(); 
-        setAnchor();
-        moveDown(count());
         m_movetype = MoveLineWise;
+        int endPos = firstPositionInLine(lineForPosition(position()) + count() - 1);
+        Range range(position(), endPos, RangeLineMode);
+        yankText(range);
+        removeText(range);
         setDotCommand("%1dd", count());
+        m_submode = NoSubMode;
+        moveToFirstNonBlankOnLine();
+        setTargetColumn(); 
         finishMovement();
     } else if (m_submode == YankSubMode && key == 'y') {
         m_movetype = MoveLineWise;
diff --git a/tests/auto/fakevim/main.cpp b/tests/auto/fakevim/main.cpp
index fc873e8317f..9201ba7d5e5 100644
--- a/tests/auto/fakevim/main.cpp
+++ b/tests/auto/fakevim/main.cpp
@@ -58,6 +58,7 @@ private slots:
     // command mode
     void command_cc();
     void command_dd();
+    void command_dd_2();
     void command_dollar();
     void command_down();
     void command_dfx_down();
@@ -277,13 +278,23 @@ void tst_FakeVim::command_dd()
     move("j",    "@" + l[1]);
     check("dd",  l[0] + "\n@" + lmid(2));
     check(".",   l[0] + "\n@" + lmid(3));
-    check("3dd", l[0] + "\n@" + lmid(6));
-    check("8l",  l[0] + "\n    QApp@lication app(argc, argv);\n" + lmid(7));
+    check("3dd", l[0] + "\n    @QApplication app(argc, argv);\n" + lmid(7));
+    check("4l",  l[0] + "\n    QApp@lication app(argc, argv);\n" + lmid(7));
     check("dd",  l[0] + "\n@" + lmid(7));
-    check(".",   l[0] + "\n@" + lmid(8));
+    check(".",   l[0] + "\n    @return app.exec();\n" + lmid(9));
     check("dd",  l[0] + "\n@" + lmid(9));
 }
 
+void tst_FakeVim::command_dd_2()
+{
+    setup();
+    move("j",    "@" + l[1]);
+    check("dd",  l[0] + "\n@" + lmid(2));
+    check("p",   l[0] + "\n" + l[2] + "\n@" + l[1] + "\n" + lmid(3));
+return; // FIXME
+    check("u",   l[0] + "\n@" + lmid(2));
+}
+
 void tst_FakeVim::command_dollar()
 {
     setup();
-- 
GitLab