aboutsummaryrefslogtreecommitdiffstats
path: root/tests
diff options
context:
space:
mode:
authorGatis Paeglis <gatis.paeglis@qt.io>2018-02-26 16:54:51 +0100
committerShawn Rutledge <shawn.rutledge@qt.io>2018-03-08 06:30:23 +0000
commitd6b7e7f8574ed2a74b3b636e8d0b928be978e2f5 (patch)
treefbef2f94f584bc8c6be45161fbe64b926942a657 /tests
parent6b877ec53f3308e4a685c43142fde951f81de02b (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')
-rw-r--r--tests/auto/quick/qquickmousearea/BLACKLIST3
-rw-r--r--tests/auto/quick/qquickmousearea/tst_qquickmousearea.cpp154
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);
}