diff options
Diffstat (limited to 'tests/auto/corelib/kernel/qcoreapplication')
-rw-r--r-- | tests/auto/corelib/kernel/qcoreapplication/tst_qcoreapplication.cpp | 40 | ||||
-rw-r--r-- | tests/auto/corelib/kernel/qcoreapplication/tst_qcoreapplication.h | 3 |
2 files changed, 43 insertions, 0 deletions
diff --git a/tests/auto/corelib/kernel/qcoreapplication/tst_qcoreapplication.cpp b/tests/auto/corelib/kernel/qcoreapplication/tst_qcoreapplication.cpp index 8567d8c3b9..b9772f6922 100644 --- a/tests/auto/corelib/kernel/qcoreapplication/tst_qcoreapplication.cpp +++ b/tests/auto/corelib/kernel/qcoreapplication/tst_qcoreapplication.cpp @@ -36,6 +36,10 @@ #include <private/qeventloop_p.h> #include <private/qthread_p.h> +#ifdef Q_OS_WIN +#include <QtCore/qt_windows.h> +#endif + typedef QCoreApplication TestApplication; class EventSpy : public QObject @@ -617,6 +621,42 @@ void tst_QCoreApplication::processEventsAlwaysSendsPostedEvents() } while (t.elapsed() < 1000); } +#ifdef Q_OS_WIN +void tst_QCoreApplication::sendPostedEventsInNativeLoop() +{ + int argc = 1; + char *argv[] = { const_cast<char*>(QTest::currentAppName()) }; + TestApplication app(argc, argv); + + bool signalReceived = false; + + // Post a message to the queue + QMetaObject::invokeMethod(this, [&signalReceived]() { + signalReceived = true; + }, Qt::QueuedConnection); + + QElapsedTimer elapsedTimer; + elapsedTimer.start(); + + // Exec own message loop + MSG msg; + forever { + if (elapsedTimer.hasExpired(3000) || signalReceived) + break; + + if (!::PeekMessage(&msg, NULL, 0, 0, PM_REMOVE)) { + QThread::msleep(100); + continue; + } + + ::TranslateMessage(&msg); + ::DispatchMessage(&msg); + } + + QVERIFY(signalReceived); +} +#endif // Q_OS_WIN + class QuitBlocker : public QObject { Q_OBJECT diff --git a/tests/auto/corelib/kernel/qcoreapplication/tst_qcoreapplication.h b/tests/auto/corelib/kernel/qcoreapplication/tst_qcoreapplication.h index b8475fd8c2..655a879afa 100644 --- a/tests/auto/corelib/kernel/qcoreapplication/tst_qcoreapplication.h +++ b/tests/auto/corelib/kernel/qcoreapplication/tst_qcoreapplication.h @@ -49,6 +49,9 @@ private slots: void applicationPid(); void globalPostedEventsCount(); void processEventsAlwaysSendsPostedEvents(); +#ifdef Q_OS_WIN + void sendPostedEventsInNativeLoop(); +#endif void quit(); void reexec(); void execAfterExit(); |