diff options
author | Sergio Ahumada <sergio.ahumada@digia.com> | 2013-07-12 14:03:21 +0200 |
---|---|---|
committer | The Qt Project <gerrit-noreply@qt-project.org> | 2013-07-12 14:03:21 +0200 |
commit | 1866c13b7dd48aa0c6ede1cf7907a2640e9399f8 (patch) | |
tree | 0b61c2d801525228f4c5795795d1cdeb57b3edfa /tests/auto/gui/kernel/qguiapplication/tst_qguiapplication.cpp | |
parent | 5b648d4d79d07a7c851ce6211ffff8375d41bfa2 (diff) | |
parent | 3ef6cf060e984bca43956a23b61b32ec7347cfc7 (diff) |
Merge "Merge branch 'stable' into dev" into refs/staging/dev
Diffstat (limited to 'tests/auto/gui/kernel/qguiapplication/tst_qguiapplication.cpp')
-rw-r--r-- | tests/auto/gui/kernel/qguiapplication/tst_qguiapplication.cpp | 208 |
1 files changed, 140 insertions, 68 deletions
diff --git a/tests/auto/gui/kernel/qguiapplication/tst_qguiapplication.cpp b/tests/auto/gui/kernel/qguiapplication/tst_qguiapplication.cpp index 6a718a78e3..ed07b3fab5 100644 --- a/tests/auto/gui/kernel/qguiapplication/tst_qguiapplication.cpp +++ b/tests/auto/gui/kernel/qguiapplication/tst_qguiapplication.cpp @@ -43,11 +43,15 @@ #include <QtTest/QtTest> #include <QtGui/QGuiApplication> #include <QtGui/QWindow> +#include <QtGui/QScreen> +#include <QtGui/QCursor> #include <qpa/qwindowsysteminterface.h> #include <qgenericplugin.h> #include <QDebug> +enum { spacing = 50, windowSize = 200 }; + class tst_QGuiApplication: public QObject { Q_OBJECT @@ -103,8 +107,17 @@ void tst_QGuiApplication::focusObject() QGuiApplication app(argc, 0); QObject obj1, obj2, obj3; + const QRect screenGeometry = QGuiApplication::primaryScreen()->availableVirtualGeometry(); + DummyWindow window1; + window1.resize(windowSize, windowSize); + window1.setTitle(QStringLiteral("focusObject:window1")); + window1.setFramePosition(QPoint(screenGeometry.left() + spacing, screenGeometry.top() + spacing)); DummyWindow window2; + window2.resize(windowSize, windowSize); + window2.setFramePosition(QPoint(screenGeometry.left() + 2 * spacing + windowSize, screenGeometry.top() + spacing)); + window2.setTitle(QStringLiteral("focusObject:window2")); + window1.show(); QSignalSpy spy(&app, SIGNAL(focusObjectChanged(QObject*))); @@ -204,11 +217,19 @@ void tst_QGuiApplication::abortQuitOnShow() { int argc = 0; QGuiApplication app(argc, 0); - QWindow *window1 = new ShowCloseShowWindow(false); + const QRect screenGeometry = QGuiApplication::primaryScreen()->availableVirtualGeometry(); + + QScopedPointer<QWindow> window1(new ShowCloseShowWindow(false)); + window1->resize(windowSize, windowSize); + window1->setFramePosition(QPoint(screenGeometry.left() + spacing, screenGeometry.top() + spacing)); + window1->setTitle(QStringLiteral("abortQuitOnShow:window1")); window1->show(); QCOMPARE(app.exec(), 0); - QWindow *window2 = new ShowCloseShowWindow(true); + QScopedPointer<QWindow> window2(new ShowCloseShowWindow(true)); + window2->setTitle(QStringLiteral("abortQuitOnShow:window2")); + window2->resize(windowSize, windowSize); + window2->setFramePosition(QPoint(screenGeometry.left() + 2 * spacing + windowSize, screenGeometry.top() + spacing)); window2->show(); QCOMPARE(app.exec(), 1); } @@ -240,10 +261,18 @@ void tst_QGuiApplication::changeFocusWindow() { int argc = 0; QGuiApplication app(argc, 0); + const QRect screenGeometry = QGuiApplication::primaryScreen()->availableVirtualGeometry(); // focus is changed between FocusAboutToChange and FocusChanged - FocusChangeWindow window1, window2; + FocusChangeWindow window1; + window1.resize(windowSize, windowSize); + window1.setFramePosition(QPoint(screenGeometry.left() + spacing, screenGeometry.top() + spacing)); + window1.setTitle(QStringLiteral("changeFocusWindow:window1")); window1.show(); + FocusChangeWindow window2; + window2.resize(windowSize, windowSize); + window2.setFramePosition(QPoint(screenGeometry.left() + 2 * spacing + windowSize, screenGeometry.top() + spacing)); + window2.setTitle(QStringLiteral("changeFocusWindow:window2")); window2.show(); QVERIFY(QTest::qWaitForWindowExposed(&window1)); QVERIFY(QTest::qWaitForWindowExposed(&window2)); @@ -260,62 +289,67 @@ void tst_QGuiApplication::keyboardModifiers() { int argc = 0; QGuiApplication app(argc, 0); + const QRect screenGeometry = QGuiApplication::primaryScreen()->availableVirtualGeometry(); + + QScopedPointer<QWindow> window(new QWindow); + window->resize(windowSize, windowSize); + window->setFramePosition(QPoint(screenGeometry.left() + spacing, screenGeometry.top() + spacing)); + window->setTitle(QStringLiteral("keyboardModifiers")); - QWindow *window = new QWindow; window->show(); - QVERIFY(QTest::qWaitForWindowExposed(window)); + QVERIFY(QTest::qWaitForWindowExposed(window.data())); QCOMPARE(QGuiApplication::keyboardModifiers(), Qt::NoModifier); // mouse events QPoint center = window->geometry().center(); - QTest::mouseEvent(QTest::MousePress, window, Qt::LeftButton, Qt::NoModifier, center); + QTest::mouseEvent(QTest::MousePress, window.data(), Qt::LeftButton, Qt::NoModifier, center); QCOMPARE(QGuiApplication::keyboardModifiers(), Qt::NoModifier); - QTest::mouseEvent(QTest::MouseRelease, window, Qt::LeftButton, Qt::NoModifier, center); + QTest::mouseEvent(QTest::MouseRelease, window.data(), Qt::LeftButton, Qt::NoModifier, center); QCOMPARE(QGuiApplication::keyboardModifiers(), Qt::NoModifier); - QTest::mouseEvent(QTest::MousePress, window, Qt::RightButton, Qt::ControlModifier, center); + QTest::mouseEvent(QTest::MousePress, window.data(), Qt::RightButton, Qt::ControlModifier, center); QCOMPARE(QGuiApplication::keyboardModifiers(), Qt::ControlModifier); - QTest::mouseEvent(QTest::MouseRelease, window, Qt::RightButton, Qt::ControlModifier, center); + QTest::mouseEvent(QTest::MouseRelease, window.data(), Qt::RightButton, Qt::ControlModifier, center); QCOMPARE(QGuiApplication::keyboardModifiers(), Qt::ControlModifier); // shortcut events - QWindowSystemInterface::tryHandleShortcutEvent(window, Qt::Key_5, Qt::MetaModifier); + QWindowSystemInterface::tryHandleShortcutEvent(window.data(), Qt::Key_5, Qt::MetaModifier); QCOMPARE(QGuiApplication::keyboardModifiers(), Qt::MetaModifier); - QWindowSystemInterface::tryHandleShortcutEvent(window, Qt::Key_Period, Qt::NoModifier); + QWindowSystemInterface::tryHandleShortcutEvent(window.data(), Qt::Key_Period, Qt::NoModifier); QCOMPARE(QGuiApplication::keyboardModifiers(), Qt::NoModifier); - QWindowSystemInterface::tryHandleShortcutEvent(window, Qt::Key_0, Qt::ControlModifier); + QWindowSystemInterface::tryHandleShortcutEvent(window.data(), Qt::Key_0, Qt::ControlModifier); QCOMPARE(QGuiApplication::keyboardModifiers(), Qt::ControlModifier); // key events - QTest::keyEvent(QTest::Press, window, Qt::Key_C); + QTest::keyEvent(QTest::Press, window.data(), Qt::Key_C); QCOMPARE(QGuiApplication::keyboardModifiers(), Qt::NoModifier); - QTest::keyEvent(QTest::Release, window, Qt::Key_C); + QTest::keyEvent(QTest::Release, window.data(), Qt::Key_C); QCOMPARE(QGuiApplication::keyboardModifiers(), Qt::NoModifier); - QTest::keyEvent(QTest::Press, window, Qt::Key_U, Qt::ControlModifier); + QTest::keyEvent(QTest::Press, window.data(), Qt::Key_U, Qt::ControlModifier); QCOMPARE(QGuiApplication::keyboardModifiers(), Qt::ControlModifier); - QTest::keyEvent(QTest::Release, window, Qt::Key_U, Qt::ControlModifier); + QTest::keyEvent(QTest::Release, window.data(), Qt::Key_U, Qt::ControlModifier); QCOMPARE(QGuiApplication::keyboardModifiers(), Qt::ControlModifier); - QTest::keyEvent(QTest::Press, window, Qt::Key_T); + QTest::keyEvent(QTest::Press, window.data(), Qt::Key_T); QCOMPARE(QGuiApplication::keyboardModifiers(), Qt::NoModifier); - QTest::keyEvent(QTest::Release, window, Qt::Key_T); + QTest::keyEvent(QTest::Release, window.data(), Qt::Key_T); QCOMPARE(QGuiApplication::keyboardModifiers(), Qt::NoModifier); - QTest::keyEvent(QTest::Press, window, Qt::Key_E, Qt::ControlModifier); + QTest::keyEvent(QTest::Press, window.data(), Qt::Key_E, Qt::ControlModifier); QCOMPARE(QGuiApplication::keyboardModifiers(), Qt::ControlModifier); - QTest::keyEvent(QTest::Release, window, Qt::Key_E, Qt::ControlModifier); + QTest::keyEvent(QTest::Release, window.data(), 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::handleWheelEvent(window.data(), center, global, delta, delta, Qt::NoModifier); QWindowSystemInterface::sendWindowSystemEvents(QEventLoop::AllEvents); QCOMPARE(QGuiApplication::keyboardModifiers(), Qt::NoModifier); - QWindowSystemInterface::handleWheelEvent(window, center, global, delta, delta, Qt::AltModifier); + QWindowSystemInterface::handleWheelEvent(window.data(), center, global, delta, delta, Qt::AltModifier); QWindowSystemInterface::sendWindowSystemEvents(QEventLoop::AllEvents); QCOMPARE(QGuiApplication::keyboardModifiers(), Qt::AltModifier); - QWindowSystemInterface::handleWheelEvent(window, center, global, delta, delta, Qt::ControlModifier); + QWindowSystemInterface::handleWheelEvent(window.data(), center, global, delta, delta, Qt::ControlModifier); QWindowSystemInterface::sendWindowSystemEvents(QEventLoop::AllEvents); QCOMPARE(QGuiApplication::keyboardModifiers(), Qt::ControlModifier); @@ -323,12 +357,11 @@ void tst_QGuiApplication::keyboardModifiers() 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); + QTest::touchEvent(window.data(), touchDevice).press(1, center).release(1, center); QCOMPARE(QGuiApplication::keyboardModifiers(), Qt::NoModifier); } window->close(); - delete window; } class BlockableWindow : public QWindow @@ -374,27 +407,55 @@ void tst_QGuiApplication::modalWindow() { int argc = 0; QGuiApplication app(argc, 0); - - BlockableWindow *window1 = new BlockableWindow; - - BlockableWindow *window2 = new BlockableWindow; - - BlockableWindow *windowModalWindow1 = new BlockableWindow; - windowModalWindow1->setTransientParent(window1); + const QRect screenGeometry = QGuiApplication::primaryScreen()->availableVirtualGeometry(); + + int x = screenGeometry.left() + spacing; + int y = screenGeometry.top() + spacing; + + QScopedPointer<BlockableWindow> window1(new BlockableWindow); + window1->setTitle(QStringLiteral("window1")); + window1->resize(windowSize, windowSize); + window1->setFramePosition(QPoint(x, y)); + x += spacing + windowSize; + + QScopedPointer<BlockableWindow> window2(new BlockableWindow); + window2->setTitle(QStringLiteral("window2")); + window2->resize(windowSize, windowSize); + window2->setFramePosition(QPoint(x, y)); + x += spacing + windowSize; + + QScopedPointer<BlockableWindow> windowModalWindow1(new BlockableWindow); + windowModalWindow1->setTitle(QStringLiteral("windowModalWindow1")); + windowModalWindow1->setTransientParent(window1.data()); windowModalWindow1->setModality(Qt::WindowModal); + windowModalWindow1->resize(windowSize, windowSize); + windowModalWindow1->setFramePosition(QPoint(x, y)); + x += spacing + windowSize; - BlockableWindow *windowModalWindow2 = new BlockableWindow; - windowModalWindow2->setTransientParent(windowModalWindow1); + QScopedPointer<BlockableWindow> windowModalWindow2(new BlockableWindow); + windowModalWindow2->setTitle(QStringLiteral("windowModalWindow2")); + windowModalWindow2->setTransientParent(windowModalWindow1.data()); windowModalWindow2->setModality(Qt::WindowModal); + windowModalWindow2->resize(windowSize, windowSize); + windowModalWindow2->setFramePosition(QPoint(x, y)); + x = screenGeometry.left() + spacing; + y += spacing + windowSize; - BlockableWindow *applicationModalWindow1 = new BlockableWindow; + QScopedPointer<BlockableWindow> applicationModalWindow1(new BlockableWindow); + applicationModalWindow1->setTitle(QStringLiteral("applicationModalWindow1")); applicationModalWindow1->setModality(Qt::ApplicationModal); + applicationModalWindow1->resize(windowSize, windowSize); + applicationModalWindow1->setFramePosition(QPoint(x, y)); + +#ifndef QT_NO_CURSOR // Get the mouse cursor out of the way since we are manually sending enter/leave. + QCursor::setPos(QPoint(x + 2 * spacing + windowSize, y)); +#endif // show the 2 windows, nothing is blocked window1->show(); window2->show(); - QVERIFY(QTest::qWaitForWindowExposed(window1)); - QVERIFY(QTest::qWaitForWindowExposed(window2)); + QVERIFY(QTest::qWaitForWindowExposed(window1.data())); + QVERIFY(QTest::qWaitForWindowExposed(window2.data())); QCOMPARE(app.modalWindow(), static_cast<QWindow *>(0)); QCOMPARE(window1->blocked, 0); QCOMPARE(window2->blocked, 0); @@ -403,14 +464,14 @@ void tst_QGuiApplication::modalWindow() QCOMPARE(applicationModalWindow1->blocked, 0); // enter mouse in window1 - QWindowSystemInterface::handleEnterEvent(window1); + QWindowSystemInterface::handleEnterEvent(window1.data()); QGuiApplication::processEvents(); QCOMPARE(window1->enters, 1); QCOMPARE(window1->leaves, 0); // show applicationModalWindow1, everything is blocked applicationModalWindow1->show(); - QCOMPARE(app.modalWindow(), applicationModalWindow1); + QCOMPARE(app.modalWindow(), applicationModalWindow1.data()); QCOMPARE(window1->blocked, 1); QCOMPARE(window2->blocked, 1); QCOMPARE(windowModalWindow1->blocked, 1); @@ -428,9 +489,9 @@ void tst_QGuiApplication::modalWindow() window1->resetCounts(); // Try entering/leaving blocked window2 - no events should reach it - QWindowSystemInterface::handleEnterEvent(window2); + QWindowSystemInterface::handleEnterEvent(window2.data()); QGuiApplication::processEvents(); - QWindowSystemInterface::handleLeaveEvent(window2); + QWindowSystemInterface::handleLeaveEvent(window2.data()); QGuiApplication::processEvents(); QCOMPARE(window2->enters, 0); QCOMPARE(window2->leaves, 0); @@ -445,14 +506,14 @@ void tst_QGuiApplication::modalWindow() QCOMPARE(applicationModalWindow1->blocked, 0); // Enter window2 - should not be blocked - QWindowSystemInterface::handleEnterEvent(window2); + QWindowSystemInterface::handleEnterEvent(window2.data()); QGuiApplication::processEvents(); QCOMPARE(window2->enters, 1); QCOMPARE(window2->leaves, 0); // show the windowModalWindow1, only window1 is blocked windowModalWindow1->show(); - QCOMPARE(app.modalWindow(), windowModalWindow1); + QCOMPARE(app.modalWindow(), windowModalWindow1.data()); QCOMPARE(window1->blocked, 1); QCOMPARE(window2->blocked, 0); QCOMPARE(windowModalWindow1->blocked, 0); @@ -470,7 +531,7 @@ void tst_QGuiApplication::modalWindow() // show the windowModalWindow2, windowModalWindow1 is blocked as well windowModalWindow2->show(); - QCOMPARE(app.modalWindow(), windowModalWindow2); + QCOMPARE(app.modalWindow(), windowModalWindow2.data()); QCOMPARE(window1->blocked, 1); QCOMPARE(window2->blocked, 0); QCOMPARE(windowModalWindow1->blocked, 1); @@ -479,7 +540,7 @@ void tst_QGuiApplication::modalWindow() // hide windowModalWindow1, nothing is unblocked windowModalWindow1->hide(); - QCOMPARE(app.modalWindow(), windowModalWindow2); + QCOMPARE(app.modalWindow(), windowModalWindow2.data()); QCOMPARE(window1->blocked, 1); QCOMPARE(window2->blocked, 0); QCOMPARE(windowModalWindow1->blocked, 1); @@ -497,7 +558,7 @@ void tst_QGuiApplication::modalWindow() // show windowModalWindow1 again, window1 is blocked windowModalWindow1->show(); - QCOMPARE(app.modalWindow(), windowModalWindow1); + QCOMPARE(app.modalWindow(), windowModalWindow1.data()); QCOMPARE(window1->blocked, 1); QCOMPARE(window2->blocked, 0); QCOMPARE(windowModalWindow1->blocked, 0); @@ -506,7 +567,7 @@ void tst_QGuiApplication::modalWindow() // show windowModalWindow2 again, windowModalWindow1 is also blocked windowModalWindow2->show(); - QCOMPARE(app.modalWindow(), windowModalWindow2); + QCOMPARE(app.modalWindow(), windowModalWindow2.data()); QCOMPARE(window1->blocked, 1); QCOMPARE(window2->blocked, 0); QCOMPARE(windowModalWindow1->blocked, 1); @@ -515,7 +576,7 @@ void tst_QGuiApplication::modalWindow() // show applicationModalWindow1, everything is blocked applicationModalWindow1->show(); - QCOMPARE(app.modalWindow(), applicationModalWindow1); + QCOMPARE(app.modalWindow(), applicationModalWindow1.data()); QCOMPARE(window1->blocked, 1); QCOMPARE(window2->blocked, 1); QCOMPARE(windowModalWindow1->blocked, 1); @@ -535,7 +596,7 @@ void tst_QGuiApplication::modalWindow() // hide applicationModalWindow1, windowModalWindow1 and window1 are blocked applicationModalWindow1->hide(); - QCOMPARE(app.modalWindow(), windowModalWindow2); + QCOMPARE(app.modalWindow(), windowModalWindow2.data()); QCOMPARE(window1->blocked, 1); QCOMPARE(window2->blocked, 0); QCOMPARE(windowModalWindow1->blocked, 1); @@ -544,7 +605,7 @@ void tst_QGuiApplication::modalWindow() // hide windowModalWindow2, window1 is blocked windowModalWindow2->hide(); - QCOMPARE(app.modalWindow(), windowModalWindow1); + QCOMPARE(app.modalWindow(), windowModalWindow1.data()); QCOMPARE(window1->blocked, 1); QCOMPARE(window2->blocked, 0); QCOMPARE(windowModalWindow1->blocked, 0); @@ -562,12 +623,6 @@ void tst_QGuiApplication::modalWindow() window2->hide(); window1->hide(); - - delete applicationModalWindow1; - delete windowModalWindow2; - delete windowModalWindow1; - delete window2; - delete window1; } void tst_QGuiApplication::quitOnLastWindowClosed() @@ -575,6 +630,7 @@ void tst_QGuiApplication::quitOnLastWindowClosed() { int argc = 0; QGuiApplication app(argc, 0); + const QRect screenGeometry = QGuiApplication::primaryScreen()->availableVirtualGeometry(); QTimer timer; timer.setInterval(100); @@ -582,18 +638,25 @@ void tst_QGuiApplication::quitOnLastWindowClosed() QSignalSpy spy(&app, SIGNAL(aboutToQuit())); QSignalSpy spy2(&timer, SIGNAL(timeout())); - QPointer<QWindow> mainWindow = new QWindow; - QPointer<QWindow> dialog = new QWindow; + QWindow mainWindow; + mainWindow.setTitle(QStringLiteral("quitOnLastWindowClosedMainWindow")); + mainWindow.resize(windowSize, windowSize); + mainWindow.setFramePosition(QPoint(screenGeometry.left() + spacing, screenGeometry.top() + spacing)); - dialog->setTransientParent(mainWindow); + QWindow dialog; + dialog.setTransientParent(&mainWindow); + dialog.setTitle(QStringLiteral("quitOnLastWindowClosedDialog")); + dialog.resize(windowSize, windowSize); + dialog.setFramePosition(QPoint(screenGeometry.left() + 2 * spacing + windowSize, screenGeometry.top() + spacing)); QVERIFY(app.quitOnLastWindowClosed()); - mainWindow->show(); - dialog->show(); + mainWindow.show(); + dialog.show(); + QVERIFY(QTest::qWaitForWindowExposed(&dialog)); timer.start(); - QTimer::singleShot(1000, mainWindow, SLOT(close())); // This should quit the application + QTimer::singleShot(1000, &mainWindow, SLOT(close())); // This should quit the application QTimer::singleShot(2000, &app, SLOT(quit())); // This makes sure we quit even if it didn't app.exec(); @@ -604,6 +667,7 @@ void tst_QGuiApplication::quitOnLastWindowClosed() { int argc = 0; QGuiApplication app(argc, 0); + const QRect screenGeometry = QGuiApplication::primaryScreen()->availableVirtualGeometry(); QTimer timer; timer.setInterval(100); @@ -611,17 +675,25 @@ void tst_QGuiApplication::quitOnLastWindowClosed() QSignalSpy spy(&app, SIGNAL(aboutToQuit())); QSignalSpy spy2(&timer, SIGNAL(timeout())); - QPointer<QWindow> mainWindow = new QWindow; - QPointer<QWindow> dialog = new QWindow; + QWindow mainWindow; + mainWindow.setTitle(QStringLiteral("quitOnLastWindowClosedMainWindow")); + mainWindow.resize(windowSize, windowSize); + mainWindow.setFramePosition(QPoint(screenGeometry.left() + spacing, screenGeometry.top() + spacing)); + + QWindow dialog; + dialog.setTitle(QStringLiteral("quitOnLastWindowClosedDialog")); + dialog.resize(windowSize, windowSize); + dialog.setFramePosition(QPoint(screenGeometry.left() + 2 * spacing + windowSize, screenGeometry.top() + spacing)); - QVERIFY(!dialog->transientParent()); + QVERIFY(!dialog.transientParent()); QVERIFY(app.quitOnLastWindowClosed()); - mainWindow->show(); - dialog->show(); + mainWindow.show(); + dialog.show(); + QVERIFY(QTest::qWaitForWindowExposed(&dialog)); timer.start(); - QTimer::singleShot(1000, mainWindow, SLOT(close())); // This should not quit the application + QTimer::singleShot(1000, &mainWindow, SLOT(close())); // This should not quit the application QTimer::singleShot(2000, &app, SLOT(quit())); app.exec(); |