diff options
Diffstat (limited to 'tests/auto/widgets/widgets/qlineedit/tst_qlineedit.cpp')
-rw-r--r-- | tests/auto/widgets/widgets/qlineedit/tst_qlineedit.cpp | 89 |
1 files changed, 88 insertions, 1 deletions
diff --git a/tests/auto/widgets/widgets/qlineedit/tst_qlineedit.cpp b/tests/auto/widgets/widgets/qlineedit/tst_qlineedit.cpp index 68e6f0267e..1513025f16 100644 --- a/tests/auto/widgets/widgets/qlineedit/tst_qlineedit.cpp +++ b/tests/auto/widgets/widgets/qlineedit/tst_qlineedit.cpp @@ -67,6 +67,8 @@ #include "../../../shared/platforminputcontext.h" #include <private/qinputmethod_p.h> +Q_LOGGING_CATEGORY(lcTests, "qt.widgets.tests") + QT_BEGIN_NAMESPACE class QPainter; QT_END_NAMESPACE @@ -300,8 +302,8 @@ private slots: void shortcutOverrideOnReadonlyLineEdit_data(); void shortcutOverrideOnReadonlyLineEdit(); void QTBUG59957_clearButtonLeftmostAction(); - void QTBUG_60319_setInputMaskCheckImSurroundingText(); + void testQuickSelectionWithMouse(); protected slots: void editingFinished(); @@ -4699,5 +4701,90 @@ void tst_QLineEdit::QTBUG_60319_setInputMaskCheckImSurroundingText() QCOMPARE(surroundingText.length(), cursorPosition); } +void tst_QLineEdit::testQuickSelectionWithMouse() +{ + const auto text = QStringLiteral("This is quite a long line of text."); + const auto prefix = QStringLiteral("Th"); + const auto suffix = QStringLiteral("t."); + QVERIFY(text.startsWith(prefix)); + QVERIFY(text.endsWith(suffix)); + + QLineEdit lineEdit; + lineEdit.setText(text); + lineEdit.show(); + + const QPoint center = lineEdit.contentsRect().center(); + + // Normal mouse selection from left to right, y doesn't change. + QTest::mousePress(lineEdit.windowHandle(), Qt::LeftButton, Qt::NoModifier, center); + QTest::mouseMove(lineEdit.windowHandle(), center + QPoint(20, 0)); + qCDebug(lcTests) << "Selected text:" << lineEdit.selectedText(); + QVERIFY(!lineEdit.selectedText().isEmpty()); + QVERIFY(!lineEdit.selectedText().endsWith(suffix)); + + // Normal mouse selection from left to right, y change is below threshold. + QTest::mousePress(lineEdit.windowHandle(), Qt::LeftButton, Qt::NoModifier, center); + QTest::mouseMove(lineEdit.windowHandle(), center + QPoint(20, 5)); + qCDebug(lcTests) << "Selected text:" << lineEdit.selectedText(); + QVERIFY(!lineEdit.selectedText().isEmpty()); + QVERIFY(!lineEdit.selectedText().endsWith(suffix)); + + // Normal mouse selection from right to left, y doesn't change. + QTest::mousePress(lineEdit.windowHandle(), Qt::LeftButton, Qt::NoModifier, center); + QTest::mouseMove(lineEdit.windowHandle(), center + QPoint(-20, 0)); + qCDebug(lcTests) << "Selected text:" << lineEdit.selectedText(); + QVERIFY(!lineEdit.selectedText().isEmpty()); + QVERIFY(!lineEdit.selectedText().startsWith(prefix)); + + // Normal mouse selection from right to left, y change is below threshold. + QTest::mousePress(lineEdit.windowHandle(), Qt::LeftButton, Qt::NoModifier, center); + QTest::mouseMove(lineEdit.windowHandle(), center + QPoint(-20, -5)); + qCDebug(lcTests) << "Selected text:" << lineEdit.selectedText(); + QVERIFY(!lineEdit.selectedText().isEmpty()); + QVERIFY(!lineEdit.selectedText().startsWith(prefix)); + + const int offset = QGuiApplication::styleHints()->mouseQuickSelectionThreshold() + 1; + + // Select the whole right half. + QTest::mousePress(lineEdit.windowHandle(), Qt::LeftButton, Qt::NoModifier, center); + QTest::mouseMove(lineEdit.windowHandle(), center + QPoint(1, offset)); + qCDebug(lcTests) << "Selected text:" << lineEdit.selectedText(); + QVERIFY(lineEdit.selectedText().endsWith(suffix)); + + // Select the whole left half. + QTest::mousePress(lineEdit.windowHandle(), Qt::LeftButton, Qt::NoModifier, center); + QTest::mouseMove(lineEdit.windowHandle(), center + QPoint(1, -offset)); + qCDebug(lcTests) << "Selected text:" << lineEdit.selectedText(); + QVERIFY(lineEdit.selectedText().startsWith(prefix)); + + // Normal selection -> quick selection -> back to normal selection. + QTest::mousePress(lineEdit.windowHandle(), Qt::LeftButton, Qt::NoModifier, center); + QTest::mouseMove(lineEdit.windowHandle(), center + QPoint(20, 0)); + const auto partialSelection = lineEdit.selectedText(); + qCDebug(lcTests) << "Selected text:" << lineEdit.selectedText(); + QVERIFY(!partialSelection.endsWith(suffix)); + QTest::mouseMove(lineEdit.windowHandle(), center + QPoint(20, offset)); + qCDebug(lcTests) << "Selected text:" << lineEdit.selectedText(); + QVERIFY(lineEdit.selectedText().endsWith(suffix)); + QTest::mouseMove(lineEdit.windowHandle(), center + QPoint(20, 0)); + qCDebug(lcTests) << "Selected text:" << lineEdit.selectedText(); +#ifdef Q_PROCESSOR_ARM + QEXPECT_FAIL("", "Currently fails on gcc-armv7, needs investigation.", Continue); +#endif + QCOMPARE(lineEdit.selectedText(), partialSelection); + + lineEdit.setLayoutDirection(Qt::RightToLeft); + + // Select the whole left half (RTL layout). + QTest::mousePress(lineEdit.windowHandle(), Qt::LeftButton, Qt::NoModifier, center); + QTest::mouseMove(lineEdit.windowHandle(), center + QPoint(1, offset)); + QVERIFY(lineEdit.selectedText().startsWith(prefix)); + + // Select the whole right half (RTL layout). + QTest::mousePress(lineEdit.windowHandle(), Qt::LeftButton, Qt::NoModifier, center); + QTest::mouseMove(lineEdit.windowHandle(), center + QPoint(1, -offset)); + QVERIFY(lineEdit.selectedText().endsWith(suffix)); +} + QTEST_MAIN(tst_QLineEdit) #include "tst_qlineedit.moc" |