diff options
author | Caroline Chao <caroline.chao@digia.com> | 2013-03-05 14:56:10 +0100 |
---|---|---|
committer | The Qt Project <gerrit-noreply@qt-project.org> | 2013-03-07 11:58:50 +0100 |
commit | c4cbb1249fa7cb754de4603f5ff606aa94fafbd5 (patch) | |
tree | 8011bbe11d396ea71211e59133413280d1d3cf66 | |
parent | 962609bef1aaa61125700ceb5e5e25c243113a0a (diff) |
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 <frederik.gladhorn@digia.com>
3 files changed, 122 insertions, 0 deletions
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<QQuickTextEdit*>("text1"); + QQuickTextEdit *edit2 = window.rootObject()->findChild<QQuickTextEdit*>("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")); |