summaryrefslogtreecommitdiffstats
path: root/tests
diff options
context:
space:
mode:
Diffstat (limited to 'tests')
-rw-r--r--tests/auto/declarative/qdeclarativelistmodel/data/model.qml10
-rw-r--r--tests/auto/declarative/qdeclarativelistmodel/data/script.js5
-rw-r--r--tests/auto/declarative/qdeclarativelistmodel/tst_qdeclarativelistmodel.cpp44
3 files changed, 31 insertions, 28 deletions
diff --git a/tests/auto/declarative/qdeclarativelistmodel/data/model.qml b/tests/auto/declarative/qdeclarativelistmodel/data/model.qml
index 97e3030..ebd4ebf 100644
--- a/tests/auto/declarative/qdeclarativelistmodel/data/model.qml
+++ b/tests/auto/declarative/qdeclarativelistmodel/data/model.qml
@@ -4,20 +4,18 @@ Item {
id: item
property var model
property bool done: false
+ property var result
- function evalExpressionViaWorker(expr) {
+ function evalExpressionViaWorker(commands) {
done = false
- if (expr[expr.length-1] == ';')
- expr = expr.substring(0, expr.length-1)
- var cmds = expr.split(';')
-
- worker.sendMessage({'commands': cmds, 'model': model})
+ worker.sendMessage({'commands': commands, 'model': model})
}
WorkerScript {
id: worker
source: "script.js"
onMessage: {
+ item.result = messageObject.result
item.done = true
}
}
diff --git a/tests/auto/declarative/qdeclarativelistmodel/data/script.js b/tests/auto/declarative/qdeclarativelistmodel/data/script.js
index bfeeb8b..66a4acb 100644
--- a/tests/auto/declarative/qdeclarativelistmodel/data/script.js
+++ b/tests/auto/declarative/qdeclarativelistmodel/data/script.js
@@ -1,12 +1,13 @@
WorkerScript.onMessage = function(msg) {
+ var result = null
try {
for (var i=0; i<msg.commands.length; i++) {
var c = 'msg.model.' + msg.commands[i]
- eval(c)
+ result = eval(c)
}
msg.model.sync()
} catch(e) { }
- WorkerScript.sendMessage({'done': true})
+ WorkerScript.sendMessage({'done': true, 'result': result})
}
diff --git a/tests/auto/declarative/qdeclarativelistmodel/tst_qdeclarativelistmodel.cpp b/tests/auto/declarative/qdeclarativelistmodel/tst_qdeclarativelistmodel.cpp
index 95ac2c0..78e5912 100644
--- a/tests/auto/declarative/qdeclarativelistmodel/tst_qdeclarativelistmodel.cpp
+++ b/tests/auto/declarative/qdeclarativelistmodel/tst_qdeclarativelistmodel.cpp
@@ -301,34 +301,38 @@ void tst_QDeclarativeListModel::dynamic_worker()
if (script[0] == QLatin1Char('{') && script[script.length()-1] == QLatin1Char('}'))
script = script.mid(1, script.length() - 2);
- QString finalTest = script.split(';').last();
- QString scriptWithoutFinalTest = script.mid(0, script.indexOf(finalTest));
+ QVariantList operations;
+ foreach (const QString &s, script.split(';')) {
+ if (!s.isEmpty())
+ operations << s;
+ }
if (!warning.isEmpty())
QTest::ignoreMessage(QtWarningMsg, warning.toLatin1());
- if (!scriptWithoutFinalTest.isEmpty()) {
+ if (operations.count() == 1) {
+ // test count(), get() return the correct default values in the worker list model
+ QVERIFY(QMetaObject::invokeMethod(item, "evalExpressionViaWorker",
+ Q_ARG(QVariant, operations)));
+ waitForWorker(item);
+ QCOMPARE(QDeclarativeProperty(item, "result").read().toInt(), result);
+ } else {
+ // execute a set of commands on the worker list model, then check the
+ // changes are reflected in the list model in the main thread
if (QByteArray(QTest::currentDataTag()).startsWith("nested"))
QTest::ignoreMessage(QtWarningMsg, "QML ListModel (unknown location) Cannot add nested list values when modifying or after modification from a worker script");
- QVERIFY(QMetaObject::invokeMethod(item, "evalExpressionViaWorker", Q_ARG(QVariant, scriptWithoutFinalTest)));
+ QVERIFY(QMetaObject::invokeMethod(item, "evalExpressionViaWorker",
+ Q_ARG(QVariant, operations.mid(0, operations.length()-1))));
waitForWorker(item);
- }
- QDeclarativeExpression e(eng.rootContext(), finalTest, &model);
- if (QByteArray(QTest::currentDataTag()).startsWith("nested"))
- QVERIFY(e.value().toInt() != result);
- else
- QCOMPARE(e.value().toInt(), result);
-
- QEventLoop loop;
- QTimer timer;
- timer.setSingleShot(true);
- connect(&timer, SIGNAL(timeout()), &loop, SLOT(quit()));
- connect(item, SIGNAL(destroyed(QObject*)), &loop, SLOT(quit()));
- timer.start(10000);
- item->deleteLater();
- loop.exec();
+ QDeclarativeExpression e(eng.rootContext(), operations.last().toString(), &model);
+ if (QByteArray(QTest::currentDataTag()).startsWith("nested"))
+ QVERIFY(e.value().toInt() != result);
+ else
+ QCOMPARE(e.value().toInt(), result);
+ }
+ delete item;
QTest::ignoreMessage(QtWarningMsg, "QThread: Destroyed while thread is still running");
qApp->processEvents();
}
@@ -354,7 +358,7 @@ void tst_QDeclarativeListModel::convertNestedToFlat_fail()
QTest::ignoreMessage(QtWarningMsg, "QML ListModel (unknown location) List contains nested list values and cannot be used from a worker script");
QVERIFY(QMetaObject::invokeMethod(item, "evalExpressionViaWorker", Q_ARG(QVariant, script)));
- waitForWorker(item);
+ waitForWorker(item);
QCOMPARE(model.count(), 2);