summaryrefslogtreecommitdiffstats
path: root/tests/auto/gui
diff options
context:
space:
mode:
Diffstat (limited to 'tests/auto/gui')
-rw-r--r--tests/auto/gui/kernel/qguiapplication/tst_qguiapplication.cpp75
-rw-r--r--tests/auto/gui/kernel/qwindow/tst_qwindow.cpp123
-rw-r--r--tests/auto/gui/util/qdesktopservices/tst_qdesktopservices.cpp35
3 files changed, 226 insertions, 7 deletions
diff --git a/tests/auto/gui/kernel/qguiapplication/tst_qguiapplication.cpp b/tests/auto/gui/kernel/qguiapplication/tst_qguiapplication.cpp
index 0c009ec155..1dc2e551b4 100644
--- a/tests/auto/gui/kernel/qguiapplication/tst_qguiapplication.cpp
+++ b/tests/auto/gui/kernel/qguiapplication/tst_qguiapplication.cpp
@@ -55,6 +55,7 @@ private slots:
void topLevelWindows();
void abortQuitOnShow();
void changeFocusWindow();
+ void keyboardModifiers();
};
class DummyWindow : public QWindow
@@ -239,6 +240,80 @@ void tst_QGuiApplication::changeFocusWindow()
QCOMPARE(window1.windowDuringFocusOut, &window2);
}
+void tst_QGuiApplication::keyboardModifiers()
+{
+ int argc = 0;
+ QGuiApplication app(argc, 0);
+
+ QWindow *window = new QWindow;
+ window->show();
+ QTest::qWaitForWindowShown(window);
+ QCOMPARE(QGuiApplication::keyboardModifiers(), Qt::NoModifier);
+
+ // mouse events
+ QPoint center = window->geometry().center();
+ QTest::mouseEvent(QTest::MousePress, window, Qt::LeftButton, Qt::NoModifier, center);
+ QCOMPARE(QGuiApplication::keyboardModifiers(), Qt::NoModifier);
+ QTest::mouseEvent(QTest::MouseRelease, window, Qt::LeftButton, Qt::NoModifier, center);
+ QCOMPARE(QGuiApplication::keyboardModifiers(), Qt::NoModifier);
+ QTest::mouseEvent(QTest::MousePress, window, Qt::RightButton, Qt::ControlModifier, center);
+ QCOMPARE(QGuiApplication::keyboardModifiers(), Qt::ControlModifier);
+ QTest::mouseEvent(QTest::MouseRelease, window, Qt::RightButton, Qt::ControlModifier, center);
+ QCOMPARE(QGuiApplication::keyboardModifiers(), Qt::ControlModifier);
+
+ // shortcut events
+ QWindowSystemInterface::tryHandleSynchronousShortcutEvent(window, Qt::Key_5, Qt::MetaModifier);
+ QCOMPARE(QGuiApplication::keyboardModifiers(), Qt::MetaModifier);
+ QWindowSystemInterface::tryHandleSynchronousShortcutEvent(window, Qt::Key_Period, Qt::NoModifier);
+ QCOMPARE(QGuiApplication::keyboardModifiers(), Qt::NoModifier);
+ QWindowSystemInterface::tryHandleSynchronousShortcutEvent(window, Qt::Key_0, Qt::ControlModifier);
+ QCOMPARE(QGuiApplication::keyboardModifiers(), Qt::ControlModifier);
+
+ // key events
+ QTest::keyEvent(QTest::Press, window, Qt::Key_C);
+ QCOMPARE(QGuiApplication::keyboardModifiers(), Qt::NoModifier);
+ QTest::keyEvent(QTest::Release, window, Qt::Key_C);
+ QCOMPARE(QGuiApplication::keyboardModifiers(), Qt::NoModifier);
+
+ QTest::keyEvent(QTest::Press, window, Qt::Key_U, Qt::ControlModifier);
+ QCOMPARE(QGuiApplication::keyboardModifiers(), Qt::ControlModifier);
+ QTest::keyEvent(QTest::Release, window, Qt::Key_U, Qt::ControlModifier);
+ QCOMPARE(QGuiApplication::keyboardModifiers(), Qt::ControlModifier);
+
+ QTest::keyEvent(QTest::Press, window, Qt::Key_T);
+ QCOMPARE(QGuiApplication::keyboardModifiers(), Qt::NoModifier);
+ QTest::keyEvent(QTest::Release, window, Qt::Key_T);
+ QCOMPARE(QGuiApplication::keyboardModifiers(), Qt::NoModifier);
+
+ QTest::keyEvent(QTest::Press, window, Qt::Key_E, Qt::ControlModifier);
+ QCOMPARE(QGuiApplication::keyboardModifiers(), Qt::ControlModifier);
+ QTest::keyEvent(QTest::Release, window, Qt::Key_E, Qt::ControlModifier);
+ QCOMPARE(QGuiApplication::keyboardModifiers(), Qt::ControlModifier);
+
+ // wheel events
+ QPoint global = window->mapToGlobal(center);
+ QPoint delta(0, 1);
+ QWindowSystemInterface::handleWheelEvent(window, center, global, delta, delta, Qt::NoModifier);
+ QWindowSystemInterface::sendWindowSystemEvents(app.eventDispatcher(), QEventLoop::AllEvents);
+ QCOMPARE(QGuiApplication::keyboardModifiers(), Qt::NoModifier);
+ QWindowSystemInterface::handleWheelEvent(window, center, global, delta, delta, Qt::AltModifier);
+ QWindowSystemInterface::sendWindowSystemEvents(app.eventDispatcher(), QEventLoop::AllEvents);
+ QCOMPARE(QGuiApplication::keyboardModifiers(), Qt::AltModifier);
+ QWindowSystemInterface::handleWheelEvent(window, center, global, delta, delta, Qt::ControlModifier);
+ QWindowSystemInterface::sendWindowSystemEvents(app.eventDispatcher(), QEventLoop::AllEvents);
+ QCOMPARE(QGuiApplication::keyboardModifiers(), Qt::ControlModifier);
+
+ // touch events
+ QList<const QTouchDevice *> touchDevices = QTouchDevice::devices();
+ if (!touchDevices.isEmpty()) {
+ QTouchDevice *touchDevice = const_cast<QTouchDevice *>(touchDevices.first());
+ QTest::touchEvent(window, touchDevice).press(1, center).release(1, center);
+ QCOMPARE(QGuiApplication::keyboardModifiers(), Qt::NoModifier);
+ }
+
+ window->close();
+ delete window;
+}
QTEST_APPLESS_MAIN(tst_QGuiApplication)
#include "tst_qguiapplication.moc"
diff --git a/tests/auto/gui/kernel/qwindow/tst_qwindow.cpp b/tests/auto/gui/kernel/qwindow/tst_qwindow.cpp
index ebd8823149..df58d8340b 100644
--- a/tests/auto/gui/kernel/qwindow/tst_qwindow.cpp
+++ b/tests/auto/gui/kernel/qwindow/tst_qwindow.cpp
@@ -44,6 +44,7 @@
#include <QtTest/QtTest>
#include <QEvent>
+#include <QStyleHints>
// For QSignalSpy slot connections.
Q_DECLARE_METATYPE(Qt::ScreenOrientation)
@@ -67,6 +68,7 @@ private slots:
void orientation();
void close();
void activateAndClose();
+ void mouseEventSequence();
void initTestCase()
{
@@ -304,15 +306,20 @@ public:
if (ignoreMouse) {
event->ignore();
} else {
+ ++mousePressedCount;
+ mouseSequenceSignature += 'p';
mousePressButton = event->button();
mousePressScreenPos = event->screenPos();
}
}
void mouseReleaseEvent(QMouseEvent *event) {
- if (ignoreMouse)
+ if (ignoreMouse) {
event->ignore();
- else
+ } else {
+ ++mouseReleasedCount;
+ mouseSequenceSignature += 'r';
mouseReleaseButton = event->button();
+ }
}
void mouseMoveEvent(QMouseEvent *event) {
if (ignoreMouse) {
@@ -322,6 +329,14 @@ public:
mouseMoveScreenPos = event->screenPos();
}
}
+ void mouseDoubleClickEvent(QMouseEvent *event) {
+ if (ignoreMouse) {
+ event->ignore();
+ } else {
+ ++mouseDoubleClickedCount;
+ mouseSequenceSignature += 'd';
+ }
+ }
void touchEvent(QTouchEvent *event) {
if (ignoreTouch) {
event->ignore();
@@ -345,16 +360,23 @@ public:
}
}
}
+ void resetCounters() {
+ mousePressedCount = mouseReleasedCount = mouseDoubleClickedCount = 0;
+ mouseSequenceSignature = QString();
+ touchPressedCount = touchReleasedCount = touchMovedCount = 0;
+ }
InputTestWindow() {
keyPressCode = keyReleaseCode = 0;
- mousePressButton = mouseReleaseButton = 0;
- touchPressedCount = touchReleasedCount = touchMovedCount = 0;
+ mousePressButton = mouseReleaseButton = mouseMoveButton = 0;
ignoreMouse = ignoreTouch = false;
+ resetCounters();
}
int keyPressCode, keyReleaseCode;
int mousePressButton, mouseReleaseButton, mouseMoveButton;
+ int mousePressedCount, mouseReleasedCount, mouseDoubleClickedCount;
+ QString mouseSequenceSignature;
QPointF mousePressScreenPos, mouseMoveScreenPos;
int touchPressedCount, touchReleasedCount, touchMovedCount;
QEvent::Type touchEventType;
@@ -691,5 +713,96 @@ void tst_QWindow::activateAndClose()
}
}
+void tst_QWindow::mouseEventSequence()
+{
+ int doubleClickInterval = qGuiApp->styleHints()->mouseDoubleClickInterval();
+
+ InputTestWindow window;
+ window.setGeometry(80, 80, 40, 40);
+ window.show();
+ QTest::qWaitForWindowShown(&window);
+
+ ulong timestamp = 0;
+ QPointF local(12, 34);
+ QWindowSystemInterface::handleMouseEvent(&window, timestamp++, local, local, Qt::LeftButton);
+ QWindowSystemInterface::handleMouseEvent(&window, timestamp++, local, local, Qt::NoButton);
+ QCoreApplication::processEvents();
+ QCOMPARE(window.mousePressedCount, 1);
+ QCOMPARE(window.mouseReleasedCount, 1);
+ QCOMPARE(window.mouseDoubleClickedCount, 0);
+ QCOMPARE(window.mouseSequenceSignature, QLatin1String("pr"));
+
+ window.resetCounters();
+ timestamp += doubleClickInterval;
+
+ // A double click must result in press, release, press, doubleclick, release.
+ // Check that no unexpected event suppression occurs and that the order is correct.
+ QWindowSystemInterface::handleMouseEvent(&window, timestamp++, local, local, Qt::LeftButton);
+ QWindowSystemInterface::handleMouseEvent(&window, timestamp++, local, local, Qt::NoButton);
+ QWindowSystemInterface::handleMouseEvent(&window, timestamp++, local, local, Qt::LeftButton);
+ QWindowSystemInterface::handleMouseEvent(&window, timestamp++, local, local, Qt::NoButton);
+ QCoreApplication::processEvents();
+ QCOMPARE(window.mousePressedCount, 2);
+ QCOMPARE(window.mouseReleasedCount, 2);
+ QCOMPARE(window.mouseDoubleClickedCount, 1);
+ QCOMPARE(window.mouseSequenceSignature, QLatin1String("prpdr"));
+
+ timestamp += doubleClickInterval;
+ window.resetCounters();
+
+ // Triple click = double + single click
+ QWindowSystemInterface::handleMouseEvent(&window, timestamp++, local, local, Qt::LeftButton);
+ QWindowSystemInterface::handleMouseEvent(&window, timestamp++, local, local, Qt::NoButton);
+ QWindowSystemInterface::handleMouseEvent(&window, timestamp++, local, local, Qt::LeftButton);
+ QWindowSystemInterface::handleMouseEvent(&window, timestamp++, local, local, Qt::NoButton);
+ QWindowSystemInterface::handleMouseEvent(&window, timestamp++, local, local, Qt::LeftButton);
+ QWindowSystemInterface::handleMouseEvent(&window, timestamp++, local, local, Qt::NoButton);
+ QCoreApplication::processEvents();
+ QCOMPARE(window.mousePressedCount, 3);
+ QCOMPARE(window.mouseReleasedCount, 3);
+ QCOMPARE(window.mouseDoubleClickedCount, 1);
+ QCOMPARE(window.mouseSequenceSignature, QLatin1String("prpdrpr"));
+
+ timestamp += doubleClickInterval;
+ window.resetCounters();
+
+ // Two double clicks.
+ QWindowSystemInterface::handleMouseEvent(&window, timestamp++, local, local, Qt::LeftButton);
+ QWindowSystemInterface::handleMouseEvent(&window, timestamp++, local, local, Qt::NoButton);
+ QWindowSystemInterface::handleMouseEvent(&window, timestamp++, local, local, Qt::LeftButton);
+ QWindowSystemInterface::handleMouseEvent(&window, timestamp++, local, local, Qt::NoButton);
+ QWindowSystemInterface::handleMouseEvent(&window, timestamp++, local, local, Qt::LeftButton);
+ QWindowSystemInterface::handleMouseEvent(&window, timestamp++, local, local, Qt::NoButton);
+ QWindowSystemInterface::handleMouseEvent(&window, timestamp++, local, local, Qt::LeftButton);
+ QWindowSystemInterface::handleMouseEvent(&window, timestamp++, local, local, Qt::NoButton);
+ QCoreApplication::processEvents();
+ QCOMPARE(window.mousePressedCount, 4);
+ QCOMPARE(window.mouseReleasedCount, 4);
+ QCOMPARE(window.mouseDoubleClickedCount, 2);
+ QCOMPARE(window.mouseSequenceSignature, QLatin1String("prpdrprpdr"));
+
+ timestamp += doubleClickInterval;
+ window.resetCounters();
+
+ // Four clicks, none of which qualifies as a double click.
+ QWindowSystemInterface::handleMouseEvent(&window, timestamp++, local, local, Qt::LeftButton);
+ QWindowSystemInterface::handleMouseEvent(&window, timestamp++, local, local, Qt::NoButton);
+ timestamp += doubleClickInterval;
+ QWindowSystemInterface::handleMouseEvent(&window, timestamp++, local, local, Qt::LeftButton);
+ QWindowSystemInterface::handleMouseEvent(&window, timestamp++, local, local, Qt::NoButton);
+ timestamp += doubleClickInterval;
+ QWindowSystemInterface::handleMouseEvent(&window, timestamp++, local, local, Qt::LeftButton);
+ QWindowSystemInterface::handleMouseEvent(&window, timestamp++, local, local, Qt::NoButton);
+ timestamp += doubleClickInterval;
+ QWindowSystemInterface::handleMouseEvent(&window, timestamp++, local, local, Qt::LeftButton);
+ QWindowSystemInterface::handleMouseEvent(&window, timestamp++, local, local, Qt::NoButton);
+ timestamp += doubleClickInterval;
+ QCoreApplication::processEvents();
+ QCOMPARE(window.mousePressedCount, 4);
+ QCOMPARE(window.mouseReleasedCount, 4);
+ QCOMPARE(window.mouseDoubleClickedCount, 0);
+ QCOMPARE(window.mouseSequenceSignature, QLatin1String("prprprpr"));
+}
+
#include <tst_qwindow.moc>
-QTEST_MAIN(tst_QWindow);
+QTEST_MAIN(tst_QWindow)
diff --git a/tests/auto/gui/util/qdesktopservices/tst_qdesktopservices.cpp b/tests/auto/gui/util/qdesktopservices/tst_qdesktopservices.cpp
index 0ad37c21e8..618587356b 100644
--- a/tests/auto/gui/util/qdesktopservices/tst_qdesktopservices.cpp
+++ b/tests/auto/gui/util/qdesktopservices/tst_qdesktopservices.cpp
@@ -57,12 +57,11 @@ private slots:
void cleanup();
void openUrl();
void handlers();
+ void testDataLocation();
};
tst_qdesktopservices::tst_qdesktopservices()
{
- QCoreApplication::setOrganizationName("Nokia");
- QCoreApplication::setApplicationName("tst_qdesktopservices");
}
tst_qdesktopservices::~tst_qdesktopservices()
@@ -117,5 +116,37 @@ void tst_qdesktopservices::handlers()
QCOMPARE(barHandler.lastHandledUrl.toString(), barUrl.toString());
}
+#if defined(Q_OS_UNIX) && !defined(Q_OS_MAC)
+#define Q_XDG_PLATFORM
+#endif
+
+void tst_qdesktopservices::testDataLocation()
+{
+ // This is the one point where QDesktopServices and QStandardPaths differ.
+ // QDesktopServices on unix returns "data"/orgname/appname for DataLocation, for Qt4 compat.
+ // And the appname in qt4 defaulted to empty, not to argv[0].
+ {
+ const QString base = QStandardPaths::writableLocation(QStandardPaths::GenericDataLocation);
+ const QString app = QDesktopServices::storageLocation(QDesktopServices::DataLocation);
+#ifdef Q_XDG_PLATFORM
+ QCOMPARE(app, base + "/data//"); // as ugly as in Qt4
+#else
+ QCOMPARE(app, base);
+#endif
+ }
+ QCoreApplication::instance()->setOrganizationName("Qt");
+ QCoreApplication::instance()->setApplicationName("QtTest");
+ {
+ const QString base = QStandardPaths::writableLocation(QStandardPaths::GenericDataLocation);
+ const QString app = QDesktopServices::storageLocation(QDesktopServices::DataLocation);
+#ifdef Q_XDG_PLATFORM
+ QCOMPARE(app, base + "/data/Qt/QtTest");
+#else
+ QCOMPARE(app, base + "/Qt/QtTest");
+#endif
+ }
+}
+
QTEST_MAIN(tst_qdesktopservices)
+
#include "tst_qdesktopservices.moc"