From ec0402116c20a2121619199a7fa34c61265d8acc Mon Sep 17 00:00:00 2001 From: Charles Yin Date: Mon, 24 Oct 2011 10:44:16 +1000 Subject: Fix qmltestrunner hang bug when no TestCase item Add a hasTestCase property to the global qtest object, set it to true in each TestCase's onCompleted handler. qmltestrunner only enter the event loop if this property is true to avoid infinite waiting. Task-number:QTBUG-22281 Change-Id: Id609432210ae795d8c128901e64ba0aef4551f01 Reviewed-by: Michael Brasser Reviewed-by: Charles Yin --- src/qmltest/quicktest.cpp | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) (limited to 'src/qmltest') diff --git a/src/qmltest/quicktest.cpp b/src/qmltest/quicktest.cpp index 3c726d43d1..601f5dcdbd 100644 --- a/src/qmltest/quicktest.cpp +++ b/src/qmltest/quicktest.cpp @@ -72,23 +72,28 @@ class QTestRootObject : public QObject { Q_OBJECT Q_PROPERTY(bool windowShown READ windowShown NOTIFY windowShownChanged) + Q_PROPERTY(bool hasTestCase READ hasTestCase WRITE setHasTestCase NOTIFY hasTestCaseChanged) public: QTestRootObject(QObject *parent = 0) - : QObject(parent), hasQuit(false), m_windowShown(false) {} + : QObject(parent), hasQuit(false), m_hasTestCase(false), m_windowShown(false) {} - bool hasQuit; + bool hasQuit:1; + bool hasTestCase() const { return m_hasTestCase; } + void setHasTestCase(bool value) { m_hasTestCase = value; emit hasTestCaseChanged(); } bool windowShown() const { return m_windowShown; } void setWindowShown(bool value) { m_windowShown = value; emit windowShownChanged(); } Q_SIGNALS: void windowShownChanged(); + void hasTestCaseChanged(); private Q_SLOTS: void quit() { hasQuit = true; } private: - bool m_windowShown; + bool m_windowShown : 1; + bool m_hasTestCase :1; }; static inline QString stripQuotes(const QString &s) @@ -192,11 +197,14 @@ int quick_test_main(int argc, char **argv, const char *name, quick_test_viewport if (!fi.exists()) continue; + rootobj.setHasTestCase(false); + QString path = fi.absoluteFilePath(); if (path.startsWith(QLatin1String(":/"))) view.setSource(QUrl(QLatin1String("qrc:") + path.mid(2))); else view.setSource(QUrl::fromLocalFile(path)); + if (QTest::printAvailableFunctions) continue; if (view.status() == QQuickView::Error) { @@ -224,7 +232,7 @@ int quick_test_main(int argc, char **argv, const char *name, quick_test_viewport view.show(); QTest::qWaitForWindowShown(&view); rootobj.setWindowShown(true); - if (!rootobj.hasQuit) + if (!rootobj.hasQuit && rootobj.hasTestCase()) eventLoop.exec(); } } -- cgit v1.2.3