summaryrefslogtreecommitdiff
path: root/tests/auto/qscriptengine/tst_qscriptengine.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'tests/auto/qscriptengine/tst_qscriptengine.cpp')
-rw-r--r--tests/auto/qscriptengine/tst_qscriptengine.cpp41
1 files changed, 41 insertions, 0 deletions
diff --git a/tests/auto/qscriptengine/tst_qscriptengine.cpp b/tests/auto/qscriptengine/tst_qscriptengine.cpp
index 6d7540f..6d77b32 100644
--- a/tests/auto/qscriptengine/tst_qscriptengine.cpp
+++ b/tests/auto/qscriptengine/tst_qscriptengine.cpp
@@ -146,6 +146,8 @@ private slots:
void throwErrorFromProcessEvents();
void disableProcessEventsInterval();
void stacktrace();
+ void stacktrace_callJSFromCpp_data();
+ void stacktrace_callJSFromCpp();
void numberParsing_data();
void numberParsing();
void automaticSemicolonInsertion();
@@ -3107,6 +3109,45 @@ void tst_QScriptEngine::stacktrace()
QVERIFY(eng.uncaughtExceptionBacktrace().isEmpty());
}
+void tst_QScriptEngine::stacktrace_callJSFromCpp_data()
+{
+ QTest::addColumn<QString>("callbackExpression");
+
+ QTest::newRow("explicit throw") << QString::fromLatin1("throw new Error('callback threw')");
+ QTest::newRow("reference error") << QString::fromLatin1("noSuchFunction()");
+}
+
+// QTBUG-26889
+void tst_QScriptEngine::stacktrace_callJSFromCpp()
+{
+ struct CallbackCaller {
+ static QScriptValue call(QScriptContext *, QScriptEngine *eng)
+ { return eng->globalObject().property(QStringLiteral("callback")).call(); }
+
+ };
+
+ QFETCH(QString, callbackExpression);
+ QString script = QString::fromLatin1(
+ "function callback() {\n"
+ " %0\n"
+ "}\n"
+ "callCallbackFromCpp()").arg(callbackExpression);
+
+ QScriptEngine eng;
+ eng.globalObject().setProperty(QStringLiteral("callCallbackFromCpp"),
+ eng.newFunction(&CallbackCaller::call));
+ eng.evaluate(script, QStringLiteral("test.js"));
+
+ QVERIFY(eng.hasUncaughtException());
+ QCOMPARE(eng.uncaughtExceptionLineNumber(), 2);
+
+ QStringList expectedBacktrace;
+ expectedBacktrace << QStringLiteral("callback() at test.js:2")
+ << QStringLiteral("<native>() at -1")
+ << QStringLiteral("<global>() at test.js:4");
+ QCOMPARE(eng.uncaughtExceptionBacktrace(), expectedBacktrace);
+}
+
void tst_QScriptEngine::numberParsing_data()
{
QTest::addColumn<QString>("string");