From 26884ef4eaa545ba3d29fa1e62af1fb356bed998 Mon Sep 17 00:00:00 2001 From: Bernd Weimer Date: Wed, 29 Jan 2020 11:15:18 +0100 Subject: Allow qmltestrunner to shutdown gracefully Don't quit right away, when the QmlEngine quits, but let the normal shutdown procedure run. This prevents warnings "QProcess: Destroyed while process is still running". Change-Id: I2d96961052b71f05b8a51f59c7fdcc082342800e Reviewed-by: Dominik Holland --- src/tools/appman/appman.cpp | 2 +- src/tools/testrunner/testrunner.cpp | 12 ++---------- src/tools/testrunner/testrunner.h | 3 +-- src/tools/testrunner/testrunner_p.h | 8 +------- 4 files changed, 5 insertions(+), 20 deletions(-) diff --git a/src/tools/appman/appman.cpp b/src/tools/appman/appman.cpp index 63076ae5..62765f40 100644 --- a/src/tools/appman/appman.cpp +++ b/src/tools/appman/appman.cpp @@ -117,7 +117,7 @@ Q_DECL_EXPORT int main(int argc, char *argv[]) a.showWindow(cfg.fullscreen() && !cfg.noFullscreen()); #if defined(AM_TESTRUNNER) - return TestRunner::exec(a.qmlEngine()); + return TestRunner::exec(); #else return MainBase::exec(); #endif diff --git a/src/tools/testrunner/testrunner.cpp b/src/tools/testrunner/testrunner.cpp index ce10cefd..7402adad 100644 --- a/src/tools/testrunner/testrunner.cpp +++ b/src/tools/testrunner/testrunner.cpp @@ -135,7 +135,6 @@ QTestRootObject::QTestRootObject(QObject *parent) : QObject(parent) , m_windowShown(false) , m_hasTestCase(false) - , m_hasQuit(false) , m_defined(new QQmlPropertyMap(this)) { #if defined(QT_OPENGL_ES_2_ANGLE) @@ -153,9 +152,6 @@ QTestRootObject *QTestRootObject::instance() return object; } - - - static QObject *testRootObject(QQmlEngine *engine, QJSEngine *jsEngine) { Q_UNUSED(engine); @@ -205,20 +201,16 @@ void TestRunner::initialize(const QString &testFile, const QStringList &testRunn QTestRootObject::instance()->init(); } -int TestRunner::exec(QQmlEngine *engine) +int TestRunner::exec() { QEventLoop eventLoop; - QObject::connect(engine, &QQmlEngine::quit, - QTestRootObject::instance(), &QTestRootObject::quit); - QObject::connect(engine, &QQmlEngine::quit, - &eventLoop, &QEventLoop::quit); QTestRootObject::instance()->setWindowShown(true); if (QTest::printAvailableFunctions) return 0; - if (!QTestRootObject::instance()->hasQuit() && QTestRootObject::instance()->hasTestCase()) + if (QTestRootObject::instance()->hasTestCase()) eventLoop.exec(); QuickTestResult::setProgramName(nullptr); diff --git a/src/tools/testrunner/testrunner.h b/src/tools/testrunner/testrunner.h index 00d2240c..db30c4d9 100644 --- a/src/tools/testrunner/testrunner.h +++ b/src/tools/testrunner/testrunner.h @@ -44,7 +44,6 @@ #include -QT_FORWARD_DECLARE_CLASS(QQmlEngine) QT_FORWARD_DECLARE_CLASS(QStringList) QT_BEGIN_NAMESPACE_AM @@ -53,7 +52,7 @@ class TestRunner { public: static void initialize(const QString &testFile, const QStringList &testRunnerArguments); - static int exec(QQmlEngine *engine); + static int exec(); }; QT_END_NAMESPACE_AM diff --git a/src/tools/testrunner/testrunner_p.h b/src/tools/testrunner/testrunner_p.h index bc29c250..cf00f516 100644 --- a/src/tools/testrunner/testrunner_p.h +++ b/src/tools/testrunner/testrunner_p.h @@ -62,8 +62,6 @@ public: static QTestRootObject *instance(); - bool hasQuit() const { return m_hasQuit; } - bool hasTestCase() const { return m_hasTestCase; } void setHasTestCase(bool value) { m_hasTestCase = value; emit hasTestCaseChanged(); } @@ -71,19 +69,15 @@ public: void setWindowShown(bool value) { m_windowShown = value; emit windowShownChanged(); } QQmlPropertyMap *defined() const { return m_defined; } - void init() { setWindowShown(false); setHasTestCase(false); m_hasQuit = false; } + void init() { setWindowShown(false); setHasTestCase(false); } Q_SIGNALS: void windowShownChanged(); void hasTestCaseChanged(); -private Q_SLOTS: - void quit() { m_hasQuit = true; } - private: bool m_windowShown; bool m_hasTestCase; - bool m_hasQuit; QQmlPropertyMap *m_defined; friend class TestRunner; }; -- cgit v1.2.3