diff options
author | David Schulz <david.schulz@qt.io> | 2023-05-16 11:17:27 +0200 |
---|---|---|
committer | David Schulz <david.schulz@qt.io> | 2023-05-17 12:53:22 +0000 |
commit | b2e30e7ef86595c537062cb8261a0735b389949c (patch) | |
tree | 916da472aefb94ecec9a040929a07772e477222e | |
parent | 2cd2324963b7f0ea23e0e6aad5cd04ad42cda049 (diff) | |
download | qt-creator-b2e30e7ef86595c537062cb8261a0735b389949c.tar.gz |
Utils: add Position::fromCursor with tests
Change-Id: I1cd989eaf7e75bc04f171989f9f9fe932402abef
Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org>
Reviewed-by: Jarek Kobus <jaroslaw.kobus@qt.io>
-rw-r--r-- | src/libs/utils/textutils.cpp | 5 | ||||
-rw-r--r-- | src/libs/utils/textutils.h | 1 | ||||
-rw-r--r-- | tests/auto/utils/text/tst_text.cpp | 34 |
3 files changed, 40 insertions, 0 deletions
diff --git a/src/libs/utils/textutils.cpp b/src/libs/utils/textutils.cpp index a57e531059..8b17cc7e01 100644 --- a/src/libs/utils/textutils.cpp +++ b/src/libs/utils/textutils.cpp @@ -59,6 +59,11 @@ Position Position::fromPositionInDocument(const QTextDocument *document, int pos return {}; } +Position Position::fromCursor(const QTextCursor &c) +{ + return c.isNull() ? Position{} : Position{c.blockNumber() + 1, c.positionInBlock()}; +} + int Range::length(const QString &text) const { if (end.line < begin.line) diff --git a/src/libs/utils/textutils.h b/src/libs/utils/textutils.h index df1eb73d8e..96b7afbeb8 100644 --- a/src/libs/utils/textutils.h +++ b/src/libs/utils/textutils.h @@ -32,6 +32,7 @@ public: static Position fromFileName(QStringView fileName, int &postfixPos); static Position fromPositionInDocument(const QTextDocument *document, int pos); + static Position fromCursor(const QTextCursor &cursor); }; class QTCREATOR_UTILS_EXPORT Range diff --git a/tests/auto/utils/text/tst_text.cpp b/tests/auto/utils/text/tst_text.cpp index 3428b0b757..3672eb2ce2 100644 --- a/tests/auto/utils/text/tst_text.cpp +++ b/tests/auto/utils/text/tst_text.cpp @@ -3,6 +3,7 @@ #include <utils/textutils.h> +#include <QTextCursor> #include <QTextDocument> #include <QtTest> @@ -19,6 +20,9 @@ private slots: void testPositionFromPositionInDocument_data(); void testPositionFromPositionInDocument(); + void testPositionFromCursor_data(); + void testPositionFromCursor(); + void testRangeLength_data(); void testRangeLength(); }; @@ -135,6 +139,36 @@ void tst_Text::testPositionFromPositionInDocument() QCOMPARE(Position::fromPositionInDocument(&doc, documentPosition), position); } +void tst_Text::testPositionFromCursor_data() +{ + QTest::addColumn<QString>("text"); + QTest::addColumn<int>("documentPosition"); + QTest::addColumn<Position>("position"); + + QTest::newRow("0") << QString() << 0 << Position{1, 0}; + QTest::newRow("-1") << QString() << -1 << Position{}; + QTest::newRow("mid line") << QString("foo\n") << 1 << Position{1, 1}; + QTest::newRow("second line") << QString("foo\n") << 4 << Position{2, 0}; + QTest::newRow("second mid line") << QString("foo\nbar") << 5 << Position{2, 1}; + QTest::newRow("behind content") << QString("foo\nbar") << 8 << Position{1, 0}; +} + +void tst_Text::testPositionFromCursor() +{ + QFETCH(QString, text); + QFETCH(int, documentPosition); + QFETCH(Position, position); + + if (documentPosition < 0) {// test invalid Cursor { + QCOMPARE(Position::fromCursor(QTextCursor()), position); + } else { + QTextDocument doc(text); + QTextCursor cursor(&doc); + cursor.setPosition(documentPosition); + QCOMPARE(Position::fromCursor(cursor), position); + } +} + void tst_Text::testRangeLength_data() { QTest::addColumn<QString>("text"); |