From c4cbb1249fa7cb754de4603f5ff606aa94fafbd5 Mon Sep 17 00:00:00 2001 From: Caroline Chao Date: Tue, 5 Mar 2013 14:56:10 +0100 Subject: Tests: add autotests for TextEdit and TextInput Check the selection is not cleared when the control receives a focus out event with one of the following reason: - Qt::ActiveWindowFocusReason - Qt::PopupFocusReason Change-Id: I38f4a4cba5e769f19de4e327d03be57a8d1d36a7 Reviewed-by: Frederik Gladhorn --- .../qquicktextedit/data/focusOutSelection.qml | 35 +++++++++++++++++ .../quick/qquicktextedit/tst_qquicktextedit.cpp | 43 +++++++++++++++++++++ .../quick/qquicktextinput/tst_qquicktextinput.cpp | 44 ++++++++++++++++++++++ 3 files changed, 122 insertions(+) create mode 100644 tests/auto/quick/qquicktextedit/data/focusOutSelection.qml diff --git a/tests/auto/quick/qquicktextedit/data/focusOutSelection.qml b/tests/auto/quick/qquicktextedit/data/focusOutSelection.qml new file mode 100644 index 0000000000..91a6ac900d --- /dev/null +++ b/tests/auto/quick/qquicktextedit/data/focusOutSelection.qml @@ -0,0 +1,35 @@ +import QtQuick 2.0 + +Rectangle { + id: focusoutwindow + + width: 100 + height: 150 + + property alias text1: text1 + property alias text2: text2 + + TextEdit { + x: 20 + y: 30 + id: text1 + text: "text 1" + height: 20 + width: 50 + selectByMouse: true + activeFocusOnPress: true + objectName: "text1" + } + + TextEdit { + x: 20 + y: 80 + id: text2 + text: "text 2" + height: 20 + width: 50 + selectByMouse: true + activeFocusOnPress: true + objectName: "text2" + } +} diff --git a/tests/auto/quick/qquicktextedit/tst_qquicktextedit.cpp b/tests/auto/quick/qquicktextedit/tst_qquicktextedit.cpp index c29c6c05d6..e4821e80a6 100644 --- a/tests/auto/quick/qquicktextedit/tst_qquicktextedit.cpp +++ b/tests/auto/quick/qquicktextedit/tst_qquicktextedit.cpp @@ -117,6 +117,7 @@ private slots: void color(); void textMargin(); void persistentSelection(); + void selectionOnFocusOut(); void focusOnPress(); void selection(); void isRightToLeft_data(); @@ -1163,6 +1164,48 @@ void tst_qquicktextedit::persistentSelection() } +void tst_qquicktextedit::selectionOnFocusOut() +{ + QQuickView window(testFileUrl("focusOutSelection.qml")); + window.show(); + window.requestActivate(); + QTest::qWaitForWindowActive(&window); + + QPoint p1(25, 35); + QPoint p2(25, 85); + + QQuickTextEdit *edit1 = window.rootObject()->findChild("text1"); + QQuickTextEdit *edit2 = window.rootObject()->findChild("text2"); + + QTest::mouseClick(&window, Qt::LeftButton, 0, p1); + QVERIFY(edit1->hasActiveFocus()); + QVERIFY(!edit2->hasActiveFocus()); + + edit1->selectAll(); + QCOMPARE(edit1->selectedText(), QLatin1String("text 1")); + + QTest::mouseClick(&window, Qt::LeftButton, 0, p2); + + QCOMPARE(edit1->selectedText(), QLatin1String("")); + QVERIFY(!edit1->hasActiveFocus()); + QVERIFY(edit2->hasActiveFocus()); + + edit2->selectAll(); + QCOMPARE(edit2->selectedText(), QLatin1String("text 2")); + + + edit2->setFocus(false, Qt::ActiveWindowFocusReason); + QVERIFY(!edit2->hasActiveFocus()); + QCOMPARE(edit2->selectedText(), QLatin1String("text 2")); + + edit2->setFocus(true); + QVERIFY(edit2->hasActiveFocus()); + + edit2->setFocus(false, Qt::PopupFocusReason); + QVERIFY(!edit2->hasActiveFocus()); + QCOMPARE(edit2->selectedText(), QLatin1String("text 2")); +} + void tst_qquicktextedit::focusOnPress() { QString componentStr = diff --git a/tests/auto/quick/qquicktextinput/tst_qquicktextinput.cpp b/tests/auto/quick/qquicktextinput/tst_qquicktextinput.cpp index 02475eb431..61cac47370 100644 --- a/tests/auto/quick/qquicktextinput/tst_qquicktextinput.cpp +++ b/tests/auto/quick/qquicktextinput/tst_qquicktextinput.cpp @@ -167,6 +167,7 @@ private slots: void openInputPanel(); void setHAlignClearCache(); void focusOutClearSelection(); + void focusOutNotClearSelection(); void echoMode(); void passwordEchoDelay(); @@ -3497,6 +3498,49 @@ void tst_qquicktextinput::focusOutClearSelection() QTRY_COMPARE(input.selectedText(), QLatin1String("")); } +void tst_qquicktextinput::focusOutNotClearSelection() +{ + QQuickView view; + QQuickTextInput input; + input.setText(QLatin1String("Hello world")); + input.setFocus(true); + input.setParentItem(view.contentItem()); + input.componentComplete(); + view.show(); + view.requestActivate(); + QTest::qWaitForWindowActive(&view); + + QVERIFY(input.hasActiveFocus()); + input.select(2,5); + QTRY_COMPARE(input.selectedText(), QLatin1String("llo")); + + // The selection should not be cleared when the focus + // out event has one of the following reason: + // Qt::ActiveWindowFocusReason + // Qt::PopupFocusReason + + input.setFocus(false, Qt::ActiveWindowFocusReason); + QGuiApplication::processEvents(); + QTRY_COMPARE(input.selectedText(), QLatin1String("llo")); + QTRY_COMPARE(input.hasActiveFocus(), false); + + input.setFocus(true); + QTRY_COMPARE(input.hasActiveFocus(), true); + + input.setFocus(false, Qt::PopupFocusReason); + QGuiApplication::processEvents(); + QTRY_COMPARE(input.selectedText(), QLatin1String("llo")); + QTRY_COMPARE(input.hasActiveFocus(), false); + + input.setFocus(true); + QTRY_COMPARE(input.hasActiveFocus(), true); + + input.setFocus(false, Qt::OtherFocusReason); + QGuiApplication::processEvents(); + QTRY_COMPARE(input.selectedText(), QLatin1String("")); + QTRY_COMPARE(input.hasActiveFocus(), false); +} + void tst_qquicktextinput::geometrySignals() { QQmlComponent component(&engine, testFileUrl("geometrySignals.qml")); -- cgit v1.2.3