diff options
Diffstat (limited to 'tests/auto/widgets/kernel/qwidget/tst_qwidget.cpp')
-rw-r--r-- | tests/auto/widgets/kernel/qwidget/tst_qwidget.cpp | 135 |
1 files changed, 84 insertions, 51 deletions
diff --git a/tests/auto/widgets/kernel/qwidget/tst_qwidget.cpp b/tests/auto/widgets/kernel/qwidget/tst_qwidget.cpp index a0d94d2dc9..ddbb4e6d75 100644 --- a/tests/auto/widgets/kernel/qwidget/tst_qwidget.cpp +++ b/tests/auto/widgets/kernel/qwidget/tst_qwidget.cpp @@ -51,6 +51,7 @@ #include <qdesktopwidget.h> #include <private/qwidget_p.h> #include <private/qapplication_p.h> +#include <private/qhighdpiscaling_p.h> #include <qcalendarwidget.h> #include <qmainwindow.h> #include <qdockwidget.h> @@ -193,6 +194,19 @@ static QByteArray msgComparisonFailed(T v1, const char *op, T v2) return s.toLocal8Bit(); } +// Compare a window position that may go through scaling in the platform plugin with fuzz. +static inline bool qFuzzyCompareWindowPosition(const QPoint &p1, const QPoint p2, int fuzz) +{ + return (p1 - p2).manhattanLength() <= fuzz; +} + +static QString msgPointMismatch(const QPoint &p1, const QPoint p2) +{ + QString result; + QDebug(&result) << p1 << "!=" << p2 << ", manhattanLength=" << (p1 - p2).manhattanLength(); + return result; +} + class tst_QWidget : public QObject { Q_OBJECT @@ -613,7 +627,7 @@ void tst_QWidget::getSetCheck() } tst_QWidget::tst_QWidget() - : m_platform(qApp->platformName().toLower()) + : m_platform(QGuiApplication::platformName().toLower()) , m_windowsAnimationsEnabled(windowsAnimationsEnabled()) { if (m_windowsAnimationsEnabled) // Disable animations which can interfere with screen grabbing in moveChild(), showAndMoveChild() @@ -1846,10 +1860,6 @@ void tst_QWidget::activation() QCOMPARE(QApplication::activeWindow(), &widget1); widget2.showNormal(); QTest::qWait(waitTime); -#ifndef Q_OS_WINCE - if (QSysInfo::WindowsVersion >= QSysInfo::WV_VISTA) - QEXPECT_FAIL("", "MS introduced new behavior after XP", Continue); -#endif QTest::qWait(waitTime); QCOMPARE(QApplication::activeWindow(), &widget2); widget2.hide(); @@ -1905,8 +1915,10 @@ void tst_QWidget::windowState() widget1.setWindowState(widget1.windowState() ^ Qt::WindowMaximized); QTest::qWait(100); + const int fuzz = int(QHighDpiScaling::factor(widget1.windowHandle())); QVERIFY(!(widget1.windowState() & Qt::WindowMaximized)); - QTRY_COMPARE(widget1.pos(), pos); + QTRY_VERIFY2(qFuzzyCompareWindowPosition(widget1.pos(), pos, fuzz), + qPrintable(msgPointMismatch(widget1.pos(), pos))); QCOMPARE(widget1.windowHandle()->windowState(), Qt::WindowNoState); widget1.setWindowState(Qt::WindowMinimized); @@ -1927,7 +1939,8 @@ void tst_QWidget::windowState() widget1.setWindowState(widget1.windowState() ^ Qt::WindowMaximized); QTest::qWait(100); QVERIFY(!(widget1.windowState() & (Qt::WindowMinimized|Qt::WindowMaximized))); - QTRY_COMPARE(widget1.pos(), pos); + QTRY_VERIFY2(qFuzzyCompareWindowPosition(widget1.pos(), pos, fuzz), + qPrintable(msgPointMismatch(widget1.pos(), pos))); QCOMPARE(widget1.windowHandle()->windowState(), Qt::WindowNoState); widget1.setWindowState(Qt::WindowFullScreen); @@ -1948,7 +1961,8 @@ void tst_QWidget::windowState() widget1.setWindowState(Qt::WindowNoState); QTest::qWait(100); VERIFY_STATE(Qt::WindowNoState); - QTRY_COMPARE(widget1.pos(), pos); + QTRY_VERIFY2(qFuzzyCompareWindowPosition(widget1.pos(), pos, fuzz), + qPrintable(msgPointMismatch(widget1.pos(), pos))); QCOMPARE(widget1.windowHandle()->windowState(), Qt::WindowNoState); widget1.setWindowState(Qt::WindowFullScreen); @@ -1981,7 +1995,8 @@ void tst_QWidget::windowState() QVERIFY(!(widget1.windowState() & stateMask)); QCOMPARE(widget1.windowHandle()->windowState(), Qt::WindowNoState); - QTRY_COMPARE(widget1.pos(), pos); + QTRY_VERIFY2(qFuzzyCompareWindowPosition(widget1.pos(), pos, fuzz), + qPrintable(msgPointMismatch(widget1.pos(), pos))); QTRY_COMPARE(widget1.size(), size); } @@ -3079,12 +3094,12 @@ void tst_QWidget::saveRestoreGeometry() const QByteArray four("abca"); const QByteArray garbage("abcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabc"); - QVERIFY(widget.restoreGeometry(empty) == false); - QVERIFY(widget.restoreGeometry(one) == false); - QVERIFY(widget.restoreGeometry(two) == false); - QVERIFY(widget.restoreGeometry(three) == false); - QVERIFY(widget.restoreGeometry(four) == false); - QVERIFY(widget.restoreGeometry(garbage) == false); + QVERIFY(!widget.restoreGeometry(empty)); + QVERIFY(!widget.restoreGeometry(one)); + QVERIFY(!widget.restoreGeometry(two)); + QVERIFY(!widget.restoreGeometry(three)); + QVERIFY(!widget.restoreGeometry(four)); + QVERIFY(!widget.restoreGeometry(garbage)); QVERIFY(widget.restoreGeometry(savedGeometry)); widget.showNormal(); @@ -3354,7 +3369,7 @@ void tst_QWidget::widgetAt() #if defined(Q_OS_WINCE) QEXPECT_FAIL("", "Windows CE does only support rectangular regions", Continue); //See also task 147191 #endif - QTRY_VERIFY(QApplication::widgetAt(testPos) == w1.data()); + QTRY_COMPARE(QApplication::widgetAt(testPos), w1.data()); QTRY_VERIFY(QApplication::widgetAt(testPos + QPoint(1, 1)) == w2.data()); } @@ -3401,24 +3416,24 @@ void tst_QWidget::testDeletionInEventHandlers() QPointer<Widget> w = new Widget; w->deleteThis = true; w->close(); - QVERIFY(w == 0); + QVERIFY(w.isNull()); delete w; // focusOut (crashes) //w = new Widget; //w->show(); //w->setFocus(); - //QVERIFY(qApp->focusWidget() == w); + //QCOMPARE(qApp->focusWidget(), w); //w->deleteThis = true; //w->clearFocus(); - //QVERIFY(w == 0); + //QVERIFY(w.isNull()); // key press w = new Widget; w->show(); w->deleteThis = true; QTest::keyPress(w, Qt::Key_A); - QVERIFY(w == 0); + QVERIFY(w.isNull()); delete w; // key release @@ -3426,7 +3441,7 @@ void tst_QWidget::testDeletionInEventHandlers() w->show(); w->deleteThis = true; QTest::keyRelease(w, Qt::Key_A); - QVERIFY(w == 0); + QVERIFY(w.isNull()); delete w; // mouse press @@ -3434,15 +3449,16 @@ void tst_QWidget::testDeletionInEventHandlers() w->show(); w->deleteThis = true; QTest::mousePress(w, Qt::LeftButton); - QVERIFY(w == 0); + QVERIFY(w.isNull()); delete w; // mouse release w = new Widget; w->show(); w->deleteThis = true; - QTest::mouseRelease(w, Qt::LeftButton); - QVERIFY(w == 0); + QMouseEvent me(QEvent::MouseButtonRelease, QPoint(1, 1), Qt::LeftButton, Qt::LeftButton, 0); + qApp->notify(w, &me); + QVERIFY(w.isNull()); delete w; // mouse double click @@ -3450,7 +3466,7 @@ void tst_QWidget::testDeletionInEventHandlers() w->show(); w->deleteThis = true; QTest::mouseDClick(w, Qt::LeftButton); - QVERIFY(w == 0); + QVERIFY(w.isNull()); delete w; // hide event (crashes) @@ -3458,13 +3474,13 @@ void tst_QWidget::testDeletionInEventHandlers() //w->show(); //w->deleteThis = true; //w->hide(); - //QVERIFY(w == 0); + //QVERIFY(w.isNull()); // action event w = new Widget; w->deleteThis = true; w->addAction(new QAction(w)); - QVERIFY(w == 0); + QVERIFY(w.isNull()); delete w; // change event @@ -3472,16 +3488,16 @@ void tst_QWidget::testDeletionInEventHandlers() w->show(); w->deleteThis = true; w->setMouseTracking(true); - QVERIFY(w == 0); + QVERIFY(w.isNull()); delete w; w = new Widget; w->setMouseTracking(true); w->show(); w->deleteThis = true; - QMouseEvent me(QEvent::MouseMove, QPoint(0, 0), Qt::NoButton, Qt::NoButton, Qt::NoModifier); + me = QMouseEvent(QEvent::MouseMove, QPoint(0, 0), Qt::NoButton, Qt::NoButton, Qt::NoModifier); QApplication::sendEvent(w, &me); - QVERIFY(w == 0); + QVERIFY(w.isNull()); delete w; } @@ -3675,6 +3691,8 @@ void tst_QWidget::optimizedResizeMove() void tst_QWidget::optimizedResize_topLevel() { + if (QHighDpiScaling::isActive()) + QSKIP("Skip due to rounding errors in the regions."); StaticWidget topLevel; topLevel.gotPaintEvent = false; topLevel.show(); @@ -3909,7 +3927,7 @@ void tst_QWidget::winIdChangeEvent() QCOMPARE(winIdBefore, winIdAfter); QCOMPARE(child.winIdChangeEventCount(), 3); // winId is set to zero during reparenting - QVERIFY(0 == child.m_winIdList[1]); + QCOMPARE(WId(0), child.m_winIdList[1]); } { @@ -3949,7 +3967,7 @@ void tst_QWidget::winIdChangeEvent() QCOMPARE(winIdBefore, winIdAfter); QCOMPARE(child.winIdChangeEventCount(), 3); // winId is set to zero during reparenting - QVERIFY(0 == child.m_winIdList[1]); + QCOMPARE(WId(0), child.m_winIdList[1]); } } @@ -4495,7 +4513,7 @@ void tst_QWidget::qobject_castInDestroyedSlot() QObject::connect(widget, SIGNAL(destroyed(QObject*)), &checker, SLOT(destroyedSlot(QObject*))); delete widget; - QVERIFY(checker.wasQWidget == true); + QVERIFY(checker.wasQWidget); } // Since X11 WindowManager operations are all async, and we have no way to know if the window @@ -4544,8 +4562,18 @@ void tst_QWidget::setWindowGeometry_data() QList<int> windowFlags; windowFlags << 0 << Qt::FramelessWindowHint; + const bool skipEmptyRects = (m_platform == QStringLiteral("windows")); foreach (QList<QRect> l, rects) { QRect rect = l.first(); + if (skipEmptyRects) { + QList<QRect>::iterator it = l.begin(); + while (it != l.end()) { + if (it->isEmpty()) + it = l.erase(it); + else + ++it; + } + } foreach (int windowFlag, windowFlags) { QTest::newRow(QString("%1,%2 %3x%4, flags %5") .arg(rect.x()) @@ -4594,8 +4622,13 @@ void tst_QWidget::setWindowGeometry() widget.setGeometry(rect); widget.showNormal(); - if (rect.isValid()) + if (rect.isValid()) { QVERIFY(QTest::qWaitForWindowExposed(&widget)); + } else { + // in case of an invalid rect, wait for the geometry to become + // adjusted to the actual (valid) value. + QApplication::processEvents(); + } QTRY_COMPARE(widget.geometry(), rect); // setGeometry() while shown @@ -6007,10 +6040,13 @@ void tst_QWidget::childEvents() expected = EventRecorder::EventList() << qMakePair(&widget, QEvent::Polish) + << qMakePair(&widget, QEvent::PlatformSurface) << qMakePair(&widget, QEvent::WinIdChange) + << qMakePair(&widget, QEvent::WindowIconChange) << qMakePair(&widget, QEvent::Move) << qMakePair(&widget, QEvent::Resize) << qMakePair(&widget, QEvent::Show) + << qMakePair(&widget, QEvent::CursorChange) << qMakePair(&widget, QEvent::ShowToParent); QVERIFY2(spy.eventList() == expected, @@ -6022,13 +6058,9 @@ void tst_QWidget::childEvents() EventRecorder::EventList() << qMakePair(&widget, QEvent::PolishRequest) << qMakePair(&widget, QEvent::Type(QEvent::User + 1)) -#if defined(Q_OS_OSX) || defined(Q_OS_QNX) << qMakePair(&widget, QEvent::UpdateLater) -#endif << qMakePair(&widget, QEvent::UpdateRequest); - if (m_platform == QStringLiteral("windows") || m_platform == QStringLiteral("xcb")) - QEXPECT_FAIL("", EventRecorder::msgExpectFailQtBug26424(expected, spy.eventList()).constData(), Continue); QVERIFY2(spy.eventList() == expected, EventRecorder::msgEventListMismatch(expected, spy.eventList()).constData()); } @@ -6097,10 +6129,13 @@ void tst_QWidget::childEvents() << qMakePair(&widget, QEvent::Polish) << qMakePair(&widget, QEvent::ChildPolished) << qMakePair(&widget, QEvent::ChildPolished) + << qMakePair(&widget, QEvent::PlatformSurface) << qMakePair(&widget, QEvent::WinIdChange) + << qMakePair(&widget, QEvent::WindowIconChange) << qMakePair(&widget, QEvent::Move) << qMakePair(&widget, QEvent::Resize) << qMakePair(&widget, QEvent::Show) + << qMakePair(&widget, QEvent::CursorChange) << qMakePair(&widget, QEvent::ShowToParent); QVERIFY2(spy.eventList() == expected, @@ -6113,13 +6148,9 @@ void tst_QWidget::childEvents() << qMakePair(&widget, QEvent::PolishRequest) << qMakePair(&widget, QEvent::Type(QEvent::User + 1)) << qMakePair(&widget, QEvent::Type(QEvent::User + 2)) -#if defined(Q_OS_OSX) || defined(Q_OS_QNX) << qMakePair(&widget, QEvent::UpdateLater) -#endif << qMakePair(&widget, QEvent::UpdateRequest); - if (m_platform == QStringLiteral("windows") || m_platform == QStringLiteral("xcb")) - QEXPECT_FAIL("", EventRecorder::msgExpectFailQtBug26424(expected, spy.eventList()).constData(), Continue); QVERIFY2(spy.eventList() == expected, EventRecorder::msgEventListMismatch(expected, spy.eventList()).constData()); } @@ -6190,10 +6221,13 @@ void tst_QWidget::childEvents() EventRecorder::EventList() << qMakePair(&widget, QEvent::Polish) << qMakePair(&widget, QEvent::ChildPolished) + << qMakePair(&widget, QEvent::PlatformSurface) << qMakePair(&widget, QEvent::WinIdChange) + << qMakePair(&widget, QEvent::WindowIconChange) << qMakePair(&widget, QEvent::Move) << qMakePair(&widget, QEvent::Resize) << qMakePair(&widget, QEvent::Show) + << qMakePair(&widget, QEvent::CursorChange) << qMakePair(&widget, QEvent::ShowToParent); QVERIFY2(spy.eventList() == expected, @@ -6206,13 +6240,9 @@ void tst_QWidget::childEvents() << qMakePair(&widget, QEvent::PolishRequest) << qMakePair(&widget, QEvent::Type(QEvent::User + 1)) << qMakePair(&widget, QEvent::Type(QEvent::User + 2)) -#if defined(Q_OS_OSX) || defined(Q_OS_QNX) << qMakePair(&widget, QEvent::UpdateLater) -#endif << qMakePair(&widget, QEvent::UpdateRequest); - if (m_platform == QStringLiteral("windows") || m_platform == QStringLiteral("xcb")) - QEXPECT_FAIL("", EventRecorder::msgExpectFailQtBug26424(expected, spy.eventList()).constData(), Continue); QVERIFY2(spy.eventList() == expected, EventRecorder::msgEventListMismatch(expected, spy.eventList()).constData()); } @@ -8957,7 +8987,7 @@ void tst_QWidget::taskQTBUG_4055_sendSyntheticEnterLeave() int numEnterEvents, numMouseMoveEvents; }; - QCursor::setPos(QPoint(0,0)); + QCursor::setPos(QPoint(0,0)); SELParent parent; parent.move(200, 200); @@ -8965,8 +8995,7 @@ void tst_QWidget::taskQTBUG_4055_sendSyntheticEnterLeave() SELChild child(&parent); child.resize(200, 200); parent.show(); - QVERIFY(QTest::qWaitForWindowExposed(&parent)); - QTest::qWait(150); + QVERIFY(QTest::qWaitForWindowActive(&parent)); QCursor::setPos(child.mapToGlobal(QPoint(100, 100))); // Make sure the cursor has entered the child. @@ -9714,8 +9743,9 @@ void tst_QWidget::grabMouse() QVERIFY(QTest::qWaitForWindowActive(&w)); QStringList expectedLog; - grabber->grabMouse(); QPoint mousePos = QPoint(w.width() / 2, 10); + QTest::mouseMove(w.windowHandle(), mousePos); + grabber->grabMouse(); const int step = w.height() / 5; for ( ; mousePos.y() < w.height() ; mousePos.ry() += step) { QTest::mouseClick(w.windowHandle(), Qt::LeftButton, 0, mousePos); @@ -10385,6 +10415,9 @@ public: void tst_QWidget::keyboardModifiers() { KeyboardWidget w; + w.resize(300, 300); + w.show(); + QVERIFY(QTest::qWaitForWindowActive(&w)); QTest::mouseClick(&w, Qt::LeftButton, Qt::ControlModifier); QCOMPARE(w.m_eventCounter, 1); QCOMPARE(int(w.m_modifiers), int(Qt::ControlModifier)); @@ -10462,7 +10495,7 @@ void tst_QWidget::qmlSetParentHelper() QWidget child; QVERIFY(QAbstractDeclarativeData::setWidgetParent); QAbstractDeclarativeData::setWidgetParent(&child, &parent); - QVERIFY(child.parentWidget() == &parent); + QCOMPARE(child.parentWidget(), &parent); QAbstractDeclarativeData::setWidgetParent(&child, 0); QVERIFY(!child.parentWidget()); #else |