diff options
author | Gatis Paeglis <gatis.paeglis@qt.io> | 2018-02-26 16:54:51 +0100 |
---|---|---|
committer | Shawn Rutledge <shawn.rutledge@qt.io> | 2018-03-08 06:30:23 +0000 |
commit | d6b7e7f8574ed2a74b3b636e8d0b928be978e2f5 (patch) | |
tree | fbef2f94f584bc8c6be45161fbe64b926942a657 /tests/auto/quick | |
parent | 6b877ec53f3308e4a685c43142fde951f81de02b (diff) |
tests: refactor and un-blacklist tst_QQuickMouseArea::pressedMultipleButtons
It seems that qtestlib has never really supported mouse state
handling for multiple buttons (see QTBUG-64030). And the current
implementation of this test relied on QGuiApplication to generate
mouse releases when necessary. Since a37785ec7638e7485112b87dd7e767881fecc114,
qtestlib does not rely on QGuiApplication to deduce mouse button
state, but requires explicit mouse press/release events via
QTest::mouse* APIs, thus causing this auto test to fail.
Refactor the auto test to use QTest::mouse* APIs. This change depends
on a fix for QTBUG-64030.
Task-number: QTBUG-63786
Change-Id: Id24526714ec9716a0126e8288e5e8974074ebc9e
Reviewed-by: Shawn Rutledge <shawn.rutledge@qt.io>
Diffstat (limited to 'tests/auto/quick')
-rw-r--r-- | tests/auto/quick/qquickmousearea/BLACKLIST | 3 | ||||
-rw-r--r-- | tests/auto/quick/qquickmousearea/tst_qquickmousearea.cpp | 154 |
2 files changed, 72 insertions, 85 deletions
diff --git a/tests/auto/quick/qquickmousearea/BLACKLIST b/tests/auto/quick/qquickmousearea/BLACKLIST deleted file mode 100644 index 817eb472a4..0000000000 --- a/tests/auto/quick/qquickmousearea/BLACKLIST +++ /dev/null @@ -1,3 +0,0 @@ -# QTBUG-63786 -[pressedMultipleButtons] -* diff --git a/tests/auto/quick/qquickmousearea/tst_qquickmousearea.cpp b/tests/auto/quick/qquickmousearea/tst_qquickmousearea.cpp index ea55c25761..aa379e834e 100644 --- a/tests/auto/quick/qquickmousearea/tst_qquickmousearea.cpp +++ b/tests/auto/quick/qquickmousearea/tst_qquickmousearea.cpp @@ -1578,91 +1578,85 @@ void tst_QQuickMouseArea::transformedMouseArea() } } +struct MouseEvent { + QEvent::Type type; + Qt::MouseButton button; +}; +Q_DECLARE_METATYPE(MouseEvent) + void tst_QQuickMouseArea::pressedMultipleButtons_data() { QTest::addColumn<Qt::MouseButtons>("accepted"); - QTest::addColumn<QList<Qt::MouseButtons> >("buttons"); + QTest::addColumn<QList<MouseEvent> >("mouseEvents"); QTest::addColumn<QList<bool> >("pressed"); QTest::addColumn<QList<Qt::MouseButtons> >("pressedButtons"); QTest::addColumn<int>("changeCount"); - QList<Qt::MouseButtons> buttons; + Qt::MouseButtons accepted; + QList<MouseEvent> mouseEvents; QList<bool> pressed; QList<Qt::MouseButtons> pressedButtons; - buttons << Qt::LeftButton - << (Qt::LeftButton | Qt::RightButton) - << Qt::LeftButton - << nullptr; - pressed << true - << true - << true - << false; - pressedButtons << Qt::LeftButton - << Qt::LeftButton - << Qt::LeftButton - << nullptr; - QTest::newRow("Accept Left - Press left, Press Right, Release Right") - << Qt::MouseButtons(Qt::LeftButton) << buttons << pressed << pressedButtons << 2; - - buttons.clear(); - pressed.clear(); - pressedButtons.clear(); - buttons << Qt::LeftButton - << (Qt::LeftButton | Qt::RightButton) - << Qt::RightButton - << nullptr; - pressed << true - << true - << false - << false; - pressedButtons << Qt::LeftButton - << Qt::LeftButton - << nullptr - << nullptr; - QTest::newRow("Accept Left - Press left, Press Right, Release Left") - << Qt::MouseButtons(Qt::LeftButton) << buttons << pressed << pressedButtons << 2; - - buttons.clear(); - pressed.clear(); - pressedButtons.clear(); - buttons << Qt::LeftButton - << (Qt::LeftButton | Qt::RightButton) - << Qt::LeftButton - << nullptr; - pressed << true - << true - << true - << false; - pressedButtons << Qt::LeftButton - << (Qt::LeftButton | Qt::RightButton) - << Qt::LeftButton - << nullptr; - QTest::newRow("Accept Left|Right - Press left, Press Right, Release Right") - << (Qt::LeftButton | Qt::RightButton) << buttons << pressed << pressedButtons << 4; - - buttons.clear(); - pressed.clear(); - pressedButtons.clear(); - buttons << Qt::RightButton - << (Qt::LeftButton | Qt::RightButton) - << Qt::LeftButton - << nullptr; - pressed << true - << true - << false - << false; - pressedButtons << Qt::RightButton - << Qt::RightButton - << nullptr - << nullptr; - QTest::newRow("Accept Right - Press Right, Press Left, Release Right") - << Qt::MouseButtons(Qt::RightButton) << buttons << pressed << pressedButtons << 2; + int changeCount; + + MouseEvent leftPress = { QEvent::MouseButtonPress, Qt::LeftButton }; + MouseEvent leftRelease = { QEvent::MouseButtonRelease, Qt::LeftButton }; + MouseEvent rightPress = { QEvent::MouseButtonPress, Qt::RightButton }; + MouseEvent rightRelease = { QEvent::MouseButtonRelease, Qt::RightButton }; + + auto addRowWithFormattedTitleAndReset = [&]() { + QByteArray title; + title.append("Accept:"); + if (accepted & Qt::LeftButton) + title.append(" LeftButton"); + if (accepted & Qt::RightButton) + title.append(" RightButton"); + title.append(" | Events:"); + for (MouseEvent event : mouseEvents) { + title.append(event.type == QEvent::MouseButtonPress ? " Press" : " Release"); + title.append(event.button == Qt::LeftButton ? " Left," : " Right,"); + } + title.chop(1); // remove last comma + QTest::newRow(title) << accepted << mouseEvents << pressed << pressedButtons << changeCount; + + mouseEvents.clear(); + pressed.clear(); + pressedButtons.clear(); + }; + + accepted = Qt::LeftButton; + changeCount = 2; + mouseEvents << leftPress << rightPress << rightRelease << leftRelease; + pressed << true << true << true << false; + pressedButtons << Qt::LeftButton << Qt::LeftButton << Qt::LeftButton << Qt::NoButton; + addRowWithFormattedTitleAndReset(); + + accepted = Qt::LeftButton; + changeCount = 2; + mouseEvents << leftPress << rightPress << leftRelease << rightRelease; + pressed << true << true << false << false; + pressedButtons << Qt::LeftButton << Qt::LeftButton << Qt::NoButton << Qt::NoButton; + addRowWithFormattedTitleAndReset(); + + accepted = Qt::LeftButton | Qt::RightButton; + changeCount = 4; + mouseEvents << leftPress << rightPress << rightRelease << leftRelease; + pressed << true << true << true << false; + pressedButtons << Qt::LeftButton << (Qt::LeftButton | Qt::RightButton) << Qt::LeftButton + << Qt::NoButton; + addRowWithFormattedTitleAndReset(); + + accepted = Qt::RightButton; + changeCount = 2; + mouseEvents << rightPress << leftPress << rightRelease << leftRelease; + pressed << true << true << false << false; + pressedButtons << Qt::RightButton << Qt::RightButton << Qt::NoButton << Qt::NoButton; + addRowWithFormattedTitleAndReset(); } void tst_QQuickMouseArea::pressedMultipleButtons() { QFETCH(Qt::MouseButtons, accepted); - QFETCH(QList<Qt::MouseButtons>, buttons); + QFETCH(QList<MouseEvent>, mouseEvents); QFETCH(QList<bool>, pressed); QFETCH(QList<Qt::MouseButtons>, pressedButtons); QFETCH(int, changeCount); @@ -1681,21 +1675,17 @@ void tst_QQuickMouseArea::pressedMultipleButtons() QSignalSpy pressedButtonsSpy(mouseArea, SIGNAL(pressedButtonsChanged())); mouseArea->setAcceptedMouseButtons(accepted); - QPoint point(10,10); - - for (int i = 0; i < buttons.count(); ++i) { - int btns = buttons.at(i); - - // The windowsysteminterface takes care of sending releases - QTest::mousePress(&view, (Qt::MouseButton)btns, Qt::NoModifier, point); - + QPoint point(10, 10); + for (int i = 0; i < mouseEvents.count(); ++i) { + const MouseEvent mouseEvent = mouseEvents.at(i); + if (mouseEvent.type == QEvent::MouseButtonPress) + QTest::mousePress(&view, mouseEvent.button, Qt::NoModifier, point); + else + QTest::mouseRelease(&view, mouseEvent.button, Qt::NoModifier, point); QCOMPARE(mouseArea->pressed(), pressed.at(i)); QCOMPARE(mouseArea->pressedButtons(), pressedButtons.at(i)); } - QTest::mousePress(&view, Qt::NoButton, Qt::NoModifier, point); - QCOMPARE(mouseArea->pressed(), false); - QCOMPARE(pressedSpy.count(), 2); QCOMPARE(pressedButtonsSpy.count(), changeCount); } |