diff options
Diffstat (limited to 'tests/auto')
-rw-r--r-- | tests/auto/qquickmenu/tst_qquickmenu.cpp | 14 | ||||
-rw-r--r-- | tests/auto/qquickmenubar/tst_qquickmenubar.cpp | 42 | ||||
-rw-r--r-- | tests/auto/shared/visualtestutil.cpp | 27 | ||||
-rw-r--r-- | tests/auto/shared/visualtestutil.h | 17 |
4 files changed, 80 insertions, 20 deletions
diff --git a/tests/auto/qquickmenu/tst_qquickmenu.cpp b/tests/auto/qquickmenu/tst_qquickmenu.cpp index a06b715f..d1b50357 100644 --- a/tests/auto/qquickmenu/tst_qquickmenu.cpp +++ b/tests/auto/qquickmenu/tst_qquickmenu.cpp @@ -533,6 +533,8 @@ void tst_QQuickMenu::mnemonics() window->requestActivate(); QVERIFY(QTest::qWaitForWindowActive(window)); + MnemonicKeySimulator keySim(window); + QQuickMenu *menu = window->property("menu").value<QQuickMenu *>(); QQuickAction *action = window->property("action").value<QQuickAction *>(); QQuickMenuItem *menuItem = window->property("menuItem").value<QQuickMenuItem *>(); @@ -540,12 +542,13 @@ void tst_QQuickMenu::mnemonics() QQuickMenuItem *subMenuItem = window->property("subMenuItem").value<QQuickMenuItem *>(); QVERIFY(menu && action && menuItem && subMenu && subMenuItem); + keySim.press(Qt::Key_Alt); menu->open(); QTRY_VERIFY(menu->isOpened()); QSignalSpy actionSpy(action, &QQuickAction::triggered); QVERIFY(actionSpy.isValid()); - QTest::keyClick(window, Qt::Key_A, Qt::AltModifier); // "&Action" + keySim.click(Qt::Key_A); // "&Action" QCOMPARE(actionSpy.count(), 1); menu->open(); @@ -553,18 +556,21 @@ void tst_QQuickMenu::mnemonics() QSignalSpy menuItemSpy(menuItem, &QQuickMenuItem::triggered); QVERIFY(menuItemSpy.isValid()); - QTest::keyClick(window, Qt::Key_I, Qt::AltModifier); // "Menu &Item" + keySim.click(Qt::Key_I); // "Menu &Item" + keySim.release(Qt::Key_Alt); QCOMPARE(menuItemSpy.count(), 1); + keySim.press(Qt::Key_Alt); menu->open(); QTRY_VERIFY(menu->isOpened()); - QTest::keyClick(window, Qt::Key_M, Qt::AltModifier); // "Sub &Menu" + keySim.click(Qt::Key_M); // "Sub &Menu" QTRY_VERIFY(subMenu->isOpened()); QSignalSpy subMenuItemSpy(subMenuItem, &QQuickMenuItem::triggered); QVERIFY(subMenuItemSpy.isValid()); - QTest::keyClick(window, Qt::Key_S, Qt::AltModifier); // "&Sub Menu Item" + keySim.click(Qt::Key_S); // "&Sub Menu Item" + keySim.release(Qt::Key_Alt); QCOMPARE(subMenuItemSpy.count(), 1); } diff --git a/tests/auto/qquickmenubar/tst_qquickmenubar.cpp b/tests/auto/qquickmenubar/tst_qquickmenubar.cpp index 2fb1a02b..62cb7363 100644 --- a/tests/auto/qquickmenubar/tst_qquickmenubar.cpp +++ b/tests/auto/qquickmenubar/tst_qquickmenubar.cpp @@ -418,6 +418,8 @@ void tst_qquickmenubar::mnemonics() moveMouseAway(window.data()); QVERIFY(QTest::qWaitForWindowActive(window.data())); + MnemonicKeySimulator keySim(window.data()); + QQuickMenuBar *menuBar = window->property("header").value<QQuickMenuBar *>(); QVERIFY(menuBar); @@ -434,30 +436,35 @@ void tst_qquickmenubar::mnemonics() QVERIFY(fileMenuBarItem && editMenuBarItem && viewMenuBarItem && helpMenuBarItem); // trigger a menubar item to open a menu - QTest::keyClick(window.data(), Qt::Key_E, Qt::AltModifier); // "&Edit" + keySim.press(Qt::Key_Alt); + keySim.click(Qt::Key_E); // "&Edit" + keySim.release(Qt::Key_Alt); QVERIFY(editMenuBarItem->isHighlighted()); QVERIFY(!editMenuBarItem->hasActiveFocus()); QVERIFY(editMenuBarMenu->isVisible()); QTRY_VERIFY(editMenuBarMenu->isOpened()); QVERIFY(editMenuBarMenu->hasActiveFocus()); - // re-trigger a menubar item to hide the menu - QTest::keyClick(window.data(), Qt::Key_E, Qt::AltModifier); // "&Edit" - QVERIFY(editMenuBarItem->isHighlighted()); - QVERIFY(editMenuBarItem->hasActiveFocus()); + // press Alt to hide the menu + keySim.click(Qt::Key_Alt); + QVERIFY(!editMenuBarItem->isHighlighted()); + QVERIFY(!editMenuBarItem->hasActiveFocus()); QVERIFY(!editMenuBarMenu->hasActiveFocus()); QTRY_VERIFY(!editMenuBarMenu->isVisible()); // re-trigger a menubar item to show the menu again - QTest::keyClick(window.data(), Qt::Key_E, Qt::AltModifier); // "&Edit" + keySim.press(Qt::Key_Alt); + keySim.click(Qt::Key_E); // "&Edit" + keySim.release(Qt::Key_Alt); QVERIFY(editMenuBarItem->isHighlighted()); QVERIFY(editMenuBarMenu->isVisible()); QTRY_VERIFY(editMenuBarMenu->isOpened()); QVERIFY(editMenuBarMenu->hasActiveFocus()); QVERIFY(!editMenuBarItem->hasActiveFocus()); - // trigger another menubar item to open another menu - QTest::keyClick(window.data(), Qt::Key_H, Qt::AltModifier); // "&Help" + // trigger another menubar item to open another menu, leave Alt pressed + keySim.press(Qt::Key_Alt); + keySim.click(Qt::Key_H); // "&Help" QVERIFY(!editMenuBarItem->isHighlighted()); QVERIFY(helpMenuBarItem->isHighlighted()); QVERIFY(!viewMenuBarMenu->isVisible()); @@ -465,40 +472,43 @@ void tst_qquickmenubar::mnemonics() QTRY_VERIFY(helpMenuBarMenu->isOpened()); // trigger a menu item to close the menu - QTest::keyClick(window.data(), Qt::Key_A, Qt::AltModifier); // "&About" + keySim.click(Qt::Key_A); // "&About" + keySim.release(Qt::Key_Alt); QVERIFY(!helpMenuBarItem->isHighlighted()); QTRY_VERIFY(!helpMenuBarMenu->isVisible()); - // trigger a menubar item to open a menu - QTest::keyClick(window.data(), Qt::Key_V, Qt::AltModifier); // "&View" + // trigger a menubar item to open a menu, leave Alt pressed + keySim.press(Qt::Key_Alt); + keySim.click(Qt::Key_V); // "&View" QVERIFY(!editMenuBarItem->isHighlighted()); QVERIFY(viewMenuBarItem->isHighlighted()); QVERIFY(viewMenuBarMenu->isVisible()); QTRY_VERIFY(viewMenuBarMenu->isOpened()); - // trigger a menu item to open a sub-menu + // trigger a menu item to open a sub-menu, leave Alt pressed QQuickMenuItem *alignmentSubMenuItem = qobject_cast<QQuickMenuItem *>(viewMenuBarMenu->itemAt(0)); QVERIFY(alignmentSubMenuItem); QQuickMenu *alignmentSubMenu = alignmentSubMenuItem->subMenu(); QVERIFY(alignmentSubMenu); - QTest::keyClick(window.data(), Qt::Key_A, Qt::AltModifier); // "&Alignment" + keySim.click(Qt::Key_A); // "&Alignment" QVERIFY(viewMenuBarMenu->isVisible()); QVERIFY(alignmentSubMenu->isVisible()); QTRY_VERIFY(alignmentSubMenu->isOpened()); - // trigger a menu item to open a sub-sub-menu + // trigger a menu item to open a sub-sub-menu, leave Alt pressed QQuickMenuItem *verticalSubMenuItem = qobject_cast<QQuickMenuItem *>(alignmentSubMenu->itemAt(1)); QVERIFY(verticalSubMenuItem); QQuickMenu *verticalSubMenu = verticalSubMenuItem->subMenu(); QVERIFY(verticalSubMenu); - QTest::keyClick(window.data(), Qt::Key_V, Qt::AltModifier); // "&Vertical" + keySim.click(Qt::Key_V); // "&Vertical" QVERIFY(viewMenuBarMenu->isVisible()); QVERIFY(alignmentSubMenu->isVisible()); QVERIFY(verticalSubMenu->isVisible()); QTRY_VERIFY(verticalSubMenu->isOpened()); // trigger a menu item to close the whole chain of menus - QTest::keyClick(window.data(), Qt::Key_C, Qt::AltModifier); // "&Center" + keySim.click(Qt::Key_C); // "&Center" + keySim.release(Qt::Key_Alt); QVERIFY(!viewMenuBarItem->isHighlighted()); QTRY_VERIFY(!viewMenuBarMenu->isVisible()); QTRY_VERIFY(!alignmentSubMenu->isVisible()); diff --git a/tests/auto/shared/visualtestutil.cpp b/tests/auto/shared/visualtestutil.cpp index bfbf0a17..4e33c6f1 100644 --- a/tests/auto/shared/visualtestutil.cpp +++ b/tests/auto/shared/visualtestutil.cpp @@ -140,3 +140,30 @@ void QQuickVisualTestUtil::addTestRowForEachControl(QQmlEngine *engine, const QS QTest::newRow(qPrintable(relativePath)) << absoluteUrl; }); } + +QQuickVisualTestUtil::MnemonicKeySimulator::MnemonicKeySimulator(QWindow *window) + : m_window(window), m_modifiers(Qt::NoModifier) +{ +} + +void QQuickVisualTestUtil::MnemonicKeySimulator::press(Qt::Key key) +{ + // QTest::keyPress() but not generating the press event for the modifier key. + if (key == Qt::Key_Alt) + m_modifiers |= Qt::AltModifier; + QTest::simulateEvent(m_window, true, key, m_modifiers, QString(), false); +} + +void QQuickVisualTestUtil::MnemonicKeySimulator::release(Qt::Key key) +{ + // QTest::keyRelease() but not generating the release event for the modifier key. + if (key == Qt::Key_Alt) + m_modifiers &= ~Qt::AltModifier; + QTest::simulateEvent(m_window, false, key, m_modifiers, QString(), false); +} + +void QQuickVisualTestUtil::MnemonicKeySimulator::click(Qt::Key key) +{ + press(key); + release(key); +} diff --git a/tests/auto/shared/visualtestutil.h b/tests/auto/shared/visualtestutil.h index 726daa27..cbc0bade 100644 --- a/tests/auto/shared/visualtestutil.h +++ b/tests/auto/shared/visualtestutil.h @@ -39,6 +39,7 @@ #include <functional> +#include <QtCore/QPointer> #include <QtQuick/QQuickItem> #include <QtQml/QQmlExpression> #include <QtQuick/private/qquickitem_p.h> @@ -190,6 +191,22 @@ namespace QQuickVisualTestUtil void forEachControl(QQmlEngine *engine, const QString &sourcePath, const QString &targetPath, const QStringList &skipList, ForEachCallback callback); void addTestRowForEachControl(QQmlEngine *engine, const QString &sourcePath, const QString &targetPath, const QStringList &skipList = QStringList()); + + // Helper to simulate Alt itself and Alt+<key> events. + class MnemonicKeySimulator + { + Q_DISABLE_COPY(MnemonicKeySimulator) + public: + explicit MnemonicKeySimulator(QWindow *window); + + void press(Qt::Key key); + void release(Qt::Key key); + void click(Qt::Key key); + + private: + QPointer<QWindow> m_window; + Qt::KeyboardModifiers m_modifiers; + }; } #define QQUICK_VERIFY_POLISH(item) \ |