From d6b7e7f8574ed2a74b3b636e8d0b928be978e2f5 Mon Sep 17 00:00:00 2001 From: Gatis Paeglis Date: Mon, 26 Feb 2018 16:54:51 +0100 Subject: 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 --- tests/auto/quick/qquickmousearea/BLACKLIST | 3 - .../quick/qquickmousearea/tst_qquickmousearea.cpp | 154 ++++++++++----------- 2 files changed, 72 insertions(+), 85 deletions(-) delete mode 100644 tests/auto/quick/qquickmousearea/BLACKLIST (limited to 'tests/auto/quick/qquickmousearea') 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("accepted"); - QTest::addColumn >("buttons"); + QTest::addColumn >("mouseEvents"); QTest::addColumn >("pressed"); QTest::addColumn >("pressedButtons"); QTest::addColumn("changeCount"); - QList buttons; + Qt::MouseButtons accepted; + QList mouseEvents; QList pressed; QList 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, buttons); + QFETCH(QList, mouseEvents); QFETCH(QList, pressed); QFETCH(QList, 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); } -- cgit v1.2.3