diff options
author | Tim Jenssen <tim.jenssen@digia.com> | 2013-05-29 15:21:59 +0200 |
---|---|---|
committer | Tim Jenssen <tim.jenssen@digia.com> | 2013-06-03 16:35:28 +0200 |
commit | dfbb731676e59b42f548dfca15e60f08cfcdc2f5 (patch) | |
tree | 99f790422f6e1fe6af404dfe78c082fa5656eb70 /tests/auto | |
parent | c2cfa6dd833f60d75cc7aafe7282d052cdae5257 (diff) |
add exceptionhandler code for connected signals/JS methods
- there wasn't any error information if a C++ triggered signal resulted
in a JS method which has an error, now it will create an exception for it
- creating messagebox inside the lib is something what we want to avoid,
so the developer itself is responsible to catch these exceptions
- most cases of the installer code does that already
Change-Id: I07486f73be9de13a486de235f14e3a7d7b54f5b1
Reviewed-by: Karsten Heimrich <karsten.heimrich@digia.com>
Diffstat (limited to 'tests/auto')
-rw-r--r-- | tests/auto/installer/scriptengine/data/broken_connect.qs | 11 | ||||
-rw-r--r-- | tests/auto/installer/scriptengine/scriptengine.qrc | 1 | ||||
-rw-r--r-- | tests/auto/installer/scriptengine/tst_scriptengine.cpp | 52 |
3 files changed, 61 insertions, 3 deletions
diff --git a/tests/auto/installer/scriptengine/data/broken_connect.qs b/tests/auto/installer/scriptengine/data/broken_connect.qs new file mode 100644 index 000000000..2fe873b63 --- /dev/null +++ b/tests/auto/installer/scriptengine/data/broken_connect.qs @@ -0,0 +1,11 @@ +function BrokenConnect() +{ + emiter.emitted.connect(receive) +} + +function receive() +{ + print("function receive()"); + // this should throw an exception, "foo" does not exist + foo.bar = "test"; +} diff --git a/tests/auto/installer/scriptengine/scriptengine.qrc b/tests/auto/installer/scriptengine/scriptengine.qrc index d38168175..0bf683852 100644 --- a/tests/auto/installer/scriptengine/scriptengine.qrc +++ b/tests/auto/installer/scriptengine/scriptengine.qrc @@ -3,5 +3,6 @@ <file>data/auto-install.qs</file> <file>data/component1.qs</file> <file>data/component2.qs</file> + <file>data/broken_connect.qs</file> </qresource> </RCC> diff --git a/tests/auto/installer/scriptengine/tst_scriptengine.cpp b/tests/auto/installer/scriptengine/tst_scriptengine.cpp index c6332ff7e..283d7bdad 100644 --- a/tests/auto/installer/scriptengine/tst_scriptengine.cpp +++ b/tests/auto/installer/scriptengine/tst_scriptengine.cpp @@ -11,8 +11,6 @@ using namespace QInstaller; -// -- InstallerGui - class TestGui : public QInstaller::PackageManagerGui { Q_OBJECT @@ -34,6 +32,18 @@ public: } }; +class EmitSignalObject : public QObject +{ + Q_OBJECT + +public: + EmitSignalObject() {} + ~EmitSignalObject() {} + void produceSignal() { emit emitted(); } +signals: + void emitted(); +}; + class tst_ScriptEngine : public QObject { @@ -54,6 +64,42 @@ private slots: m_scriptEngine = m_core.scriptEngine(); } + void testBrokenJSMethodConnect() + { + EmitSignalObject emiter; + m_scriptEngine->globalObject().setProperty(QLatin1String("emiter"), + m_scriptEngine->newQObject(&emiter)); + + QScriptValue context = m_scriptEngine->loadInConext(QLatin1String("BrokenConnect"), + ":///data/broken_connect.qs"); + + QVERIFY(context.isValid()); + + if (m_scriptEngine->hasUncaughtException()) { + QFAIL(qPrintable(QString::fromLatin1("ScriptEngine hasUncaughtException:\n %1").arg( + uncaughtExceptionString(m_scriptEngine)))); + } + + const QString debugMesssage( + "create Error-Exception: \"Fatal error while evaluating a script.\n\n" + "ReferenceError: Can't find variable: foo\n\n" + "Backtrace:\n" +#if QT_VERSION < 0x050000 + "\t<anonymous>()@:///data/broken_connect.qs:10\" "); +#else + "\treceive() at :///data/broken_connect.qs:10\n" + "\t<global>() at -1\" "); +#endif + try { + // ignore Output from script + setExpectedScriptOutput("function receive()"); + setExpectedScriptOutput(qPrintable(debugMesssage)); + emiter.produceSignal(); + } catch (const Error &error) { + QVERIFY2(debugMesssage.contains(error.message()), "There was some unexpected error."); + } + } + void testScriptPrint() { setExpectedScriptOutput("test"); @@ -199,7 +245,7 @@ private: PackageManagerCore m_core; Component *m_component; - QScriptEngine *m_scriptEngine; + ScriptEngine *m_scriptEngine; }; |