Thread: [Ktutorial-commits] SF.net SVN: ktutorial:[279] trunk/ktutorial/ktutorial-library/tests/view/ Windo
Status: Alpha
Brought to you by:
danxuliu
From: <dan...@us...> - 2010-10-29 19:41:26
|
Revision: 279 http://ktutorial.svn.sourceforge.net/ktutorial/?rev=279&view=rev Author: danxuliu Date: 2010-10-29 19:41:20 +0000 (Fri, 29 Oct 2010) Log Message: ----------- Refactor tests: use QPointer instead of QSignalSpy with destroyed(QObject*) signal, and extract checks to an assertWindow(QWidget* window, QWidget* expectedParent) method. Modified Paths: -------------- trunk/ktutorial/ktutorial-library/tests/view/WindowOnTopEnforcerTest.cpp Modified: trunk/ktutorial/ktutorial-library/tests/view/WindowOnTopEnforcerTest.cpp =================================================================== --- trunk/ktutorial/ktutorial-library/tests/view/WindowOnTopEnforcerTest.cpp 2010-10-27 09:53:15 UTC (rev 278) +++ trunk/ktutorial/ktutorial-library/tests/view/WindowOnTopEnforcerTest.cpp 2010-10-29 19:41:20 UTC (rev 279) @@ -48,6 +48,8 @@ void queueAssertParent(QWidget* widget, QWidget* parent, int timeToWait); void queueAssertIsVisibleWindow(QWidget* widget, int timeToWait); + void assertWindow(QWidget* window, QWidget* expectedParent) const; + }; void WindowOnTopEnforcerTest::testConstructor() { @@ -61,28 +63,25 @@ QWidget* window = new QWidget(); window->show(); - QWidget* windowToKeepOnTop = new QWidget(window); + QPointer<QWidget> windowToKeepOnTop = new QWidget(window); windowToKeepOnTop->setWindowFlags(Qt::Window); windowToKeepOnTop->show(); WindowOnTopEnforcer* enforcer = new WindowOnTopEnforcer(windowToKeepOnTop); enforcer->setBaseWindow(window); - QSignalSpy destroyedSpy(windowToKeepOnTop, SIGNAL(destroyed(QObject*))); + assertWindow(windowToKeepOnTop, window); delete window; - QCOMPARE(destroyedSpy.count(), 1); - QVariant argument = destroyedSpy.at(0).at(0); - QCOMPARE(argument.userType(), (int)QMetaType::QObjectStar); - QCOMPARE(qvariant_cast<QObject*>(argument), windowToKeepOnTop); + QVERIFY(!windowToKeepOnTop); } void WindowOnTopEnforcerTest::testChildWindow() { QWidget* window = new QWidget(); window->show(); - QWidget* windowToKeepOnTop = new QWidget(window); + QPointer<QWidget> windowToKeepOnTop = new QWidget(window); windowToKeepOnTop->setWindowFlags(Qt::Window); windowToKeepOnTop->show(); @@ -93,31 +92,22 @@ childWindow->setWindowFlags(Qt::Window); childWindow->show(); - QCOMPARE(windowToKeepOnTop->parentWidget(), window); - QVERIFY(windowToKeepOnTop->isVisible()); - QVERIFY(windowToKeepOnTop->windowFlags() & Qt::Window); + assertWindow(windowToKeepOnTop, window); delete childWindow; - QCOMPARE(windowToKeepOnTop->parentWidget(), window); - QVERIFY(windowToKeepOnTop->isVisible()); - QVERIFY(windowToKeepOnTop->windowFlags() & Qt::Window); + assertWindow(windowToKeepOnTop, window); - QSignalSpy destroyedSpy(windowToKeepOnTop, SIGNAL(destroyed(QObject*))); - delete window; - QCOMPARE(destroyedSpy.count(), 1); - QVariant argument = destroyedSpy.at(0).at(0); - QCOMPARE(argument.userType(), (int)QMetaType::QObjectStar); - QCOMPARE(qvariant_cast<QObject*>(argument), windowToKeepOnTop); + QVERIFY(!windowToKeepOnTop); } void WindowOnTopEnforcerTest::testModalDialog() { QWidget* window = new QWidget(); window->show(); - QWidget* windowToKeepOnTop = new QWidget(window); + QPointer<QWidget> windowToKeepOnTop = new QWidget(window); windowToKeepOnTop->setWindowFlags(Qt::Window); windowToKeepOnTop->show(); @@ -137,25 +127,18 @@ timerAccept.start(); modalDialog->exec(); - QCOMPARE(windowToKeepOnTop->parentWidget(), window); - QVERIFY(windowToKeepOnTop->isVisible()); - QVERIFY(windowToKeepOnTop->windowFlags() & Qt::Window); + assertWindow(windowToKeepOnTop, window); - QSignalSpy destroyedSpy(windowToKeepOnTop, SIGNAL(destroyed(QObject*))); - delete window; - QCOMPARE(destroyedSpy.count(), 1); - QVariant argument = destroyedSpy.at(0).at(0); - QCOMPARE(argument.userType(), (int)QMetaType::QObjectStar); - QCOMPARE(qvariant_cast<QObject*>(argument), windowToKeepOnTop); + QVERIFY(!windowToKeepOnTop); } void WindowOnTopEnforcerTest::testNestedModalDialog() { QWidget* window = new QWidget(); window->show(); - QWidget* windowToKeepOnTop = new QWidget(window); + QPointer<QWidget> windowToKeepOnTop = new QWidget(window); windowToKeepOnTop->setWindowFlags(Qt::Window); windowToKeepOnTop->show(); @@ -192,25 +175,18 @@ timerAcceptNested.start(); modalDialog->exec(); - QCOMPARE(windowToKeepOnTop->parentWidget(), window); - QVERIFY(windowToKeepOnTop->isVisible()); - QVERIFY(windowToKeepOnTop->windowFlags() & Qt::Window); + assertWindow(windowToKeepOnTop, window); - QSignalSpy destroyedSpy(windowToKeepOnTop, SIGNAL(destroyed(QObject*))); - delete window; - QCOMPARE(destroyedSpy.count(), 1); - QVariant argument = destroyedSpy.at(0).at(0); - QCOMPARE(argument.userType(), (int)QMetaType::QObjectStar); - QCOMPARE(qvariant_cast<QObject*>(argument), windowToKeepOnTop); + QVERIFY(!windowToKeepOnTop); } void WindowOnTopEnforcerTest::testSeveralModalDialogs() { QWidget* window = new QWidget(); window->show(); - QWidget* windowToKeepOnTop = new QWidget(window); + QPointer<QWidget> windowToKeepOnTop = new QWidget(window); windowToKeepOnTop->setWindowFlags(Qt::Window); windowToKeepOnTop->show(); @@ -266,9 +242,7 @@ timerAcceptNested2.start(); modalDialog->exec(); - QCOMPARE(windowToKeepOnTop->parentWidget(), window); - QVERIFY(windowToKeepOnTop->isVisible()); - QVERIFY(windowToKeepOnTop->windowFlags() & Qt::Window); + assertWindow(windowToKeepOnTop, window); QDialog* modalDialog2 = new QDialog(window); QDialog* nestedModalDialog3 = new QDialog(modalDialog); @@ -300,25 +274,18 @@ timerAcceptNested3.start(); modalDialog2->exec(); - QCOMPARE(windowToKeepOnTop->parentWidget(), window); - QVERIFY(windowToKeepOnTop->isVisible()); - QVERIFY(windowToKeepOnTop->windowFlags() & Qt::Window); + assertWindow(windowToKeepOnTop, window); - QSignalSpy destroyedSpy(windowToKeepOnTop, SIGNAL(destroyed(QObject*))); - delete window; - QCOMPARE(destroyedSpy.count(), 1); - QVariant argument = destroyedSpy.at(0).at(0); - QCOMPARE(argument.userType(), (int)QMetaType::QObjectStar); - QCOMPARE(qvariant_cast<QObject*>(argument), windowToKeepOnTop); + QVERIFY(!windowToKeepOnTop); } void WindowOnTopEnforcerTest::testNestedModalDialogOnChildWindow() { QWidget* window = new QWidget(); window->show(); - QWidget* windowToKeepOnTop = new QWidget(window); + QPointer<QWidget> windowToKeepOnTop = new QWidget(window); windowToKeepOnTop->setWindowFlags(Qt::Window); windowToKeepOnTop->show(); @@ -342,18 +309,11 @@ timerAccept.start(); nestedModalDialog->exec(); - QCOMPARE(windowToKeepOnTop->parentWidget(), window); - QVERIFY(windowToKeepOnTop->isVisible()); - QVERIFY(windowToKeepOnTop->windowFlags() & Qt::Window); + assertWindow(windowToKeepOnTop, window); - QSignalSpy destroyedSpy(windowToKeepOnTop, SIGNAL(destroyed(QObject*))); - delete window; - QCOMPARE(destroyedSpy.count(), 1); - QVariant argument = destroyedSpy.at(0).at(0); - QCOMPARE(argument.userType(), (int)QMetaType::QObjectStar); - QCOMPARE(qvariant_cast<QObject*>(argument), windowToKeepOnTop); + QVERIFY(!windowToKeepOnTop); } /////////////////////////////////// Helpers //////////////////////////////////// @@ -412,8 +372,16 @@ QTimer::singleShot(timeToWait, helper, SLOT(deleteLater())); } +void WindowOnTopEnforcerTest::assertWindow(QWidget* window, + QWidget* expectedParent) const { + QVERIFY(window); + QCOMPARE(window->parentWidget(), expectedParent); + QVERIFY(window->isVisible()); + QVERIFY(window->windowFlags() & Qt::Window); } +} + QTEST_MAIN(view::WindowOnTopEnforcerTest) #include "WidgetOnTopEnforcerTest.moc" This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <dan...@us...> - 2012-06-29 15:58:06
|
Revision: 350 http://ktutorial.svn.sourceforge.net/ktutorial/?rev=350&view=rev Author: danxuliu Date: 2012-06-29 15:57:55 +0000 (Fri, 29 Jun 2012) Log Message: ----------- Set the window title to widgets and dialogs to ease debugging failures. Modified Paths: -------------- trunk/ktutorial/ktutorial-library/tests/view/WindowOnTopEnforcerTest.cpp Modified: trunk/ktutorial/ktutorial-library/tests/view/WindowOnTopEnforcerTest.cpp =================================================================== --- trunk/ktutorial/ktutorial-library/tests/view/WindowOnTopEnforcerTest.cpp 2012-06-27 21:37:57 UTC (rev 349) +++ trunk/ktutorial/ktutorial-library/tests/view/WindowOnTopEnforcerTest.cpp 2012-06-29 15:57:55 UTC (rev 350) @@ -1,5 +1,5 @@ /*************************************************************************** - * Copyright (C) 2010 by Daniel Calviño Sánchez * + * Copyright (C) 2010-2012 by Daniel Calviño Sánchez * * dan...@gm... * * * * This program is free software; you can redistribute it and/or modify * @@ -77,9 +77,11 @@ void WindowOnTopEnforcerTest::testBaseWindow() { QWidget* window = new QWidget(); + window->setWindowTitle("Window"); window->show(); QPointer<QWidget> windowToKeepOnTop = new QWidget(window); + windowToKeepOnTop->setWindowTitle("Window to keep on top"); windowToKeepOnTop->setWindowFlags(Qt::Window); windowToKeepOnTop->show(); @@ -103,9 +105,11 @@ void WindowOnTopEnforcerTest::testChildWindow() { QWidget* window = new QWidget(); + window->setWindowTitle("Window"); window->show(); QPointer<QWidget> windowToKeepOnTop = new QWidget(window); + windowToKeepOnTop->setWindowTitle("Window to keep on top"); windowToKeepOnTop->setWindowFlags(Qt::Window); windowToKeepOnTop->show(); @@ -113,6 +117,7 @@ enforcer->setBaseWindow(window); QWidget* childWindow = new QWidget(window); + childWindow->setWindowTitle("Child window"); childWindow->setWindowFlags(Qt::Window); childWindow->show(); @@ -137,9 +142,11 @@ void WindowOnTopEnforcerTest::testModalDialog() { QWidget* window = new QWidget(); + window->setWindowTitle("Window"); window->show(); QPointer<QWidget> windowToKeepOnTop = new QWidget(window); + windowToKeepOnTop->setWindowTitle("Window to keep on top"); windowToKeepOnTop->setWindowFlags(Qt::Window); windowToKeepOnTop->show(); @@ -147,6 +154,7 @@ enforcer->setBaseWindow(window); QDialog* modalDialog = new QDialog(window); + modalDialog->setWindowTitle("Modal dialog"); QTimer timerAccept; timerAccept.setSingleShot(true); @@ -168,9 +176,11 @@ void WindowOnTopEnforcerTest::testNestedModalDialog() { QWidget* window = new QWidget(); + window->setWindowTitle("Window"); window->show(); QPointer<QWidget> windowToKeepOnTop = new QWidget(window); + windowToKeepOnTop->setWindowTitle("Window to keep on top"); windowToKeepOnTop->setWindowFlags(Qt::Window); windowToKeepOnTop->show(); @@ -178,7 +188,9 @@ enforcer->setBaseWindow(window); QDialog* modalDialog = new QDialog(window); + modalDialog->setWindowTitle("Modal dialog"); QDialog* nestedModalDialog = new QDialog(modalDialog); + nestedModalDialog->setWindowTitle("Nested modal dialog"); QTimer timerAccept; timerAccept.setSingleShot(true); @@ -216,9 +228,11 @@ void WindowOnTopEnforcerTest::testSeveralModalDialogs() { QWidget* window = new QWidget(); + window->setWindowTitle("Window"); window->show(); QPointer<QWidget> windowToKeepOnTop = new QWidget(window); + windowToKeepOnTop->setWindowTitle("Window to keep on top"); windowToKeepOnTop->setWindowFlags(Qt::Window); windowToKeepOnTop->show(); @@ -226,8 +240,11 @@ enforcer->setBaseWindow(window); QDialog* modalDialog = new QDialog(window); + modalDialog->setWindowTitle("Modal dialog"); QDialog* nestedModalDialog = new QDialog(modalDialog); + nestedModalDialog->setWindowTitle("Nested modal dialog"); QDialog* nestedModalDialog2 = new QDialog(modalDialog); + nestedModalDialog2->setWindowTitle("Nested modal dialog 2"); QTimer timerAccept; timerAccept.setSingleShot(true); @@ -277,7 +294,9 @@ assertWindow(windowToKeepOnTop, window); QDialog* modalDialog2 = new QDialog(window); + modalDialog2->setWindowTitle("Modal dialog 2"); QDialog* nestedModalDialog3 = new QDialog(modalDialog); + nestedModalDialog3->setWindowTitle("Nested modal dialog 3"); QTimer timerAccept2; timerAccept2.setSingleShot(true); @@ -315,9 +334,11 @@ void WindowOnTopEnforcerTest::testNestedModalDialogOnChildWindow() { QWidget* window = new QWidget(); + window->setWindowTitle("Window"); window->show(); QPointer<QWidget> windowToKeepOnTop = new QWidget(window); + windowToKeepOnTop->setWindowTitle("Window to keep on top"); windowToKeepOnTop->setWindowFlags(Qt::Window); windowToKeepOnTop->show(); @@ -325,10 +346,12 @@ enforcer->setBaseWindow(window); QWidget* childWindow = new QWidget(window); + childWindow->setWindowTitle("Child window"); childWindow->setWindowFlags(Qt::Window); childWindow->show(); QDialog* nestedModalDialog = new QDialog(childWindow); + nestedModalDialog->setWindowTitle("Nested modal dialog"); QTimer timerAccept; timerAccept.setSingleShot(true); @@ -350,9 +373,11 @@ void WindowOnTopEnforcerTest::testModalWidget() { QWidget* window = new QWidget(); + window->setWindowTitle("Window"); window->show(); QPointer<QWidget> windowToKeepOnTop = new QWidget(window); + windowToKeepOnTop->setWindowTitle("Window to keep on top"); windowToKeepOnTop->setWindowFlags(Qt::Window); windowToKeepOnTop->show(); @@ -360,6 +385,7 @@ enforcer->setBaseWindow(window); QWidget* modalWidget = new QWidget(window); + modalWidget->setWindowTitle("Modal widget"); modalWidget->setWindowFlags(Qt::Window); modalWidget->setWindowModality(Qt::ApplicationModal); modalWidget->show(); @@ -397,9 +423,11 @@ //Hopefully I'll get enough information about this weird behavior to fill a bug. void WindowOnTopEnforcerTest::testModalWidgetSiblingOfParent() { QWidget* window = new QWidget(); + window->setWindowTitle("Window"); window->show(); QPointer<QWidget> windowToKeepOnTop = new QWidget(window); + windowToKeepOnTop->setWindowTitle("Window to keep on top"); windowToKeepOnTop->setWindowFlags(Qt::Window); windowToKeepOnTop->show(); @@ -407,11 +435,13 @@ enforcer->setBaseWindow(window); QWidget* siblingModalWidget = new QWidget(window); + siblingModalWidget->setWindowTitle("Sibling modal widget"); siblingModalWidget->setWindowFlags(Qt::Window); siblingModalWidget->setWindowModality(Qt::ApplicationModal); siblingModalWidget->show(); QWidget* modalWidget = new QWidget(window); + modalWidget->setWindowTitle("Modal widget"); modalWidget->setWindowFlags(Qt::Window); modalWidget->setWindowModality(Qt::ApplicationModal); modalWidget->show(); @@ -478,9 +508,11 @@ //This test is a synthesized version of all the things explained above. void WindowOnTopEnforcerTest::testShowModalWidgetTwice() { QWidget* window = new QWidget(); + window->setWindowTitle("Window"); window->show(); QPointer<QWidget> windowToKeepOnTop = new QWidget(window); + windowToKeepOnTop->setWindowTitle("Window to keep on top"); windowToKeepOnTop->setWindowFlags(Qt::Window); windowToKeepOnTop->show(); @@ -488,6 +520,7 @@ enforcer->setBaseWindow(window); QWidget* modalWidget = new QWidget(window); + modalWidget->setWindowTitle("Modal widget"); modalWidget->setWindowFlags(Qt::Window); modalWidget->setWindowModality(Qt::ApplicationModal); modalWidget->show(); @@ -508,9 +541,11 @@ void WindowOnTopEnforcerTest::testHideNestedModalWidgetsInOrder() { QWidget* window = new QWidget(); + window->setWindowTitle("Window"); window->show(); QPointer<QWidget> windowToKeepOnTop = new QWidget(window); + windowToKeepOnTop->setWindowTitle("Window to keep on top"); windowToKeepOnTop->setWindowFlags(Qt::Window); windowToKeepOnTop->show(); @@ -518,11 +553,13 @@ enforcer->setBaseWindow(window); QWidget* modalWidget = new QWidget(window); + modalWidget->setWindowTitle("Modal widget"); modalWidget->setWindowFlags(Qt::Window); modalWidget->setWindowModality(Qt::ApplicationModal); modalWidget->show(); QWidget* nestedModalWidget = new QWidget(modalWidget); + nestedModalWidget->setWindowTitle("Nested modal widget"); nestedModalWidget->setWindowFlags(Qt::Window); nestedModalWidget->setWindowModality(Qt::ApplicationModal); nestedModalWidget->show(); @@ -548,9 +585,11 @@ void WindowOnTopEnforcerTest::testHideNestedModalWidgetsInReverseOrder() { QWidget* window = new QWidget(); + window->setWindowTitle("Window"); window->show(); QPointer<QWidget> windowToKeepOnTop = new QWidget(window); + windowToKeepOnTop->setWindowTitle("Window to keep on top"); windowToKeepOnTop->setWindowFlags(Qt::Window); windowToKeepOnTop->show(); @@ -558,11 +597,13 @@ enforcer->setBaseWindow(window); QWidget* modalWidget = new QWidget(window); + modalWidget->setWindowTitle("Modal widget"); modalWidget->setWindowFlags(Qt::Window); modalWidget->setWindowModality(Qt::ApplicationModal); modalWidget->show(); QWidget* nestedModalWidget = new QWidget(modalWidget); + nestedModalWidget->setWindowTitle("Nested modal widget"); nestedModalWidget->setWindowFlags(Qt::Window); nestedModalWidget->setWindowModality(Qt::ApplicationModal); nestedModalWidget->show(); @@ -588,9 +629,11 @@ void WindowOnTopEnforcerTest::testShowNestedModalWidgetsInOrder() { QWidget* window = new QWidget(); + window->setWindowTitle("Window"); window->show(); QPointer<QWidget> windowToKeepOnTop = new QWidget(window); + windowToKeepOnTop->setWindowTitle("Window to keep on top"); windowToKeepOnTop->setWindowFlags(Qt::Window); windowToKeepOnTop->show(); @@ -598,11 +641,13 @@ enforcer->setBaseWindow(window); QWidget* modalWidget = new QWidget(window); + modalWidget->setWindowTitle("Modal widget"); modalWidget->setWindowFlags(Qt::Window); modalWidget->setWindowModality(Qt::ApplicationModal); modalWidget->show(); QWidget* nestedModalWidget = new QWidget(modalWidget); + nestedModalWidget->setWindowTitle("Nested modal widget"); nestedModalWidget->setWindowFlags(Qt::Window); nestedModalWidget->setWindowModality(Qt::ApplicationModal); nestedModalWidget->show(); @@ -640,9 +685,11 @@ void WindowOnTopEnforcerTest::testShowNestedModalWidgetsInReverseOrder() { QWidget* window = new QWidget(); + window->setWindowTitle("Window"); window->show(); QPointer<QWidget> windowToKeepOnTop = new QWidget(window); + windowToKeepOnTop->setWindowTitle("Window to keep on top"); windowToKeepOnTop->setWindowFlags(Qt::Window); windowToKeepOnTop->show(); @@ -650,11 +697,13 @@ enforcer->setBaseWindow(window); QWidget* modalWidget = new QWidget(window); + modalWidget->setWindowTitle("Modal widget"); modalWidget->setWindowFlags(Qt::Window); modalWidget->setWindowModality(Qt::ApplicationModal); modalWidget->show(); QWidget* nestedModalWidget = new QWidget(modalWidget); + nestedModalWidget->setWindowTitle("Nested modal widget"); nestedModalWidget->setWindowFlags(Qt::Window); nestedModalWidget->setWindowModality(Qt::ApplicationModal); nestedModalWidget->show(); @@ -692,9 +741,11 @@ void WindowOnTopEnforcerTest::testShowNestedModalWidgetsInMixedOrder() { QWidget* window = new QWidget(); + window->setWindowTitle("Window"); window->show(); QPointer<QWidget> windowToKeepOnTop = new QWidget(window); + windowToKeepOnTop->setWindowTitle("Window to keep on top"); windowToKeepOnTop->setWindowFlags(Qt::Window); windowToKeepOnTop->show(); @@ -702,22 +753,26 @@ enforcer->setBaseWindow(window); QWidget* modalWidget = new QWidget(window); + modalWidget->setWindowTitle("Modal widget"); modalWidget->setWindowFlags(Qt::Window); modalWidget->setWindowModality(Qt::ApplicationModal); modalWidget->show(); QWidget* nestedModalWidget = new QWidget(modalWidget); + nestedModalWidget->setWindowTitle("Nested modal widget"); nestedModalWidget->setWindowFlags(Qt::Window); nestedModalWidget->setWindowModality(Qt::ApplicationModal); nestedModalWidget->show(); QWidget* nestedNestedModalWidget = new QWidget(nestedModalWidget); + nestedNestedModalWidget->setWindowTitle("Nested nested modal widget"); nestedNestedModalWidget->setWindowFlags(Qt::Window); nestedNestedModalWidget->setWindowModality(Qt::ApplicationModal); nestedNestedModalWidget->show(); QWidget* nestedNestedNestedModalWidget = new QWidget(nestedNestedModalWidget); + nestedNestedNestedModalWidget->setWindowTitle("Nested nested nested modal widget"); nestedNestedNestedModalWidget->setWindowFlags(Qt::Window); nestedNestedNestedModalWidget->setWindowModality(Qt::ApplicationModal); nestedNestedNestedModalWidget->show(); @@ -794,7 +849,12 @@ public slots: void assertParent() { - QCOMPARE(mAssertWidget->parentWidget(), mAssertParent); + QString message = "\nActual: " + + mAssertWidget->parentWidget()->windowTitle() + + "\nExpected: " + mAssertParent->windowTitle() + + "\n"; + QVERIFY2(mAssertWidget->parentWidget() == mAssertParent, + message.toStdString().c_str()); } void assertIsVisibleWindow() { @@ -828,7 +888,10 @@ void WindowOnTopEnforcerTest::assertWindow(QWidget* window, QWidget* expectedParent) const { QVERIFY(window); - QCOMPARE(window->parentWidget(), expectedParent); + QString message = "\nActual: " + window->parentWidget()->windowTitle() + + "\nExpected: " + expectedParent->windowTitle() + "\n"; + QVERIFY2(window->parentWidget() == expectedParent, + message.toStdString().c_str()); QVERIFY(window->isVisible()); QVERIFY(window->windowFlags() & Qt::Window); } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <dan...@us...> - 2012-06-29 16:05:51
|
Revision: 351 http://ktutorial.svn.sourceforge.net/ktutorial/?rev=351&view=rev Author: danxuliu Date: 2012-06-29 16:05:44 +0000 (Fri, 29 Jun 2012) Log Message: ----------- Add skipped failing test as reference of an unsolved bug: when setting the base window in the WindowOnTopEnforcer only the base window can be visible. If there is a modal widget or modal dialog visible (for example, if a tutorial is tested in the editor when the target application is showing a modal dialog), the window to keep on top is not reparented properly, and it appears on top only of its base window, but not on top of the modal widgets or modal dialogs. I have not found a fix for it yet. Modified Paths: -------------- trunk/ktutorial/ktutorial-library/tests/view/WindowOnTopEnforcerTest.cpp Modified: trunk/ktutorial/ktutorial-library/tests/view/WindowOnTopEnforcerTest.cpp =================================================================== --- trunk/ktutorial/ktutorial-library/tests/view/WindowOnTopEnforcerTest.cpp 2012-06-29 15:57:55 UTC (rev 350) +++ trunk/ktutorial/ktutorial-library/tests/view/WindowOnTopEnforcerTest.cpp 2012-06-29 16:05:44 UTC (rev 351) @@ -59,6 +59,8 @@ void testShowNestedModalWidgetsInMixedOrder(); + void testSetBaseWindowAfterSeveralModalWidgetsWereShown(); + private: void queueAssertParent(QWidget* widget, QWidget* parent, int timeToWait); @@ -826,6 +828,101 @@ QVERIFY(!windowToKeepOnTop); } +//There is a limitation in the current behavior of WindowOnTopEnforcer which can +//show up as a bug when testing a tutorial from the editor. The limitation is +//that, to work properly, the base window must be set in the WindowOnTopEnforcer +//when there is only one window. If there are modal widgets or modal dialogs the +//reparenting does not work as it should, and the widget to keep on top of the +//others is only kept on top of the main window, but below the modal widgets or +//modal dialogs. This can happen, for example, if a tutorial is tested in the +//edtior when the target application is showing a modal dialog. +//The reason is that the reparenting system works using a stack that stores +//the order in which modal widgets or modal dialogs were opened, so it can +//reparent them back to the proper one when they are hidden. That stack is built +//once the base window was set by spying the show and hidden events of its child +//windows. However, I have not found any way to initialize it with the proper +//order of windows if they are already visible when the base window is set. +//The modal stack is stored by Qt in the variable QWidgetList* qt_modal_stack +//(declared in qapplication.cpp). Alas, this variable seems to be not exported, +//so it can not be used to initialize the WindowOnTopEnforcer stack. +//I have tried another approach spying WindowBlocked and WindowUnblocked events +//and not using a stack at all, but I was not able to come with anything that +//worked in all the cases. +//So... I just keep this test here as a reference of something that should be +//fixed, but that unfortunately I do not know how to do it :( +void WindowOnTopEnforcerTest:: + testSetBaseWindowAfterSeveralModalWidgetsWereShown() { + QSKIP("Pending bug: WindowOnTopEnforcer does not work properly if there \ +are modal widgets already shown when the base window is set. However, I have \ +not found a fix for it yet :(", SkipAll); + + QWidget* window = new QWidget(); + window->setWindowTitle("Window"); + window->show(); + + QPointer<QWidget> windowToKeepOnTop = new QWidget(window); + windowToKeepOnTop->setWindowTitle("Window to keep on top"); + windowToKeepOnTop->setWindowFlags(Qt::Dialog); + windowToKeepOnTop->show(); + + QWidget* siblingModalWidget = new QWidget(window); + siblingModalWidget->setWindowTitle("Sibling modal widget"); + siblingModalWidget->setWindowFlags(Qt::Window); + siblingModalWidget->setWindowModality(Qt::ApplicationModal); + siblingModalWidget->show(); + + QWidget* modalWidget = new QWidget(window); + modalWidget->setWindowTitle("Modal widget"); + modalWidget->setWindowFlags(Qt::Window); + modalWidget->setWindowModality(Qt::ApplicationModal); + modalWidget->show(); + + QWidget* nestedModalWidget = new QWidget(window); + nestedModalWidget->setWindowTitle("Nested modal widget"); + nestedModalWidget->setWindowFlags(Qt::Window); + nestedModalWidget->setWindowModality(Qt::ApplicationModal); + nestedModalWidget->show(); + + QWidget* nestedSiblingModalWidget = new QWidget(siblingModalWidget); + nestedSiblingModalWidget->setWindowTitle("Nested sibling modal widget"); + nestedSiblingModalWidget->setWindowFlags(Qt::Window); + nestedSiblingModalWidget->setWindowModality(Qt::ApplicationModal); + nestedSiblingModalWidget->show(); + + WindowOnTopEnforcer* enforcer = new WindowOnTopEnforcer(windowToKeepOnTop); + enforcer->setBaseWindow(window); + + assertWindow(windowToKeepOnTop, nestedSiblingModalWidget); + + nestedSiblingModalWidget->hide(); + + assertWindow(windowToKeepOnTop, nestedModalWidget); + + nestedSiblingModalWidget->show(); + + assertWindow(windowToKeepOnTop, nestedSiblingModalWidget); + + delete nestedSiblingModalWidget; + + assertWindow(windowToKeepOnTop, nestedModalWidget); + + delete nestedModalWidget; + + assertWindow(windowToKeepOnTop, modalWidget); + + delete modalWidget; + + assertWindow(windowToKeepOnTop, siblingModalWidget); + + delete siblingModalWidget; + + assertWindow(windowToKeepOnTop, window); + + delete window; + + QVERIFY(!windowToKeepOnTop); +} + /////////////////////////////////// Helpers //////////////////////////////////// //The dialogs are modal, so they won't return to the test code until they are This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <dan...@us...> - 2012-08-20 12:30:03
|
Revision: 379 http://ktutorial.svn.sourceforge.net/ktutorial/?rev=379&view=rev Author: danxuliu Date: 2012-08-20 12:29:53 +0000 (Mon, 20 Aug 2012) Log Message: ----------- Fix Krazy2 doublequote_chars issues. Modified Paths: -------------- trunk/ktutorial/ktutorial-library/tests/view/WindowOnTopEnforcerTest.cpp Modified: trunk/ktutorial/ktutorial-library/tests/view/WindowOnTopEnforcerTest.cpp =================================================================== --- trunk/ktutorial/ktutorial-library/tests/view/WindowOnTopEnforcerTest.cpp 2012-08-20 12:29:17 UTC (rev 378) +++ trunk/ktutorial/ktutorial-library/tests/view/WindowOnTopEnforcerTest.cpp 2012-08-20 12:29:53 UTC (rev 379) @@ -987,7 +987,7 @@ QWidget* expectedParent) const { QVERIFY(window); QString message = "\nActual: " + window->parentWidget()->windowTitle() + - "\nExpected: " + expectedParent->windowTitle() + "\n"; + "\nExpected: " + expectedParent->windowTitle() + '\n'; QVERIFY2(window->parentWidget() == expectedParent, message.toStdString().c_str()); QVERIFY(window->isVisible()); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |