2009-02-25 09:15:00 +01:00
|
|
|
/**************************************************************************
|
2008-12-27 12:24:50 +01:00
|
|
|
**
|
|
|
|
|
** This file is part of Qt Creator
|
|
|
|
|
**
|
2012-01-26 18:33:46 +01:00
|
|
|
** Copyright (c) 2012 Nokia Corporation and/or its subsidiary(-ies).
|
2008-12-27 12:24:50 +01:00
|
|
|
**
|
2011-11-02 15:59:12 +01:00
|
|
|
** Contact: Nokia Corporation (qt-info@nokia.com)
|
2008-12-27 12:24:50 +01:00
|
|
|
**
|
|
|
|
|
**
|
2009-02-25 09:15:00 +01:00
|
|
|
** GNU Lesser General Public License Usage
|
2008-12-27 12:24:50 +01:00
|
|
|
**
|
2011-04-13 08:42:33 +02:00
|
|
|
** This file may be used under the terms of the GNU Lesser General Public
|
|
|
|
|
** License version 2.1 as published by the Free Software Foundation and
|
|
|
|
|
** appearing in the file LICENSE.LGPL included in the packaging of this file.
|
|
|
|
|
** Please review the following information to ensure the GNU Lesser General
|
|
|
|
|
** Public License version 2.1 requirements will be met:
|
|
|
|
|
** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
|
2008-12-27 12:24:50 +01:00
|
|
|
**
|
2010-12-17 16:01:08 +01:00
|
|
|
** In addition, as a special exception, Nokia gives you certain additional
|
2011-04-13 08:42:33 +02:00
|
|
|
** rights. These rights are described in the Nokia Qt LGPL Exception
|
2010-12-17 16:01:08 +01:00
|
|
|
** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
|
|
|
|
|
**
|
2011-04-13 08:42:33 +02:00
|
|
|
** Other Usage
|
|
|
|
|
**
|
|
|
|
|
** Alternatively, this file may be used in accordance with the terms and
|
|
|
|
|
** conditions contained in a signed written agreement between you and Nokia.
|
|
|
|
|
**
|
2010-12-17 16:01:08 +01:00
|
|
|
** If you have questions regarding the use of this file, please contact
|
2011-11-02 15:59:12 +01:00
|
|
|
** Nokia at qt-info@nokia.com.
|
2008-12-27 12:24:50 +01:00
|
|
|
**
|
2009-02-25 09:15:00 +01:00
|
|
|
**************************************************************************/
|
2008-12-27 12:24:50 +01:00
|
|
|
|
2009-04-06 09:55:57 +02:00
|
|
|
#include "fakevimhandler.h"
|
2008-12-27 12:24:50 +01:00
|
|
|
|
|
|
|
|
#include <QtCore/QSet>
|
2009-04-09 13:48:59 +02:00
|
|
|
|
|
|
|
|
#include <QtGui/QTextEdit>
|
2009-04-06 10:58:48 +02:00
|
|
|
#include <QtGui/QPlainTextEdit>
|
|
|
|
|
|
|
|
|
|
#include <QtTest/QtTest>
|
|
|
|
|
|
2010-09-02 15:32:04 +10:00
|
|
|
//TESTED_COMPONENT=src/plugins/fakevim
|
2009-04-06 10:58:48 +02:00
|
|
|
using namespace FakeVim;
|
|
|
|
|
using namespace FakeVim::Internal;
|
|
|
|
|
|
2009-04-09 14:43:04 +02:00
|
|
|
#define EDITOR(s) (m_textedit ? m_textedit->s : m_plaintextedit->s)
|
2008-12-27 12:24:50 +01:00
|
|
|
|
|
|
|
|
class tst_FakeVim : public QObject
|
|
|
|
|
{
|
|
|
|
|
Q_OBJECT
|
|
|
|
|
|
2009-04-06 10:58:48 +02:00
|
|
|
public:
|
2009-04-09 14:43:04 +02:00
|
|
|
tst_FakeVim(bool);
|
|
|
|
|
~tst_FakeVim();
|
2009-04-06 10:58:48 +02:00
|
|
|
|
|
|
|
|
public slots:
|
|
|
|
|
void changeStatusData(const QString &info) { m_statusData = info; }
|
2011-09-05 18:11:24 +02:00
|
|
|
void changeStatusMessage(const QString &info, int) { m_statusMessage = info; }
|
2009-04-06 10:58:48 +02:00
|
|
|
void changeExtraInformation(const QString &info) { m_infoMessage = info; }
|
2010-01-29 21:33:57 +01:00
|
|
|
|
2008-12-27 12:24:50 +01:00
|
|
|
private slots:
|
2009-12-11 13:24:53 +01:00
|
|
|
// functional tests
|
|
|
|
|
void indentation();
|
|
|
|
|
|
2009-04-16 09:18:09 +02:00
|
|
|
// command mode
|
2010-01-05 18:42:24 +01:00
|
|
|
void command_oO();
|
2010-01-05 18:42:24 +01:00
|
|
|
void command_put_at_eol();
|
2009-11-19 08:36:21 +01:00
|
|
|
void command_Cxx_down_dot();
|
|
|
|
|
void command_Gyyp();
|
|
|
|
|
void command_J();
|
|
|
|
|
void command_Yp();
|
2009-04-16 09:18:09 +02:00
|
|
|
void command_cc();
|
2009-08-20 12:30:05 +02:00
|
|
|
void command_cw();
|
2010-01-05 18:42:25 +01:00
|
|
|
void command_cj();
|
|
|
|
|
void command_ck();
|
2010-01-05 18:42:25 +01:00
|
|
|
void command_c_dollar();
|
|
|
|
|
void command_C();
|
2009-04-16 09:18:09 +02:00
|
|
|
void command_dd();
|
2009-08-18 09:46:42 +02:00
|
|
|
void command_dd_2();
|
2010-01-05 18:42:25 +01:00
|
|
|
void command_d_dollar();
|
2010-01-05 18:42:25 +01:00
|
|
|
void command_dgg();
|
|
|
|
|
void command_dG();
|
2010-01-05 18:42:25 +01:00
|
|
|
void command_dj();
|
|
|
|
|
void command_dk();
|
2010-01-05 18:42:25 +01:00
|
|
|
void command_D();
|
2009-11-19 08:36:21 +01:00
|
|
|
void command_dfx_down();
|
2009-04-16 09:18:09 +02:00
|
|
|
void command_dollar();
|
|
|
|
|
void command_down();
|
2009-11-19 08:36:21 +01:00
|
|
|
void command_dw();
|
2009-04-16 09:18:09 +02:00
|
|
|
void command_e();
|
|
|
|
|
void command_i();
|
|
|
|
|
void command_left();
|
2009-11-19 08:36:21 +01:00
|
|
|
void command_ma_yank();
|
2009-06-02 15:08:23 +02:00
|
|
|
void command_r();
|
2009-04-16 09:18:09 +02:00
|
|
|
void command_right();
|
|
|
|
|
void command_up();
|
|
|
|
|
void command_w();
|
2010-01-21 17:38:29 +01:00
|
|
|
void command_x();
|
2009-07-03 11:22:18 +02:00
|
|
|
void command_yyp();
|
2010-01-05 18:42:25 +01:00
|
|
|
void command_y_dollar();
|
2009-04-06 10:58:48 +02:00
|
|
|
|
2010-01-21 17:38:31 +01:00
|
|
|
void visual_d();
|
|
|
|
|
void Visual_d();
|
|
|
|
|
|
2009-06-04 16:07:09 +02:00
|
|
|
// special tests
|
|
|
|
|
void test_i_cw_i();
|
|
|
|
|
|
2009-04-06 10:58:48 +02:00
|
|
|
private:
|
2010-01-29 21:33:57 +01:00
|
|
|
void setup();
|
2009-04-09 15:44:51 +02:00
|
|
|
void send(const QString &command) { sendEx("normal " + command); }
|
2009-04-08 16:05:24 +02:00
|
|
|
void sendEx(const QString &command); // send an ex command
|
|
|
|
|
|
|
|
|
|
bool checkContentsHelper(QString expected, const char* file, int line);
|
|
|
|
|
bool checkHelper(bool isExCommand, QString cmd, QString expected,
|
|
|
|
|
const char* file, int line);
|
|
|
|
|
QString insertCursor(const QString &needle0);
|
2010-01-21 17:38:29 +01:00
|
|
|
QString cursor(const QString &line, int pos); // insert @ at cursor pos, negative counts from back
|
2009-04-08 16:05:24 +02:00
|
|
|
|
2009-04-16 09:18:09 +02:00
|
|
|
QString lmid(int i, int n = -1) const
|
|
|
|
|
{ return QStringList(l.mid(i, n)).join("\n"); }
|
|
|
|
|
|
2009-04-09 14:43:04 +02:00
|
|
|
QTextEdit *m_textedit;
|
|
|
|
|
QPlainTextEdit *m_plaintextedit;
|
|
|
|
|
FakeVimHandler *m_handler;
|
2009-04-06 10:58:48 +02:00
|
|
|
QList<QTextEdit::ExtraSelection> m_selection;
|
|
|
|
|
|
2009-04-08 16:05:24 +02:00
|
|
|
QString m_statusMessage;
|
|
|
|
|
QString m_statusData;
|
|
|
|
|
QString m_infoMessage;
|
|
|
|
|
|
2009-04-16 09:18:09 +02:00
|
|
|
// the individual lines
|
|
|
|
|
static const QStringList l; // identifier intentionally kept short
|
2009-04-06 10:58:48 +02:00
|
|
|
static const QString lines;
|
|
|
|
|
static const QString escape;
|
2008-12-27 12:24:50 +01:00
|
|
|
};
|
|
|
|
|
|
2010-01-29 21:33:57 +01:00
|
|
|
const QString tst_FakeVim::lines =
|
2009-04-09 15:44:51 +02:00
|
|
|
/* 0 1 2 3 4 */
|
|
|
|
|
/* 0123456789012345678901234567890123457890 */
|
2009-04-06 10:58:48 +02:00
|
|
|
"\n"
|
|
|
|
|
"#include <QtCore>\n"
|
|
|
|
|
"#include <QtGui>\n"
|
|
|
|
|
"\n"
|
|
|
|
|
"int main(int argc, char *argv[])\n"
|
|
|
|
|
"{\n"
|
|
|
|
|
" QApplication app(argc, argv);\n"
|
|
|
|
|
"\n"
|
|
|
|
|
" return app.exec();\n"
|
|
|
|
|
"}\n";
|
|
|
|
|
|
2009-04-16 09:18:09 +02:00
|
|
|
const QStringList tst_FakeVim::l = tst_FakeVim::lines.split('\n');
|
|
|
|
|
|
2009-04-06 10:58:48 +02:00
|
|
|
const QString tst_FakeVim::escape = QChar(27);
|
|
|
|
|
|
2009-04-16 09:18:09 +02:00
|
|
|
|
2009-04-09 14:43:04 +02:00
|
|
|
tst_FakeVim::tst_FakeVim(bool usePlainTextEdit)
|
2009-04-06 10:58:48 +02:00
|
|
|
{
|
2009-04-09 14:43:04 +02:00
|
|
|
if (usePlainTextEdit) {
|
|
|
|
|
m_textedit = 0;
|
|
|
|
|
m_plaintextedit = new QPlainTextEdit;
|
|
|
|
|
} else {
|
|
|
|
|
m_textedit = new QTextEdit;
|
|
|
|
|
m_plaintextedit = 0;
|
|
|
|
|
}
|
2009-04-09 15:44:51 +02:00
|
|
|
m_handler = 0;
|
2009-04-06 10:58:48 +02:00
|
|
|
}
|
|
|
|
|
|
2009-04-09 14:43:04 +02:00
|
|
|
tst_FakeVim::~tst_FakeVim()
|
|
|
|
|
{
|
|
|
|
|
delete m_handler;
|
|
|
|
|
delete m_textedit;
|
|
|
|
|
delete m_plaintextedit;
|
|
|
|
|
}
|
|
|
|
|
|
2009-04-06 10:58:48 +02:00
|
|
|
void tst_FakeVim::setup()
|
|
|
|
|
{
|
2009-04-09 15:44:51 +02:00
|
|
|
delete m_handler;
|
|
|
|
|
m_handler = 0;
|
2009-04-06 10:58:48 +02:00
|
|
|
m_statusMessage.clear();
|
|
|
|
|
m_statusData.clear();
|
|
|
|
|
m_infoMessage.clear();
|
2009-04-09 14:43:04 +02:00
|
|
|
if (m_textedit) {
|
|
|
|
|
m_textedit->setPlainText(lines);
|
|
|
|
|
QTextCursor tc = m_textedit->textCursor();
|
|
|
|
|
tc.movePosition(QTextCursor::Start, QTextCursor::MoveAnchor);
|
|
|
|
|
m_textedit->setTextCursor(tc);
|
|
|
|
|
m_textedit->setPlainText(lines);
|
2009-04-09 15:44:51 +02:00
|
|
|
m_handler = new FakeVimHandler(m_textedit);
|
2009-04-09 14:43:04 +02:00
|
|
|
} else {
|
|
|
|
|
m_plaintextedit->setPlainText(lines);
|
|
|
|
|
QTextCursor tc = m_plaintextedit->textCursor();
|
|
|
|
|
tc.movePosition(QTextCursor::Start, QTextCursor::MoveAnchor);
|
|
|
|
|
m_plaintextedit->setTextCursor(tc);
|
|
|
|
|
m_plaintextedit->setPlainText(lines);
|
2009-04-09 15:44:51 +02:00
|
|
|
m_handler = new FakeVimHandler(m_plaintextedit);
|
2009-04-09 14:43:04 +02:00
|
|
|
}
|
2009-04-06 10:58:48 +02:00
|
|
|
|
2011-09-05 18:11:24 +02:00
|
|
|
QObject::connect(m_handler, SIGNAL(commandBufferChanged(QString,int)),
|
|
|
|
|
this, SLOT(changeStatusMessage(QString,int)));
|
2009-04-09 15:44:51 +02:00
|
|
|
QObject::connect(m_handler, SIGNAL(extraInformationChanged(QString)),
|
|
|
|
|
this, SLOT(changeExtraInformation(QString)));
|
|
|
|
|
QObject::connect(m_handler, SIGNAL(statusDataChanged(QString)),
|
|
|
|
|
this, SLOT(changeStatusData(QString)));
|
|
|
|
|
|
|
|
|
|
QCOMPARE(EDITOR(toPlainText()), lines);
|
2010-04-29 14:00:38 +02:00
|
|
|
|
|
|
|
|
sendEx("set iskeyword=@,48-57,_,192-255,a-z,A-Z");
|
2009-04-06 10:58:48 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void tst_FakeVim::sendEx(const QString &command)
|
|
|
|
|
{
|
2009-04-09 15:44:51 +02:00
|
|
|
if (m_handler)
|
|
|
|
|
m_handler->handleCommand(command);
|
|
|
|
|
else
|
|
|
|
|
qDebug() << "NO HANDLER YET";
|
2009-04-06 10:58:48 +02:00
|
|
|
}
|
|
|
|
|
|
2009-04-08 16:05:24 +02:00
|
|
|
bool tst_FakeVim::checkContentsHelper(QString want, const char* file, int line)
|
|
|
|
|
{
|
2009-04-09 14:43:04 +02:00
|
|
|
QString got = EDITOR(toPlainText());
|
|
|
|
|
int pos = EDITOR(textCursor().position());
|
2009-04-08 16:05:24 +02:00
|
|
|
got = got.left(pos) + "@" + got.mid(pos);
|
|
|
|
|
QStringList wantlist = want.split('\n');
|
|
|
|
|
QStringList gotlist = got.split('\n');
|
|
|
|
|
if (!QTest::qCompare(gotlist.size(), wantlist.size(), "", "", file, line)) {
|
2009-04-16 09:18:09 +02:00
|
|
|
qDebug() << "0 WANT: " << want;
|
|
|
|
|
qDebug() << "0 GOT: " << got;
|
2009-04-08 16:05:24 +02:00
|
|
|
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)) {
|
2009-04-16 09:18:09 +02:00
|
|
|
qDebug() << "1 WANT: " << want;
|
|
|
|
|
qDebug() << "1 GOT: " << got;
|
2009-04-08 16:05:24 +02:00
|
|
|
return false;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
return true;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
bool tst_FakeVim::checkHelper(bool ex, QString cmd, QString expected,
|
|
|
|
|
const char *file, int line)
|
|
|
|
|
{
|
|
|
|
|
if (ex)
|
|
|
|
|
sendEx(cmd);
|
|
|
|
|
else
|
|
|
|
|
send(cmd);
|
|
|
|
|
return checkContentsHelper(expected, file, line);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
#define checkContents(expected) \
|
|
|
|
|
do { if (!checkContentsHelper(expected, __FILE__, __LINE__)) return; } while (0)
|
|
|
|
|
|
|
|
|
|
// Runs a "normal" command and checks the result.
|
|
|
|
|
// Cursor position is marked by a '@' in the expected contents.
|
|
|
|
|
#define check(cmd, expected) \
|
|
|
|
|
do { if (!checkHelper(false, cmd, expected, __FILE__, __LINE__)) \
|
|
|
|
|
return; } while (0)
|
|
|
|
|
|
2009-04-09 16:20:49 +02:00
|
|
|
#define move(cmd, expected) \
|
|
|
|
|
do { if (!checkHelper(false, cmd, insertCursor(expected), __FILE__, __LINE__)) \
|
|
|
|
|
return; } while (0)
|
|
|
|
|
|
2009-04-08 16:05:24 +02:00
|
|
|
// Runs an ex command and checks the result.
|
|
|
|
|
// Cursor position is marked by a '@' in the expected contents.
|
|
|
|
|
#define checkEx(cmd, expected) \
|
|
|
|
|
do { if (!checkHelper(true, cmd, expected, __FILE__, __LINE__)) \
|
|
|
|
|
return; } while (0)
|
|
|
|
|
|
|
|
|
|
QString tst_FakeVim::insertCursor(const QString &needle0)
|
|
|
|
|
{
|
|
|
|
|
QString needle = needle0;
|
|
|
|
|
needle.remove('@');
|
|
|
|
|
QString lines0 = lines;
|
2009-04-09 15:44:51 +02:00
|
|
|
int pos = lines0.indexOf(needle);
|
2009-04-16 09:18:09 +02:00
|
|
|
if (pos == -1)
|
|
|
|
|
qDebug() << "Cannot find: \n----\n" + needle + "\n----\n";
|
2009-04-09 15:44:51 +02:00
|
|
|
lines0.replace(pos, needle.size(), needle0);
|
2009-04-08 16:05:24 +02:00
|
|
|
return lines0;
|
|
|
|
|
}
|
2009-04-06 10:58:48 +02:00
|
|
|
|
2010-01-21 17:38:29 +01:00
|
|
|
QString tst_FakeVim::cursor(const QString &line, int pos)
|
|
|
|
|
{
|
|
|
|
|
if (pos < 0)
|
|
|
|
|
pos = line.length() + pos;
|
|
|
|
|
|
|
|
|
|
return line.left(pos) + "@" + line.mid(pos);
|
|
|
|
|
}
|
|
|
|
|
|
2009-04-16 09:18:09 +02:00
|
|
|
|
2009-12-11 13:24:53 +01:00
|
|
|
//////////////////////////////////////////////////////////////////////////
|
|
|
|
|
//
|
|
|
|
|
// Command mode
|
|
|
|
|
//
|
|
|
|
|
//////////////////////////////////////////////////////////////////////////
|
|
|
|
|
|
|
|
|
|
void tst_FakeVim::indentation()
|
|
|
|
|
{
|
|
|
|
|
setup();
|
|
|
|
|
sendEx("set expandtab");
|
|
|
|
|
sendEx("set tabstop=4");
|
|
|
|
|
sendEx("set shiftwidth=4");
|
|
|
|
|
QCOMPARE(m_handler->physicalIndentation(" \t\t\tx"), 6 + 3);
|
|
|
|
|
QCOMPARE(m_handler->logicalIndentation (" \t\t\tx"), 4 + 3 * 4);
|
|
|
|
|
QCOMPARE(m_handler->physicalIndentation(" \t\t\tx"), 5 + 3);
|
|
|
|
|
QCOMPARE(m_handler->logicalIndentation (" \t\t\tx"), 4 + 3 * 4);
|
|
|
|
|
|
|
|
|
|
QCOMPARE(m_handler->tabExpand(3), QLatin1String(" "));
|
|
|
|
|
QCOMPARE(m_handler->tabExpand(4), QLatin1String(" "));
|
|
|
|
|
QCOMPARE(m_handler->tabExpand(5), QLatin1String(" "));
|
|
|
|
|
QCOMPARE(m_handler->tabExpand(6), QLatin1String(" "));
|
|
|
|
|
QCOMPARE(m_handler->tabExpand(7), QLatin1String(" "));
|
|
|
|
|
QCOMPARE(m_handler->tabExpand(8), QLatin1String(" "));
|
|
|
|
|
QCOMPARE(m_handler->tabExpand(9), QLatin1String(" "));
|
|
|
|
|
|
|
|
|
|
sendEx("set expandtab");
|
|
|
|
|
sendEx("set tabstop=8");
|
|
|
|
|
sendEx("set shiftwidth=4");
|
|
|
|
|
QCOMPARE(m_handler->physicalIndentation(" \t\t\tx"), 6 + 3);
|
|
|
|
|
QCOMPARE(m_handler->logicalIndentation (" \t\t\tx"), 0 + 3 * 8);
|
|
|
|
|
QCOMPARE(m_handler->physicalIndentation(" \t\t\tx"), 5 + 3);
|
|
|
|
|
QCOMPARE(m_handler->logicalIndentation (" \t\t\tx"), 0 + 3 * 8);
|
|
|
|
|
|
|
|
|
|
QCOMPARE(m_handler->tabExpand(3), QLatin1String(" "));
|
|
|
|
|
QCOMPARE(m_handler->tabExpand(4), QLatin1String(" "));
|
|
|
|
|
QCOMPARE(m_handler->tabExpand(5), QLatin1String(" "));
|
|
|
|
|
QCOMPARE(m_handler->tabExpand(6), QLatin1String(" "));
|
|
|
|
|
QCOMPARE(m_handler->tabExpand(7), QLatin1String(" "));
|
|
|
|
|
QCOMPARE(m_handler->tabExpand(8), QLatin1String(" "));
|
|
|
|
|
QCOMPARE(m_handler->tabExpand(9), QLatin1String(" "));
|
|
|
|
|
|
|
|
|
|
sendEx("set noexpandtab");
|
|
|
|
|
sendEx("set tabstop=4");
|
|
|
|
|
sendEx("set shiftwidth=4");
|
|
|
|
|
QCOMPARE(m_handler->physicalIndentation(" \t\t\tx"), 6 + 3);
|
|
|
|
|
QCOMPARE(m_handler->logicalIndentation (" \t\t\tx"), 4 + 3 * 4);
|
|
|
|
|
QCOMPARE(m_handler->physicalIndentation(" \t\t\tx"), 5 + 3);
|
|
|
|
|
QCOMPARE(m_handler->logicalIndentation (" \t\t\tx"), 4 + 3 * 4);
|
|
|
|
|
|
|
|
|
|
QCOMPARE(m_handler->tabExpand(3), QLatin1String(" "));
|
|
|
|
|
QCOMPARE(m_handler->tabExpand(4), QLatin1String("\t"));
|
|
|
|
|
QCOMPARE(m_handler->tabExpand(5), QLatin1String("\t "));
|
|
|
|
|
QCOMPARE(m_handler->tabExpand(6), QLatin1String("\t "));
|
|
|
|
|
QCOMPARE(m_handler->tabExpand(7), QLatin1String("\t "));
|
|
|
|
|
QCOMPARE(m_handler->tabExpand(8), QLatin1String("\t\t"));
|
|
|
|
|
QCOMPARE(m_handler->tabExpand(9), QLatin1String("\t\t "));
|
|
|
|
|
|
|
|
|
|
sendEx("set noexpandtab");
|
|
|
|
|
sendEx("set tabstop=8");
|
|
|
|
|
sendEx("set shiftwidth=4");
|
|
|
|
|
QCOMPARE(m_handler->physicalIndentation(" \t\t\tx"), 6 + 3);
|
|
|
|
|
QCOMPARE(m_handler->logicalIndentation (" \t\t\tx"), 0 + 3 * 8);
|
|
|
|
|
QCOMPARE(m_handler->physicalIndentation(" \t\t\tx"), 5 + 3);
|
|
|
|
|
QCOMPARE(m_handler->logicalIndentation (" \t\t\tx"), 0 + 3 * 8);
|
|
|
|
|
|
|
|
|
|
QCOMPARE(m_handler->tabExpand(3), QLatin1String(" "));
|
|
|
|
|
QCOMPARE(m_handler->tabExpand(4), QLatin1String(" "));
|
|
|
|
|
QCOMPARE(m_handler->tabExpand(5), QLatin1String(" "));
|
|
|
|
|
QCOMPARE(m_handler->tabExpand(6), QLatin1String(" "));
|
|
|
|
|
QCOMPARE(m_handler->tabExpand(7), QLatin1String(" "));
|
|
|
|
|
QCOMPARE(m_handler->tabExpand(8), QLatin1String("\t"));
|
|
|
|
|
QCOMPARE(m_handler->tabExpand(9), QLatin1String("\t "));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
2009-04-16 09:18:09 +02:00
|
|
|
//////////////////////////////////////////////////////////////////////////
|
|
|
|
|
//
|
|
|
|
|
// 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));
|
|
|
|
|
}
|
|
|
|
|
|
2009-08-20 12:30:05 +02:00
|
|
|
void tst_FakeVim::command_cw()
|
|
|
|
|
{
|
|
|
|
|
setup();
|
|
|
|
|
move("j", "@" + l[1]);
|
|
|
|
|
check("cwx" + escape, l[0] + "\n@xinclude <QtCore>\n" + lmid(2));
|
|
|
|
|
}
|
|
|
|
|
|
2010-01-05 18:42:25 +01:00
|
|
|
void tst_FakeVim::command_cj()
|
|
|
|
|
{
|
|
|
|
|
setup();
|
2010-01-21 17:38:29 +01:00
|
|
|
move("j$", cursor(l[1], -1));
|
2010-01-21 17:38:27 +01:00
|
|
|
check("cj" + escape, l[0]+"\n@" + "\n" + lmid(3));
|
|
|
|
|
check("P", lmid(0,1)+"\n" + "@"+lmid(1,2)+"\n" + "\n" + lmid(3));
|
|
|
|
|
check("u", l[0]+"\n@" + "\n" + lmid(3));
|
|
|
|
|
|
|
|
|
|
setup();
|
2010-01-21 17:38:29 +01:00
|
|
|
move("j$", cursor(l[1], -1));
|
2010-01-21 17:38:27 +01:00
|
|
|
check("cjabc" + escape, l[0]+"\nab@c\n" + lmid(3));
|
2010-01-21 17:38:29 +01:00
|
|
|
check("u", lmid(0,1)+"\n" + cursor(l[1], -1)+"\n" + lmid(2));
|
|
|
|
|
check("gg", "@" + lmid(0));
|
|
|
|
|
check(".", "ab@c\n" + lmid(2));
|
2010-01-05 18:42:25 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void tst_FakeVim::command_ck()
|
|
|
|
|
{
|
|
|
|
|
setup();
|
2010-01-21 17:38:29 +01:00
|
|
|
move("j$", cursor(l[1], -1));
|
2010-01-05 18:42:25 +01:00
|
|
|
check("ck" + escape, "@\n" + lmid(2));
|
|
|
|
|
check("P", "@" + lmid(0,2)+"\n" + "\n" + lmid(2));
|
|
|
|
|
}
|
|
|
|
|
|
2010-01-05 18:42:25 +01:00
|
|
|
void tst_FakeVim::command_c_dollar()
|
|
|
|
|
{
|
|
|
|
|
setup();
|
|
|
|
|
move("j", "@" + l[1]);
|
2010-01-21 17:38:29 +01:00
|
|
|
move("$", cursor(l[1], -1));
|
2010-01-05 18:42:25 +01:00
|
|
|
check("c$" + escape, l[0]+"\n" + l[1].left(l[1].length()-2)+"@"+l[1][l[1].length()-2]+"\n" + lmid(2));
|
|
|
|
|
check("c$" + escape, l[0]+"\n" + l[1].left(l[1].length()-3)+"@"+l[1][l[1].length()-3]+"\n" + lmid(2));
|
|
|
|
|
check("0c$abc" + escape, l[0]+"\n" + "ab@c\n" + lmid(2));
|
|
|
|
|
check("0c$abc" + escape, l[0]+"\n" + "ab@c\n" + lmid(2));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void tst_FakeVim::command_C()
|
|
|
|
|
{
|
|
|
|
|
setup();
|
|
|
|
|
move("j", "@" + l[1]);
|
|
|
|
|
check("Cabc" + escape, l[0] + "\nab@c\n" + lmid(2));
|
|
|
|
|
check("Cabc" + escape, l[0] + "\nabab@c\n" + lmid(2));
|
|
|
|
|
check("$Cabc" + escape, l[0] + "\nababab@c\n" + lmid(2));
|
|
|
|
|
check("0C" + escape, l[0] + "\n@\n" + lmid(2));
|
|
|
|
|
check("0Cabc" + escape, l[0] + "\nab@c\n" + lmid(2));
|
|
|
|
|
}
|
|
|
|
|
|
2009-08-20 12:30:05 +02:00
|
|
|
void tst_FakeVim::command_dw()
|
|
|
|
|
{
|
|
|
|
|
setup();
|
|
|
|
|
check("dw", "@#include <QtCore>\n" + lmid(2));
|
|
|
|
|
check("dw", "@include <QtCore>\n" + lmid(2));
|
|
|
|
|
check("dw", "@<QtCore>\n" + lmid(2));
|
|
|
|
|
check("dw", "@QtCore>\n" + lmid(2));
|
|
|
|
|
check("dw", "@>\n" + lmid(2));
|
2010-01-21 17:38:30 +01:00
|
|
|
check("dw", "@\n" + lmid(2)); // Real vim has this intermediate step, too
|
2009-08-20 12:30:05 +02:00
|
|
|
check("dw", "@#include <QtGui>\n" + lmid(3));
|
|
|
|
|
check("dw", "@include <QtGui>\n" + lmid(3));
|
|
|
|
|
check("dw", "@<QtGui>\n" + lmid(3));
|
|
|
|
|
check("dw", "@QtGui>\n" + lmid(3));
|
|
|
|
|
check("dw", "@>\n" + lmid(3));
|
|
|
|
|
}
|
|
|
|
|
|
2009-04-16 09:18:09 +02:00
|
|
|
void tst_FakeVim::command_dd()
|
|
|
|
|
{
|
|
|
|
|
setup();
|
|
|
|
|
move("j", "@" + l[1]);
|
|
|
|
|
check("dd", l[0] + "\n@" + lmid(2));
|
|
|
|
|
check(".", l[0] + "\n@" + lmid(3));
|
2009-08-18 09:46:42 +02:00
|
|
|
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));
|
2009-04-29 15:29:03 +02:00
|
|
|
check("dd", l[0] + "\n@" + lmid(7));
|
2009-08-18 09:46:42 +02:00
|
|
|
check(".", l[0] + "\n @return app.exec();\n" + lmid(9));
|
2009-04-29 15:29:03 +02:00
|
|
|
check("dd", l[0] + "\n@" + lmid(9));
|
2009-04-16 09:18:09 +02:00
|
|
|
}
|
|
|
|
|
|
2009-08-18 09:46:42 +02:00
|
|
|
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));
|
|
|
|
|
check("u", l[0] + "\n@" + lmid(2));
|
|
|
|
|
}
|
|
|
|
|
|
2010-01-05 18:42:25 +01:00
|
|
|
void tst_FakeVim::command_d_dollar()
|
|
|
|
|
{
|
|
|
|
|
setup();
|
2010-01-21 17:38:29 +01:00
|
|
|
move("j$", cursor(l[1], -1));
|
2010-01-05 18:42:25 +01:00
|
|
|
check("$d$", l[0]+"\n" + l[1].left(l[1].length()-2)+"@"+l[1][l[1].length()-2]+"\n" + lmid(2));
|
|
|
|
|
check("0d$", l[0] + "\n"+"@\n" + lmid(2));
|
|
|
|
|
}
|
|
|
|
|
|
2010-01-05 18:42:25 +01:00
|
|
|
void tst_FakeVim::command_dj()
|
|
|
|
|
{
|
|
|
|
|
setup();
|
2010-01-21 17:38:29 +01:00
|
|
|
move("j$", cursor(l[1], -1));
|
2010-01-05 18:42:25 +01:00
|
|
|
check("dj", l[0]+"\n@" + lmid(3));
|
|
|
|
|
check("P", lmid(0,1)+"\n" + "@"+lmid(1));
|
|
|
|
|
move("0", "@" + l[1]);
|
|
|
|
|
check("dj", l[0]+"\n@" + lmid(3));
|
|
|
|
|
check("P", lmid(0,1)+"\n" + "@"+lmid(1));
|
|
|
|
|
move("05l", l[1].left(5) + "@" + l[1].mid(5));
|
|
|
|
|
check("dj", l[0]+"\n@" + lmid(3));
|
|
|
|
|
check("P", lmid(0,1)+"\n" + "@"+lmid(1));
|
|
|
|
|
check("dj", l[0]+"\n@" + lmid(3));
|
|
|
|
|
check("p", lmid(0,1)+"\n" + lmid(3,1)+"\n" + "@"+lmid(1,2)+"\n" + lmid(4));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void tst_FakeVim::command_dk()
|
|
|
|
|
{
|
|
|
|
|
setup();
|
2010-01-21 17:38:29 +01:00
|
|
|
move("j$", cursor(l[1], -1));
|
2010-01-05 18:42:25 +01:00
|
|
|
check("dk", "@" + lmid(2));
|
|
|
|
|
check("P", "@" + lmid(0));
|
|
|
|
|
move("j0", "@" + l[1]);
|
|
|
|
|
check("dk", "@" + lmid(2));
|
|
|
|
|
check("P", "@" + lmid(0));
|
|
|
|
|
move("j05l", l[1].left(5) + "@" + l[1].mid(5));
|
|
|
|
|
check("dk", "@" + lmid(2));
|
|
|
|
|
check("P", "@" + lmid(0));
|
|
|
|
|
move("j05l", l[1].left(5) + "@" + l[1].mid(5));
|
|
|
|
|
check("dk", "@" + lmid(2));
|
|
|
|
|
check("p", lmid(2,1)+"\n" + "@" + lmid(0,2)+"\n" + lmid(3));
|
|
|
|
|
}
|
|
|
|
|
|
2010-01-05 18:42:25 +01:00
|
|
|
void tst_FakeVim::command_dgg()
|
|
|
|
|
{
|
|
|
|
|
setup();
|
2010-01-21 17:38:29 +01:00
|
|
|
check("G", lmid(0, l.size()-2)+"\n" "@"+lmid(l.size()-2));
|
2010-01-05 18:42:25 +01:00
|
|
|
check("dgg", "@");
|
2011-02-09 14:30:46 +01:00
|
|
|
check("u", "@" + lmid(0));
|
2010-01-05 18:42:25 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void tst_FakeVim::command_dG()
|
|
|
|
|
{
|
|
|
|
|
setup();
|
|
|
|
|
check("dG", "@");
|
|
|
|
|
check("u", "@" + lmid(0));
|
|
|
|
|
move("j", "@" + l[1]);
|
2010-01-21 17:38:29 +01:00
|
|
|
check("dG", lmid(0,1)+"\n" + "@");
|
2010-01-05 18:42:25 +01:00
|
|
|
check("u", l[0]+"\n" + "@" + lmid(1));
|
2010-01-21 17:38:29 +01:00
|
|
|
check("G", lmid(0, l.size()-2)+"\n" + "@"+lmid(l.size()-2));
|
|
|
|
|
qWarning("FIXME");
|
2011-09-05 18:14:57 +02:00
|
|
|
return;
|
2010-01-05 18:42:25 +01:00
|
|
|
// include movement to first column, as otherwise the result depends on the 'startofline' setting
|
|
|
|
|
check("dG0", lmid(0, l.size()-2)+"\n" + "@"+lmid(l.size()-2,1));
|
|
|
|
|
check("dG0", lmid(0, l.size()-3)+"\n" + "@"+lmid(l.size()-3,1));
|
|
|
|
|
}
|
|
|
|
|
|
2010-01-05 18:42:25 +01:00
|
|
|
void tst_FakeVim::command_D()
|
|
|
|
|
{
|
|
|
|
|
setup();
|
|
|
|
|
move("j", "@" + l[1]);
|
|
|
|
|
check("$D", l[0]+"\n" + l[1].left(l[1].length()-2)+"@"+l[1][l[1].length()-2]+"\n" + lmid(2));
|
|
|
|
|
check("0D", l[0] + "\n@\n" + lmid(2));
|
|
|
|
|
}
|
|
|
|
|
|
2009-04-16 09:18:09 +02:00
|
|
|
void tst_FakeVim::command_dollar()
|
|
|
|
|
{
|
|
|
|
|
setup();
|
2010-01-21 17:38:29 +01:00
|
|
|
move("j$", cursor(l[1], -1));
|
|
|
|
|
move("j$", cursor(l[2], -1));
|
|
|
|
|
move("2j", "@)");
|
2009-04-16 09:18:09 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void tst_FakeVim::command_down()
|
|
|
|
|
{
|
|
|
|
|
setup();
|
|
|
|
|
move("j", "@" + l[1]);
|
|
|
|
|
move("3j", "@int main");
|
|
|
|
|
move("4j", "@ return app.exec()");
|
|
|
|
|
}
|
|
|
|
|
|
2009-06-11 15:41:20 +02:00
|
|
|
void tst_FakeVim::command_dfx_down()
|
|
|
|
|
{
|
|
|
|
|
setup();
|
|
|
|
|
check("j4l", l[0] + "\n#inc@lude <QtCore>\n" + lmid(2));
|
2011-02-09 14:34:42 +01:00
|
|
|
qWarning("FIXME");
|
|
|
|
|
return;
|
2009-06-11 15:41:20 +02:00
|
|
|
check("df ", l[0] + "\n#inc@<QtCore>\n" + lmid(2));
|
|
|
|
|
check("j", l[0] + "\n#inc<QtCore>\n#inc@lude <QtGui>\n" + lmid(3));
|
|
|
|
|
check(".", l[0] + "\n#inc<QtCore>\n#inc@<QtGui>\n" + lmid(3));
|
|
|
|
|
check("u", l[0] + "\n#inc<QtCore>\n#inc@lude <QtGui>\n" + lmid(3));
|
|
|
|
|
check("u", l[0] + "\n#inc@lude <QtCore>\n" + lmid(2));
|
|
|
|
|
}
|
|
|
|
|
|
2009-06-11 17:09:05 +02:00
|
|
|
void tst_FakeVim::command_Cxx_down_dot()
|
|
|
|
|
{
|
|
|
|
|
setup();
|
|
|
|
|
check("j4l", l[0] + "\n#inc@lude <QtCore>\n" + lmid(2));
|
|
|
|
|
check("Cxx" + escape, l[0] + "\n#incx@x\n" + lmid(2));
|
|
|
|
|
check("j", l[0] + "\n#incxx\n#incl@ude <QtGui>\n" + lmid(3));
|
|
|
|
|
check(".", l[0] + "\n#incxx\n#inclx@x\n" + lmid(3));
|
|
|
|
|
}
|
|
|
|
|
|
2009-04-16 09:18:09 +02:00
|
|
|
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", "@{");
|
2009-04-16 11:52:58 +02:00
|
|
|
move("10k","@\n"); // home.
|
2009-04-16 09:18:09 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void tst_FakeVim::command_i()
|
2009-04-06 10:58:48 +02:00
|
|
|
{
|
|
|
|
|
setup();
|
|
|
|
|
|
|
|
|
|
// empty insertion at start of document
|
2009-04-08 16:05:24 +02:00
|
|
|
check("i" + escape, "@" + lines);
|
|
|
|
|
check("u", "@" + lines);
|
2009-04-06 10:58:48 +02:00
|
|
|
|
|
|
|
|
// small insertion at start of document
|
2009-04-08 16:05:24 +02:00
|
|
|
check("ix" + escape, "@x" + lines);
|
|
|
|
|
check("u", "@" + lines);
|
2010-04-29 14:17:10 +02:00
|
|
|
checkEx("redo", "@x" + lines);
|
2009-08-20 12:05:38 +02:00
|
|
|
check("u", "@" + lines);
|
2009-04-06 10:58:48 +02:00
|
|
|
|
|
|
|
|
// small insertion at start of document
|
2009-04-08 16:05:24 +02:00
|
|
|
check("ixxx" + escape, "xx@x" + lines);
|
|
|
|
|
check("u", "@" + lines);
|
2009-04-06 10:58:48 +02:00
|
|
|
|
|
|
|
|
// combine insertions
|
2009-06-02 15:38:08 +02:00
|
|
|
check("i1" + escape, "@1" + lines);
|
|
|
|
|
check("i2" + escape, "@21" + lines);
|
|
|
|
|
check("i3" + escape, "@321" + lines);
|
|
|
|
|
check("u", "@21" + lines);
|
|
|
|
|
check("u", "@1" + lines);
|
|
|
|
|
check("u", "@" + lines);
|
2009-04-08 16:05:24 +02:00
|
|
|
check("ia" + escape, "@a" + lines);
|
|
|
|
|
check("ibx" + escape, "b@xa" + lines);
|
|
|
|
|
check("icyy" + escape, "bcy@yxa" + lines);
|
|
|
|
|
check("u", "b@xa" + lines);
|
2010-01-29 21:33:57 +01:00
|
|
|
check("u", "@a" + lines);
|
2009-08-20 12:05:38 +02:00
|
|
|
checkEx("redo", "b@xa" + lines);
|
|
|
|
|
check("u", "@a" + lines);
|
2009-04-06 10:58:48 +02:00
|
|
|
}
|
|
|
|
|
|
2009-04-16 09:18:09 +02:00
|
|
|
void tst_FakeVim::command_left()
|
2009-04-06 10:58:48 +02:00
|
|
|
{
|
|
|
|
|
setup();
|
2009-04-16 09:18:09 +02:00
|
|
|
move("4j", "@int main");
|
|
|
|
|
move("h", "@int main"); // no move over left border
|
2010-01-21 17:38:29 +01:00
|
|
|
move("$", "argv[]@)");
|
|
|
|
|
move("h", "argv[@])");
|
|
|
|
|
move("3h", "ar@gv[])");
|
2009-04-16 09:18:09 +02:00
|
|
|
move("50h", "@int main");
|
2009-04-08 16:05:24 +02:00
|
|
|
}
|
|
|
|
|
|
2009-06-02 15:08:23 +02:00
|
|
|
void tst_FakeVim::command_r()
|
|
|
|
|
{
|
|
|
|
|
setup();
|
|
|
|
|
move("4j", "@int main");
|
2010-01-21 17:38:29 +01:00
|
|
|
move("$", "int main(int argc, char *argv[]@)");
|
2010-01-29 22:49:55 +01:00
|
|
|
check("rx", lmid(0, 4) + "\nint main(int argc, char *argv[]@x\n" + lmid(5));
|
2010-01-21 17:38:30 +01:00
|
|
|
check("2h", lmid(0, 4) + "\nint main(int argc, char *argv@[]x\n" + lmid(5));
|
|
|
|
|
check("4ra", lmid(0, 4) + "\nint main(int argc, char *argv@[]x\n" + lmid(5));
|
|
|
|
|
check("3rb", lmid(0, 4) + "\nint main(int argc, char *argvbb@b\n" + lmid(5));
|
|
|
|
|
check("2rc", lmid(0, 4) + "\nint main(int argc, char *argvbb@b\n" + lmid(5));
|
|
|
|
|
check("h2rc",lmid(0, 4) + "\nint main(int argc, char *argvbc@c\n" + lmid(5));
|
2009-06-02 15:08:23 +02:00
|
|
|
}
|
|
|
|
|
|
2009-04-16 09:18:09 +02:00
|
|
|
void tst_FakeVim::command_right()
|
2009-04-09 16:20:49 +02:00
|
|
|
{
|
|
|
|
|
setup();
|
|
|
|
|
move("4j", "@int main");
|
|
|
|
|
move("l", "i@nt main");
|
|
|
|
|
move("3l", "int @main");
|
2010-01-21 17:38:29 +01:00
|
|
|
move("50l", "argv[]@)");
|
2009-04-09 16:20:49 +02:00
|
|
|
}
|
|
|
|
|
|
2009-04-16 09:18:09 +02:00
|
|
|
void tst_FakeVim::command_up()
|
2009-04-09 16:20:49 +02:00
|
|
|
{
|
|
|
|
|
setup();
|
2009-04-16 09:18:09 +02:00
|
|
|
move("j", "@#include <QtCore");
|
|
|
|
|
move("3j", "@int main");
|
|
|
|
|
move("4j", "@ return app.exec()");
|
2009-04-09 16:20:49 +02:00
|
|
|
}
|
|
|
|
|
|
2009-04-16 09:18:09 +02:00
|
|
|
void tst_FakeVim::command_w()
|
2009-04-09 16:20:49 +02:00
|
|
|
{
|
|
|
|
|
setup();
|
2009-04-16 09:18:09 +02:00
|
|
|
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");
|
2010-01-21 17:38:26 +01:00
|
|
|
move("4w", "int @main(int argc, char *argv[])");
|
|
|
|
|
move("w", "int main@(int argc, char *argv[])");
|
2009-04-16 09:18:09 +02:00
|
|
|
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", "@{");
|
2009-04-09 16:20:49 +02:00
|
|
|
}
|
|
|
|
|
|
2009-07-03 11:22:18 +02:00
|
|
|
void tst_FakeVim::command_yyp()
|
|
|
|
|
{
|
|
|
|
|
setup();
|
|
|
|
|
move("4j", "@int main");
|
|
|
|
|
check("yyp", lmid(0, 4) + "\n" + lmid(4, 1) + "\n@" + lmid(4));
|
|
|
|
|
}
|
|
|
|
|
|
2010-01-05 18:42:25 +01:00
|
|
|
void tst_FakeVim::command_y_dollar()
|
|
|
|
|
{
|
|
|
|
|
setup();
|
|
|
|
|
move("j", "@" + l[1]);
|
|
|
|
|
check("$y$p", l[0]+"\n"+ l[1]+"@>\n" + lmid(2));
|
|
|
|
|
check("$y$p", l[0]+"\n"+ l[1]+">@>\n" + lmid(2));
|
|
|
|
|
check("$y$P", l[0]+"\n"+ l[1]+">@>>\n" + lmid(2));
|
|
|
|
|
check("$y$P", l[0]+"\n"+ l[1]+">>@>>\n" + lmid(2));
|
|
|
|
|
}
|
|
|
|
|
|
2009-09-16 14:16:21 +02:00
|
|
|
void tst_FakeVim::command_Yp()
|
|
|
|
|
{
|
|
|
|
|
setup();
|
|
|
|
|
move("4j", "@int main");
|
|
|
|
|
check("Yp", lmid(0, 4) + "\n" + lmid(4, 1) + "\n@" + lmid(4));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void tst_FakeVim::command_ma_yank()
|
|
|
|
|
{
|
2010-01-21 17:38:29 +01:00
|
|
|
setup();
|
|
|
|
|
move("4j", "@int main");
|
|
|
|
|
check("ygg", "@" + lmid(0));
|
|
|
|
|
move("4j", "@int main");
|
|
|
|
|
check("p", lmid(0,5) + "\n@" + lmid(0,4) +"\n" + lmid(4));
|
|
|
|
|
|
2009-09-16 14:16:21 +02:00
|
|
|
setup();
|
|
|
|
|
check("ma", "@" + lmid(0));
|
|
|
|
|
move("4j", "@int main");
|
|
|
|
|
check("mb", lmid(0,4) + "\n@" + lmid(4));
|
|
|
|
|
check("\"ay'a", "@" + lmid(0));
|
|
|
|
|
check("'b", lmid(0,4) + "\n@" + lmid(4));
|
|
|
|
|
check("\"ap", lmid(0,5) + "\n@" + lmid(0,4) +"\n" + lmid(4));
|
|
|
|
|
}
|
|
|
|
|
|
2009-07-03 11:22:18 +02:00
|
|
|
void tst_FakeVim::command_Gyyp()
|
|
|
|
|
{
|
|
|
|
|
setup();
|
2010-01-21 17:38:29 +01:00
|
|
|
check("G", lmid(0, l.size()-2) + "\n@" + lmid(l.size()-2));
|
|
|
|
|
check("yyp", lmid(0) + "@" + lmid(9, 1)+"\n");
|
2009-07-03 11:22:18 +02:00
|
|
|
}
|
2009-04-16 09:18:09 +02:00
|
|
|
|
2009-06-04 16:07:09 +02:00
|
|
|
void tst_FakeVim::test_i_cw_i()
|
|
|
|
|
{
|
|
|
|
|
setup();
|
|
|
|
|
move("j", "@" + l[1]);
|
|
|
|
|
check("ixx" + escape, l[0] + "\nx@x" + lmid(1));
|
|
|
|
|
check("cwyy" + escape, l[0] + "\nxy@y" + lmid(1));
|
|
|
|
|
check("iaa" + escape, l[0] + "\nxya@ay" + lmid(1));
|
|
|
|
|
}
|
|
|
|
|
|
2009-11-19 08:36:21 +01:00
|
|
|
void tst_FakeVim::command_J()
|
|
|
|
|
{
|
|
|
|
|
setup();
|
|
|
|
|
move("4j4l", "int @main");
|
2010-01-29 21:33:57 +01:00
|
|
|
|
2009-11-19 08:36:21 +01:00
|
|
|
check("J", lmid(0, 5) + "@ " + lmid(5));
|
2010-01-29 21:33:57 +01:00
|
|
|
check("u", lmid(0, 4) + "\nint @main(int argc, char *argv[])\n" + lmid(5));
|
2009-11-19 08:36:21 +01:00
|
|
|
checkEx("redo", lmid(0, 5) + "@ " + lmid(5));
|
|
|
|
|
|
2010-01-21 17:38:29 +01:00
|
|
|
check("3J", lmid(0, 5) + " " + lmid(5, 1) + " " + lmid(6, 1).mid(4) + "@ " + lmid(7));
|
2010-01-29 22:49:55 +01:00
|
|
|
check("uu", lmid(0, 4) + "\nint @main(int argc, char *argv[])\n" + lmid(5));
|
2009-11-19 08:36:21 +01:00
|
|
|
checkEx("redo", lmid(0, 5) + "@ " + lmid(5));
|
|
|
|
|
}
|
|
|
|
|
|
2010-01-05 18:42:24 +01:00
|
|
|
void tst_FakeVim::command_put_at_eol()
|
|
|
|
|
{
|
|
|
|
|
setup();
|
2010-01-21 17:38:29 +01:00
|
|
|
move("j$", cursor(l[1], -1));
|
|
|
|
|
check("y$", lmid(0,1)+"\n" + cursor(l[1], -1)+"\n" + lmid(2));
|
2010-01-05 18:42:24 +01:00
|
|
|
check("p", lmid(0,2)+"@>\n" + lmid(2));
|
|
|
|
|
check("p", lmid(0,2)+">@>\n" + lmid(2));
|
2010-01-21 17:38:29 +01:00
|
|
|
check("$", lmid(0,2)+">@>\n" + lmid(2));
|
2010-01-05 18:42:24 +01:00
|
|
|
check("P", lmid(0,2)+">@>>\n" + lmid(2));
|
|
|
|
|
}
|
2009-04-16 09:18:09 +02:00
|
|
|
|
2010-01-05 18:42:24 +01:00
|
|
|
void tst_FakeVim::command_oO()
|
|
|
|
|
{
|
|
|
|
|
setup();
|
|
|
|
|
check("gg", "@" + lmid(0));
|
|
|
|
|
check("Ol1" + escape, "l@1\n" + lmid(0));
|
|
|
|
|
check("gg", "@l1\n" + lmid(0));
|
|
|
|
|
check("ol2" + escape, "l1\n" "l@2\n" + lmid(0));
|
2010-01-21 17:38:29 +01:00
|
|
|
check("G", "l1\n" "l2\n" + lmid(0,l.size()-2)+"\n" + "@"+lmid(l.size()-2));
|
|
|
|
|
check("G$", "l1\n" "l2\n" + lmid(0,l.size()-2)+"\n" + "@"+lmid(l.size()-2));
|
|
|
|
|
check("ol-1" + escape, "l1\n" "l2\n" + lmid(0) + "l-@1\n");
|
|
|
|
|
check("G", "l1\n" "l2\n" + lmid(0) + "@l-1\n");
|
|
|
|
|
check("Ol-2" + escape, "l1\n" "l2\n" + lmid(0) + "l-@2\n" + "l-1\n");
|
2010-01-05 18:42:24 +01:00
|
|
|
}
|
|
|
|
|
|
2010-01-21 17:38:29 +01:00
|
|
|
void tst_FakeVim::command_x()
|
|
|
|
|
{
|
|
|
|
|
setup();
|
|
|
|
|
check("x", "@" + lmid(0));
|
2010-01-21 17:38:29 +01:00
|
|
|
move("j$", cursor(l[1], -1));
|
|
|
|
|
check("x", lmid(0,1)+"\n" + l[1].left(l[1].length()-2)+"@"+l[1].mid(l[1].length()-2,1)+"\n" + lmid(2));
|
2010-01-21 17:38:29 +01:00
|
|
|
}
|
|
|
|
|
|
2010-01-21 17:38:31 +01:00
|
|
|
void tst_FakeVim::visual_d()
|
|
|
|
|
{
|
|
|
|
|
setup();
|
|
|
|
|
check("vd", "@" + lmid(0));
|
|
|
|
|
check("vx", "@" + lmid(0));
|
|
|
|
|
check("vjd", "@" + lmid(1).mid(1));
|
|
|
|
|
check("ugg", "@" + lmid(0)); // FIXME: cursor should be at begin of doc w/o gg
|
|
|
|
|
move("j", "@" + l[1]);
|
|
|
|
|
check("vd", lmid(0, 1)+"\n" + "@" + lmid(1).mid(1));
|
|
|
|
|
check("u", lmid(0, 1)+"\n" + "@" + lmid(1));
|
|
|
|
|
check("vx", lmid(0, 1)+"\n" + "@" + lmid(1).mid(1));
|
|
|
|
|
check("u", lmid(0, 1)+"\n" + "@" + lmid(1));
|
|
|
|
|
check("vhx", lmid(0, 1)+"\n" + "@" + lmid(1).mid(1));
|
|
|
|
|
check("u", lmid(0, 1)+"\n" + "@" + lmid(1));
|
|
|
|
|
check("vlx", lmid(0, 1)+"\n" + "@" + lmid(1).mid(2));
|
|
|
|
|
check("P", lmid(0, 1)+"\n" + lmid(1).left(1)+"@"+lmid(1).mid(1));
|
|
|
|
|
check("vhd", lmid(0, 1)+"\n" + "@" + lmid(1).mid(2));
|
|
|
|
|
check("u0", lmid(0, 1)+"\n" + "@" + lmid(1)); // FIXME: cursor should be at begin of line w/o 0
|
2011-09-05 18:14:57 +02:00
|
|
|
qWarning("FIXME");
|
|
|
|
|
return;
|
2010-01-21 17:38:31 +01:00
|
|
|
check("v$d", lmid(0, 1)+"\n" + "@" + lmid(2));
|
|
|
|
|
check("v$od", lmid(0, 1)+"\n" + "@" + lmid(3));
|
|
|
|
|
check("$v$x", lmid(0, 1)+"\n" + lmid(3,1) + "@" + lmid(4));
|
|
|
|
|
check("0v$d", lmid(0, 1)+"\n" + "@" + lmid(5));
|
|
|
|
|
check("$v0d", lmid(0, 1)+"\n" + "@\n" + lmid(6));
|
|
|
|
|
check("v$o0k$d", lmid(0, 1)+"\n" + "@" + lmid(6).mid(1));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void tst_FakeVim::Visual_d()
|
|
|
|
|
{
|
|
|
|
|
setup();
|
|
|
|
|
check("Vd", "@" + lmid(1));
|
|
|
|
|
check("V2kd", "@" + lmid(2));
|
|
|
|
|
check("u", "@" + lmid(1));
|
|
|
|
|
check("u", "@" + lmid(0));
|
|
|
|
|
move("j", "@" + l[1]);
|
|
|
|
|
check("V$d", lmid(0,1)+"\n" + "@" + lmid(2));
|
|
|
|
|
check("$V$$d", lmid(0,1)+"\n" + "@" + lmid(3));
|
|
|
|
|
check("Vkx", "@" + lmid(4));
|
|
|
|
|
check("P", "@" + lmid(0,1)+"\n" + lmid(3));
|
|
|
|
|
}
|
|
|
|
|
|
2010-01-21 17:38:29 +01:00
|
|
|
|
2009-08-20 12:05:38 +02:00
|
|
|
/*
|
|
|
|
|
|
|
|
|
|
#include <QtCore>
|
|
|
|
|
#include <QtGui>
|
|
|
|
|
|
|
|
|
|
int main(int argc, char *argv[])
|
|
|
|
|
{
|
|
|
|
|
QApplication app(argc, argv);
|
|
|
|
|
|
|
|
|
|
return app.exec();
|
|
|
|
|
}
|
|
|
|
|
*/
|
|
|
|
|
|
2009-04-16 09:18:09 +02:00
|
|
|
//////////////////////////////////////////////////////////////////////////
|
|
|
|
|
//
|
|
|
|
|
// Main
|
|
|
|
|
//
|
|
|
|
|
//////////////////////////////////////////////////////////////////////////
|
|
|
|
|
|
2010-09-02 15:32:04 +10:00
|
|
|
int main(int argc, char *argv[])
|
2009-04-09 14:43:04 +02:00
|
|
|
{
|
|
|
|
|
int res = 0;
|
2010-09-02 15:32:04 +10:00
|
|
|
QApplication app(argc, argv);
|
2009-04-09 15:44:51 +02:00
|
|
|
|
|
|
|
|
// Test with QPlainTextEdit.
|
2009-04-09 14:43:04 +02:00
|
|
|
tst_FakeVim plaintextedit(true);
|
|
|
|
|
res += QTest::qExec(&plaintextedit, argc, argv);
|
2009-04-09 15:44:51 +02:00
|
|
|
|
|
|
|
|
#if 0
|
|
|
|
|
// Test with QTextEdit, too.
|
2009-04-09 14:43:04 +02:00
|
|
|
tst_FakeVim textedit(false);
|
|
|
|
|
res += QTest::qExec(&textedit, argc, argv);
|
2009-04-09 15:44:51 +02:00
|
|
|
#endif
|
|
|
|
|
|
2009-04-09 14:43:04 +02:00
|
|
|
return res;
|
|
|
|
|
}
|
2009-04-08 16:05:24 +02:00
|
|
|
|
2010-09-02 15:32:04 +10:00
|
|
|
#include "tst_fakevim.moc"
|