Fix flakiness in qquicklistmodel autotest
authorKent Hansen <kent.hansen@nokia.com>
Mon, 12 Mar 2012 15:02:43 +0000 (16:02 +0100)
committerQt by Nokia <qt-info@nokia.com>
Mon, 12 Mar 2012 16:04:04 +0000 (17:04 +0100)
The worker_remove_element test calls processEvents() before
calling waitForWorker(). It's possible that the worker actually
finishes during the processEvents() call. In such a situation,
waitForWorker() should return right away; otherwise it would
wait for 10000ms for a signal that had already emitted, and the
test would fail.

Change-Id: I8e98a3297cf5f360c1c405b1baa7524cc6593d81
Reviewed-by: Lars Knoll <lars.knoll@nokia.com>
tests/auto/qml/qquicklistmodel/tst_qquicklistmodel.cpp

index 69a8d2e..8d62376 100644 (file)
@@ -216,17 +216,21 @@ QQuickItem *tst_qquicklistmodel::createWorkerTest(QQmlEngine *eng, QQmlComponent
 
 void tst_qquicklistmodel::waitForWorker(QQuickItem *item)
 {
+    QQmlProperty prop(item, "done");
+    QVERIFY(prop.isValid());
+    if (prop.read().toBool())
+        return; // already finished
+
     QEventLoop loop;
     QTimer timer;
     timer.setSingleShot(true);
     connect(&timer, SIGNAL(timeout()), &loop, SLOT(quit()));
 
-    QQmlProperty prop(item, "done");
-    QVERIFY(prop.isValid());
     QVERIFY(prop.connectNotifySignal(&loop, SLOT(quit())));
     timer.start(10000);
     loop.exec();
     QVERIFY(timer.isActive());
+    QVERIFY(prop.read().toBool());
 }
 
 void tst_qquicklistmodel::static_types_data()