Details
-
Suggestion
-
Resolution: Out of scope
-
P3: Somewhat important
-
None
-
5.2.0 Beta1
-
None
Description
See the following unit test:
#include <QtCore> #include <QtTest> #include <QtScript/QScriptEngine> class SandboxTest : public QObject { Q_OBJECT public: SandboxTest(); private Q_SLOTS: void testCase1(); }; SandboxTest::SandboxTest() { } inline bool evaluateScript(QScriptEngine *scriptEngine, const QScriptProgram &script) { scriptEngine->evaluate(script); if (scriptEngine->hasUncaughtException()) { qWarning() << scriptEngine->uncaughtException().toString() << ":" << scriptEngine->uncaughtExceptionLineNumber() << scriptEngine->uncaughtExceptionBacktrace(); return false; } return true; } inline bool handleScriptErrors(QScriptEngine *scriptEngine) { if (scriptEngine->hasUncaughtException()) { qWarning() << scriptEngine->uncaughtException().toString() << ":" << scriptEngine->uncaughtExceptionLineNumber() << scriptEngine->uncaughtExceptionBacktrace(); return false; } return true; } class Object : public QObject { Q_OBJECT public: Q_PROPERTY(int x READ x WRITE setX) Object(int x) : mX(x) {} int x() const { return mX; } void setX(int x) { mX = x; } private: int mX; }; Q_DECLARE_METATYPE(QSharedPointer<Object>) void SandboxTest::testCase1() { qRegisterMetaType<QSharedPointer<Object> >("QSharedPointer<Object>"); QScriptEngine scriptEngine; QScriptProgram script("function blah(object) { print(\"in blah()\"); object.x = 6; }"); Q_ASSERT(evaluateScript(&scriptEngine, script)); QSharedPointer<Object> object(new Object(5)); QVariant objectVariant(QVariant::fromValue(object)); QVERIFY(objectVariant.isValid()); QVERIFY(objectVariant.canConvert<QSharedPointer<Object> >()); QSharedPointer<Object> fromObjectVariant(objectVariant.value<QSharedPointer<Object> >()); QCOMPARE(fromObjectVariant->x(), 5); QScriptValueList args; args << scriptEngine.newVariant(objectVariant); scriptEngine.globalObject().property("blah").call(scriptEngine.globalObject(), args); QVERIFY(handleScriptErrors(&scriptEngine)); QCOMPARE(object->x(), 6); } QTEST_MAIN(SandboxTest) #include "tst_SandboxTest.moc"