aboutsummaryrefslogtreecommitdiffstats
path: root/tests/auto/qml
diff options
context:
space:
mode:
authorMichael Brasser <michael.brasser@jollamobile.com>2014-02-17 09:35:20 -0600
committerThe Qt Project <gerrit-noreply@qt-project.org>2014-02-25 20:01:12 +0100
commit7d25db8ff452926e58b7a66608666b35c194fc69 (patch)
tree84a40cdc2f8654e73080ca608e3d3f9b98a50a55 /tests/auto/qml
parent2befbab62808fa75658cb974ce92e8b1ac558e8e (diff)
Fix global object handling in worker script JS files.v5.3.0-alpha1
Task-number: QTBUG-36874 Task-number: QTBUG-36881 Change-Id: Iacf4807dd37862e792ad1ba4ce540a6d48f1e495 Reviewed-by: Simon Hausmann <simon.hausmann@digia.com>
Diffstat (limited to 'tests/auto/qml')
-rw-r--r--tests/auto/qml/qquickworkerscript/data/script_function.js8
-rw-r--r--tests/auto/qml/qquickworkerscript/data/script_global.js5
-rw-r--r--tests/auto/qml/qquickworkerscript/data/script_global2.js6
-rw-r--r--tests/auto/qml/qquickworkerscript/data/script_var.js6
-rw-r--r--tests/auto/qml/qquickworkerscript/data/worker_function.qml5
-rw-r--r--tests/auto/qml/qquickworkerscript/data/worker_global.qml5
-rw-r--r--tests/auto/qml/qquickworkerscript/data/worker_global2.qml5
-rw-r--r--tests/auto/qml/qquickworkerscript/data/worker_var.qml5
-rw-r--r--tests/auto/qml/qquickworkerscript/tst_qquickworkerscript.cpp83
9 files changed, 127 insertions, 1 deletions
diff --git a/tests/auto/qml/qquickworkerscript/data/script_function.js b/tests/auto/qml/qquickworkerscript/data/script_function.js
new file mode 100644
index 0000000000..c0391dd0ae
--- /dev/null
+++ b/tests/auto/qml/qquickworkerscript/data/script_function.js
@@ -0,0 +1,8 @@
+function func() {
+ return "World"
+}
+
+WorkerScript.onMessage = function(msg) {
+ WorkerScript.sendMessage(msg + " " + func())
+}
+
diff --git a/tests/auto/qml/qquickworkerscript/data/script_global.js b/tests/auto/qml/qquickworkerscript/data/script_global.js
new file mode 100644
index 0000000000..cce4f2ceca
--- /dev/null
+++ b/tests/auto/qml/qquickworkerscript/data/script_global.js
@@ -0,0 +1,5 @@
+WorkerScript.onMessage = function(msg) {
+ world = "World"
+ WorkerScript.sendMessage(msg + " " + world)
+}
+
diff --git a/tests/auto/qml/qquickworkerscript/data/script_global2.js b/tests/auto/qml/qquickworkerscript/data/script_global2.js
new file mode 100644
index 0000000000..0867f7ee76
--- /dev/null
+++ b/tests/auto/qml/qquickworkerscript/data/script_global2.js
@@ -0,0 +1,6 @@
+world = "World"
+
+WorkerScript.onMessage = function(msg) {
+ WorkerScript.sendMessage(msg + " " + world)
+}
+
diff --git a/tests/auto/qml/qquickworkerscript/data/script_var.js b/tests/auto/qml/qquickworkerscript/data/script_var.js
new file mode 100644
index 0000000000..77107e8344
--- /dev/null
+++ b/tests/auto/qml/qquickworkerscript/data/script_var.js
@@ -0,0 +1,6 @@
+var world = "World"
+
+WorkerScript.onMessage = function(msg) {
+ WorkerScript.sendMessage(msg + " " + world)
+}
+
diff --git a/tests/auto/qml/qquickworkerscript/data/worker_function.qml b/tests/auto/qml/qquickworkerscript/data/worker_function.qml
new file mode 100644
index 0000000000..f8d01dcfcc
--- /dev/null
+++ b/tests/auto/qml/qquickworkerscript/data/worker_function.qml
@@ -0,0 +1,5 @@
+import QtQuick 2.0
+
+BaseWorker {
+ source: "script_function.js"
+}
diff --git a/tests/auto/qml/qquickworkerscript/data/worker_global.qml b/tests/auto/qml/qquickworkerscript/data/worker_global.qml
new file mode 100644
index 0000000000..546afd2f39
--- /dev/null
+++ b/tests/auto/qml/qquickworkerscript/data/worker_global.qml
@@ -0,0 +1,5 @@
+import QtQuick 2.0
+
+BaseWorker {
+ source: "script_global.js"
+}
diff --git a/tests/auto/qml/qquickworkerscript/data/worker_global2.qml b/tests/auto/qml/qquickworkerscript/data/worker_global2.qml
new file mode 100644
index 0000000000..42cad3852b
--- /dev/null
+++ b/tests/auto/qml/qquickworkerscript/data/worker_global2.qml
@@ -0,0 +1,5 @@
+import QtQuick 2.0
+
+BaseWorker {
+ source: "script_global2.js"
+}
diff --git a/tests/auto/qml/qquickworkerscript/data/worker_var.qml b/tests/auto/qml/qquickworkerscript/data/worker_var.qml
new file mode 100644
index 0000000000..ea6a23cd3e
--- /dev/null
+++ b/tests/auto/qml/qquickworkerscript/data/worker_var.qml
@@ -0,0 +1,5 @@
+import QtQuick 2.0
+
+BaseWorker {
+ source: "script_var.js"
+}
diff --git a/tests/auto/qml/qquickworkerscript/tst_qquickworkerscript.cpp b/tests/auto/qml/qquickworkerscript/tst_qquickworkerscript.cpp
index a799fc4fc4..57dc98849c 100644
--- a/tests/auto/qml/qquickworkerscript/tst_qquickworkerscript.cpp
+++ b/tests/auto/qml/qquickworkerscript/tst_qquickworkerscript.cpp
@@ -68,6 +68,9 @@ private slots:
void script_included();
void scriptError_onLoad();
void scriptError_onCall();
+ void script_function();
+ void script_var();
+ void script_global();
void stressDispose();
private:
@@ -235,7 +238,6 @@ void tst_QQuickWorkerScript::script_included()
waitForEchoMessage(worker);
const QMetaObject *mo = worker->metaObject();
- QEXPECT_FAIL("", "It is not possible to write to the global object right now", Continue);
QCOMPARE(mo->property(mo->indexOfProperty("response")).read(worker).toString(), value + " World");
qApp->processEvents();
@@ -283,6 +285,85 @@ void tst_QQuickWorkerScript::scriptError_onCall()
delete worker;
}
+void tst_QQuickWorkerScript::script_function()
+{
+ QQmlComponent component(&m_engine, testFileUrl("worker_function.qml"));
+ QQuickWorkerScript *worker = qobject_cast<QQuickWorkerScript*>(component.create());
+ QVERIFY(worker != 0);
+
+ QString value("Hello");
+
+ QVERIFY(QMetaObject::invokeMethod(worker, "testSend", Q_ARG(QVariant, value)));
+ waitForEchoMessage(worker);
+
+ const QMetaObject *mo = worker->metaObject();
+ QCOMPARE(mo->property(mo->indexOfProperty("response")).read(worker).toString(), value + " World");
+
+ qApp->processEvents();
+ delete worker;
+}
+
+void tst_QQuickWorkerScript::script_var()
+{
+ QQmlComponent component(&m_engine, testFileUrl("worker_var.qml"));
+ QQuickWorkerScript *worker = qobject_cast<QQuickWorkerScript*>(component.create());
+ QVERIFY(worker != 0);
+
+ QString value("Hello");
+
+ QVERIFY(QMetaObject::invokeMethod(worker, "testSend", Q_ARG(QVariant, value)));
+ waitForEchoMessage(worker);
+
+ const QMetaObject *mo = worker->metaObject();
+ QCOMPARE(mo->property(mo->indexOfProperty("response")).read(worker).toString(), value + " World");
+
+ qApp->processEvents();
+ delete worker;
+}
+
+void tst_QQuickWorkerScript::script_global()
+{
+ {
+ QQmlComponent component(&m_engine, testFileUrl("worker_global.qml"));
+ QQuickWorkerScript *worker = qobject_cast<QQuickWorkerScript*>(component.create());
+ QVERIFY(worker != 0);
+
+ QString value("Hello");
+
+ QtMessageHandler previousMsgHandler = qInstallMessageHandler(qquickworkerscript_warningsHandler);
+
+ QVERIFY(QMetaObject::invokeMethod(worker, "testSend", Q_ARG(QVariant, value)));
+
+ QTRY_COMPARE(qquickworkerscript_lastWarning,
+ testFileUrl("script_global.js").toString() + QLatin1String(":2: Invalid write to global property \"world\""));
+
+ qInstallMessageHandler(previousMsgHandler);
+
+ qApp->processEvents();
+ delete worker;
+ }
+
+ {
+ QQmlComponent component(&m_engine, testFileUrl("worker_global2.qml"));
+ QQuickWorkerScript *worker = qobject_cast<QQuickWorkerScript*>(component.create());
+ QVERIFY(worker != 0);
+
+ QString value("Hello");
+
+ QtMessageHandler previousMsgHandler = qInstallMessageHandler(qquickworkerscript_warningsHandler);
+
+ QVERIFY(QMetaObject::invokeMethod(worker, "testSend", Q_ARG(QVariant, value)));
+
+ QTRY_COMPARE(qquickworkerscript_lastWarning,
+ testFileUrl("script_global.js").toString() + QLatin1String(":2: Invalid write to global property \"world\""));
+
+ qInstallMessageHandler(previousMsgHandler);
+
+ qApp->processEvents();
+ delete worker;
+ }
+}
+
// Rapidly create and destroy worker scripts to test resources are being disposed
// in the correct isolate
void tst_QQuickWorkerScript::stressDispose()