summaryrefslogtreecommitdiffstats
path: root/tests/auto/widgets/kernel/qapplication
diff options
context:
space:
mode:
authorQt Forward Merge Bot <qt_forward_merge_bot@qt-project.org>2020-04-07 01:00:12 +0200
committerFabian Kosmale <fabian.kosmale@qt.io>2020-04-08 20:11:39 +0200
commit8823bb8d306d78dd6a2e121a708dc607beff58c8 (patch)
tree5ca170aa36aa1381b0f31dae6709fd2ce68be344 /tests/auto/widgets/kernel/qapplication
parent5422fb79486a1818d6355d75f019fe63120a43d0 (diff)
parent14c55e29794b4f1d6e010fdf7082ef55cbf8f275 (diff)
Merge remote-tracking branch 'origin/5.15' into dev
Conflicts: examples/opengl/doc/src/cube.qdoc src/corelib/global/qlibraryinfo.cpp src/corelib/text/qbytearray_p.h src/corelib/text/qlocale_data_p.h src/corelib/time/qhijricalendar_data_p.h src/corelib/time/qjalalicalendar_data_p.h src/corelib/time/qromancalendar_data_p.h src/network/ssl/qsslcertificate.h src/widgets/doc/src/graphicsview.qdoc src/widgets/widgets/qcombobox.cpp src/widgets/widgets/qcombobox.h tests/auto/corelib/tools/qscopeguard/tst_qscopeguard.cpp tests/auto/widgets/widgets/qcombobox/tst_qcombobox.cpp tests/benchmarks/corelib/io/qdiriterator/qdiriterator.pro tests/manual/diaglib/debugproxystyle.cpp tests/manual/diaglib/qwidgetdump.cpp tests/manual/diaglib/qwindowdump.cpp tests/manual/diaglib/textdump.cpp util/locale_database/cldr2qlocalexml.py util/locale_database/qlocalexml.py util/locale_database/qlocalexml2cpp.py Resolution of util/locale_database/ are based on: https://codereview.qt-project.org/c/qt/qtbase/+/294250 and src/corelib/{text,time}/*_data_p.h were then regenerated by running those scripts. Updated CMakeLists.txt in each of tests/auto/corelib/serialization/qcborstreamreader/ tests/auto/corelib/serialization/qcborvalue/ tests/auto/gui/kernel/ and generated new ones in each of tests/auto/gui/kernel/qaddpostroutine/ tests/auto/gui/kernel/qhighdpiscaling/ tests/libfuzzer/corelib/text/qregularexpression/optimize/ tests/libfuzzer/gui/painting/qcolorspace/fromiccprofile/ tests/libfuzzer/gui/text/qtextdocument/sethtml/ tests/libfuzzer/gui/text/qtextdocument/setmarkdown/ tests/libfuzzer/gui/text/qtextlayout/beginlayout/ by running util/cmake/pro2cmake.py on their changed .pro files. Changed target name in tests/auto/gui/kernel/qaction/qaction.pro tests/auto/gui/kernel/qaction/qactiongroup.pro tests/auto/gui/kernel/qshortcut/qshortcut.pro to ensure unique target names for CMake Changed tst_QComboBox::currentIndex to not test the currentIndexChanged(QString), as that one does not exist in Qt 6 anymore. Change-Id: I9a85705484855ae1dc874a81f49d27a50b0dcff7
Diffstat (limited to 'tests/auto/widgets/kernel/qapplication')
-rw-r--r--tests/auto/widgets/kernel/qapplication/tst_qapplication.cpp157
1 files changed, 88 insertions, 69 deletions
diff --git a/tests/auto/widgets/kernel/qapplication/tst_qapplication.cpp b/tests/auto/widgets/kernel/qapplication/tst_qapplication.cpp
index 8a5eff3fac..9ab7e4e315 100644
--- a/tests/auto/widgets/kernel/qapplication/tst_qapplication.cpp
+++ b/tests/auto/widgets/kernel/qapplication/tst_qapplication.cpp
@@ -93,7 +93,11 @@ private slots:
void quitOnLastWindowClosed();
void closeAllWindows();
void testDeleteLater();
- void testDeleteLaterProcessEvents();
+ void testDeleteLaterProcessEvents1();
+ void testDeleteLaterProcessEvents2();
+ void testDeleteLaterProcessEvents3();
+ void testDeleteLaterProcessEvents4();
+ void testDeleteLaterProcessEvents5();
#if QT_CONFIG(library)
void libraryPaths();
@@ -1225,6 +1229,11 @@ void DeleteLaterWidget::runTest()
QCoreApplication::processEvents();
+ // At this point, the event queue is empty. As we want a deferred
+ // deletion to occur before the timer event, we should provoke the
+ // event dispatcher for the next spin.
+ QCoreApplication::eventDispatcher()->interrupt();
+
QVERIFY(!stillAlive); // verify at the end to make test terminate
}
@@ -1254,8 +1263,10 @@ void tst_QApplication::testDeleteLater()
QObject *stillAlive = wgt->findChild<QObject*>("deleteLater");
QVERIFY(stillAlive);
+ wgt->show();
QCoreApplication::exec();
+ QVERIFY(wgt->isHidden());
delete wgt;
}
@@ -1333,10 +1344,8 @@ public slots:
}
};
-void tst_QApplication::testDeleteLaterProcessEvents()
+void tst_QApplication::testDeleteLaterProcessEvents1()
{
- int argc = 0;
-
// Calling processEvents() with no event dispatcher does nothing.
QObject *object = new QObject;
QPointer<QObject> p(object);
@@ -1344,75 +1353,85 @@ void tst_QApplication::testDeleteLaterProcessEvents()
QApplication::processEvents();
QVERIFY(p);
delete object;
+}
- {
- QApplication app(argc, nullptr);
- // If you call processEvents() with an event dispatcher present, but
- // outside any event loops, deferred deletes are not processed unless
- // sendPostedEvents(0, DeferredDelete) is called.
- object = new QObject;
- p = object;
- object->deleteLater();
- QCoreApplication::processEvents();
- QVERIFY(p);
- QCoreApplication::sendPostedEvents(nullptr, QEvent::DeferredDelete);
- QVERIFY(!p);
-
- // If you call deleteLater() on an object when there is no parent
- // event loop, and then enter an event loop, the object will get
- // deleted.
- object = new QObject;
- p = object;
- object->deleteLater();
- QEventLoop loop;
- QTimer::singleShot(1000, &loop, &QEventLoop::quit);
- loop.exec();
- QVERIFY(!p);
- }
- {
- // When an object is in an event loop, then calls deleteLater() and enters
- // an event loop recursively, it should not die until the parent event
- // loop continues.
- QApplication app(argc, nullptr);
- QEventLoop loop;
- EventLoopNester *nester = new EventLoopNester;
- p = nester;
- QTimer::singleShot(3000, &loop, &QEventLoop::quit);
- QTimer::singleShot(0, nester, &EventLoopNester::deleteLaterAndEnterLoop);
-
- loop.exec();
- QVERIFY(!p);
- }
-
- {
- // When the event loop that calls deleteLater() is exited
- // immediately, the object should die when returning to the
- // parent event loop
- QApplication app(argc, nullptr);
- QEventLoop loop;
- EventLoopNester *nester = new EventLoopNester;
- p = nester;
- QTimer::singleShot(3000, &loop, &QEventLoop::quit);
- QTimer::singleShot(0, nester, &EventLoopNester::deleteLaterAndExitLoop);
+void tst_QApplication::testDeleteLaterProcessEvents2()
+{
+ int argc = 0;
+ QApplication app(argc, nullptr);
+ // If you call processEvents() with an event dispatcher present, but
+ // outside any event loops, deferred deletes are not processed unless
+ // sendPostedEvents(0, DeferredDelete) is called.
+ auto object = new QObject;
+ QPointer<QObject> p(object);
+ object->deleteLater();
+ QCoreApplication::processEvents();
+ QVERIFY(p);
+ QCoreApplication::sendPostedEvents(nullptr, QEvent::DeferredDelete);
+ QVERIFY(!p);
+
+ // If you call deleteLater() on an object when there is no parent
+ // event loop, and then enter an event loop, the object will get
+ // deleted.
+ QEventLoop loop;
+ object = new QObject;
+ connect(object, &QObject::destroyed, &loop, &QEventLoop::quit);
+ p = object;
+ object->deleteLater();
+ QTimer::singleShot(1000, &loop, &QEventLoop::quit);
+ loop.exec();
+ QVERIFY(!p);
+}
- loop.exec();
- QVERIFY(!p);
- }
+void tst_QApplication::testDeleteLaterProcessEvents3()
+{
+ int argc = 0;
+ // When an object is in an event loop, then calls deleteLater() and enters
+ // an event loop recursively, it should not die until the parent event
+ // loop continues.
+ QApplication app(argc, nullptr);
+ QEventLoop loop;
+ EventLoopNester *nester = new EventLoopNester;
+ QPointer<QObject> p(nester);
+ QTimer::singleShot(3000, &loop, &QEventLoop::quit);
+ QTimer::singleShot(0, nester, &EventLoopNester::deleteLaterAndEnterLoop);
+
+ loop.exec();
+ QVERIFY(!p);
+}
- {
- // when the event loop that calls deleteLater() also calls
- // processEvents() immediately afterwards, the object should
- // not die until the parent loop continues
- QApplication app(argc, nullptr);
- QEventLoop loop;
- EventLoopNester *nester = new EventLoopNester();
- p = nester;
- QTimer::singleShot(3000, &loop, &QEventLoop::quit);
- QTimer::singleShot(0, nester, &EventLoopNester::deleteLaterAndProcessEvents);
+void tst_QApplication::testDeleteLaterProcessEvents4()
+{
+ int argc = 0;
+ // When the event loop that calls deleteLater() is exited
+ // immediately, the object should die when returning to the
+ // parent event loop
+ QApplication app(argc, nullptr);
+ QEventLoop loop;
+ EventLoopNester *nester = new EventLoopNester;
+ QPointer<QObject> p(nester);
+ QTimer::singleShot(3000, &loop, &QEventLoop::quit);
+ QTimer::singleShot(0, nester, &EventLoopNester::deleteLaterAndExitLoop);
+
+ loop.exec();
+ QVERIFY(!p);
+}
- loop.exec();
- QVERIFY(!p);
- }
+void tst_QApplication::testDeleteLaterProcessEvents5()
+{
+ // when the event loop that calls deleteLater() also calls
+ // processEvents() immediately afterwards, the object should
+ // not die until the parent loop continues
+ int argc = 0;
+ QApplication app(argc, nullptr);
+ QEventLoop loop;
+ EventLoopNester *nester = new EventLoopNester();
+ QPointer<QObject> p(nester);
+ QTimer::singleShot(3000, &loop, &QEventLoop::quit);
+ QTimer::singleShot(0, nester, &EventLoopNester::deleteLaterAndProcessEvents);
+
+ loop.exec();
+ QVERIFY(!p);
}
/*