diff options
author | Friedemann Kleint <Friedemann.Kleint@digia.com> | 2013-07-24 10:41:56 +0200 |
---|---|---|
committer | The Qt Project <gerrit-noreply@qt-project.org> | 2013-07-25 14:11:42 +0200 |
commit | 019066a7153c6eb99caf58bac61fe5a5b7f76c67 (patch) | |
tree | 953c0489e8dc82e7be93a49fd260122fdb8a2a06 /tests/auto/declarative/qdeclarativetextinput/tst_qdeclarativetextinput.cpp | |
parent | 08e621d3f7cbcf37b3f3d42fb06fa065bd6046bf (diff) |
Stabilize and fix tst_qdeclarativetextinput on Windows.
Introduce a scoped pointer for the views to ensure cleanup
after failing tests. Clear text in maxLength().
Move calls to QDeclarativeView::setFocus() below activation
for it to set the "active" focus item correctly.
Add message to obtain more information about failing tests.
Task-number: QTBUG-32538
Change-Id: Id65afbdfb0f9fd70846958fcb28fdd0fe1bd70f7
Reviewed-by: Jan Arve Sæther <jan-arve.saether@digia.com>
Diffstat (limited to 'tests/auto/declarative/qdeclarativetextinput/tst_qdeclarativetextinput.cpp')
-rw-r--r-- | tests/auto/declarative/qdeclarativetextinput/tst_qdeclarativetextinput.cpp | 121 |
1 files changed, 62 insertions, 59 deletions
diff --git a/tests/auto/declarative/qdeclarativetextinput/tst_qdeclarativetextinput.cpp b/tests/auto/declarative/qdeclarativetextinput/tst_qdeclarativetextinput.cpp index 7065c569..54b9f892 100644 --- a/tests/auto/declarative/qdeclarativetextinput/tst_qdeclarativetextinput.cpp +++ b/tests/auto/declarative/qdeclarativetextinput/tst_qdeclarativetextinput.cpp @@ -82,6 +82,33 @@ void sendPreeditText(const QString &text, int cursor) QApplication::sendEvent(qApp->focusObject(), &event); } +static inline QByteArray msgNotGreaterThan(int n1, int n2) +{ + return QByteArray::number(n1) + QByteArrayLiteral(" is not greater than ") + QByteArray::number(n2); +} + +static inline QByteArray msgNotLessThan(int n1, int n2) +{ + return QByteArray::number(n1) + QByteArrayLiteral(" is not less than ") + QByteArray::number(n2); +} + +static inline QByteArray msgNotEqual(int n1, int n2) +{ + return QByteArray::number(n1) + QByteArrayLiteral(" is not equal to ") + QByteArray::number(n2); +} + +static inline QByteArray msgNotNotEqual(int n1, int n2) +{ + return QByteArray::number(n1) + QByteArrayLiteral(" is equal to ") + QByteArray::number(n2); +} + +// A QScopedPointer which provides operator QDeclarativeView *, removing the +// need to write canvas.data() where a QDeclarativeView * is required. +class DeclarativeViewScopedPointer : public QScopedPointer<QDeclarativeView> { +public: + explicit inline DeclarativeViewScopedPointer(QDeclarativeView *v = 0) : QScopedPointer<QDeclarativeView>(v) {} + inline operator QDeclarativeView *() const { return data(); } +}; class tst_qdeclarativetextinput : public QObject @@ -953,7 +980,7 @@ void tst_qdeclarativetextinput::mouseSelection() QFETCH(QString, qmlfile); QFETCH(bool, expectSelection); - QDeclarativeView *canvas = createView(qmlfile); + DeclarativeViewScopedPointer canvas(createView(qmlfile)); canvas->show(); QApplication::setActiveWindow(canvas); @@ -984,8 +1011,6 @@ void tst_qdeclarativetextinput::mouseSelection() QTest::mouseClick(canvas->viewport(), Qt::LeftButton, Qt::NoModifier, canvas->mapFromScene(QPoint(x1,y))); QTest::mouseClick(canvas->viewport(), Qt::LeftButton, Qt::ShiftModifier, canvas->mapFromScene(QPoint(x2,y))); QCOMPARE(textInputObject->selectedText(), str); - - delete canvas; } void tst_qdeclarativetextinput::deferEnableSelectByMouse_data() @@ -1001,7 +1026,7 @@ void tst_qdeclarativetextinput::deferEnableSelectByMouse() // Verify text isn't selected if selectByMouse is enabled after the mouse button has been pressed. QFETCH(QString, qmlfile); - QDeclarativeView *canvas = createView(qmlfile); + DeclarativeViewScopedPointer canvas(createView(qmlfile)); canvas->show(); QApplication::setActiveWindow(canvas); @@ -1024,8 +1049,6 @@ void tst_qdeclarativetextinput::deferEnableSelectByMouse() QApplication::sendEvent(canvas->viewport(), &mv); QTest::mouseRelease(canvas->viewport(), Qt::LeftButton, 0, canvas->mapFromScene(QPoint(x2,y))); QVERIFY(textInputObject->selectedText().isEmpty()); - - delete canvas; } void tst_qdeclarativetextinput::deferDisableSelectByMouse_data() @@ -1041,7 +1064,7 @@ void tst_qdeclarativetextinput::deferDisableSelectByMouse() // Verify text isn't selected if selectByMouse is enabled after the mouse button has been pressed. QFETCH(QString, qmlfile); - QDeclarativeView *canvas = createView(qmlfile); + DeclarativeViewScopedPointer canvas(createView(qmlfile)); canvas->show(); QApplication::setActiveWindow(canvas); @@ -1064,15 +1087,13 @@ void tst_qdeclarativetextinput::deferDisableSelectByMouse() QApplication::sendEvent(canvas->viewport(), &mv); QTest::mouseRelease(canvas->viewport(), Qt::LeftButton, 0, canvas->mapFromScene(QPoint(x2,y))); QVERIFY(textInputObject->selectedText().length() > 3); - - delete canvas; } void tst_qdeclarativetextinput::dragMouseSelection() { QString qmlfile = SRCDIR "/data/mouseselection_true.qml"; - QDeclarativeView *canvas = createView(qmlfile); + DeclarativeViewScopedPointer canvas(createView(qmlfile)); canvas->show(); QApplication::setActiveWindow(canvas); @@ -1110,7 +1131,6 @@ void tst_qdeclarativetextinput::dragMouseSelection() QVERIFY(str2.length() > 3); QVERIFY(str1 != str2); // Verify the second press and drag is a new selection and doesn't not the first moved. - delete canvas; } void tst_qdeclarativetextinput::mouseSelectionMode_data() @@ -1131,7 +1151,7 @@ void tst_qdeclarativetextinput::mouseSelectionMode() QString text = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"; - QDeclarativeView *canvas = createView(qmlfile); + DeclarativeViewScopedPointer canvas(createView(qmlfile)); canvas->show(); QApplication::setActiveWindow(canvas); @@ -1158,8 +1178,6 @@ void tst_qdeclarativetextinput::mouseSelectionMode() QVERIFY(str.length() > 3); QVERIFY(str != text); } - - delete canvas; } void tst_qdeclarativetextinput::horizontalAlignment_data() @@ -1177,7 +1195,7 @@ void tst_qdeclarativetextinput::horizontalAlignment() QFETCH(int, hAlign); QFETCH(QString, expectfile); - QDeclarativeView *canvas = createView(SRCDIR "/data/horizontalAlignment.qml"); + DeclarativeViewScopedPointer canvas(createView(SRCDIR "/data/horizontalAlignment.qml")); canvas->show(); QApplication::setActiveWindow(canvas); @@ -1198,13 +1216,11 @@ void tst_qdeclarativetextinput::horizontalAlignment() QImage expect(expectfile); QCOMPARE(actual,expect); - - delete canvas; } void tst_qdeclarativetextinput::horizontalAlignment_RightToLeft() { - QDeclarativeView *canvas = createView(SRCDIR "/data/horizontalAlignment_RightToLeft.qml"); + DeclarativeViewScopedPointer canvas(createView(SRCDIR "/data/horizontalAlignment_RightToLeft.qml")); QDeclarativeTextInput *textInput = canvas->rootObject()->findChild<QDeclarativeTextInput*>("text"); QVERIFY(textInput != 0); canvas->show(); @@ -1303,7 +1319,7 @@ void tst_qdeclarativetextinput::horizontalAlignment_RightToLeft() QVERIFY(-textInputPrivate->hscroll > canvas->width()/2); #endif - delete canvas; + canvas.reset(); #ifndef Q_OS_MAC // QTBUG-18040 // alignment of TextInput with no text set to it @@ -1319,15 +1335,16 @@ void tst_qdeclarativetextinput::horizontalAlignment_RightToLeft() void tst_qdeclarativetextinput::positionAt() { - QDeclarativeView *canvas = createView(SRCDIR "/data/positionAt.qml"); + DeclarativeViewScopedPointer canvas(createView(SRCDIR "/data/positionAt.qml")); QVERIFY(canvas->rootObject() != 0); canvas->show(); - canvas->setFocus(); QApplication::setActiveWindow(canvas); QVERIFY(QTest::qWaitForWindowActive(canvas)); + canvas->setFocus(); QDeclarativeTextInput *textinputObject = qobject_cast<QDeclarativeTextInput *>(canvas->rootObject()); QVERIFY(textinputObject != 0); + QVERIFY(textinputObject->hasFocus()); // Check autoscrolled... QFontMetrics fm(textinputObject->font()); @@ -1371,18 +1388,17 @@ void tst_qdeclarativetextinput::positionAt() // Verify positioning returns to normal after the preedit text. QCOMPARE(textinputObject->positionAt(x1), 1); QCOMPARE(textinputObject->positionToRectangle(1).x(), x1); - - delete canvas; } void tst_qdeclarativetextinput::maxLength() { - QDeclarativeView *canvas = createView(SRCDIR "/data/maxLength.qml"); + DeclarativeViewScopedPointer canvas(createView(SRCDIR "/data/maxLength.qml")); + QVERIFY(canvas->rootObject() != 0); canvas->show(); - canvas->setFocus(); QApplication::setActiveWindow(canvas); QVERIFY(QTest::qWaitForWindowActive(canvas)); + canvas->setFocus(); QDeclarativeTextInput *textinputObject = qobject_cast<QDeclarativeTextInput *>(canvas->rootObject()); QVERIFY(textinputObject != 0); @@ -1394,7 +1410,7 @@ void tst_qdeclarativetextinput::maxLength() QVERIFY(textinputObject->text().length() <= 10); } - textinputObject->setText(""); + textinputObject->setText(QString()); QTRY_VERIFY(textinputObject->hasActiveFocus() == true); for(int i=0; i<20; i++){ QCOMPARE(textinputObject->text().length(), qMin(i,10)); @@ -1402,17 +1418,17 @@ void tst_qdeclarativetextinput::maxLength() QTest::keyPress(canvas, Qt::Key_A); QTest::keyRelease(canvas, Qt::Key_A, Qt::NoModifier ,10); } - - delete canvas; } void tst_qdeclarativetextinput::masks() { //Not a comprehensive test of the possible masks, that's done elsewhere (QLineEdit) //QString componentStr = "import QtQuick 1.0\nTextInput { inputMask: 'HHHHhhhh'; }"; - QDeclarativeView *canvas = createView(SRCDIR "/data/masks.qml"); + DeclarativeViewScopedPointer canvas(createView(SRCDIR "/data/masks.qml")); canvas->show(); - canvas->setFocus(); + QApplication::setActiveWindow(canvas); + QVERIFY(QTest::qWaitForWindowActive(canvas)); + canvas->setFocus(); // Set focus after activation for the active focus. QVERIFY(canvas->rootObject() != 0); QDeclarativeTextInput *textinputObject = qobject_cast<QDeclarativeTextInput *>(canvas->rootObject()); QVERIFY(textinputObject != 0); @@ -1426,8 +1442,6 @@ void tst_qdeclarativetextinput::masks() QTest::keyPress(canvas, Qt::Key_A); QTest::keyRelease(canvas, Qt::Key_A, Qt::NoModifier ,10); } - - delete canvas; } void tst_qdeclarativetextinput::validators() @@ -1436,8 +1450,10 @@ void tst_qdeclarativetextinput::validators() // so you may need to run their tests first. All validators are checked // here to ensure that their exposure to QML is working. - QDeclarativeView *canvas = createView(SRCDIR "/data/validators.qml"); + DeclarativeViewScopedPointer canvas(createView(SRCDIR "/data/validators.qml")); canvas->show(); + QApplication::setActiveWindow(canvas); + QVERIFY(QTest::qWaitForWindowActive(canvas)); canvas->setFocus(); QVERIFY(canvas->rootObject() != 0); @@ -1454,6 +1470,7 @@ void tst_qdeclarativetextinput::validators() QTest::keyRelease(canvas, Qt::Key_2, Qt::NoModifier ,10); QCOMPARE(intInput->text(), QLatin1String("1")); QCOMPARE(intInput->hasAcceptableInput(), false); + QVERIFY(intInput->hasFocus()); QTest::keyPress(canvas, Qt::Key_1); QTest::keyRelease(canvas, Qt::Key_1, Qt::NoModifier ,10); QCOMPARE(intInput->text(), QLatin1String("11")); @@ -1520,13 +1537,11 @@ void tst_qdeclarativetextinput::validators() QTest::keyRelease(canvas, Qt::Key_A, Qt::NoModifier ,10); QCOMPARE(strInput->text(), QLatin1String("aaaa")); QCOMPARE(strInput->hasAcceptableInput(), true); - - delete canvas; } void tst_qdeclarativetextinput::inputMethods() { - QDeclarativeView *canvas = createView(SRCDIR "/data/inputmethods.qml"); + DeclarativeViewScopedPointer canvas(createView(SRCDIR "/data/inputmethods.qml")); canvas->show(); canvas->setFocus(); QApplication::setActiveWindow(canvas); @@ -1569,8 +1584,6 @@ void tst_qdeclarativetextinput::inputMethods() QApplication::sendEvent(canvas, &event); QCOMPARE(input->text(), QString("Our Goodbye world!")); QCOMPARE(input->cursorPosition(), 7); - - delete canvas; } /* @@ -1580,7 +1593,7 @@ the extent of the text, then they should ignore the keys. */ void tst_qdeclarativetextinput::navigation() { - QDeclarativeView *canvas = createView(SRCDIR "/data/navigation.qml"); + DeclarativeViewScopedPointer canvas(createView(SRCDIR "/data/navigation.qml")); canvas->show(); canvas->setFocus(); @@ -1627,13 +1640,11 @@ void tst_qdeclarativetextinput::navigation() QCOMPARE(input->hasActiveFocus(), false); simulateKey(canvas, Qt::Key_Left); QCOMPARE(input->hasActiveFocus(), true); - - delete canvas; } void tst_qdeclarativetextinput::navigation_RTL() { - QDeclarativeView *canvas = createView(SRCDIR "/data/navigation.qml"); + DeclarativeViewScopedPointer canvas(createView(SRCDIR "/data/navigation.qml")); canvas->show(); canvas->setFocus(); @@ -1666,8 +1677,6 @@ void tst_qdeclarativetextinput::navigation_RTL() // move back simulateKey(canvas, Qt::Key_Right); QVERIFY(input->hasActiveFocus() == true); - - delete canvas; } void tst_qdeclarativetextinput::copyAndPaste() { @@ -1954,7 +1963,7 @@ void tst_qdeclarativetextinput::cursorRectangle() void tst_qdeclarativetextinput::readOnly() { - QDeclarativeView *canvas = createView(SRCDIR "/data/readOnly.qml"); + DeclarativeViewScopedPointer canvas(createView(SRCDIR "/data/readOnly.qml")); canvas->show(); canvas->setFocus(); @@ -1972,18 +1981,16 @@ void tst_qdeclarativetextinput::readOnly() simulateKey(canvas, Qt::Key_Space); simulateKey(canvas, Qt::Key_Escape); QCOMPARE(input->text(), initial); - - delete canvas; } void tst_qdeclarativetextinput::echoMode() { - QDeclarativeView *canvas = createView(SRCDIR "/data/echoMode.qml"); + DeclarativeViewScopedPointer canvas(createView(SRCDIR "/data/echoMode.qml")); canvas->show(); - canvas->setFocus(); QApplication::setActiveWindow(canvas); QVERIFY(QTest::qWaitForWindowActive(canvas)); QCOMPARE(QApplication::activeWindow(), static_cast<QWidget *>(canvas)); + canvas->setFocus(); QVERIFY(canvas->rootObject() != 0); @@ -2081,15 +2088,13 @@ void tst_qdeclarativetextinput::echoMode() ref &= ~(Qt::ImhNoAutoUppercase | Qt::ImhNoPredictiveText); QCOMPARE(input->inputMethodHints(), ref); QCOMPARE(input->imHints(), Qt::ImhHiddenText | Qt::ImhDialableCharactersOnly); - - delete canvas; } #ifdef QT_GUI_PASSWORD_ECHO_DELAY void tst_qdeclarativetextinput::passwordEchoDelay() { - QDeclarativeView *canvas = createView(SRCDIR "/data/echoMode.qml"); + DeclarativeViewScopedPointer canvas(createView(SRCDIR "/data/echoMode.qml")); canvas->show(); canvas->setFocus(); QApplication::setActiveWindow(canvas); @@ -2135,8 +2140,6 @@ void tst_qdeclarativetextinput::passwordEchoDelay() ev.setCommitString(QLatin1String("7")); QApplication::sendEvent(canvas, &ev); QCOMPARE(input->displayText(), QString(7, fillChar) + QLatin1Char('7')); - - delete canvas; } #endif @@ -2473,7 +2476,7 @@ void tst_qdeclarativetextinput::preeditAutoScroll() // test the text is scrolled so the preedit is visible. sendPreeditText(preeditText.mid(0, 3), 1); - QVERIFY(input.positionAt(0) != 0); + QVERIFY2(input.positionAt(0) != 0, msgNotNotEqual(input.positionAt(0), 0).constData()); QVERIFY(input.cursorRectangle().left() < input.boundingRect().width()); QVERIFY(cursorRectangleSpy.count() > cursorRectangleChanges); cursorRectangleChanges = cursorRectangleSpy.count(); @@ -2591,7 +2594,7 @@ void tst_qdeclarativetextinput::preeditMicroFocus() ic.clear(); sendPreeditText(preeditText, i); currentRect = input.inputMethodQuery(Qt::ImMicroFocus).toRect(); - QVERIFY(previousRect.left() < currentRect.left()); + QVERIFY2(previousRect.left() < currentRect.left(), msgNotLessThan(previousRect.left(), currentRect.left()).constData()); #if defined(Q_WS_X11) QVERIFY(ic.updateCallCount > 0); #endif @@ -2698,7 +2701,7 @@ void tst_qdeclarativetextinput::inputMethodComposing() void tst_qdeclarativetextinput::cursorRectangleSize() { - QDeclarativeView *canvas = createView(SRCDIR "/data/positionAt.qml"); + DeclarativeViewScopedPointer canvas(createView(SRCDIR "/data/positionAt.qml")); QVERIFY(canvas->rootObject() != 0); canvas->show(); canvas->setFocus(); @@ -2718,12 +2721,12 @@ void tst_qdeclarativetextinput::cursorRectangleSize() void tst_qdeclarativetextinput::deselect() { - QDeclarativeView *canvas = createView(SRCDIR "/data/positionAt.qml"); + DeclarativeViewScopedPointer canvas(createView(SRCDIR "/data/positionAt.qml")); QVERIFY(canvas->rootObject() != 0); canvas->show(); - canvas->setFocus(); QApplication::setActiveWindow(canvas); QVERIFY(QTest::qWaitForWindowActive(canvas)); + canvas->setFocus(); QDeclarativeTextInput *textInput = qobject_cast<QDeclarativeTextInput *>(canvas->rootObject()); QVERIFY(textInput != 0); |