diff options
Diffstat (limited to 'tests/auto/widgets/widgets/qmenu/tst_qmenu.cpp')
-rw-r--r-- | tests/auto/widgets/widgets/qmenu/tst_qmenu.cpp | 181 |
1 files changed, 108 insertions, 73 deletions
diff --git a/tests/auto/widgets/widgets/qmenu/tst_qmenu.cpp b/tests/auto/widgets/widgets/qmenu/tst_qmenu.cpp index 0dde385bdb..a88fd8d19c 100644 --- a/tests/auto/widgets/widgets/qmenu/tst_qmenu.cpp +++ b/tests/auto/widgets/widgets/qmenu/tst_qmenu.cpp @@ -29,6 +29,7 @@ #include <QtTest/QtTest> #include <QtTest/private/qtesthelpers_p.h> #include <qapplication.h> +#include <private/qguiapplication_p.h> #include <QPushButton> #include <QMainWindow> #include <QMenuBar> @@ -48,6 +49,7 @@ #include <qdebug.h> #include <qpa/qplatformtheme.h> +#include <qpa/qplatformintegration.h> using namespace QTestPrivate; @@ -459,6 +461,9 @@ void tst_QMenu::focus() void tst_QMenu::overrideMenuAction() { + if (!QGuiApplicationPrivate::platformIntegration()->hasCapability(QPlatformIntegration::WindowActivation)) + QSKIP("Window activation is not supported"); + //test the override menu action by first creating an action to which we set its menu QMainWindow w; w.resize(300, 200); @@ -614,6 +619,9 @@ static QMenu *getTornOffMenu() void tst_QMenu::tearOff() { + if (!QGuiApplicationPrivate::platformIntegration()->hasCapability(QPlatformIntegration::WindowActivation)) + QSKIP("Window activation is not supported"); + QWidget widget; QScopedPointer<QMenu> menu(new QMenu(&widget)); QVERIFY(!menu->isTearOffEnabled()); //default value @@ -686,6 +694,9 @@ void tst_QMenu::tearOff() void tst_QMenu::submenuTearOffDontClose() { + if (!QGuiApplicationPrivate::platformIntegration()->hasCapability(QPlatformIntegration::WindowActivation)) + QSKIP("Window activation is not supported"); + QWidget widget; QMenu *menu = new QMenu(&widget); QVERIFY(!menu->isTearOffEnabled()); //default value @@ -713,7 +724,8 @@ void tst_QMenu::submenuTearOffDontClose() // Move then click to avoid the submenu moves from causing it to close QTest::mouseMove(menu, submenuPos, 100); QTest::mouseClick(menu, Qt::LeftButton, 0, submenuPos, 100); - QTRY_VERIFY(QTest::qWaitForWindowActive(submenu)); + QVERIFY(QTest::qWaitFor([&]() { return submenu->window()->windowHandle(); })); + QVERIFY(QTest::qWaitForWindowActive(submenu)); // Make sure we enter the submenu frame directly on the tear-off area QTest::mouseMove(submenu, QPoint(10, 3), 100); if (submenu->style()->styleHint(QStyle::SH_Menu_SubMenuDontStartSloppyOnLeave)) { @@ -843,6 +855,10 @@ private: void tst_QMenu::activeSubMenuPositionExec() { + +#ifdef Q_OS_WINRT + QSKIP("Broken on WinRT - QTBUG-68297"); +#endif SubMenuPositionExecMenu menu; menu.exec(QGuiApplication::primaryScreen()->availableGeometry().center()); } @@ -986,9 +1002,6 @@ void tst_QMenu::task258920_mouseBorder() QAction *action = menu.addAction("test"); const QPoint center = QApplication::desktop()->availableGeometry().center(); -#ifndef QT_NO_CURSOR - QCursor::setPos(center - QPoint(100, 100)); // Mac: Ensure cursor is outside -#endif menu.popup(center); QVERIFY(QTest::qWaitForWindowExposed(&menu)); QRect actionRect = menu.actionGeometry(action); @@ -1082,6 +1095,9 @@ void tst_QMenu::pushButtonPopulateOnAboutToShow() QTimer::singleShot(300, buttonMenu, SLOT(hide())); QTest::mouseClick(&b, Qt::LeftButton, Qt::NoModifier, b.rect().center()); +#ifdef Q_OS_WINRT + QEXPECT_FAIL("", "WinRT does not support QTest::mouseClick", Abort); +#endif QVERIFY2(!buttonMenu->geometry().intersects(b.geometry()), msgGeometryIntersects(buttonMenu->geometry(), b.geometry())); // note: we're assuming that, if we previously got the desired geometry, we'll get it here too @@ -1180,6 +1196,9 @@ void tst_QMenu::click_while_dismissing_submenu() //this opens the submenu, move two times to emulate user interaction (d->motions > 0 in QMenu) QTest::mouseMove(menuWindow, menu.rect().center() + QPoint(0,2)); QTest::mouseMove(menuWindow, menu.rect().center() + QPoint(1,3), 60); +#ifdef Q_OS_WINRT + QEXPECT_FAIL("", "WinRT does not support QTest::mouseMove", Abort); +#endif QVERIFY(menuShownSpy.wait()); QVERIFY(sub.isVisible()); QVERIFY(QTest::qWaitForWindowExposed(&sub)); @@ -1229,96 +1248,95 @@ public: void tst_QMenu::QTBUG47515_widgetActionEnterLeave() { -#if !QT_CONFIG(cursor) - QSKIP("This test requires QCursor API"); -#else + if (!QGuiApplicationPrivate::platformIntegration()->hasCapability(QPlatformIntegration::WindowActivation)) + QSKIP("Window activation is not supported"); if (QGuiApplication::platformName() == QLatin1String("cocoa")) QSKIP("See QTBUG-63031"); - QPoint screenCenter = QGuiApplication::primaryScreen()->availableGeometry().center(); - QPoint pointOutsideMenu = screenCenter - QPoint(100, 100); + const QRect availableGeometry = QGuiApplication::primaryScreen()->availableGeometry(); + QRect geometry(QPoint(), availableGeometry.size() / 3); + geometry.moveCenter(availableGeometry.center()); + QPoint pointOutsideMenu = geometry.bottomRight() - QPoint(5, 5); - QMenu menu("Menu1"); - QMenu submenu("Menu2"); + QMainWindow topLevel; + topLevel.setGeometry(geometry); - QWidgetAction menuAction(&menu); - MyWidget w1(&menu); - menuAction.setDefaultWidget(&w1); + QMenuBar *menuBar = topLevel.menuBar(); + menuBar->setNativeMenuBar(false); + QMenu *menu = menuBar->addMenu("Menu1"); + QMenu *submenu = menu->addMenu("Menu2"); - QWidgetAction submenuAction(&submenu); - MyWidget w2(&submenu); - submenuAction.setDefaultWidget(&w2); + QWidgetAction *menuAction = new QWidgetAction(menu); + MyWidget *w1 = new MyWidget(menu); + menuAction->setDefaultWidget(w1); - QAction *nextMenuAct = menu.addMenu(&submenu); + QWidgetAction *submenuAction = new QWidgetAction(submenu); + MyWidget *w2 = new MyWidget(submenu); + submenuAction->setDefaultWidget(w2); - menu.addAction(&menuAction); - submenu.addAction(&submenuAction); + QAction *nextMenuAct = menu->addMenu(submenu); - // Root menu - { - QCursor::setPos(pointOutsideMenu); - QTRY_COMPARE(QCursor::pos(), pointOutsideMenu); - menu.popup(screenCenter); - QVERIFY(QTest::qWaitForWindowExposed(&menu)); + menu->addAction(menuAction); + submenu->addAction(submenuAction); + + topLevel.show(); + topLevel.setWindowTitle(QTest::currentTestFunction()); + QVERIFY(QTest::qWaitForWindowActive(&topLevel)); + QWindow *topLevelWindow = topLevel.windowHandle(); + QVERIFY(topLevelWindow); - w1.enter = 0; - w1.leave = 0; - QPoint w1Center = w1.rect().center(); - const QPoint w1CenterGlobal = w1.mapToGlobal(w1Center); - QCursor::setPos(w1CenterGlobal); - QTRY_COMPARE(QCursor::pos(), w1CenterGlobal); - QVERIFY(w1.isVisible()); - QTRY_COMPARE(w1.leave, 0); - QTRY_COMPARE(w1.enter, 1); + // Root menu: Click on menu bar to open menu1 + { + const QPoint menuActionPos = menuBar->mapTo(&topLevel, menuBar->actionGeometry(menu->menuAction()).center()); + QTest::mouseClick(topLevelWindow, Qt::LeftButton, Qt::KeyboardModifiers(), menuActionPos); + QVERIFY(QTest::qWaitForWindowExposed(menu)); + + w1->enter = 0; + w1->leave = 0; + QPoint w1Center = topLevel.mapFromGlobal(w1->mapToGlobal(w1->rect().center())); + QTest::mouseMove(topLevelWindow, w1Center); + QVERIFY(w1->isVisible()); + QTRY_COMPARE(w1->leave, 0); +#ifdef Q_OS_WINRT + QEXPECT_FAIL("", "WinRT does not support QTest::mouseMove", Abort); +#endif + QTRY_COMPARE(w1->enter, 1); // Check whether leave event is not delivered on mouse move - w1.move = 0; - QWidget *nativeParent = w1.nativeParentWidget(); - QVERIFY(nativeParent); - QWindow *window = nativeParent->windowHandle(); - QVERIFY(window); - QTest::mouseMove(window, w1.mapTo(nativeParent, w1Center + QPoint(1, 1))); - QTRY_COMPARE(w1.move, 1); - QTRY_COMPARE(w1.leave, 0); - QTRY_COMPARE(w1.enter, 1); - - QCursor::setPos(pointOutsideMenu); - QTRY_COMPARE(QCursor::pos(), pointOutsideMenu); - QTRY_COMPARE(w1.leave, 1); - QTRY_COMPARE(w1.enter, 1); + w1->move = 0; + QTest::mouseMove(topLevelWindow, w1Center + QPoint(1, 1)); + QTRY_COMPARE(w1->move, 1); + QTRY_COMPARE(w1->leave, 0); + QTRY_COMPARE(w1->enter, 1); + + QTest::mouseMove(topLevelWindow, topLevel.mapFromGlobal(pointOutsideMenu)); + QTRY_COMPARE(w1->leave, 1); + QTRY_COMPARE(w1->enter, 1); } // Submenu { - menu.setActiveAction(nextMenuAct); - QVERIFY(QTest::qWaitForWindowExposed(&submenu)); + menu->setActiveAction(nextMenuAct); + QVERIFY(QTest::qWaitForWindowExposed(submenu)); - QPoint w2Center = w2.rect().center(); - const QPoint w2CenterGlobal = w2.mapToGlobal(w2Center); - QCursor::setPos(w2CenterGlobal); - QTRY_COMPARE(QCursor::pos(), w2CenterGlobal); + QPoint w2Center = topLevel.mapFromGlobal(w2->mapToGlobal(w2->rect().center())); + QTest::mouseMove(topLevelWindow, w2Center); - QVERIFY(w2.isVisible()); - QTRY_COMPARE(w2.leave, 0); - QTRY_COMPARE(w2.enter, 1); + QVERIFY(w2->isVisible()); + QTRY_COMPARE(w2->leave, 0); + QTRY_COMPARE(w2->enter, 1); // Check whether leave event is not delivered on mouse move - w2.move = 0; - QWidget *nativeParent = w2.nativeParentWidget(); - QVERIFY(nativeParent); - QWindow *window = nativeParent->windowHandle(); - QVERIFY(window); - QTest::mouseMove(window, w2.mapTo(nativeParent, w2Center + QPoint(1, 1))); - QTRY_COMPARE(w2.move, 1); - QTRY_COMPARE(w2.leave, 0); - QTRY_COMPARE(w2.enter, 1); - - QCursor::setPos(pointOutsideMenu); - QTRY_COMPARE(QCursor::pos(), pointOutsideMenu); - QTRY_COMPARE(w2.leave, 1); - QTRY_COMPARE(w2.enter, 1); + w2->move = 0; + QTest::mouseMove(topLevelWindow, w2Center + QPoint(1, 1)); + QTRY_COMPARE(w2->move, 1); + QTRY_COMPARE(w2->leave, 0); + QTRY_COMPARE(w2->enter, 1); + + QTest::mouseMove(topLevelWindow, topLevel.mapFromGlobal(pointOutsideMenu)); + QTRY_COMPARE(w2->leave, 1); + QTRY_COMPARE(w2->enter, 1); } -#endif // QT_NO_CURSOR } class MyMenu : public QMenu @@ -1407,6 +1425,9 @@ void tst_QMenu::QTBUG_56917_wideMenuSize() menu.popup(QPoint()); QVERIFY(QTest::qWaitForWindowExposed(&menu)); QVERIFY(menu.isVisible()); +#ifdef Q_OS_WINRT + QEXPECT_FAIL("", "Broken on WinRT - QTBUG-68297", Abort); +#endif QVERIFY(menu.height() <= menuSizeHint.height()); } @@ -1542,6 +1563,9 @@ void tst_QMenu::menuSize_Scrolling() getContentsMargins(&leftMargin, &topMargin, &rightMargin, &bottomMargin); QRect lastItem = actionGeometry(actions().at(actions().length() - 1)); QSize s = size(); +#ifdef Q_OS_WINRT + QEXPECT_FAIL("", "Broken on WinRT - QTBUG-68297", Abort); +#endif QCOMPARE( s.width(), lastItem.right() + fw + hmargin + rightMargin + 1); QMenu::showEvent(e); } @@ -1610,6 +1634,12 @@ void tst_QMenu::menuSize_Scrolling() return; QTest::keyClick(&menu, Qt::Key_End); +#ifdef Q_OS_WINRT + QEXPECT_FAIL("data8", "Broken on WinRT - QTBUG-68297", Abort); + QEXPECT_FAIL("data9", "Broken on WinRT - QTBUG-68297", Abort); + QEXPECT_FAIL("data10", "Broken on WinRT - QTBUG-68297", Abort); + QEXPECT_FAIL("data11", "Broken on WinRT - QTBUG-68297", Abort); +#endif QTRY_COMPARE(menu.actionGeometry(actions.last()).right(), menu.width() - mm.fw - mm.hmargin - leftMargin - 1); QCOMPARE(menu.actionGeometry(actions.last()).bottom(), @@ -1618,6 +1648,8 @@ void tst_QMenu::menuSize_Scrolling() void tst_QMenu::tearOffMenuNotDisplayed() { + if (!QGuiApplicationPrivate::platformIntegration()->hasCapability(QPlatformIntegration::WindowActivation)) + QSKIP("Window activation is not supported"); QWidget widget; QScopedPointer<QMenu> menu(new QMenu(&widget)); menu->setTearOffEnabled(true); @@ -1653,6 +1685,9 @@ void tst_QMenu::tearOffMenuNotDisplayed() void tst_QMenu::QTBUG_61039_menu_shortcuts() { + if (!QGuiApplicationPrivate::platformIntegration()->hasCapability(QPlatformIntegration::WindowActivation)) + QSKIP("Window activation is not supported"); + QAction *actionKamen = new QAction("Action Kamen"); actionKamen->setShortcut(QKeySequence(QLatin1String("K"))); |