diff options
author | Frederik Gladhorn <frederik.gladhorn@theqtcompany.com> | 2015-02-10 09:32:16 +0100 |
---|---|---|
committer | Frederik Gladhorn <frederik.gladhorn@theqtcompany.com> | 2015-02-10 09:42:25 +0100 |
commit | fc35f714340d5361231506dfbead132122f59460 (patch) | |
tree | fd80498d9417c87b386a011f5849f1e4e48ad3fa /tests/auto/widgets | |
parent | 6389160f04322449c34bd1ecfe53983e3b588943 (diff) | |
parent | 0d990b9ca117514fe83f53b39f25d6272304f2fb (diff) |
Merge remote-tracking branch 'origin/5.4' into dev
Conflicts:
src/3rdparty/harfbuzz-ng/harfbuzz-ng.pro
src/gui/image/qimage_conversions.cpp
src/gui/opengl/qopenglextensions_p.h
src/gui/text/qtextengine.cpp
src/network/ssl/qsslsocket_openssl.cpp
src/plugins/platforms/eglfs/qeglfshooks_stub.cpp
src/plugins/platforms/eglfs/qeglfsscreen.cpp
src/plugins/platforms/eglfs/qeglfswindow.cpp
src/plugins/platforms/windows/qwindowsfontdatabase.cpp
src/plugins/platforms/windows/qwindowsfontdatabase_ft.cpp
src/plugins/platforms/windows/qwindowsnativeinterface.cpp
src/plugins/platforms/windows/qwindowsscreen.cpp
src/plugins/platforms/windows/qwindowswindow.cpp
src/plugins/platforms/windows/qwindowswindow.h
src/plugins/platforms/xcb/qxcbdrag.h
src/widgets/itemviews/qabstractitemview.cpp
src/widgets/kernel/qwidget.cpp
src/widgets/util/qsystemtrayicon_p.h
tests/auto/corelib/itemmodels/qsortfilterproxymodel/tst_qsortfilterproxymodel.cpp
Thanks to Friedemann Kleint for resolving the qwindowsfontdatabase.cpp
conflicts.
Change-Id: I937232c30523d5121c195d947d92aec6f129b03e
Diffstat (limited to 'tests/auto/widgets')
12 files changed, 216 insertions, 66 deletions
diff --git a/tests/auto/widgets/dialogs/qcolordialog/tst_qcolordialog.cpp b/tests/auto/widgets/dialogs/qcolordialog/tst_qcolordialog.cpp index fa50d10488..e4e4fda1ca 100644 --- a/tests/auto/widgets/dialogs/qcolordialog/tst_qcolordialog.cpp +++ b/tests/auto/widgets/dialogs/qcolordialog/tst_qcolordialog.cpp @@ -60,6 +60,7 @@ private slots: void defaultOkButton(); void native_activeModalWidget(); void task247349_alpha(); + void QTBUG_43548_initialColor(); }; class TestNativeDialog : public QColorDialog @@ -162,5 +163,14 @@ void tst_QColorDialog::task247349_alpha() QCOMPARE(alpha, qAlpha(dialog.currentColor().rgba())); } +void tst_QColorDialog::QTBUG_43548_initialColor() +{ + QColorDialog dialog; + dialog.setOption(QColorDialog::DontUseNativeDialog); + dialog.setCurrentColor(QColor(Qt::red)); + QColor a(Qt::red); + QCOMPARE(a, dialog.currentColor()); +} + QTEST_MAIN(tst_QColorDialog) #include "tst_qcolordialog.moc" diff --git a/tests/auto/widgets/dialogs/qfiledialog/tst_qfiledialog.cpp b/tests/auto/widgets/dialogs/qfiledialog/tst_qfiledialog.cpp index 92200618d6..92f768586a 100644 --- a/tests/auto/widgets/dialogs/qfiledialog/tst_qfiledialog.cpp +++ b/tests/auto/widgets/dialogs/qfiledialog/tst_qfiledialog.cpp @@ -1299,9 +1299,6 @@ void tst_QFiledialog::clearLineEdit() #endif QTest::qWait(2000); -#ifdef Q_OS_MAC - QEXPECT_FAIL("", "QTBUG-23703", Abort); -#endif QVERIFY(fd.directory().absolutePath() != QDir::home().absolutePath()); QVERIFY(!lineEdit->text().isEmpty()); diff --git a/tests/auto/widgets/graphicsview/qgraphicsproxywidget/tst_qgraphicsproxywidget.cpp b/tests/auto/widgets/graphicsview/qgraphicsproxywidget/tst_qgraphicsproxywidget.cpp index 07c9369771..c2ec7be9e7 100644 --- a/tests/auto/widgets/graphicsview/qgraphicsproxywidget/tst_qgraphicsproxywidget.cpp +++ b/tests/auto/widgets/graphicsview/qgraphicsproxywidget/tst_qgraphicsproxywidget.cpp @@ -175,6 +175,7 @@ private slots: void windowFrameMargins(); void QTBUG_6986_sendMouseEventToAlienWidget(); void mapToGlobal(); + void QTBUG_43780_visibility(); }; // Subclass that exposes the protected functions. @@ -278,6 +279,8 @@ void tst_QGraphicsProxyWidget::initTestCase() // Disable menu animations to prevent the alpha widget from getting in the way // in actionsContextMenu(). QApplication::setEffectEnabled(Qt::UI_AnimateMenu, false); + // Disable combo for QTBUG_43780_visibility()/Windows Vista. + QApplication::setEffectEnabled(Qt::UI_AnimateCombo, false); } // This will be called after the last test function is executed. @@ -3687,5 +3690,41 @@ void tst_QGraphicsProxyWidget::mapToGlobal() // QTBUG-41135 .arg(embeddedCenterGlobal.x()).arg(embeddedCenterGlobal.y()))); } +// QTBUG_43780: Embedded widgets have isWindow()==true but showing them should not +// trigger the top-level widget code path of show() that closes all popups +// (for example combo popups). +void tst_QGraphicsProxyWidget::QTBUG_43780_visibility() +{ + const QRect availableGeometry = QGuiApplication::primaryScreen()->availableGeometry(); + const QSize size = availableGeometry.size() / 4; + QWidget mainWindow; + QVBoxLayout *layout = new QVBoxLayout(&mainWindow); + QComboBox *combo = new QComboBox(&mainWindow); + combo->addItems(QStringList() << "i1" << "i2" << "i3"); + layout->addWidget(combo); + QGraphicsScene *scene = new QGraphicsScene(&mainWindow); + QGraphicsView *view = new QGraphicsView(scene, &mainWindow); + layout->addWidget(view); + mainWindow.setWindowTitle(QTest::currentTestFunction()); + mainWindow.resize(size); + mainWindow.move(availableGeometry.topLeft() + + QPoint(availableGeometry.width() - size.width(), + availableGeometry.height() - size.height()) / 2); + QLabel *label = new QLabel(QTest::currentTestFunction()); + scene->addWidget(label); + label->hide(); + mainWindow.show(); + combo->setFocus(); + mainWindow.activateWindow(); + QVERIFY(QTest::qWaitForWindowActive(&mainWindow)); + combo->showPopup(); + QWidget *comboPopup = combo->view()->window(); + QVERIFY(comboPopup); + QVERIFY(QTest::qWaitForWindowExposed(comboPopup)); + label->show(); + QTRY_VERIFY(label->isVisible()); + QVERIFY(comboPopup->isVisible()); +} + QTEST_MAIN(tst_QGraphicsProxyWidget) #include "tst_qgraphicsproxywidget.moc" diff --git a/tests/auto/widgets/graphicsview/qgraphicswidget/tst_qgraphicswidget.cpp b/tests/auto/widgets/graphicsview/qgraphicswidget/tst_qgraphicswidget.cpp index 6fde8321f9..e817157c79 100644 --- a/tests/auto/widgets/graphicsview/qgraphicswidget/tst_qgraphicswidget.cpp +++ b/tests/auto/widgets/graphicsview/qgraphicswidget/tst_qgraphicswidget.cpp @@ -171,6 +171,7 @@ private slots: void fontPropagatesResolveViaNonWidget(); void fontPropagatesResolveFromScene(); void tabFocus(); + void windowFrameSectionAt(); // Task fixes void task236127_bspTreeIndexFails(); @@ -243,6 +244,9 @@ public: void call_updateGeometry() { return QGraphicsWidget::updateGeometry(); } + Qt::WindowFrameSection call_windowFrameSectionAt(const QPointF &pos) const + { return QGraphicsWidget::windowFrameSectionAt(pos); } + int eventCount; Qt::LayoutDirection m_painterLayoutDirection; @@ -3411,6 +3415,31 @@ void tst_QGraphicsWidget::tabFocus() delete widget6; } +void tst_QGraphicsWidget::windowFrameSectionAt() +{ + SubQGraphicsWidget widget; + widget.setWindowFrameMargins(5, 5, 5, 5); + widget.setGeometry(0, 0, 200, 200); + + QCOMPARE(widget.call_windowFrameSectionAt(QPointF(50, 50)), Qt::NoSection); + QCOMPARE(widget.call_windowFrameSectionAt(QPointF(-2, -2)), Qt::TopLeftSection); + QCOMPARE(widget.call_windowFrameSectionAt(QPointF(-2, 10)), Qt::TopLeftSection); + QCOMPARE(widget.call_windowFrameSectionAt(QPointF(-2, 30)), Qt::LeftSection); + QCOMPARE(widget.call_windowFrameSectionAt(QPointF(-2, 170)), Qt::LeftSection); + QCOMPARE(widget.call_windowFrameSectionAt(QPointF(-2, 198)), Qt::BottomLeftSection); + QCOMPARE(widget.call_windowFrameSectionAt(QPointF(-2, 202)), Qt::BottomLeftSection); + + QCOMPARE(widget.call_windowFrameSectionAt(QPointF(202, -2)), Qt::TopRightSection); + QCOMPARE(widget.call_windowFrameSectionAt(QPointF(202, 10)), Qt::TopRightSection); + QCOMPARE(widget.call_windowFrameSectionAt(QPointF(202, 30)), Qt::RightSection); + QCOMPARE(widget.call_windowFrameSectionAt(QPointF(202, 170)), Qt::RightSection); + QCOMPARE(widget.call_windowFrameSectionAt(QPointF(202, 198)), Qt::BottomRightSection); + QCOMPARE(widget.call_windowFrameSectionAt(QPointF(202, 202)), Qt::BottomRightSection); + + QCOMPARE(widget.call_windowFrameSectionAt(QPointF(50, -2)), Qt::TopSection); + QCOMPARE(widget.call_windowFrameSectionAt(QPointF(50, 202)), Qt::BottomSection); +} + void tst_QGraphicsWidget::QT_BUG_6544_tabFocusFirstUnsetWhenRemovingItems() { QGraphicsScene scene; diff --git a/tests/auto/widgets/itemviews/qtreeview/tst_qtreeview.cpp b/tests/auto/widgets/itemviews/qtreeview/tst_qtreeview.cpp index 6ab93ba6db..0ca836d946 100644 --- a/tests/auto/widgets/itemviews/qtreeview/tst_qtreeview.cpp +++ b/tests/auto/widgets/itemviews/qtreeview/tst_qtreeview.cpp @@ -861,9 +861,6 @@ void tst_QTreeView::editTriggers() } // Check if we got an editor -#ifdef Q_OS_MAC - QEXPECT_FAIL("EditKeyPressed 4", "QTBUG-23696", Continue); -#endif QTRY_COMPARE(view.findChild<QLineEdit *>(QString()) != 0, editorOpened); } diff --git a/tests/auto/widgets/itemviews/qtreewidget/tst_qtreewidget.cpp b/tests/auto/widgets/itemviews/qtreewidget/tst_qtreewidget.cpp index 8bcd03c760..6f7a6c2491 100644 --- a/tests/auto/widgets/itemviews/qtreewidget/tst_qtreewidget.cpp +++ b/tests/auto/widgets/itemviews/qtreewidget/tst_qtreewidget.cpp @@ -49,6 +49,9 @@ class CustomTreeWidget : public QTreeWidget public: QModelIndex indexFromItem(QTreeWidgetItem *item, int column = 0) const { return QTreeWidget::indexFromItem(item, column); } + + QMimeData * mimeData(const QList<QTreeWidgetItem*> items) const + { return QTreeWidget::mimeData(items); } }; class tst_QTreeWidget : public QObject @@ -159,6 +162,7 @@ private slots: void setChildIndicatorPolicy(); void task20345_sortChildren(); + void getMimeDataWithInvalidItem(); public slots: void itemSelectionChanged(); @@ -3410,6 +3414,13 @@ void tst_QTreeWidget::task20345_sortChildren() QVERIFY(1); } +void tst_QTreeWidget::getMimeDataWithInvalidItem() +{ + CustomTreeWidget w; + QTest::ignoreMessage(QtWarningMsg, "QTreeWidget::mimeData: Null-item passed"); + QMimeData *md = w.mimeData(QList<QTreeWidgetItem*>() << Q_NULLPTR); + QVERIFY(!md); +} QTEST_MAIN(tst_QTreeWidget) #include "tst_qtreewidget.moc" diff --git a/tests/auto/widgets/kernel/qwidget/tst_qwidget.cpp b/tests/auto/widgets/kernel/qwidget/tst_qwidget.cpp index 8f3f12e7ff..8dacab7c3b 100644 --- a/tests/auto/widgets/kernel/qwidget/tst_qwidget.cpp +++ b/tests/auto/widgets/kernel/qwidget/tst_qwidget.cpp @@ -185,6 +185,14 @@ inline void setWindowsAnimationsEnabled(bool) {} static inline bool windowsAnimationsEnabled() { return false; } #endif // !Q_OS_WIN || Q_OS_WINCE || Q_OS_WINRT +template <class T> +static QByteArray msgComparisonFailed(T v1, const char *op, T v2) +{ + QString s; + QDebug(&s) << v1 << op << v2; + return s.toLocal8Bit(); +} + class tst_QWidget : public QObject { Q_OBJECT @@ -1396,11 +1404,13 @@ void tst_QWidget::fonts() newFont = newFont.resolve( testWidget->font() ); QVERIFY( cleanTestWidget->testAttribute(Qt::WA_SetFont) ); - QVERIFY( cleanTestWidget->font() == newFont ); + QVERIFY2( cleanTestWidget->font() == newFont, + msgComparisonFailed(cleanTestWidget->font(), "==", newFont)); cleanTestWidget->setFont(QFont()); QVERIFY( !cleanTestWidget->testAttribute(Qt::WA_SetFont) ); - QVERIFY( cleanTestWidget->font() == originalFont ); + QVERIFY2( cleanTestWidget->font() == originalFont, + msgComparisonFailed(cleanTestWidget->font(), "==", originalFont)); } void tst_QWidget::mapFromAndTo_data() @@ -1823,17 +1833,17 @@ void tst_QWidget::activation() widget2.show(); QTest::qWait(waitTime); - QVERIFY(qApp->activeWindow() == &widget2); + QCOMPARE(QApplication::activeWindow(), &widget2); widget2.showMinimized(); QTest::qWait(waitTime); - QVERIFY(qApp->activeWindow() == &widget1); + QCOMPARE(QApplication::activeWindow(), &widget1); widget2.showMaximized(); QTest::qWait(waitTime); - QVERIFY(qApp->activeWindow() == &widget2); + QCOMPARE(QApplication::activeWindow(), &widget2); widget2.showMinimized(); QTest::qWait(waitTime); - QVERIFY(qApp->activeWindow() == &widget1); + QCOMPARE(QApplication::activeWindow(), &widget1); widget2.showNormal(); QTest::qWait(waitTime); #ifndef Q_OS_WINCE @@ -1841,10 +1851,10 @@ void tst_QWidget::activation() QEXPECT_FAIL("", "MS introduced new behavior after XP", Continue); #endif QTest::qWait(waitTime); - QVERIFY(qApp->activeWindow() == &widget2); + QCOMPARE(QApplication::activeWindow(), &widget2); widget2.hide(); QTest::qWait(waitTime); - QVERIFY(qApp->activeWindow() == &widget1); + QCOMPARE(QApplication::activeWindow(), &widget1); } #endif // Q_OS_WIN @@ -2745,13 +2755,13 @@ void tst_QWidget::raise() QList<QObject *> list1; list1 << child1 << child2 << child3 << child4; - QVERIFY(parentPtr->children() == list1); + QCOMPARE(parentPtr->children(), list1); QCOMPARE(allChildren.count(), list1.count()); foreach (UpdateWidget *child, allChildren) { int expectedPaintEvents = child == child4 ? 1 : 0; if (expectedPaintEvents == 0) { - QVERIFY(child->numPaintEvents == 0); + QCOMPARE(child->numPaintEvents, 0); } else { // show() issues multiple paint events on some window managers QTRY_VERIFY(child->numPaintEvents >= expectedPaintEvents); @@ -2774,7 +2784,7 @@ void tst_QWidget::raise() QList<QObject *> list2; list2 << child1 << child3 << child4 << child2; - QVERIFY(parentPtr->children() == list2); + QCOMPARE(parentPtr->children(), list2); // Creates a widget on top of all the children and checks that raising one of // the children underneath doesn't trigger a repaint on the covering widget. @@ -2807,7 +2817,7 @@ void tst_QWidget::raise() QList<QObject *> list3; list3 << child1 << child4 << child2 << child3; - QVERIFY(parent->children() == list3); + QCOMPARE(parent->children(), list3); foreach (UpdateWidget *child, allChildren) { int expectedPaintEvents = 0; @@ -2849,13 +2859,13 @@ void tst_QWidget::lower() QList<QObject *> list1; list1 << child1 << child2 << child3 << child4; - QVERIFY(parent->children() == list1); + QCOMPARE(parent->children(), list1); QCOMPARE(allChildren.count(), list1.count()); foreach (UpdateWidget *child, allChildren) { int expectedPaintEvents = child == child4 ? 1 : 0; if (expectedPaintEvents == 0) { - QVERIFY(child->numPaintEvents == 0); + QCOMPARE(child->numPaintEvents, 0); } else { // show() issues multiple paint events on some window managers QTRY_VERIFY(child->numPaintEvents >= expectedPaintEvents); @@ -2879,7 +2889,7 @@ void tst_QWidget::lower() QList<QObject *> list2; list2 << child4 << child1 << child2 << child3; - QVERIFY(parent->children() == list2); + QCOMPARE(parent->children(), list2); } #endif @@ -2913,7 +2923,7 @@ void tst_QWidget::stackUnder() QVERIFY(QTest::qWaitForWindowExposed(parent.data())); QList<QObject *> list1; list1 << child1 << child2 << child3 << child4; - QVERIFY(parent->children() == list1); + QCOMPARE(parent->children(), list1); foreach (UpdateWidget *child, allChildren) { int expectedPaintEvents = child == child4 ? 1 : 0; @@ -2932,7 +2942,7 @@ void tst_QWidget::stackUnder() QList<QObject *> list2; list2 << child1 << child4 << child2 << child3; - QVERIFY(parent->children() == list2); + QCOMPARE(parent->children(), list2); foreach (UpdateWidget *child, allChildren) { int expectedPaintEvents = child == child3 ? 1 : 0; @@ -2948,7 +2958,7 @@ void tst_QWidget::stackUnder() QList<QObject *> list3; list3 << child4 << child2 << child1 << child3; - QVERIFY(parent->children() == list3); + QCOMPARE(parent->children(), list3); foreach (UpdateWidget *child, allChildren) { int expectedZOrderChangeEvents = child == child1 ? 1 : 0; @@ -3760,8 +3770,10 @@ void tst_QWidget::setMinimumSize() w.setMinimumSize(nonDefaultSize); w.showNormal(); QTest::qWait(50); - QVERIFY(w.height() >= nonDefaultSize.height()); - QVERIFY(w.width() >= nonDefaultSize.width()); + QVERIFY2(w.height() >= nonDefaultSize.height(), + msgComparisonFailed(w.height(), ">=", nonDefaultSize.height())); + QVERIFY2(w.width() >= nonDefaultSize.width(), + msgComparisonFailed(w.width(), ">=", nonDefaultSize.width())); #endif } @@ -3813,7 +3825,7 @@ void tst_QWidget::setFixedSize() QTest::qWait(50); if (m_platform == QStringLiteral("xcb")) QSKIP("QTBUG-26424"); - QVERIFY(w.size() == defaultSize + QSize(150,150)); + QCOMPARE(w.size(), defaultSize + QSize(150,150)); } void tst_QWidget::ensureCreated() @@ -4687,8 +4699,9 @@ void tst_QWidget::setWindowGeometry() void tst_QWidget::setGeometry_win() { QWidget widget; + setFrameless(&widget); - widget.setGeometry(0, 600, 100,100); + widget.setGeometry(QRect(m_availableTopLeft + QPoint(0, 600), QSize(100, 100))); widget.show(); widget.setWindowState(widget.windowState() | Qt::WindowMaximized); QRect geom = widget.normalGeometry(); @@ -4698,8 +4711,10 @@ void tst_QWidget::setGeometry_win() widget.show(); RECT rt; ::GetWindowRect(winHandleOf(&widget), &rt); - QVERIFY(rt.left <= 0); - QVERIFY(rt.top <= 0); + QVERIFY2(rt.left <= m_availableTopLeft.x(), + msgComparisonFailed(int(rt.left), "<=", m_availableTopLeft.x())); + QVERIFY2(rt.top <= m_availableTopLeft.y(), + msgComparisonFailed(int(rt.top), "<=", m_availableTopLeft.y())); } #endif // defined (Q_OS_WIN) && !defined(Q_OS_WINCE) && !defined(Q_OS_WINRT) @@ -6547,7 +6562,8 @@ void tst_QWidget::renderInvisible() QPixmap pixmap(topLevel.sizeHint()); topLevel.render(&pixmap); // triggers adjustSize() const QSize finalSize = topLevel.size(); - QVERIFY(finalSize != initialSize); + QVERIFY2(finalSize != initialSize, + msgComparisonFailed(finalSize, "!=", initialSize)); topLevel.layout()->removeWidget(widget); QCOMPARE(topLevel.size(), finalSize); @@ -7188,7 +7204,7 @@ void tst_QWidget::setContentsMargins() QSize oldSize = label.sizeHint(); label.setFrameStyle(QFrame::Sunken | QFrame::Box); QSize newSize = label.sizeHint(); - QVERIFY(oldSize != newSize); + QVERIFY2(oldSize != newSize, msgComparisonFailed(oldSize, "!=", newSize)); QLabel label2("why does it always rain on me?"); label2.show(); @@ -7721,8 +7737,10 @@ void tst_QWidget::adjustSize() child->resize(123, 456); child->adjustSize(); if (expectedSize == QSize(100000, 100000)) { - QVERIFY(child->size().width() < sizeHint.width()); - QVERIFY(child->size().height() < sizeHint.height()); + QVERIFY2(child->size().width() < sizeHint.width(), + msgComparisonFailed(child->size().width(), "<", sizeHint.width())); + QVERIFY2(child->size().height() < sizeHint.height(), + msgComparisonFailed(child->size().height(), "<", sizeHint.height())); } else { #if defined (Q_OS_WINCE) if (!haveParent) { @@ -9511,8 +9529,10 @@ void tst_QWidget::childAt_unifiedToolBar() // we use mapToGlobal/mapFromGlobal to re-calculate the corners. QPoint oldToolBarTopLeft = toolBarTopLeft; toolBarTopLeft = mainWindow.mapFromGlobal(toolBar->mapToGlobal(QPoint())); - QVERIFY(toolBarTopLeft != oldToolBarTopLeft); - QVERIFY(toolBarTopLeft.y() < 0); + QVERIFY2(toolBarTopLeft != oldToolBarTopLeft, + msgComparisonFailed(toolBarTopLeft, "!=", oldToolBarTopLeft)); + QVERIFY2(toolBarTopLeft.y() < 0, + msgComparisonFailed(toolBarTopLeft.y(), "<", 0)); labelTopLeft = mainWindow.mapFromGlobal(label->mapToGlobal(QPoint())); QCOMPARE(mainWindow.childAt(toolBarTopLeft), static_cast<QWidget *>(toolBar)); @@ -9743,7 +9763,7 @@ void tst_QWidget::grabKeyboard() QTest::keyClick(w.windowHandle(), Qt::Key_A); grabber->releaseKeyboard(); QCOMPARE(grabber->text().toLower(), QStringLiteral("a")); - QVERIFY(nonGrabber->text().isEmpty()); + QVERIFY2(nonGrabber->text().isEmpty(), qPrintable(nonGrabber->text())); } class TouchMouseWidget : public QWidget { @@ -10095,7 +10115,7 @@ void tst_QWidget::underMouse() QVERIFY(QTest::qWaitForWindowExposed(&popupWidget)); QWindow *popupWindow = popupWidget.windowHandle(); QVERIFY(popupWindow); - QVERIFY(QApplication::activePopupWidget() == &popupWidget); + QCOMPARE(QApplication::activePopupWidget(), &popupWidget); // Send an artificial leave event for window, as it won't get generated automatically // due to cursor not actually being over the window. @@ -10368,13 +10388,15 @@ void tst_QWidget::largerThanScreen_QTBUG30142() widget.resize(200, 4000); widget.show(); QVERIFY(QTest::qWaitForWindowExposed(&widget)); - QVERIFY(widget.frameGeometry().y() >= 0); + QVERIFY2(widget.frameGeometry().y() >= 0, + msgComparisonFailed(widget.frameGeometry().y(), " >=", 0)); QWidget widget2; widget2.resize(10000, 400); widget2.show(); QVERIFY(QTest::qWaitForWindowExposed(&widget2)); - QVERIFY(widget2.frameGeometry().x() >= 0); + QVERIFY2(widget2.frameGeometry().x() >= 0, + msgComparisonFailed(widget.frameGeometry().x(), " >=", 0)); } void tst_QWidget::resizeStaticContentsChildWidget_QTBUG35282() @@ -10389,13 +10411,14 @@ void tst_QWidget::resizeStaticContentsChildWidget_QTBUG35282() widget.showNormal(); QVERIFY(QTest::qWaitForWindowExposed(&widget)); - QVERIFY(childWidget.numPaintEvents == 0); + QCOMPARE(childWidget.numPaintEvents, 0); childWidget.reset(); widget.resize(1000,1000); QVERIFY(QTest::qWaitForWindowExposed(&widget)); QGuiApplication::sync(); - QVERIFY(childWidget.numPaintEvents >= 1); + QVERIFY2(childWidget.numPaintEvents >= 1, + msgComparisonFailed(childWidget.numPaintEvents, ">=", 1)); } void tst_QWidget::qmlSetParentHelper() diff --git a/tests/auto/widgets/util/qcompleter/tst_qcompleter.cpp b/tests/auto/widgets/util/qcompleter/tst_qcompleter.cpp index 1d6e75e76e..f8f3900372 100644 --- a/tests/auto/widgets/util/qcompleter/tst_qcompleter.cpp +++ b/tests/auto/widgets/util/qcompleter/tst_qcompleter.cpp @@ -601,6 +601,9 @@ void tst_QCompleter::directoryModel_data() QTest::newRow("()") << "" << "" << "/" << "/"; QTest::newRow("(/a)") << "/a" << "" << "Applications" << "/Applications"; QTest::newRow("(/u)") << "/u" << "" << "Users" << "/Users"; +#elif defined(Q_OS_ANDROID) + QTest::newRow("()") << "" << "" << "/" << "/"; + QTest::newRow("(/et)") << "/et" << "" << "etc" << "/etc"; #else QTest::newRow("()") << "" << "" << "/" << "/"; #if !defined(Q_OS_IRIX) && !defined(Q_OS_AIX) && !defined(Q_OS_HPUX) && !defined(Q_OS_QNX) @@ -647,6 +650,9 @@ void tst_QCompleter::fileSystemModel_data() QTest::newRow("()") << "" << "" << "/" << "/"; QTest::newRow("(/a)") << "/a" << "" << "Applications" << "/Applications"; // QTest::newRow("(/d)") << "/d" << "" << "Developer" << "/Developer"; +#elif defined(Q_OS_ANDROID) + QTest::newRow("()") << "" << "" << "/" << "/"; + QTest::newRow("(/et)") << "/et" << "" << "etc" << "/etc"; #else QTest::newRow("()") << "" << "" << "/" << "/"; #if !defined(Q_OS_IRIX) && !defined(Q_OS_AIX) && !defined(Q_OS_HPUX) && !defined(Q_OS_QNX) diff --git a/tests/auto/widgets/widgets/qcombobox/tst_qcombobox.cpp b/tests/auto/widgets/widgets/qcombobox/tst_qcombobox.cpp index 5007983aa6..0873c6bbb1 100644 --- a/tests/auto/widgets/widgets/qcombobox/tst_qcombobox.cpp +++ b/tests/auto/widgets/widgets/qcombobox/tst_qcombobox.cpp @@ -124,7 +124,7 @@ private slots: void pixmapIcon(); void mouseWheel_data(); void mouseWheel(); - void wheelClosingPopup(); + void popupWheelHandling(); void layoutDirection(); void itemListPosition(); void separatorItem_data(); @@ -2066,9 +2066,9 @@ void tst_QComboBox::mouseWheel() } } -void tst_QComboBox::wheelClosingPopup() +void tst_QComboBox::popupWheelHandling() { - // QTBUG-40656, combo and other popups should close when the main window gets a wheel event. + // QTBUG-40656, QTBUG-42731 combo and other popups should not be affected by wheel events. QScrollArea scrollArea; scrollArea.move(300, 300); QWidget *widget = new QWidget; @@ -2087,9 +2087,12 @@ void tst_QComboBox::wheelClosingPopup() QVERIFY(QTest::qWaitForWindowExposed(&scrollArea)); comboBox->showPopup(); QTRY_VERIFY(comboBox->view() && comboBox->view()->isVisible()); + const QPoint popupPos = comboBox->view()->pos(); QWheelEvent event(QPointF(10, 10), WHEEL_DELTA, Qt::NoButton, Qt::NoModifier); QVERIFY(QCoreApplication::sendEvent(scrollArea.windowHandle(), &event)); - QTRY_VERIFY(!comboBox->view()->isVisible()); + QCoreApplication::processEvents(); + QVERIFY(comboBox->view()->isVisible()); + QCOMPARE(comboBox->view()->pos(), popupPos); } void tst_QComboBox::layoutDirection() diff --git a/tests/auto/widgets/widgets/qlineedit/tst_qlineedit.cpp b/tests/auto/widgets/widgets/qlineedit/tst_qlineedit.cpp index fec79326c8..5b467f4f17 100644 --- a/tests/auto/widgets/widgets/qlineedit/tst_qlineedit.cpp +++ b/tests/auto/widgets/widgets/qlineedit/tst_qlineedit.cpp @@ -249,6 +249,7 @@ private slots: void editInvalidText(); + void charWithAltOrCtrlModifier_data(); void charWithAltOrCtrlModifier(); void inlineCompletion(); @@ -3224,19 +3225,35 @@ void tst_QLineEdit::editInvalidText() testWidget->setValidator(0); } +Q_DECLARE_METATYPE(Qt::KeyboardModifiers) + +void tst_QLineEdit::charWithAltOrCtrlModifier_data() +{ + QTest::addColumn<Qt::KeyboardModifiers>("modifiers"); + QTest::addColumn<bool>("textExpected"); + QTest::newRow("no-modifiers") << Qt::KeyboardModifiers() << true; + // Ctrl, Ctrl+Shift: No text (QTBUG-35734) + QTest::newRow("ctrl") << Qt::KeyboardModifiers(Qt::ControlModifier) + << false; + QTest::newRow("ctrl-shift") << Qt::KeyboardModifiers(Qt::ShiftModifier | Qt::ControlModifier) + << false; + QTest::newRow("alt") << Qt::KeyboardModifiers(Qt::AltModifier) << true; + // Alt-Ctrl (Alt-Gr on German keyboards, Task 129098): Expect text + QTest::newRow("alt-ctrl") << (Qt::AltModifier | Qt::ControlModifier) << true; +} + void tst_QLineEdit::charWithAltOrCtrlModifier() { + QFETCH(Qt::KeyboardModifiers, modifiers); + QFETCH(bool, textExpected); + QLineEdit *testWidget = ensureTestWidget(); testWidget->clear(); - QCOMPARE(testWidget->text(), QString("")); - QTest::keyPress(testWidget, Qt::Key_Plus); - QCOMPARE(testWidget->text(), QString("+")); - QTest::keyPress(testWidget, Qt::Key_Plus, Qt::ControlModifier); - QCOMPARE(testWidget->text(), QString("++")); - QTest::keyPress(testWidget, Qt::Key_Plus, Qt::AltModifier); - QCOMPARE(testWidget->text(), QString("+++")); - QTest::keyPress(testWidget, Qt::Key_Plus, Qt::AltModifier | Qt::ControlModifier); - QCOMPARE(testWidget->text(), QString("++++")); + QVERIFY(testWidget->text().isEmpty()); + + QTest::keyPress(testWidget, Qt::Key_Plus, modifiers); + const QString expectedText = textExpected ? QLatin1String("+") : QString(); + QCOMPARE(testWidget->text(), expectedText); } void tst_QLineEdit::leftKeyOnSelectedText() diff --git a/tests/auto/widgets/widgets/qplaintextedit/tst_qplaintextedit.cpp b/tests/auto/widgets/widgets/qplaintextedit/tst_qplaintextedit.cpp index cf495e2238..390b99c6e7 100644 --- a/tests/auto/widgets/widgets/qplaintextedit/tst_qplaintextedit.cpp +++ b/tests/auto/widgets/widgets/qplaintextedit/tst_qplaintextedit.cpp @@ -99,7 +99,8 @@ private slots: #ifndef QT_NO_CLIPBOARD void copyAndSelectAllInReadonly(); #endif - void ctrlAltInput(); + void charWithAltOrCtrlModifier_data(); + void charWithAltOrCtrlModifier(); void noPropertiesOnDefaultTextEditCharFormat(); void setPlainTextShouldEmitTextChangedOnce(); void overwriteMode(); @@ -691,10 +692,34 @@ void tst_QPlainTextEdit::copyAndSelectAllInReadonly() } #endif -void tst_QPlainTextEdit::ctrlAltInput() +Q_DECLARE_METATYPE(Qt::KeyboardModifiers) + +// Test how QWidgetTextControlPrivate (used in QPlainTextEdit, QTextEdit) +// handles input with modifiers. +void tst_QPlainTextEdit::charWithAltOrCtrlModifier_data() +{ + QTest::addColumn<Qt::KeyboardModifiers>("modifiers"); + QTest::addColumn<bool>("textExpected"); + + QTest::newRow("no-modifiers") << Qt::KeyboardModifiers() << true; + // Ctrl, Ctrl+Shift: No text (QTBUG-35734) + QTest::newRow("ctrl") << Qt::KeyboardModifiers(Qt::ControlModifier) + << false; + QTest::newRow("ctrl-shift") << Qt::KeyboardModifiers(Qt::ShiftModifier | Qt::ControlModifier) + << false; + QTest::newRow("alt") << Qt::KeyboardModifiers(Qt::AltModifier) << true; + // Alt-Ctrl (Alt-Gr on German keyboards, Task 129098): Expect text + QTest::newRow("alt-ctrl") << (Qt::AltModifier | Qt::ControlModifier) << true; +} + +void tst_QPlainTextEdit::charWithAltOrCtrlModifier() { - QTest::keyClick(ed, Qt::Key_At, Qt::ControlModifier | Qt::AltModifier); - QCOMPARE(ed->toPlainText(), QString("@")); + QFETCH(Qt::KeyboardModifiers, modifiers); + QFETCH(bool, textExpected); + + QTest::keyClick(ed, Qt::Key_At, modifiers); + const QString expectedText = textExpected ? QLatin1String("@") : QString(); + QCOMPARE(ed->toPlainText(), expectedText); } void tst_QPlainTextEdit::noPropertiesOnDefaultTextEditCharFormat() diff --git a/tests/auto/widgets/widgets/qtextedit/tst_qtextedit.cpp b/tests/auto/widgets/widgets/qtextedit/tst_qtextedit.cpp index 8a82ee433d..220185c04f 100644 --- a/tests/auto/widgets/widgets/qtextedit/tst_qtextedit.cpp +++ b/tests/auto/widgets/widgets/qtextedit/tst_qtextedit.cpp @@ -122,7 +122,6 @@ private slots: #ifndef QT_NO_CLIPBOARD void copyAndSelectAllInReadonly(); #endif - void ctrlAltInput(); void noPropertiesOnDefaultTextEditCharFormat(); void setPlainTextShouldUseCurrentCharFormat(); void setPlainTextShouldEmitTextChangedOnce(); @@ -1042,12 +1041,6 @@ void tst_QTextEdit::copyAndSelectAllInReadonly() } #endif -void tst_QTextEdit::ctrlAltInput() -{ - QTest::keyClick(ed, Qt::Key_At, Qt::ControlModifier | Qt::AltModifier); - QCOMPARE(ed->toPlainText(), QString("@")); -} - void tst_QTextEdit::noPropertiesOnDefaultTextEditCharFormat() { // there should be no properties set on the default/initial char format |