forked from qt-creator/qt-creator
FakeVim: Factor out some test code
GCC 4.8.2 starts choking on the test size. Change-Id: I65c80917c9bad067bb7d8e69e2431dd1c4886b08 Reviewed-by: hjk <hjk121@nokiamail.com>
This commit is contained in:
@@ -74,45 +74,44 @@ static const QString helpFormat = _(
|
|||||||
"\n\tShould be:\n" \
|
"\n\tShould be:\n" \
|
||||||
LINE_START "%4" LINE_END);
|
LINE_START "%4" LINE_END);
|
||||||
|
|
||||||
|
static QByteArray textWithCursor(const QByteArray &text, int position)
|
||||||
|
{
|
||||||
|
return (position == -1) ? text : (text.left(position) + X + text.mid(position));
|
||||||
|
}
|
||||||
|
|
||||||
|
static QByteArray textWithCursor(const QByteArray &text, const QTextBlock &block, int column)
|
||||||
|
{
|
||||||
|
const int pos = block.position() + qMin(column, qMax(0, block.length() - 2));
|
||||||
|
return text.left(pos) + X + text.mid(pos);
|
||||||
|
}
|
||||||
|
|
||||||
// Compare document contents with a expectedText.
|
// Compare document contents with a expectedText.
|
||||||
// Also check cursor position if the expectedText contains | chracter.
|
// Also check cursor position if the expectedText contains | chracter.
|
||||||
#define COMPARE(beforeText, beforePosition, afterText, afterPosition, expectedText, cmd) \
|
|
||||||
do { \
|
|
||||||
QByteArray before(beforeText); \
|
|
||||||
QByteArray actual(afterText); \
|
|
||||||
QByteArray expected = expectedText; \
|
|
||||||
data.oldPosition = beforePosition; \
|
|
||||||
data.oldText = before; \
|
|
||||||
if (expected.contains(X)) {\
|
|
||||||
before = textWithCursor(before, beforePosition); \
|
|
||||||
actual = textWithCursor(actual, afterPosition); \
|
|
||||||
} \
|
|
||||||
QString help = helpFormat \
|
|
||||||
.arg(_(cmd)) \
|
|
||||||
.arg(_(before.replace('\n', LINE_END LINE_START))) \
|
|
||||||
.arg(_(actual.replace('\n', LINE_END LINE_START))) \
|
|
||||||
.arg(_(expected.replace('\n', LINE_END LINE_START))); \
|
|
||||||
QVERIFY2(actual == expected, help.toLatin1().constData()); \
|
|
||||||
} while (false)
|
|
||||||
|
|
||||||
// Send keys and check if the expected result is same as document contents.
|
// Send keys and check if the expected result is same as document contents.
|
||||||
// Escape is always prepended to keys so that previous command is cancelled.
|
// Escape is always prepended to keys so that previous command is cancelled.
|
||||||
#define KEYS(keys, expected) \
|
#define KEYS(keys, expectedText) \
|
||||||
do { \
|
do { \
|
||||||
QByteArray beforeText(data.text()); \
|
QByteArray beforeText(data.text()); \
|
||||||
int beforePosition = data.position(); \
|
int beforePosition = data.position(); \
|
||||||
data.doKeys("<ESC>"); \
|
data.doKeys("<ESC>"); \
|
||||||
data.doKeys(keys); \
|
data.doKeys(keys); \
|
||||||
COMPARE(beforeText, beforePosition, data.text(), data.position(), (expected), (keys)); \
|
QByteArray actual(data.text()); \
|
||||||
|
QByteArray expected = expectedText; \
|
||||||
|
QByteArray desc = data.fixup(_(keys), beforeText, actual, expected, beforePosition); \
|
||||||
|
QVERIFY2(actual == expected, desc.constData()); \
|
||||||
} while (false)
|
} while (false)
|
||||||
|
|
||||||
// Run Ex command and check if the expected result is same as document contents.
|
// Run Ex command and check if the expected result is same as document contents.
|
||||||
#define COMMAND(cmd, expected) \
|
#define COMMAND(cmd, expectedText) \
|
||||||
do { \
|
do { \
|
||||||
QByteArray beforeText(data.text()); \
|
QByteArray beforeText(data.text()); \
|
||||||
int beforePosition = data.position(); \
|
int beforePosition = data.position(); \
|
||||||
data.doCommand(cmd); \
|
data.doCommand(cmd); \
|
||||||
COMPARE(beforeText, beforePosition, data.text(), data.position(), (expected), (":" cmd)); \
|
QByteArray actual(data.text()); \
|
||||||
|
QByteArray expected = expectedText; \
|
||||||
|
QByteArray desc = data.fixup(_(":" cmd), beforeText, actual, expected, beforePosition); \
|
||||||
|
QVERIFY2(actual == expected, desc.constData()); \
|
||||||
} while (false)
|
} while (false)
|
||||||
|
|
||||||
// Test undo, redo and repeat of last single command. This doesn't test cursor position.
|
// Test undo, redo and repeat of last single command. This doesn't test cursor position.
|
||||||
@@ -140,17 +139,6 @@ static const QString helpFormat = _(
|
|||||||
using namespace FakeVim::Internal;
|
using namespace FakeVim::Internal;
|
||||||
using namespace TextEditor;
|
using namespace TextEditor;
|
||||||
|
|
||||||
static QByteArray textWithCursor(const QByteArray &text, int position)
|
|
||||||
{
|
|
||||||
return (position == -1) ? text : (text.left(position) + X + text.mid(position));
|
|
||||||
}
|
|
||||||
|
|
||||||
static QByteArray textWithCursor(const QByteArray &text, const QTextBlock &block, int column)
|
|
||||||
{
|
|
||||||
const int pos = block.position() + qMin(column, qMax(0, block.length() - 2));
|
|
||||||
return text.left(pos) + X + text.mid(pos);
|
|
||||||
}
|
|
||||||
|
|
||||||
const QByteArray testLines =
|
const QByteArray testLines =
|
||||||
/* 0 1 2 3 4 */
|
/* 0 1 2 3 4 */
|
||||||
/* 0123456789012345678901234567890123457890 */
|
/* 0123456789012345678901234567890123457890 */
|
||||||
@@ -203,6 +191,23 @@ struct FakeVimPlugin::TestData
|
|||||||
|
|
||||||
QTextCursor cursor() const { return editor()->textCursor(); }
|
QTextCursor cursor() const { return editor()->textCursor(); }
|
||||||
|
|
||||||
|
QByteArray fixup(const QString &cmd, QByteArray &before,
|
||||||
|
QByteArray &actual, QByteArray &expected,
|
||||||
|
int beforePosition)
|
||||||
|
{
|
||||||
|
oldPosition = beforePosition;
|
||||||
|
oldText = before;
|
||||||
|
if (expected.contains(X)) {
|
||||||
|
before = textWithCursor(before, beforePosition);
|
||||||
|
actual = textWithCursor(actual, position());
|
||||||
|
}
|
||||||
|
return helpFormat
|
||||||
|
.arg(cmd)
|
||||||
|
.arg(QString::fromLatin1(before.replace('\n', LINE_END LINE_START)))
|
||||||
|
.arg(QString::fromLatin1(actual.replace('\n', LINE_END LINE_START)))
|
||||||
|
.arg(QString::fromLatin1(expected.replace('\n', LINE_END LINE_START))).toLatin1();
|
||||||
|
}
|
||||||
|
|
||||||
int position() const
|
int position() const
|
||||||
{
|
{
|
||||||
return cursor().position();
|
return cursor().position();
|
||||||
|
Reference in New Issue
Block a user