forked from qt-creator/qt-creator
fakevim: autotests for 'e', 'dd', 'w', 'cc'
This commit is contained in:
14
src/plugins/fakevim/README
Normal file
14
src/plugins/fakevim/README
Normal file
@@ -0,0 +1,14 @@
|
||||
|
||||
|
||||
fakevim is based on eventFilters installed on a QTextEdit or a QPlainTextEdit.
|
||||
It basically catches all keystrokes and modifies some internal state that
|
||||
make the resulting text in the editor look like it was using vim.
|
||||
|
||||
There are only a few files in here:
|
||||
|
||||
fakevimplugin.{h,cpp} - interaction with the rest of Creator
|
||||
fakevimactions.{h,cpp} - settings
|
||||
fakevimhandler.{h,cpp} - the "real" event
|
||||
|
||||
There are some more hints for developers in fakevimhandler.cpp
|
||||
|
@@ -29,13 +29,18 @@
|
||||
|
||||
#include "fakevimhandler.h"
|
||||
|
||||
// Please do not add any direct dependencies to other Qt Creator code here.
|
||||
//
|
||||
// ATTENTION:
|
||||
//
|
||||
// 1 Please do not add any direct dependencies to other Qt Creator code here.
|
||||
// Instead emit signals and let the FakeVimPlugin channel the information to
|
||||
// Qt Creator. The idea is to keep this file here in a "clean" state that
|
||||
// allows easy reuse with any QTextEdit or QPlainTextEdit derived class.
|
||||
|
||||
|
||||
// Some conventions:
|
||||
//
|
||||
// 2 There are a few auto tests located in ../../../tests/auto/fakevim.
|
||||
// Commands that are covered there are marked as "// tested" below.
|
||||
//
|
||||
// 3 Some conventions:
|
||||
//
|
||||
// Use 1 based line numbers and 0 based column numbers. Even though
|
||||
// the 1 based line are not nice it matches vim's and QTextEdit's 'line'
|
||||
@@ -47,10 +52,10 @@
|
||||
// There is always a "current" cursor (m_tc). A current "region of interest"
|
||||
// spans between m_anchor (== anchor()) and m_tc.position() (== position())
|
||||
// The value of m_tc.anchor() is not used.
|
||||
//
|
||||
|
||||
#include <utils/qtcassert.h>
|
||||
|
||||
|
||||
#include <QtCore/QDebug>
|
||||
#include <QtCore/QFile>
|
||||
#include <QtCore/QObject>
|
||||
@@ -278,7 +283,7 @@ public:
|
||||
typedef QTextCursor::MoveOperation MoveOperation;
|
||||
typedef QTextCursor::MoveMode MoveMode;
|
||||
void moveToEndOfDocument() { m_tc.movePosition(EndOfDocument, MoveAnchor); }
|
||||
void moveToStartOfLine() { m_tc.movePosition(StartOfLine, MoveAnchor); }
|
||||
void moveToStartOfLine();
|
||||
void moveToEndOfLine();
|
||||
void moveUp(int n = 1) { moveDown(-n); }
|
||||
void moveDown(int n = 1); // { m_tc.movePosition(Down, MoveAnchor, n); }
|
||||
@@ -353,6 +358,8 @@ public:
|
||||
|
||||
// extra data for '.'
|
||||
void replay(const QString &text, int count);
|
||||
void setDotCommand(const QString &cmd) { m_dotCommand = cmd; }
|
||||
void setDotCommand(const QString &cmd, int n) { m_dotCommand = cmd.arg(n); }
|
||||
QString m_dotCommand;
|
||||
bool m_inReplay; // true if we are executing a '.'
|
||||
|
||||
@@ -632,6 +639,17 @@ void FakeVimHandler::Private::moveToEndOfLine()
|
||||
#endif
|
||||
}
|
||||
|
||||
void FakeVimHandler::Private::moveToStartOfLine()
|
||||
{
|
||||
#if 0
|
||||
// does not work for "hidden" documents like in the autotests
|
||||
m_tc.movePosition(StartOfLine, MoveAnchor);
|
||||
#else
|
||||
const QTextBlock &block = m_tc.block();
|
||||
setPosition(block.position());
|
||||
#endif
|
||||
}
|
||||
|
||||
void FakeVimHandler::Private::finishMovement(const QString &dotCommand)
|
||||
{
|
||||
//qDebug() << "ANCHOR: " << position() << anchor();
|
||||
@@ -656,7 +674,7 @@ void FakeVimHandler::Private::finishMovement(const QString &dotCommand)
|
||||
if (anchor() >= position())
|
||||
m_anchor++;
|
||||
if (!dotCommand.isEmpty())
|
||||
m_dotCommand = "c" + dotCommand;
|
||||
setDotCommand("c" + dotCommand);
|
||||
QString text = removeSelectedText();
|
||||
//qDebug() << "CHANGING TO INSERT MODE" << text;
|
||||
m_registers[m_register] = text;
|
||||
@@ -668,7 +686,7 @@ void FakeVimHandler::Private::finishMovement(const QString &dotCommand)
|
||||
if (anchor() >= position())
|
||||
m_anchor++;
|
||||
if (!dotCommand.isEmpty())
|
||||
m_dotCommand = "d" + dotCommand;
|
||||
setDotCommand("d" + dotCommand);
|
||||
m_registers[m_register] = removeSelectedText();
|
||||
m_submode = NoSubMode;
|
||||
if (atEndOfLine())
|
||||
@@ -694,8 +712,6 @@ void FakeVimHandler::Private::finishMovement(const QString &dotCommand)
|
||||
updateMiniBuffer();
|
||||
}
|
||||
|
||||
moveToTargetColumn();
|
||||
|
||||
m_moveType = MoveInclusive;
|
||||
m_mvcount.clear();
|
||||
m_opcount.clear();
|
||||
@@ -847,13 +863,19 @@ EventResult FakeVimHandler::Private::handleCommandMode(int key, int unmodified,
|
||||
} else if (m_submode == RegisterSubMode) {
|
||||
m_register = key;
|
||||
m_submode = NoSubMode;
|
||||
} else if (m_submode == ChangeSubMode && key == 'c') {
|
||||
moveToStartOfLine();
|
||||
} else if (m_submode == ChangeSubMode && key == 'c') { // tested
|
||||
moveDown(count() - 1);
|
||||
moveToEndOfLine();
|
||||
moveLeft();
|
||||
setAnchor();
|
||||
moveDown(count());
|
||||
moveToStartOfLine();
|
||||
setTargetColumn();
|
||||
moveUp(count() - 1);
|
||||
m_moveType = MoveLineWise;
|
||||
finishMovement("c");
|
||||
} else if (m_submode == DeleteSubMode && key == 'd') {
|
||||
m_lastInsertion.clear();
|
||||
setDotCommand("%1cc", count());
|
||||
finishMovement();
|
||||
} else if (m_submode == DeleteSubMode && key == 'd') { // tested
|
||||
moveToStartOfLine();
|
||||
setAnchor();
|
||||
moveDown(count());
|
||||
@@ -869,19 +891,19 @@ EventResult FakeVimHandler::Private::handleCommandMode(int key, int unmodified,
|
||||
setAnchor();
|
||||
moveDown(count() - 1);
|
||||
m_moveType = MoveLineWise;
|
||||
m_dotCommand = QString("%1<<").arg(count());
|
||||
setDotCommand("%1<<", count());
|
||||
finishMovement();
|
||||
} else if (m_submode == ShiftRightSubMode && key == '>') {
|
||||
setAnchor();
|
||||
moveDown(count() - 1);
|
||||
m_moveType = MoveLineWise;
|
||||
m_dotCommand = QString("%1>>").arg(count());
|
||||
setDotCommand("%1>>", count());
|
||||
finishMovement();
|
||||
} else if (m_submode == IndentSubMode && key == '=') {
|
||||
setAnchor();
|
||||
moveDown(count() - 1);
|
||||
m_moveType = MoveLineWise;
|
||||
m_dotCommand = QString("%1>>").arg(count());
|
||||
setDotCommand("%1>>", count());
|
||||
finishMovement();
|
||||
} else if (m_submode == ZSubMode) {
|
||||
//qDebug() << "Z_MODE " << cursorLineInDocument() << linesOnScreen();
|
||||
@@ -928,7 +950,7 @@ EventResult FakeVimHandler::Private::handleCommandMode(int key, int unmodified,
|
||||
m_tc.insertText(QString(count(), text.at(0)));
|
||||
m_moveType = MoveExclusive;
|
||||
m_submode = NoSubMode;
|
||||
m_dotCommand = QString("%1r%2").arg(count()).arg(text);
|
||||
setDotCommand("%1r" + text, count());
|
||||
finishMovement();
|
||||
} else {
|
||||
m_submode = NoSubMode;
|
||||
@@ -1125,7 +1147,7 @@ EventResult FakeVimHandler::Private::handleCommandMode(int key, int unmodified,
|
||||
handleStartOfLine();
|
||||
scrollToLineInDocument(cursorLineInDocument() - sline);
|
||||
finishMovement();
|
||||
} else if (key == 'e') {
|
||||
} else if (key == 'e') { // tested
|
||||
m_moveType = MoveInclusive;
|
||||
moveToWordBoundary(false, true);
|
||||
finishMovement();
|
||||
@@ -1175,13 +1197,13 @@ EventResult FakeVimHandler::Private::handleCommandMode(int key, int unmodified,
|
||||
handleStartOfLine();
|
||||
finishMovement();
|
||||
} else if (key == 'i') {
|
||||
m_dotCommand = "i"; //QString("%1i").arg(count());
|
||||
setDotCommand("i"); // setDotCommand("%1i", count());
|
||||
enterInsertMode();
|
||||
updateMiniBuffer();
|
||||
if (atEndOfLine())
|
||||
moveLeft();
|
||||
} else if (key == 'I') {
|
||||
m_dotCommand = "I"; //QString("%1I").arg(count());
|
||||
setDotCommand("I"); // setDotCommand("%1I", count());
|
||||
enterInsertMode();
|
||||
if (m_gflag)
|
||||
moveToStartOfLine();
|
||||
@@ -1256,7 +1278,7 @@ EventResult FakeVimHandler::Private::handleCommandMode(int key, int unmodified,
|
||||
search(lastSearchString(), !m_lastSearchForward);
|
||||
recordJump();
|
||||
} else if (key == 'o' || key == 'O') {
|
||||
m_dotCommand = QString("%1o").arg(count());
|
||||
setDotCommand("%1o", count());
|
||||
enterInsertMode();
|
||||
moveToFirstNonBlankOnLine();
|
||||
if (key == 'O')
|
||||
@@ -1293,18 +1315,18 @@ EventResult FakeVimHandler::Private::handleCommandMode(int key, int unmodified,
|
||||
moveLeft();
|
||||
}
|
||||
}
|
||||
m_dotCommand = QString("%1p").arg(count());
|
||||
setDotCommand("%1p", count());
|
||||
finishMovement();
|
||||
} else if (key == 'r') {
|
||||
m_submode = ReplaceSubMode;
|
||||
m_dotCommand = "r";
|
||||
setDotCommand("r");
|
||||
} else if (key == 'R') {
|
||||
// FIXME: right now we repeat the insertion count() times,
|
||||
// but not the deletion
|
||||
m_lastInsertion.clear();
|
||||
m_mode = InsertMode;
|
||||
m_submode = ReplaceSubMode;
|
||||
m_dotCommand = "R";
|
||||
setDotCommand("R");
|
||||
} else if (key == control('r')) {
|
||||
redo();
|
||||
} else if (key == 's') {
|
||||
@@ -1313,7 +1335,7 @@ EventResult FakeVimHandler::Private::handleCommandMode(int key, int unmodified,
|
||||
setAnchor();
|
||||
moveRight(qMin(count(), rightDist()));
|
||||
m_registers[m_register] = removeSelectedText();
|
||||
m_dotCommand = "s"; //QString("%1s").arg(count());
|
||||
setDotCommand("s"); // setDotCommand("%1s", count());
|
||||
m_opcount.clear();
|
||||
m_mvcount.clear();
|
||||
enterInsertMode();
|
||||
@@ -1340,7 +1362,7 @@ EventResult FakeVimHandler::Private::handleCommandMode(int key, int unmodified,
|
||||
enterVisualMode(VisualLineMode);
|
||||
} else if (key == control('v')) {
|
||||
enterVisualMode(VisualBlockMode);
|
||||
} else if (key == 'w') {
|
||||
} else if (key == 'w') { // tested
|
||||
// Special case: "cw" and "cW" work the same as "ce" and "cE" if the
|
||||
// cursor is on a non-blank.
|
||||
if (m_submode == ChangeSubMode) {
|
||||
@@ -1369,7 +1391,7 @@ EventResult FakeVimHandler::Private::handleCommandMode(int key, int unmodified,
|
||||
setAnchor();
|
||||
m_submode = DeleteSubMode;
|
||||
moveRight(qMin(count(), rightDist()));
|
||||
m_dotCommand = QString("%1x").arg(count());
|
||||
setDotCommand("%1x", count());
|
||||
finishMovement();
|
||||
} else if (key == 'X') {
|
||||
if (leftDist() > 0) {
|
||||
@@ -1957,16 +1979,16 @@ void FakeVimHandler::Private::highlightMatches(const QString &needle0)
|
||||
|
||||
void FakeVimHandler::Private::moveToFirstNonBlankOnLine()
|
||||
{
|
||||
QTextBlock block = m_tc.block();
|
||||
QTextDocument *doc = m_tc.document();
|
||||
m_tc.movePosition(StartOfLine, KeepAnchor);
|
||||
int firstPos = m_tc.position();
|
||||
const QTextBlock &block = m_tc.block();
|
||||
int firstPos = block.position();
|
||||
for (int i = firstPos, n = firstPos + block.length(); i < n; ++i) {
|
||||
if (!doc->characterAt(i).isSpace()) {
|
||||
m_tc.setPosition(i, KeepAnchor);
|
||||
setPosition(i);
|
||||
return;
|
||||
}
|
||||
}
|
||||
setPosition(block.position());
|
||||
}
|
||||
|
||||
void FakeVimHandler::Private::indentRegion(QChar typedChar)
|
||||
@@ -1978,7 +2000,7 @@ void FakeVimHandler::Private::indentRegion(QChar typedChar)
|
||||
qSwap(beginLine, endLine);
|
||||
int amount = 0;
|
||||
emit q->indentRegion(&amount, beginLine, endLine, typedChar);
|
||||
m_dotCommand = QString("%1==").arg(endLine - beginLine + 1);
|
||||
setDotCommand("%1==", endLine - beginLine + 1);
|
||||
}
|
||||
|
||||
void FakeVimHandler::Private::shiftRegionRight(int repeat)
|
||||
@@ -2000,7 +2022,7 @@ void FakeVimHandler::Private::shiftRegionRight(int repeat)
|
||||
|
||||
setPosition(firstPos);
|
||||
moveToFirstNonBlankOnLine();
|
||||
m_dotCommand = QString("%1>>").arg(endLine - beginLine + 1);
|
||||
setDotCommand("%1>>", endLine - beginLine + 1);
|
||||
}
|
||||
|
||||
void FakeVimHandler::Private::shiftRegionLeft(int repeat)
|
||||
@@ -2037,18 +2059,21 @@ void FakeVimHandler::Private::shiftRegionLeft(int repeat)
|
||||
|
||||
setPosition(firstPos);
|
||||
moveToFirstNonBlankOnLine();
|
||||
m_dotCommand = QString("%1<<").arg(endLine - beginLine + 1);
|
||||
setDotCommand("%1<<", endLine - beginLine + 1);
|
||||
}
|
||||
|
||||
void FakeVimHandler::Private::moveToTargetColumn()
|
||||
{
|
||||
if (m_targetColumn == -1 || m_tc.block().length() <= m_targetColumn) {
|
||||
const QTextBlock &block = m_tc.block();
|
||||
int col = m_tc.position() - m_tc.block().position();
|
||||
if (col == m_targetColumn)
|
||||
return;
|
||||
//qDebug() << "CORRECTING COLUMN FROM: " << col << "TO" << m_targetColumn;
|
||||
if (m_targetColumn == -1 || m_tc.block().length() <= m_targetColumn)
|
||||
m_tc.setPosition(block.position() + block.length() - 1, KeepAnchor);
|
||||
} else {
|
||||
else
|
||||
m_tc.setPosition(m_tc.block().position() + m_targetColumn, KeepAnchor);
|
||||
}
|
||||
}
|
||||
|
||||
/* if simple is given:
|
||||
* class 0: spaces
|
||||
@@ -2075,7 +2100,7 @@ void FakeVimHandler::Private::moveToWordBoundary(bool simple, bool forward)
|
||||
int lastClass = -1;
|
||||
while (true) {
|
||||
QChar c = doc->characterAt(m_tc.position() + (forward ? 1 : -1));
|
||||
qDebug() << "EXAMINING: " << c << " AT " << position();
|
||||
//qDebug() << "EXAMINING: " << c << " AT " << position();
|
||||
int thisClass = charClass(c, simple);
|
||||
if (thisClass != lastClass && lastClass != 0)
|
||||
--repeat;
|
||||
@@ -2319,6 +2344,7 @@ QString FakeVimHandler::Private::removeSelectedText()
|
||||
m_tc.setPosition(pos, KeepAnchor);
|
||||
QString from = m_tc.selection().toPlainText();
|
||||
m_tc.removeSelectedText();
|
||||
setAnchor();
|
||||
return from;
|
||||
}
|
||||
|
||||
|
@@ -55,13 +55,17 @@ public slots:
|
||||
void changeExtraInformation(const QString &info) { m_infoMessage = info; }
|
||||
|
||||
private slots:
|
||||
void commandDollar();
|
||||
void commandDown();
|
||||
void commandLeft();
|
||||
void commandRight();
|
||||
void commandI();
|
||||
void commandUp();
|
||||
void commandW();
|
||||
// command mode
|
||||
void command_cc();
|
||||
void command_dd();
|
||||
void command_dollar();
|
||||
void command_down();
|
||||
void command_e();
|
||||
void command_i();
|
||||
void command_left();
|
||||
void command_right();
|
||||
void command_up();
|
||||
void command_w();
|
||||
|
||||
private:
|
||||
void setup();
|
||||
@@ -73,6 +77,9 @@ private:
|
||||
const char* file, int line);
|
||||
QString insertCursor(const QString &needle0);
|
||||
|
||||
QString lmid(int i, int n = -1) const
|
||||
{ return QStringList(l.mid(i, n)).join("\n"); }
|
||||
|
||||
QTextEdit *m_textedit;
|
||||
QPlainTextEdit *m_plaintextedit;
|
||||
FakeVimHandler *m_handler;
|
||||
@@ -82,6 +89,8 @@ private:
|
||||
QString m_statusData;
|
||||
QString m_infoMessage;
|
||||
|
||||
// the individual lines
|
||||
static const QStringList l; // identifier intentionally kept short
|
||||
static const QString lines;
|
||||
static const QString escape;
|
||||
};
|
||||
@@ -100,8 +109,11 @@ const QString tst_FakeVim::lines =
|
||||
" return app.exec();\n"
|
||||
"}\n";
|
||||
|
||||
const QStringList tst_FakeVim::l = tst_FakeVim::lines.split('\n');
|
||||
|
||||
const QString tst_FakeVim::escape = QChar(27);
|
||||
|
||||
|
||||
tst_FakeVim::tst_FakeVim(bool usePlainTextEdit)
|
||||
{
|
||||
if (usePlainTextEdit) {
|
||||
@@ -170,16 +182,16 @@ bool tst_FakeVim::checkContentsHelper(QString want, const char* file, int line)
|
||||
QStringList wantlist = want.split('\n');
|
||||
QStringList gotlist = got.split('\n');
|
||||
if (!QTest::qCompare(gotlist.size(), wantlist.size(), "", "", file, line)) {
|
||||
qDebug() << "WANT: " << want;
|
||||
qDebug() << "GOT: " << got;
|
||||
qDebug() << "0 WANT: " << want;
|
||||
qDebug() << "0 GOT: " << got;
|
||||
return false;
|
||||
}
|
||||
for (int i = 0; i < wantlist.size() && i < gotlist.size(); ++i) {
|
||||
QString g = QString("line %1: %2").arg(i + 1).arg(gotlist.at(i));
|
||||
QString w = QString("line %1: %2").arg(i + 1).arg(wantlist.at(i));
|
||||
if (!QTest::qCompare(g, w, "", "", file, line)) {
|
||||
qDebug() << "WANT: " << want;
|
||||
qDebug() << "GOT: " << got;
|
||||
qDebug() << "1 WANT: " << want;
|
||||
qDebug() << "1 GOT: " << got;
|
||||
return false;
|
||||
}
|
||||
}
|
||||
@@ -222,11 +234,77 @@ QString tst_FakeVim::insertCursor(const QString &needle0)
|
||||
needle.remove('@');
|
||||
QString lines0 = lines;
|
||||
int pos = lines0.indexOf(needle);
|
||||
if (pos == -1)
|
||||
qDebug() << "Cannot find: \n----\n" + needle + "\n----\n";
|
||||
lines0.replace(pos, needle.size(), needle0);
|
||||
return lines0;
|
||||
}
|
||||
|
||||
void tst_FakeVim::commandI()
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// Command mode
|
||||
//
|
||||
//////////////////////////////////////////////////////////////////////////
|
||||
|
||||
void tst_FakeVim::command_cc()
|
||||
{
|
||||
setup();
|
||||
move("j", "@" + l[1]);
|
||||
check("ccabc" + escape, l[0] + "\nab@c\n" + lmid(2));
|
||||
check("ccabc" + escape, l[0] + "\nab@c\n" + lmid(2));
|
||||
check(".", l[0] + "\nab@c\n" + lmid(2));
|
||||
check("j", l[0] + "\nabc\n#i@nclude <QtGui>\n" + lmid(3));
|
||||
check("3ccxyz" + escape, l[0] + "\nabc\nxy@z\n" + lmid(5));
|
||||
}
|
||||
|
||||
void tst_FakeVim::command_dd()
|
||||
{
|
||||
setup();
|
||||
move("j", "@" + l[1]);
|
||||
check("dd", l[0] + "\n@" + lmid(2));
|
||||
check(".", l[0] + "\n@" + lmid(3));
|
||||
check("3dd", l[0] + "\n@" + lmid(6));
|
||||
}
|
||||
|
||||
void tst_FakeVim::command_dollar()
|
||||
{
|
||||
setup();
|
||||
move("j$", "<QtCore>@");
|
||||
move("j$", "<QtGui>@");
|
||||
move("2j", ")@");
|
||||
}
|
||||
|
||||
void tst_FakeVim::command_down()
|
||||
{
|
||||
setup();
|
||||
move("j", "@" + l[1]);
|
||||
move("3j", "@int main");
|
||||
move("4j", "@ return app.exec()");
|
||||
}
|
||||
|
||||
void tst_FakeVim::command_e()
|
||||
{
|
||||
setup();
|
||||
move("e", "@#include <QtCore");
|
||||
move("e", "#includ@e <QtCore");
|
||||
move("e", "#include @<QtCore");
|
||||
move("3e", "@#include <QtGui");
|
||||
move("e", "#includ@e <QtGui");
|
||||
move("e", "#include @<QtGui");
|
||||
move("e", "#include <QtGu@i");
|
||||
move("4e", "int main@(int argc, char *argv[])");
|
||||
move("e", "int main(in@t argc, char *argv[])");
|
||||
move("e", "int main(int arg@c, char *argv[])");
|
||||
move("e", "int main(int argc@, char *argv[])");
|
||||
move("e", "int main(int argc, cha@r *argv[])");
|
||||
move("e", "int main(int argc, char @*argv[])");
|
||||
move("e", "int main(int argc, char *arg@v[])");
|
||||
move("e", "int main(int argc, char *argv[]@)");
|
||||
move("e", "@{");
|
||||
}
|
||||
|
||||
void tst_FakeVim::command_i()
|
||||
{
|
||||
setup();
|
||||
|
||||
@@ -255,40 +333,7 @@ return;
|
||||
check("u", "@" + lines);
|
||||
}
|
||||
|
||||
void tst_FakeVim::commandDollar()
|
||||
{
|
||||
setup();
|
||||
move("j$", "<QtCore>@");
|
||||
move("j$", "<QtGui>@");
|
||||
move("2j", ")@");
|
||||
}
|
||||
|
||||
void tst_FakeVim::commandDown()
|
||||
{
|
||||
setup();
|
||||
move("j", "@#include <QtCore");
|
||||
move("3j", "@int main");
|
||||
move("4j", "@ return app.exec()");
|
||||
}
|
||||
|
||||
void tst_FakeVim::commandUp()
|
||||
{
|
||||
setup();
|
||||
move("j", "@#include <QtCore");
|
||||
move("3j", "@int main");
|
||||
move("4j", "@ return app.exec()");
|
||||
}
|
||||
|
||||
void tst_FakeVim::commandRight()
|
||||
{
|
||||
setup();
|
||||
move("4j", "@int main");
|
||||
move("l", "i@nt main");
|
||||
move("3l", "int @main");
|
||||
move("50l", "argv[])@");
|
||||
}
|
||||
|
||||
void tst_FakeVim::commandLeft()
|
||||
void tst_FakeVim::command_left()
|
||||
{
|
||||
setup();
|
||||
move("4j", "@int main");
|
||||
@@ -299,16 +344,44 @@ void tst_FakeVim::commandLeft()
|
||||
move("50h", "@int main");
|
||||
}
|
||||
|
||||
void tst_FakeVim::commandW()
|
||||
void tst_FakeVim::command_right()
|
||||
{
|
||||
setup();
|
||||
move("4j", "@int main");
|
||||
move("l", "i@nt main");
|
||||
move("3l", "int @main");
|
||||
move("50l", "argv[])@");
|
||||
}
|
||||
|
||||
void tst_FakeVim::command_up()
|
||||
{
|
||||
setup();
|
||||
move("j", "@#include <QtCore");
|
||||
move("3j", "@int main");
|
||||
move("4j", "@ return app.exec()");
|
||||
}
|
||||
|
||||
void tst_FakeVim::command_w()
|
||||
{
|
||||
setup();
|
||||
move("w", "@#include <QtCore");
|
||||
move("w", "#@include <QtCore");
|
||||
move("w", "#include @<QtCore");
|
||||
move("3w", "@#include <QtGui");
|
||||
move("w", "#@include <QtGui");
|
||||
move("w", "#include @<QtGui");
|
||||
move("w", "#include <@QtGui");
|
||||
move("4w", "int main@(int argc, char *argv[])");
|
||||
move("w", "int main(@int argc, char *argv[])");
|
||||
move("w", "int main(int @argc, char *argv[])");
|
||||
move("w", "int main(int argc@, char *argv[])");
|
||||
move("w", "int main(int argc, @char *argv[])");
|
||||
move("w", "int main(int argc, char @*argv[])");
|
||||
move("w", "int main(int argc, char *@argv[])");
|
||||
move("w", "int main(int argc, char *argv@[])");
|
||||
move("w", "@{");
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
#include <QtCore>
|
||||
#include <QtGui>
|
||||
@@ -321,6 +394,14 @@ int main(int argc, char *argv[])
|
||||
}
|
||||
*/
|
||||
|
||||
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// Main
|
||||
//
|
||||
//////////////////////////////////////////////////////////////////////////
|
||||
|
||||
int main(int argc, char *argv[]) \
|
||||
{
|
||||
int res = 0;
|
||||
|
Reference in New Issue
Block a user