aboutsummaryrefslogtreecommitdiffstats
path: root/tests
diff options
context:
space:
mode:
authorKent Hansen <kent.hansen@nokia.com>2011-11-21 13:35:40 +0100
committerQt by Nokia <qt-info@nokia.com>2011-11-23 10:11:19 +0100
commit699b74dc1d288af3d1aaeb02335c10c21f37f56a (patch)
treea1d6ca0c1939d16e0f4876ac98e057801c6a741a /tests
parent384fd7cdf1cb3061126c74c4f591cd2c0acdfedc (diff)
Don't crash when importing script with syntax error
Task-number: QTBUG-22843 Change-Id: I2b1ed6cbbc7a566f54b441359941ea121a9033ba Reviewed-by: Aaron Kennedy <aaron.kennedy@nokia.com>
Diffstat (limited to 'tests')
-rw-r--r--tests/auto/declarative/qdeclarativeecmascript/data/qtbug_22843.js5
-rw-r--r--tests/auto/declarative/qdeclarativeecmascript/data/qtbug_22843.library.js5
-rw-r--r--tests/auto/declarative/qdeclarativeecmascript/data/qtbug_22843.library.qml6
-rw-r--r--tests/auto/declarative/qdeclarativeecmascript/data/qtbug_22843.qml6
-rw-r--r--tests/auto/declarative/qdeclarativeecmascript/tst_qdeclarativeecmascript.cpp42
-rw-r--r--tests/auto/declarative/qmlmin/tst_qmlmin.cpp2
6 files changed, 66 insertions, 0 deletions
diff --git a/tests/auto/declarative/qdeclarativeecmascript/data/qtbug_22843.js b/tests/auto/declarative/qdeclarativeecmascript/data/qtbug_22843.js
new file mode 100644
index 0000000000..6d19fe0571
--- /dev/null
+++ b/tests/auto/declarative/qdeclarativeecmascript/data/qtbug_22843.js
@@ -0,0 +1,5 @@
+
+function func()
+{
+ isFinite() )
+}
diff --git a/tests/auto/declarative/qdeclarativeecmascript/data/qtbug_22843.library.js b/tests/auto/declarative/qdeclarativeecmascript/data/qtbug_22843.library.js
new file mode 100644
index 0000000000..1a7c8a2e6e
--- /dev/null
+++ b/tests/auto/declarative/qdeclarativeecmascript/data/qtbug_22843.library.js
@@ -0,0 +1,5 @@
+.pragma library
+function func()
+{
+ isFinite() )
+}
diff --git a/tests/auto/declarative/qdeclarativeecmascript/data/qtbug_22843.library.qml b/tests/auto/declarative/qdeclarativeecmascript/data/qtbug_22843.library.qml
new file mode 100644
index 0000000000..281765bff6
--- /dev/null
+++ b/tests/auto/declarative/qdeclarativeecmascript/data/qtbug_22843.library.qml
@@ -0,0 +1,6 @@
+import "qtbug_22843.library.js" as MyScript
+import QtQuick 2.0
+
+QtObject {
+ Component.onCompleted: MyScript.func()
+}
diff --git a/tests/auto/declarative/qdeclarativeecmascript/data/qtbug_22843.qml b/tests/auto/declarative/qdeclarativeecmascript/data/qtbug_22843.qml
new file mode 100644
index 0000000000..90a47c0f4b
--- /dev/null
+++ b/tests/auto/declarative/qdeclarativeecmascript/data/qtbug_22843.qml
@@ -0,0 +1,6 @@
+import "qtbug_22843.js" as MyScript
+import QtQuick 2.0
+
+QtObject {
+ Component.onCompleted: MyScript.func()
+}
diff --git a/tests/auto/declarative/qdeclarativeecmascript/tst_qdeclarativeecmascript.cpp b/tests/auto/declarative/qdeclarativeecmascript/tst_qdeclarativeecmascript.cpp
index 4c43a02e81..1e0f1a86ca 100644
--- a/tests/auto/declarative/qdeclarativeecmascript/tst_qdeclarativeecmascript.cpp
+++ b/tests/auto/declarative/qdeclarativeecmascript/tst_qdeclarativeecmascript.cpp
@@ -225,6 +225,8 @@ private slots:
void invokableObjectRet();
void qtbug_20344();
void qtbug_22679();
+ void qtbug_22843_data();
+ void qtbug_22843();
void revisionErrors();
void revision();
@@ -5178,6 +5180,46 @@ void tst_qdeclarativeecmascript::qtbug_22679()
delete o;
}
+void tst_qdeclarativeecmascript::qtbug_22843_data()
+{
+ QTest::addColumn<bool>("library");
+
+ QTest::newRow("without .pragma library") << false;
+ QTest::newRow("with .pragma library") << true;
+}
+
+void tst_qdeclarativeecmascript::qtbug_22843()
+{
+ QFETCH(bool, library);
+
+ QString fileName("qtbug_22843");
+ if (library)
+ fileName += QLatin1String(".library");
+ fileName += QLatin1String(".qml");
+
+ QDeclarativeComponent component(&engine, TEST_FILE(fileName));
+ QString url = component.url().toString();
+ QString warning1 = url.left(url.length()-3) + QLatin1String("js:4: SyntaxError: Unexpected token )");
+ QString warning2 = url + QLatin1String(":5: TypeError: Object [object Object] has no method 'func'");
+
+ qRegisterMetaType<QList<QDeclarativeError> >("QList<QDeclarativeError>");
+ QSignalSpy warningsSpy(&engine, SIGNAL(warnings(QList<QDeclarativeError>)));
+ for (int x = 0; x < 3; ++x) {
+ warningsSpy.clear();
+ // For libraries, only the first import attempt should produce a
+ // SyntaxError warning; subsequent component creation should not
+ // attempt to reload the script.
+ bool expectSyntaxError = !library || (x == 0);
+ if (expectSyntaxError)
+ QTest::ignoreMessage(QtWarningMsg, qPrintable(warning1));
+ QTest::ignoreMessage(QtWarningMsg, qPrintable(warning2));
+ QObject *object = component.create();
+ QVERIFY(object != 0);
+ QCOMPARE(warningsSpy.count(), 1 + (expectSyntaxError?1:0));
+ delete object;
+ }
+}
+
QTEST_MAIN(tst_qdeclarativeecmascript)
#include "tst_qdeclarativeecmascript.moc"
diff --git a/tests/auto/declarative/qmlmin/tst_qmlmin.cpp b/tests/auto/declarative/qmlmin/tst_qmlmin.cpp
index 38de65f826..53b0e3772a 100644
--- a/tests/auto/declarative/qmlmin/tst_qmlmin.cpp
+++ b/tests/auto/declarative/qmlmin/tst_qmlmin.cpp
@@ -105,6 +105,8 @@ void tst_qmlmin::initTestCase()
invalidFiles << "tests/auto/declarative/qdeclarativelanguage/data/nonexistantProperty.5.qml";
invalidFiles << "tests/auto/declarative/qdeclarativefolderlistmodel/data/dummy.qml";
invalidFiles << "tests/auto/declarative/qdeclarativeecmascript/data/blank.js";
+ invalidFiles << "tests/auto/declarative/qdeclarativeecmascript/data/qtbug_22843.js";
+ invalidFiles << "tests/auto/declarative/qdeclarativeecmascript/data/qtbug_22843.library.js";
invalidFiles << "tests/auto/declarative/qdeclarativeworkerscript/data/script_error_onLoad.js";
invalidFiles << "tests/auto/declarative/qdeclarativelanguage/data/test.js";
invalidFiles << "tests/auto/declarative/qdeclarativelanguage/data/test2.js";