diff options
author | Charles Yin <charles.yin@nokia.com> | 2011-02-03 03:54:13 (GMT) |
---|---|---|
committer | Charles Yin <charles.yin@nokia.com> | 2011-02-17 00:57:43 (GMT) |
commit | 4df66da8f9e5a9f3c981c6c60254899146dd1cc0 (patch) | |
tree | ba55550f4e36c3739dfc23d08a825f056fbb956a /tests | |
parent | bfdecd0e2047fc49ed28ed095e657080897c91d1 (diff) | |
download | Qt-4df66da8f9e5a9f3c981c6c60254899146dd1cc0.zip Qt-4df66da8f9e5a9f3c981c6c60254899146dd1cc0.tar.gz Qt-4df66da8f9e5a9f3c981c6c60254899146dd1cc0.tar.bz2 |
Fix QTBUG-17008 XmlListModel blocks Windows system events
XmlListModel uses a worker thread to process XML query, however the
worker thread doesn't use it's own event loop. So after processing the
query, the worker thread just blocks on a wait condition and then blocks
all posted system events.
Change-Id: Icdd9ddd1f3f26fd632726f7200c2a81b0877d2d1
Task-number:QTBUG-17008
Reviewed-by:Martin Jones
Diffstat (limited to 'tests')
-rw-r--r-- | tests/auto/declarative/qdeclarativexmllistmodel/tst_qdeclarativexmllistmodel.cpp | 23 |
1 files changed, 23 insertions, 0 deletions
diff --git a/tests/auto/declarative/qdeclarativexmllistmodel/tst_qdeclarativexmllistmodel.cpp b/tests/auto/declarative/qdeclarativexmllistmodel/tst_qdeclarativexmllistmodel.cpp index 19d7967..af54008 100644 --- a/tests/auto/declarative/qdeclarativexmllistmodel/tst_qdeclarativexmllistmodel.cpp +++ b/tests/auto/declarative/qdeclarativexmllistmodel/tst_qdeclarativexmllistmodel.cpp @@ -569,6 +569,11 @@ void tst_qdeclarativexmllistmodel::reload() QSignalSpy spyRemove(model, SIGNAL(itemsRemoved(int,int))); QSignalSpy spyCount(model, SIGNAL(countChanged())); + //reload multiple times to test the xml query aborting + model->reload(); + model->reload(); + QCoreApplication::processEvents(); + model->reload(); model->reload(); QTRY_COMPARE(spyCount.count(), 1); QTRY_COMPARE(spyInsert.count(), 1); @@ -839,9 +844,27 @@ void tst_qdeclarativexmllistmodel::threading() data3 += "name=C" + QString::number(i) + ",age=3" + QString::number(i) + ",sport=Curling;"; } + //Set the xml data multiple times with randomized order and mixed with multiple event loops + //to test the xml query reloading/aborting, the result should be stable. + m1->setXml(makeItemXmlAndData(data1)); + m2->setXml(makeItemXmlAndData(data2)); + m3->setXml(makeItemXmlAndData(data3)); + QCoreApplication::processEvents(); + m2->setXml(makeItemXmlAndData(data2)); m1->setXml(makeItemXmlAndData(data1)); m2->setXml(makeItemXmlAndData(data2)); + QCoreApplication::processEvents(); + m3->setXml(makeItemXmlAndData(data3)); + QCoreApplication::processEvents(); + m2->setXml(makeItemXmlAndData(data2)); + m1->setXml(makeItemXmlAndData(data1)); + m2->setXml(makeItemXmlAndData(data2)); + m3->setXml(makeItemXmlAndData(data3)); + QCoreApplication::processEvents(); + m2->setXml(makeItemXmlAndData(data2)); + m3->setXml(makeItemXmlAndData(data3)); m3->setXml(makeItemXmlAndData(data3)); + QCoreApplication::processEvents(); QTRY_VERIFY(m1->count() == dataCount && m2->count() == dataCount && m3->count() == dataCount); |