aboutsummaryrefslogtreecommitdiffstats
path: root/tests/auto/declarative/qdeclarativeecmascript
diff options
context:
space:
mode:
Diffstat (limited to 'tests/auto/declarative/qdeclarativeecmascript')
-rw-r--r--tests/auto/declarative/qdeclarativeecmascript/data/v8bindingException.qml21
-rw-r--r--tests/auto/declarative/qdeclarativeecmascript/tst_qdeclarativeecmascript.cpp12
2 files changed, 33 insertions, 0 deletions
diff --git a/tests/auto/declarative/qdeclarativeecmascript/data/v8bindingException.qml b/tests/auto/declarative/qdeclarativeecmascript/data/v8bindingException.qml
new file mode 100644
index 0000000000..ff203e23e3
--- /dev/null
+++ b/tests/auto/declarative/qdeclarativeecmascript/data/v8bindingException.qml
@@ -0,0 +1,21 @@
+import QtQuick 2.0
+
+// This test uses a multi-line string which has \r-terminated
+// string fragments. The expression rewriter deliberately doesn't
+// handle \r-terminated string fragments (see QTBUG-24064) and thus
+// this test ensures that we don't crash when we encounter a
+// non-compilable binding such as this one.
+
+Item {
+ id: root
+
+ Component {
+ id: comp
+ Text {
+ property var value: ","
+ text: 'multi line ' + value + 'str ings'
+ }
+ }
+
+ Component.onCompleted: comp.createObject(root, { "value": undefined })
+}
diff --git a/tests/auto/declarative/qdeclarativeecmascript/tst_qdeclarativeecmascript.cpp b/tests/auto/declarative/qdeclarativeecmascript/tst_qdeclarativeecmascript.cpp
index 219eac6e14..1c42d9d425 100644
--- a/tests/auto/declarative/qdeclarativeecmascript/tst_qdeclarativeecmascript.cpp
+++ b/tests/auto/declarative/qdeclarativeecmascript/tst_qdeclarativeecmascript.cpp
@@ -113,6 +113,7 @@ private slots:
void exceptionClearsOnReeval();
void exceptionSlotProducesWarning();
void exceptionBindingProducesWarning();
+ void compileInvalidBinding();
void transientErrors();
void shutdownErrors();
void compositePropertyType();
@@ -1562,6 +1563,17 @@ void tst_qdeclarativeecmascript::exceptionBindingProducesWarning()
delete object;
}
+void tst_qdeclarativeecmascript::compileInvalidBinding()
+{
+ // QTBUG-23387: ensure that invalid bindings don't cause a crash.
+ QDeclarativeComponent component(&engine, testFileUrl("v8bindingException.qml"));
+ QString warning = component.url().toString() + ":16: SyntaxError: Unexpected token ILLEGAL";
+ QTest::ignoreMessage(QtWarningMsg, warning.toLatin1().constData());
+ QObject *object = component.create();
+ QVERIFY(object != 0);
+ delete object;
+}
+
static int transientErrorsMsgCount = 0;
static void transientErrorsMsgHandler(QtMsgType, const char *)
{