summaryrefslogtreecommitdiffstats
path: root/tests/auto/gui
diff options
context:
space:
mode:
authorBradley T. Hughes <bradley.hughes@nokia.com>2012-04-04 20:41:50 +0200
committerQt by Nokia <qt-info@nokia.com>2012-04-11 16:18:07 +0200
commita266c22bb834695c4d2d6b5a491ca6786d2b2438 (patch)
tree2dbe7ea10f876b9aaa6e2633f2bb9246c1c321b6 /tests/auto/gui
parentad1bd1563f3f65d0f7b65687af2ade42f7f9f3d9 (diff)
Add tst_QGuiApplication::modalWindow()
This tests that modalWindow() returns the expected value and that QEvent::WindowBlocked and QEvent::WindowUnblocked are sent correctly when modal windows are hidden and shown. Change-Id: I872f35e0240c928566ab35fa5764fad6cfda6db6 Reviewed-by: Friedemann Kleint <Friedemann.Kleint@nokia.com> Reviewed-by: Samuel Rødal <samuel.rodal@nokia.com>
Diffstat (limited to 'tests/auto/gui')
-rw-r--r--tests/auto/gui/kernel/qguiapplication/tst_qguiapplication.cpp179
1 files changed, 179 insertions, 0 deletions
diff --git a/tests/auto/gui/kernel/qguiapplication/tst_qguiapplication.cpp b/tests/auto/gui/kernel/qguiapplication/tst_qguiapplication.cpp
index 1dc2e551b4..c0242d95c5 100644
--- a/tests/auto/gui/kernel/qguiapplication/tst_qguiapplication.cpp
+++ b/tests/auto/gui/kernel/qguiapplication/tst_qguiapplication.cpp
@@ -56,6 +56,7 @@ private slots:
void abortQuitOnShow();
void changeFocusWindow();
void keyboardModifiers();
+ void modalWindow();
};
class DummyWindow : public QWindow
@@ -315,5 +316,183 @@ void tst_QGuiApplication::keyboardModifiers()
delete window;
}
+class BlockableWindow : public QWindow
+{
+ Q_OBJECT
+public:
+ int blocked;
+
+ inline BlockableWindow()
+ : QWindow()
+ {
+ blocked = false;
+ }
+
+ bool event(QEvent *e)
+ {
+ switch (e->type()) {
+ case QEvent::WindowBlocked:
+ ++blocked;
+ break;
+ case QEvent::WindowUnblocked:
+ --blocked;
+ break;
+ default:
+ break;
+ }
+ return QWindow::event(e);
+ }
+};
+
+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);
+ windowModalWindow1->setWindowModality(Qt::WindowModal);
+
+ BlockableWindow *windowModalWindow2 = new BlockableWindow;
+ windowModalWindow2->setTransientParent(windowModalWindow1);
+ windowModalWindow2->setWindowModality(Qt::WindowModal);
+
+ BlockableWindow *applicationModalWindow1 = new BlockableWindow;
+ applicationModalWindow1->setWindowModality(Qt::ApplicationModal);
+
+ // show the 2 windows, nothing is blocked
+ window1->show();
+ window2->show();
+ QTest::qWaitForWindowShown(window1);
+ QTest::qWaitForWindowShown(window2);
+ QCOMPARE(app.modalWindow(), static_cast<QWindow *>(0));
+ QCOMPARE(window1->blocked, 0);
+ QCOMPARE(window2->blocked, 0);
+ QCOMPARE(windowModalWindow1->blocked, 0);
+ QCOMPARE(windowModalWindow2->blocked, 0);
+ QCOMPARE(applicationModalWindow1->blocked, 0);
+
+ // show applicationModalWindow1, everything is blocked
+ applicationModalWindow1->show();
+ QCOMPARE(app.modalWindow(), applicationModalWindow1);
+ QCOMPARE(window1->blocked, 1);
+ QCOMPARE(window2->blocked, 1);
+ QCOMPARE(windowModalWindow1->blocked, 1);
+ QCOMPARE(windowModalWindow2->blocked, 1);
+ QCOMPARE(applicationModalWindow1->blocked, 0);
+
+ // everything is unblocked when applicationModalWindow1 is hidden
+ applicationModalWindow1->hide();
+ QCOMPARE(app.modalWindow(), static_cast<QWindow *>(0));
+ QCOMPARE(window1->blocked, 0);
+ QCOMPARE(window2->blocked, 0);
+ QCOMPARE(windowModalWindow1->blocked, 0);
+ QCOMPARE(windowModalWindow2->blocked, 0);
+ QCOMPARE(applicationModalWindow1->blocked, 0);
+
+ // show the windowModalWindow1, only window1 is blocked
+ windowModalWindow1->show();
+ QCOMPARE(app.modalWindow(), windowModalWindow1);
+ QCOMPARE(window1->blocked, 1);
+ QCOMPARE(window2->blocked, 0);
+ QCOMPARE(windowModalWindow1->blocked, 0);
+ QCOMPARE(windowModalWindow2->blocked, 0);
+ QCOMPARE(applicationModalWindow1->blocked, 0);
+
+ // show the windowModalWindow2, windowModalWindow1 is blocked as well
+ windowModalWindow2->show();
+ QCOMPARE(app.modalWindow(), windowModalWindow2);
+ QCOMPARE(window1->blocked, 1);
+ QCOMPARE(window2->blocked, 0);
+ QCOMPARE(windowModalWindow1->blocked, 1);
+ QCOMPARE(windowModalWindow2->blocked, 0);
+ QCOMPARE(applicationModalWindow1->blocked, 0);
+
+ // hide windowModalWindow1, nothing is unblocked
+ windowModalWindow1->hide();
+ QCOMPARE(app.modalWindow(), windowModalWindow2);
+ QCOMPARE(window1->blocked, 1);
+ QCOMPARE(window2->blocked, 0);
+ QCOMPARE(windowModalWindow1->blocked, 1);
+ QCOMPARE(windowModalWindow2->blocked, 0);
+ QCOMPARE(applicationModalWindow1->blocked, 0);
+
+ // hide windowModalWindow2, windowModalWindow1 and window1 are unblocked
+ windowModalWindow2->hide();
+ QCOMPARE(app.modalWindow(), static_cast<QWindow *>(0));
+ QCOMPARE(window1->blocked, 0);
+ QCOMPARE(window2->blocked, 0);
+ QCOMPARE(windowModalWindow1->blocked, 0);
+ QCOMPARE(windowModalWindow2->blocked, 0);
+ QCOMPARE(applicationModalWindow1->blocked, 0);
+
+ // show windowModalWindow1 again, window1 is blocked
+ windowModalWindow1->show();
+ QCOMPARE(app.modalWindow(), windowModalWindow1);
+ QCOMPARE(window1->blocked, 1);
+ QCOMPARE(window2->blocked, 0);
+ QCOMPARE(windowModalWindow1->blocked, 0);
+ QCOMPARE(windowModalWindow2->blocked, 0);
+ QCOMPARE(applicationModalWindow1->blocked, 0);
+
+ // show windowModalWindow2 again, windowModalWindow1 is also blocked
+ windowModalWindow2->show();
+ QCOMPARE(app.modalWindow(), windowModalWindow2);
+ QCOMPARE(window1->blocked, 1);
+ QCOMPARE(window2->blocked, 0);
+ QCOMPARE(windowModalWindow1->blocked, 1);
+ QCOMPARE(windowModalWindow2->blocked, 0);
+ QCOMPARE(applicationModalWindow1->blocked, 0);
+
+ // show applicationModalWindow1, everything is blocked
+ applicationModalWindow1->show();
+ QCOMPARE(app.modalWindow(), applicationModalWindow1);
+ QCOMPARE(window1->blocked, 1);
+ QCOMPARE(window2->blocked, 1);
+ QCOMPARE(windowModalWindow1->blocked, 1);
+ QCOMPARE(windowModalWindow2->blocked, 1);
+ QCOMPARE(applicationModalWindow1->blocked, 0);
+
+ // hide applicationModalWindow1, windowModalWindow1 and window1 are blocked
+ applicationModalWindow1->hide();
+ QCOMPARE(app.modalWindow(), windowModalWindow2);
+ QCOMPARE(window1->blocked, 1);
+ QCOMPARE(window2->blocked, 0);
+ QCOMPARE(windowModalWindow1->blocked, 1);
+ QCOMPARE(windowModalWindow2->blocked, 0);
+ QCOMPARE(applicationModalWindow1->blocked, 0);
+
+ // hide windowModalWindow2, window1 is blocked
+ windowModalWindow2->hide();
+ QCOMPARE(app.modalWindow(), windowModalWindow1);
+ QCOMPARE(window1->blocked, 1);
+ QCOMPARE(window2->blocked, 0);
+ QCOMPARE(windowModalWindow1->blocked, 0);
+ QCOMPARE(windowModalWindow2->blocked, 0);
+ QCOMPARE(applicationModalWindow1->blocked, 0);
+
+ // hide windowModalWindow1, everything is unblocked
+ windowModalWindow1->hide();
+ QCOMPARE(app.modalWindow(), static_cast<QWindow *>(0));
+ QCOMPARE(window1->blocked, 0);
+ QCOMPARE(window2->blocked, 0);
+ QCOMPARE(windowModalWindow1->blocked, 0);
+ QCOMPARE(windowModalWindow2->blocked, 0);
+ QCOMPARE(applicationModalWindow1->blocked, 0);
+
+ window2->hide();
+ window1->hide();
+
+ delete applicationModalWindow1;
+ delete windowModalWindow2;
+ delete windowModalWindow1;
+ delete window2;
+ delete window1;
+}
+
QTEST_APPLESS_MAIN(tst_QGuiApplication)
#include "tst_qguiapplication.moc"