diff options
author | Andrew den Exter <andrew.den-exter@nokia.com> | 2012-07-13 11:11:31 +1000 |
---|---|---|
committer | Qt by Nokia <qt-info@nokia.com> | 2012-07-13 08:24:36 +0200 |
commit | 867704b37cfbe055ba947291cde343204ce8e52a (patch) | |
tree | 4ebcf2f7752dafb1ac435931500b7848b01b5ad2 /tests/auto/quick/qquicktextedit | |
parent | d166e34bade3b7c82f610f5df209b6418df9e178 (diff) |
Fix TextEdit and TextInput test failures.
Use qWaitForWindowActive and instead of qWaitForWindowShown where focus
is required.
Also send events directly to the tested item, instead of getting a
pointer to the same object from QGuiApplication::focusObject() which
can return null and crash the test if focus is stolen.
Change-Id: I6b8956a3afc8ffa58394a957a35b64b1c0924596
Reviewed-by: Damian Jansen <damian.jansen@nokia.com>
Reviewed-by: Michael Brasser <michael.brasser@nokia.com>
Diffstat (limited to 'tests/auto/quick/qquicktextedit')
-rw-r--r-- | tests/auto/quick/qquicktextedit/tst_qquicktextedit.cpp | 106 |
1 files changed, 47 insertions, 59 deletions
diff --git a/tests/auto/quick/qquicktextedit/tst_qquicktextedit.cpp b/tests/auto/quick/qquicktextedit/tst_qquicktextedit.cpp index 26d64e72d4..562f24edd6 100644 --- a/tests/auto/quick/qquicktextedit/tst_qquicktextedit.cpp +++ b/tests/auto/quick/qquicktextedit/tst_qquicktextedit.cpp @@ -583,9 +583,7 @@ void tst_qquicktextedit::alignments() QQuickView canvas(testFileUrl("alignments.qml")); canvas.show(); - canvas.requestActivateWindow(); QTest::qWaitForWindowShown(&canvas); - QTRY_COMPARE(&canvas, qGuiApp->focusWindow()); QObject *ob = canvas.rootObject(); QVERIFY(ob != 0); @@ -727,18 +725,18 @@ void tst_qquicktextedit::hAlign_RightToLeft() QVERIFY(textEdit->positionToRectangle(0).x() < canvas.width()/2); canvas.requestActivateWindow(); - QTest::qWaitForWindowShown(&canvas); - QTRY_COMPARE(&canvas, qGuiApp->focusWindow()); + QTest::qWaitForWindowActive(&canvas); + QVERIFY(textEdit->hasActiveFocus()); textEdit->setText(QString()); - { QInputMethodEvent ev(rtlText, QList<QInputMethodEvent::Attribute>()); QGuiApplication::sendEvent(qGuiApp->focusObject(), &ev); } + { QInputMethodEvent ev(rtlText, QList<QInputMethodEvent::Attribute>()); QGuiApplication::sendEvent(textEdit, &ev); } QCOMPARE(textEdit->hAlign(), QQuickTextEdit::AlignRight); - { QInputMethodEvent ev("Hello world!", QList<QInputMethodEvent::Attribute>()); QGuiApplication::sendEvent(qGuiApp->focusObject(), &ev); } + { QInputMethodEvent ev("Hello world!", QList<QInputMethodEvent::Attribute>()); QGuiApplication::sendEvent(textEdit, &ev); } QCOMPARE(textEdit->hAlign(), QQuickTextEdit::AlignLeft); // Clear pre-edit text. TextEdit should maybe do this itself on setText, but that may be // redundant as an actual input method may take care of it. - { QInputMethodEvent ev; QGuiApplication::sendEvent(qGuiApp->focusObject(), &ev); } + { QInputMethodEvent ev; QGuiApplication::sendEvent(textEdit, &ev); } // empty text with implicit alignment follows the system locale-based // keyboard input direction from qApp->inputMethod()->inputDirection @@ -814,7 +812,6 @@ void tst_qquicktextedit::hAlignVisual() { QQuickView view(testFileUrl("hAlignVisual.qml")); view.show(); - view.requestActivateWindow(); QTest::qWaitForWindowShown(&view); QQuickText *text = view.rootObject()->findChild<QQuickText*>("textItem"); @@ -1086,9 +1083,7 @@ void tst_qquicktextedit::persistentSelection() QQuickView canvas(testFileUrl("persistentSelection.qml")); canvas.show(); canvas.requestActivateWindow(); - QTest::qWaitForWindowShown(&canvas); - QTRY_COMPARE(&canvas, qGuiApp->focusWindow()); - canvas.requestActivateWindow(); + QTest::qWaitForWindowActive(&canvas); QQuickTextEdit *edit = qobject_cast<QQuickTextEdit *>(canvas.rootObject()); QVERIFY(edit); @@ -1157,8 +1152,7 @@ void tst_qquicktextedit::focusOnPress() textEditObject->setParentItem(canvas.rootItem()); canvas.show(); canvas.requestActivateWindow(); - QTest::qWaitForWindowShown(&canvas); - QTRY_COMPARE(QGuiApplication::focusWindow(), &canvas); + QTest::qWaitForWindowActive(&canvas); QCOMPARE(textEditObject->hasFocus(), false); QCOMPARE(textEditObject->hasActiveFocus(), false); @@ -1358,16 +1352,14 @@ void tst_qquicktextedit::keySelection() QQuickView canvas(testFileUrl("navigation.qml")); canvas.show(); canvas.requestActivateWindow(); - QTest::qWaitForWindowShown(&canvas); - QTRY_COMPARE(&canvas, qGuiApp->focusWindow()); - canvas.requestActivateWindow(); + QTest::qWaitForWindowActive(&canvas); QVERIFY(canvas.rootObject() != 0); QQuickTextEdit *input = qobject_cast<QQuickTextEdit *>(qvariant_cast<QObject *>(canvas.rootObject()->property("myInput"))); QVERIFY(input != 0); - QTRY_VERIFY(input->hasActiveFocus() == true); + QVERIFY(input->hasActiveFocus()); QSignalSpy spy(input, SIGNAL(selectedTextChanged())); @@ -1814,7 +1806,6 @@ void tst_qquicktextedit::mouseSelection() canvas.show(); canvas.requestActivateWindow(); QTest::qWaitForWindowActive(&canvas); - QTRY_COMPARE(&canvas, qGuiApp->focusWindow()); QVERIFY(canvas.rootObject() != 0); QQuickTextEdit *textEditObject = qobject_cast<QQuickTextEdit *>(canvas.rootObject()); @@ -1856,8 +1847,7 @@ void tst_qquicktextedit::dragMouseSelection() canvas.show(); canvas.requestActivateWindow(); - QTest::qWaitForWindowShown(&canvas); - QTRY_COMPARE(&canvas, qGuiApp->focusWindow()); + QTest::qWaitForWindowActive(&canvas); QVERIFY(canvas.rootObject() != 0); QQuickTextEdit *textEditObject = qobject_cast<QQuickTextEdit *>(canvas.rootObject()); @@ -1910,8 +1900,7 @@ void tst_qquicktextedit::mouseSelectionMode() canvas.show(); canvas.requestActivateWindow(); - QTest::qWaitForWindowShown(&canvas); - QTRY_COMPARE(&canvas, qGuiApp->focusWindow()); + QTest::qWaitForWindowActive(&canvas); QVERIFY(canvas.rootObject() != 0); QQuickTextEdit *textEditObject = qobject_cast<QQuickTextEdit *>(canvas.rootObject()); @@ -1997,7 +1986,7 @@ void tst_qquicktextedit::positionAt() texteditObject->setCursorPosition(0); QInputMethodEvent inputEvent(preeditText, QList<QInputMethodEvent::Attribute>()); - QGuiApplication::sendEvent(qGuiApp->focusObject(), &inputEvent); + QGuiApplication::sendEvent(texteditObject, &inputEvent); // Check all points within the preedit text return the same position. QCOMPARE(texteditObject->positionAt(0, y0), 0); @@ -2017,7 +2006,7 @@ void tst_qquicktextedit::linkActivated() QVERIFY(canvas.rootObject() != 0); canvas.show(); canvas.requestActivateWindow(); - QTest::qWaitForWindowShown(&canvas); + QTest::qWaitForWindowActive(&canvas); QQuickTextEdit *texteditObject = qobject_cast<QQuickTextEdit *>(canvas.rootObject()); QVERIFY(texteditObject != 0); @@ -2205,8 +2194,8 @@ void tst_qquicktextedit::cursorVisible() QQuickView view(testFileUrl("cursorVisible.qml")); view.show(); view.requestActivateWindow(); - QTest::qWaitForWindowShown(&view); - QTRY_COMPARE(&view, qGuiApp->focusWindow()); + QTest::qWaitForWindowActive(&view); + QCOMPARE(&view, qGuiApp->focusWindow()); QCOMPARE(edit.isCursorVisible(), false); @@ -2237,7 +2226,7 @@ void tst_qquicktextedit::cursorVisible() QWindow alternateView; alternateView.show(); alternateView.requestActivateWindow(); - QTest::qWaitForWindowShown(&alternateView); + QTest::qWaitForWindowActive(&alternateView); QCOMPARE(edit.isCursorVisible(), false); QCOMPARE(spy.count(), 6); @@ -2518,8 +2507,7 @@ void tst_qquicktextedit::textInput() QQuickView view(testFileUrl("inputMethodEvent.qml")); view.show(); view.requestActivateWindow(); - QTest::qWaitForWindowShown(&view); - QTRY_COMPARE(&view, qGuiApp->focusWindow()); + QTest::qWaitForWindowActive(&view); QQuickTextEdit *edit = qobject_cast<QQuickTextEdit *>(view.rootObject()); QVERIFY(edit); QVERIFY(edit->hasActiveFocus() == true); @@ -2528,7 +2516,7 @@ void tst_qquicktextedit::textInput() QSignalSpy spy(edit, SIGNAL(textChanged())); QInputMethodEvent event; event.setCommitString( "Hello world!", 0, 0); - QGuiApplication::sendEvent(qGuiApp->focusObject(), &event); + QGuiApplication::sendEvent(edit, &event); QCOMPARE(edit->text(), QString("Hello world!")); QCOMPARE(spy.count(), 1); @@ -2538,7 +2526,7 @@ void tst_qquicktextedit::textInput() QCOMPARE(editPrivate->text, QString("Hello world!")); QInputMethodQueryEvent queryEvent(Qt::ImEnabled); - QGuiApplication::sendEvent(qGuiApp->focusObject(), &queryEvent); + QGuiApplication::sendEvent(edit, &queryEvent); QCOMPARE(queryEvent.value(Qt::ImEnabled).toBool(), true); edit->setReadOnly(true); @@ -2555,8 +2543,7 @@ void tst_qquicktextedit::inputMethodUpdate() QQuickView view(testFileUrl("inputMethodEvent.qml")); view.show(); view.requestActivateWindow(); - QTest::qWaitForWindowShown(&view); - QTRY_COMPARE(&view, qGuiApp->focusWindow()); + QTest::qWaitForWindowActive(&view); QQuickTextEdit *edit = qobject_cast<QQuickTextEdit *>(view.rootObject()); QVERIFY(edit); QVERIFY(edit->hasActiveFocus() == true); @@ -2646,8 +2633,7 @@ void tst_qquicktextedit::openInputPanel() QQuickView view(testFileUrl("openInputPanel.qml")); view.show(); view.requestActivateWindow(); - QTest::qWaitForWindowShown(&view); - QTRY_COMPARE(&view, qGuiApp->focusWindow()); + QTest::qWaitForWindowActive(&view); QQuickTextEdit *edit = qobject_cast<QQuickTextEdit *>(view.rootObject()); QVERIFY(edit); @@ -2655,7 +2641,6 @@ void tst_qquicktextedit::openInputPanel() // check default values QVERIFY(edit->focusOnPress()); QVERIFY(!edit->hasActiveFocus()); - qDebug() << &edit << qApp->focusObject(); QVERIFY(qApp->focusObject() != edit); QCOMPARE(qApp->inputMethod()->isVisible(), false); @@ -2987,9 +2972,8 @@ void tst_qquicktextedit::preeditCursorRectangle() QQuickView view(testFileUrl("inputMethodEvent.qml")); view.show(); view.requestActivateWindow(); - QTest::qWaitForWindowShown(&view); + QTest::qWaitForWindowActive(&view); - QTRY_COMPARE(&view, qGuiApp->focusWindow()); QQuickTextEdit *edit = qobject_cast<QQuickTextEdit *>(view.rootObject()); QVERIFY(edit); @@ -3001,16 +2985,17 @@ void tst_qquicktextedit::preeditCursorRectangle() QRectF currentRect; + QCOMPARE(QGuiApplication::focusObject(), static_cast<QObject *>(edit)); QInputMethodQueryEvent query(Qt::ImCursorRectangle); - QCoreApplication::sendEvent(qGuiApp->focusObject(), &query); + QCoreApplication::sendEvent(edit, &query); QRectF previousRect = query.value(Qt::ImCursorRectangle).toRectF(); // Verify that the micro focus rect is positioned the same for position 0 as // it would be if there was no preedit text. QInputMethodEvent imEvent(preeditText, QList<QInputMethodEvent::Attribute>() << QInputMethodEvent::Attribute(QInputMethodEvent::Cursor, 0, preeditText.length(), QVariant())); - QCoreApplication::sendEvent(qGuiApp->focusObject(), &imEvent); - QCoreApplication::sendEvent(qGuiApp->focusObject(), &query); + QCoreApplication::sendEvent(edit, &imEvent); + QCoreApplication::sendEvent(edit, &query); currentRect = query.value(Qt::ImCursorRectangle).toRectF(); QCOMPARE(edit->cursorRectangle(), currentRect); QCOMPARE(cursor->pos(), currentRect.topLeft()); @@ -3023,8 +3008,8 @@ void tst_qquicktextedit::preeditCursorRectangle() for (int i = 1; i <= 5; ++i) { QInputMethodEvent imEvent(preeditText, QList<QInputMethodEvent::Attribute>() << QInputMethodEvent::Attribute(QInputMethodEvent::Cursor, i, preeditText.length(), QVariant())); - QCoreApplication::sendEvent(qGuiApp->focusObject(), &imEvent); - QCoreApplication::sendEvent(qGuiApp->focusObject(), &query); + QCoreApplication::sendEvent(edit, &imEvent); + QCoreApplication::sendEvent(edit, &query); currentRect = query.value(Qt::ImCursorRectangle).toRectF(); QCOMPARE(edit->cursorRectangle(), currentRect); QCOMPARE(cursor->pos(), currentRect.topLeft()); @@ -3040,8 +3025,8 @@ void tst_qquicktextedit::preeditCursorRectangle() panelSpy.clear(); { QInputMethodEvent imEvent("wwwww", QList<QInputMethodEvent::Attribute>() << QInputMethodEvent::Attribute(QInputMethodEvent::Cursor, 5, 1, QVariant())); - QCoreApplication::sendEvent(qGuiApp->focusObject(), &imEvent); } - QCoreApplication::sendEvent(qGuiApp->focusObject(), &query); + QCoreApplication::sendEvent(edit, &imEvent); } + QCoreApplication::sendEvent(edit, &query); currentRect = query.value(Qt::ImCursorRectangle).toRectF(); QCOMPARE(edit->cursorRectangle(), currentRect); QCOMPARE(cursor->pos(), currentRect.topLeft()); @@ -3053,8 +3038,8 @@ void tst_qquicktextedit::preeditCursorRectangle() editSpy.clear(); panelSpy.clear(); { QInputMethodEvent imEvent(preeditText, QList<QInputMethodEvent::Attribute>()); - QCoreApplication::sendEvent(qGuiApp->focusObject(), &imEvent); } - QCoreApplication::sendEvent(qGuiApp->focusObject(), &query); + QCoreApplication::sendEvent(edit, &imEvent); } + QCoreApplication::sendEvent(edit, &query); currentRect = query.value(Qt::ImCursorRectangle).toRectF(); QCOMPARE(edit->cursorRectangle(), currentRect); QCOMPARE(cursor->pos(), currentRect.topLeft()); @@ -3070,10 +3055,12 @@ void tst_qquicktextedit::inputMethodComposing() QQuickView view(testFileUrl("inputContext.qml")); view.show(); view.requestActivateWindow(); - QTest::qWaitForWindowShown(&view); - QTRY_COMPARE(&view, qGuiApp->focusWindow()); + QTest::qWaitForWindowActive(&view); + QQuickTextEdit *edit = qobject_cast<QQuickTextEdit *>(view.rootObject()); QVERIFY(edit); + QCOMPARE(QGuiApplication::focusObject(), static_cast<QObject *>(edit)); + QSignalSpy spy(edit, SIGNAL(inputMethodComposingChanged())); edit->setCursorPosition(12); @@ -3183,10 +3170,10 @@ void tst_qquicktextedit::cursorRectangleSize() textEdit->setFocus(true); canvas->show(); canvas->requestActivateWindow(); - QTest::qWaitForWindowShown(canvas); + QTest::qWaitForWindowActive(canvas); QInputMethodQueryEvent event(Qt::ImCursorRectangle); - qApp->sendEvent(qApp->focusObject(), &event); + qApp->sendEvent(textEdit, &event); QRectF cursorRectFromQuery = event.value(Qt::ImCursorRectangle).toRectF(); QRectF cursorRectFromItem = textEdit->cursorRectangle(); @@ -4041,8 +4028,9 @@ void tst_qquicktextedit::keySequence() textEdit->setParentItem(canvas.rootItem()); canvas.show(); canvas.requestActivateWindow(); - QTest::qWaitForWindowShown(&canvas); - QTRY_COMPARE(QGuiApplication::focusWindow(), &canvas); + QTest::qWaitForWindowActive(&canvas); + + QVERIFY(textEdit->hasActiveFocus()); simulateKey(&canvas, layoutDirection); @@ -4204,8 +4192,8 @@ void tst_qquicktextedit::undo() canvas.show(); canvas.requestActivateWindow(); QTest::qWaitForWindowActive(&canvas); - QTRY_COMPARE(QGuiApplication::focusWindow(), &canvas); + QVERIFY(textEdit->hasActiveFocus()); QVERIFY(!textEdit->canUndo()); QSignalSpy spy(textEdit, SIGNAL(canUndoChanged())); @@ -4289,8 +4277,8 @@ void tst_qquicktextedit::redo() textEdit->setParentItem(canvas.rootItem()); canvas.show(); canvas.requestActivateWindow(); - QTest::qWaitForWindowShown(&canvas); - QTRY_COMPARE(QGuiApplication::focusWindow(), &canvas); + QTest::qWaitForWindowActive(&canvas); + QVERIFY(textEdit->hasActiveFocus()); QVERIFY(!textEdit->canUndo()); QVERIFY(!textEdit->canRedo()); @@ -4482,8 +4470,8 @@ void tst_qquicktextedit::undo_keypressevents() textEdit->setParentItem(canvas.rootItem()); canvas.show(); canvas.requestActivateWindow(); - QTest::qWaitForWindowShown(&canvas); - QTRY_COMPARE(QGuiApplication::focusWindow(), &canvas); + QTest::qWaitForWindowActive(&canvas); + QVERIFY(textEdit->hasActiveFocus()); simulateKeys(&canvas, keys); @@ -4571,7 +4559,7 @@ void tst_qquicktextedit::emptytags_QTBUG_22058() canvas.show(); canvas.requestActivateWindow(); - QTest::qWaitForWindowShown(&canvas); + QTest::qWaitForWindowActive(&canvas); QQuickTextEdit *input = qobject_cast<QQuickTextEdit *>(qvariant_cast<QObject *>(canvas.rootObject()->property("inputField"))); QVERIFY(input->hasActiveFocus()); |