From f1422adb3e71fd9c32b65fa0b9d3f076ed0ccfbb Mon Sep 17 00:00:00 2001 From: Thomas McGuire Date: Mon, 13 Aug 2012 15:48:44 +0200 Subject: [PATCH] Don't put JavaScript-owned objects on the stack. Only the fact that the object wrapper uses deleteLater() instead of delete made this not crash. Change-Id: I034d8c7f24b963be9e031446ffdfa33e6bc266cc Reviewed-by: Aaron Kennedy Reviewed-by: Chris Adams --- tests/auto/qml/qjsengine/tst_qjsengine.cpp | 8 +- tests/auto/qml/qjsvalue/tst_qjsvalue.cpp | 4 +- .../auto/qml/qqmlecmascript/tst_qqmlecmascript.cpp | 754 ++++++++++---------- 3 files changed, 385 insertions(+), 381 deletions(-) diff --git a/tests/auto/qml/qjsengine/tst_qjsengine.cpp b/tests/auto/qml/qjsengine/tst_qjsengine.cpp index 98db3b1..3faa0f5 100644 --- a/tests/auto/qml/qjsengine/tst_qjsengine.cpp +++ b/tests/auto/qml/qjsengine/tst_qjsengine.cpp @@ -2482,7 +2482,9 @@ void tst_QJSEngine::reentrancy_Array() void tst_QJSEngine::reentrancy_objectCreation() { - QObject temp; + // Owned by JS engine, as newQObject() sets JS ownership explicitly + QObject *temp = new QObject(); + QJSEngine eng1; QJSEngine eng2; { @@ -2499,8 +2501,8 @@ void tst_QJSEngine::reentrancy_objectCreation() QCOMPARE(qjsvalue_cast(r2), qjsvalue_cast(r1)); } { - QJSValue o1 = eng1.newQObject(&temp); - QJSValue o2 = eng2.newQObject(&temp); + QJSValue o1 = eng1.newQObject(temp); + QJSValue o2 = eng2.newQObject(temp); QCOMPARE(o1.toQObject(), o2.toQObject()); QCOMPARE(o2.toQObject(), o1.toQObject()); } diff --git a/tests/auto/qml/qjsvalue/tst_qjsvalue.cpp b/tests/auto/qml/qjsvalue/tst_qjsvalue.cpp index 71bf076..c6c308a 100644 --- a/tests/auto/qml/qjsvalue/tst_qjsvalue.cpp +++ b/tests/auto/qml/qjsvalue/tst_qjsvalue.cpp @@ -2433,14 +2433,14 @@ void tst_QJSValue::prettyPrinter() void tst_QJSValue::engineDeleted() { QJSEngine *eng = new QJSEngine; - QObject temp; + QObject *temp = new QObject(); // Owned by JS engine, as newQObject() sets JS ownership explicitly QJSValue v1 = eng->toScriptValue(123); QVERIFY(v1.isNumber()); QJSValue v2 = eng->toScriptValue(QString("ciao")); QVERIFY(v2.isString()); QJSValue v3 = eng->newObject(); QVERIFY(v3.isObject()); - QJSValue v4 = eng->newQObject(&temp); + QJSValue v4 = eng->newQObject(temp); QVERIFY(v4.isQObject()); QJSValue v5 = "Hello"; QVERIFY(v2.isString()); diff --git a/tests/auto/qml/qqmlecmascript/tst_qqmlecmascript.cpp b/tests/auto/qml/qqmlecmascript/tst_qqmlecmascript.cpp index 2ea91ad..81f682f 100644 --- a/tests/auto/qml/qqmlecmascript/tst_qqmlecmascript.cpp +++ b/tests/auto/qml/qqmlecmascript/tst_qqmlecmascript.cpp @@ -2239,7 +2239,9 @@ static inline v8::Handle evaluate(QV8Engine *engine, v8::Handlecontext()); - v8::Local object = engine->newQObject(&o)->ToObject(); + v8::Local object = engine->newQObject(o)->ToObject(); // Non-existent methods - o.reset(); + o->reset(); QVERIFY(EVALUATE_ERROR("object.method_nonexistent()")); - QCOMPARE(o.error(), false); - QCOMPARE(o.invoked(), -1); - QCOMPARE(o.actuals().count(), 0); + QCOMPARE(o->error(), false); + QCOMPARE(o->invoked(), -1); + QCOMPARE(o->actuals().count(), 0); - o.reset(); + o->reset(); QVERIFY(EVALUATE_ERROR("object.method_nonexistent(10, 11)")); - QCOMPARE(o.error(), false); - QCOMPARE(o.invoked(), -1); - QCOMPARE(o.actuals().count(), 0); + QCOMPARE(o->error(), false); + QCOMPARE(o->invoked(), -1); + QCOMPARE(o->actuals().count(), 0); // Insufficient arguments - o.reset(); + o->reset(); QVERIFY(EVALUATE_ERROR("object.method_int()")); - QCOMPARE(o.error(), false); - QCOMPARE(o.invoked(), -1); - QCOMPARE(o.actuals().count(), 0); + QCOMPARE(o->error(), false); + QCOMPARE(o->invoked(), -1); + QCOMPARE(o->actuals().count(), 0); - o.reset(); + o->reset(); QVERIFY(EVALUATE_ERROR("object.method_intint(10)")); - QCOMPARE(o.error(), false); - QCOMPARE(o.invoked(), -1); - QCOMPARE(o.actuals().count(), 0); + QCOMPARE(o->error(), false); + QCOMPARE(o->invoked(), -1); + QCOMPARE(o->actuals().count(), 0); // Excessive arguments - o.reset(); + o->reset(); QVERIFY(EVALUATE_VALUE("object.method_int(10, 11)", v8::Undefined())); - QCOMPARE(o.error(), false); - QCOMPARE(o.invoked(), 8); - QCOMPARE(o.actuals().count(), 1); - QCOMPARE(o.actuals().at(0), QVariant(10)); + QCOMPARE(o->error(), false); + QCOMPARE(o->invoked(), 8); + QCOMPARE(o->actuals().count(), 1); + QCOMPARE(o->actuals().at(0), QVariant(10)); - o.reset(); + o->reset(); QVERIFY(EVALUATE_VALUE("object.method_intint(10, 11, 12)", v8::Undefined())); - QCOMPARE(o.error(), false); - QCOMPARE(o.invoked(), 9); - QCOMPARE(o.actuals().count(), 2); - QCOMPARE(o.actuals().at(0), QVariant(10)); - QCOMPARE(o.actuals().at(1), QVariant(11)); + QCOMPARE(o->error(), false); + QCOMPARE(o->invoked(), 9); + QCOMPARE(o->actuals().count(), 2); + QCOMPARE(o->actuals().at(0), QVariant(10)); + QCOMPARE(o->actuals().at(1), QVariant(11)); // Test return types - o.reset(); + o->reset(); QVERIFY(EVALUATE_VALUE("object.method_NoArgs()", v8::Undefined())); - QCOMPARE(o.error(), false); - QCOMPARE(o.invoked(), 0); - QCOMPARE(o.actuals().count(), 0); + QCOMPARE(o->error(), false); + QCOMPARE(o->invoked(), 0); + QCOMPARE(o->actuals().count(), 0); - o.reset(); + o->reset(); QVERIFY(EVALUATE_VALUE("object.method_NoArgs_int()", v8::Integer::New(6))); - QCOMPARE(o.error(), false); - QCOMPARE(o.invoked(), 1); - QCOMPARE(o.actuals().count(), 0); + QCOMPARE(o->error(), false); + QCOMPARE(o->invoked(), 1); + QCOMPARE(o->actuals().count(), 0); - o.reset(); + o->reset(); QVERIFY(EVALUATE_VALUE("object.method_NoArgs_real()", v8::Number::New(19.75))); - QCOMPARE(o.error(), false); - QCOMPARE(o.invoked(), 2); - QCOMPARE(o.actuals().count(), 0); + QCOMPARE(o->error(), false); + QCOMPARE(o->invoked(), 2); + QCOMPARE(o->actuals().count(), 0); - o.reset(); + o->reset(); { v8::Handle ret = EVALUATE("object.method_NoArgs_QPointF()"); QVERIFY(!ret.IsEmpty()); QCOMPARE(engine->toVariant(ret, -1), QVariant(QPointF(123, 4.5))); - QCOMPARE(o.error(), false); - QCOMPARE(o.invoked(), 3); - QCOMPARE(o.actuals().count(), 0); + QCOMPARE(o->error(), false); + QCOMPARE(o->invoked(), 3); + QCOMPARE(o->actuals().count(), 0); } - o.reset(); + o->reset(); { v8::Handle ret = EVALUATE("object.method_NoArgs_QObject()"); - QCOMPARE(engine->toQObject(ret), (QObject *)&o); - QCOMPARE(o.error(), false); - QCOMPARE(o.invoked(), 4); - QCOMPARE(o.actuals().count(), 0); + QCOMPARE(engine->toQObject(ret), (QObject *)o); + QCOMPARE(o->error(), false); + QCOMPARE(o->invoked(), 4); + QCOMPARE(o->actuals().count(), 0); } - o.reset(); + o->reset(); QVERIFY(EVALUATE_ERROR("object.method_NoArgs_unknown()")); - QCOMPARE(o.error(), false); - QCOMPARE(o.invoked(), -1); - QCOMPARE(o.actuals().count(), 0); + QCOMPARE(o->error(), false); + QCOMPARE(o->invoked(), -1); + QCOMPARE(o->actuals().count(), 0); - o.reset(); + o->reset(); { v8::Handle ret = EVALUATE("object.method_NoArgs_QScriptValue()"); QVERIFY(ret->IsString()); QCOMPARE(engine->toString(ret), QString("Hello world")); - QCOMPARE(o.error(), false); - QCOMPARE(o.invoked(), 6); - QCOMPARE(o.actuals().count(), 0); + QCOMPARE(o->error(), false); + QCOMPARE(o->invoked(), 6); + QCOMPARE(o->actuals().count(), 0); } - o.reset(); + o->reset(); QVERIFY(EVALUATE_VALUE("object.method_NoArgs_QVariant()", engine->toString("QML rocks"))); - QCOMPARE(o.error(), false); - QCOMPARE(o.invoked(), 7); - QCOMPARE(o.actuals().count(), 0); + QCOMPARE(o->error(), false); + QCOMPARE(o->invoked(), 7); + QCOMPARE(o->actuals().count(), 0); // Test arg types - o.reset(); + o->reset(); QVERIFY(EVALUATE_VALUE("object.method_int(94)", v8::Undefined())); - QCOMPARE(o.error(), false); - QCOMPARE(o.invoked(), 8); - QCOMPARE(o.actuals().count(), 1); - QCOMPARE(o.actuals().at(0), QVariant(94)); + QCOMPARE(o->error(), false); + QCOMPARE(o->invoked(), 8); + QCOMPARE(o->actuals().count(), 1); + QCOMPARE(o->actuals().at(0), QVariant(94)); - o.reset(); + o->reset(); QVERIFY(EVALUATE_VALUE("object.method_int(\"94\")", v8::Undefined())); - QCOMPARE(o.error(), false); - QCOMPARE(o.invoked(), 8); - QCOMPARE(o.actuals().count(), 1); - QCOMPARE(o.actuals().at(0), QVariant(94)); + QCOMPARE(o->error(), false); + QCOMPARE(o->invoked(), 8); + QCOMPARE(o->actuals().count(), 1); + QCOMPARE(o->actuals().at(0), QVariant(94)); - o.reset(); + o->reset(); QVERIFY(EVALUATE_VALUE("object.method_int(\"not a number\")", v8::Undefined())); - QCOMPARE(o.error(), false); - QCOMPARE(o.invoked(), 8); - QCOMPARE(o.actuals().count(), 1); - QCOMPARE(o.actuals().at(0), QVariant(0)); + QCOMPARE(o->error(), false); + QCOMPARE(o->invoked(), 8); + QCOMPARE(o->actuals().count(), 1); + QCOMPARE(o->actuals().at(0), QVariant(0)); - o.reset(); + o->reset(); QVERIFY(EVALUATE_VALUE("object.method_int(null)", v8::Undefined())); - QCOMPARE(o.error(), false); - QCOMPARE(o.invoked(), 8); - QCOMPARE(o.actuals().count(), 1); - QCOMPARE(o.actuals().at(0), QVariant(0)); + QCOMPARE(o->error(), false); + QCOMPARE(o->invoked(), 8); + QCOMPARE(o->actuals().count(), 1); + QCOMPARE(o->actuals().at(0), QVariant(0)); - o.reset(); + o->reset(); QVERIFY(EVALUATE_VALUE("object.method_int(undefined)", v8::Undefined())); - QCOMPARE(o.error(), false); - QCOMPARE(o.invoked(), 8); - QCOMPARE(o.actuals().count(), 1); - QCOMPARE(o.actuals().at(0), QVariant(0)); + QCOMPARE(o->error(), false); + QCOMPARE(o->invoked(), 8); + QCOMPARE(o->actuals().count(), 1); + QCOMPARE(o->actuals().at(0), QVariant(0)); - o.reset(); + o->reset(); QVERIFY(EVALUATE_VALUE("object.method_int(object)", v8::Undefined())); - QCOMPARE(o.error(), false); - QCOMPARE(o.invoked(), 8); - QCOMPARE(o.actuals().count(), 1); - QCOMPARE(o.actuals().at(0), QVariant(0)); + QCOMPARE(o->error(), false); + QCOMPARE(o->invoked(), 8); + QCOMPARE(o->actuals().count(), 1); + QCOMPARE(o->actuals().at(0), QVariant(0)); - o.reset(); + o->reset(); QVERIFY(EVALUATE_VALUE("object.method_intint(122, 9)", v8::Undefined())); - QCOMPARE(o.error(), false); - QCOMPARE(o.invoked(), 9); - QCOMPARE(o.actuals().count(), 2); - QCOMPARE(o.actuals().at(0), QVariant(122)); - QCOMPARE(o.actuals().at(1), QVariant(9)); + QCOMPARE(o->error(), false); + QCOMPARE(o->invoked(), 9); + QCOMPARE(o->actuals().count(), 2); + QCOMPARE(o->actuals().at(0), QVariant(122)); + QCOMPARE(o->actuals().at(1), QVariant(9)); - o.reset(); + o->reset(); QVERIFY(EVALUATE_VALUE("object.method_real(94.3)", v8::Undefined())); - QCOMPARE(o.error(), false); - QCOMPARE(o.invoked(), 10); - QCOMPARE(o.actuals().count(), 1); - QCOMPARE(o.actuals().at(0), QVariant(94.3)); + QCOMPARE(o->error(), false); + QCOMPARE(o->invoked(), 10); + QCOMPARE(o->actuals().count(), 1); + QCOMPARE(o->actuals().at(0), QVariant(94.3)); - o.reset(); + o->reset(); QVERIFY(EVALUATE_VALUE("object.method_real(\"94.3\")", v8::Undefined())); - QCOMPARE(o.error(), false); - QCOMPARE(o.invoked(), 10); - QCOMPARE(o.actuals().count(), 1); - QCOMPARE(o.actuals().at(0), QVariant(94.3)); + QCOMPARE(o->error(), false); + QCOMPARE(o->invoked(), 10); + QCOMPARE(o->actuals().count(), 1); + QCOMPARE(o->actuals().at(0), QVariant(94.3)); - o.reset(); + o->reset(); QVERIFY(EVALUATE_VALUE("object.method_real(\"not a number\")", v8::Undefined())); - QCOMPARE(o.error(), false); - QCOMPARE(o.invoked(), 10); - QCOMPARE(o.actuals().count(), 1); - QVERIFY(qIsNaN(o.actuals().at(0).toDouble())); + QCOMPARE(o->error(), false); + QCOMPARE(o->invoked(), 10); + QCOMPARE(o->actuals().count(), 1); + QVERIFY(qIsNaN(o->actuals().at(0).toDouble())); - o.reset(); + o->reset(); QVERIFY(EVALUATE_VALUE("object.method_real(null)", v8::Undefined())); - QCOMPARE(o.error(), false); - QCOMPARE(o.invoked(), 10); - QCOMPARE(o.actuals().count(), 1); - QCOMPARE(o.actuals().at(0), QVariant(0)); + QCOMPARE(o->error(), false); + QCOMPARE(o->invoked(), 10); + QCOMPARE(o->actuals().count(), 1); + QCOMPARE(o->actuals().at(0), QVariant(0)); - o.reset(); + o->reset(); QVERIFY(EVALUATE_VALUE("object.method_real(undefined)", v8::Undefined())); - QCOMPARE(o.error(), false); - QCOMPARE(o.invoked(), 10); - QCOMPARE(o.actuals().count(), 1); - QVERIFY(qIsNaN(o.actuals().at(0).toDouble())); + QCOMPARE(o->error(), false); + QCOMPARE(o->invoked(), 10); + QCOMPARE(o->actuals().count(), 1); + QVERIFY(qIsNaN(o->actuals().at(0).toDouble())); - o.reset(); + o->reset(); QVERIFY(EVALUATE_VALUE("object.method_real(object)", v8::Undefined())); - QCOMPARE(o.error(), false); - QCOMPARE(o.invoked(), 10); - QCOMPARE(o.actuals().count(), 1); - QVERIFY(qIsNaN(o.actuals().at(0).toDouble())); + QCOMPARE(o->error(), false); + QCOMPARE(o->invoked(), 10); + QCOMPARE(o->actuals().count(), 1); + QVERIFY(qIsNaN(o->actuals().at(0).toDouble())); - o.reset(); + o->reset(); QVERIFY(EVALUATE_VALUE("object.method_QString(\"Hello world\")", v8::Undefined())); - QCOMPARE(o.error(), false); - QCOMPARE(o.invoked(), 11); - QCOMPARE(o.actuals().count(), 1); - QCOMPARE(o.actuals().at(0), QVariant("Hello world")); + QCOMPARE(o->error(), false); + QCOMPARE(o->invoked(), 11); + QCOMPARE(o->actuals().count(), 1); + QCOMPARE(o->actuals().at(0), QVariant("Hello world")); - o.reset(); + o->reset(); QVERIFY(EVALUATE_VALUE("object.method_QString(19)", v8::Undefined())); - QCOMPARE(o.error(), false); - QCOMPARE(o.invoked(), 11); - QCOMPARE(o.actuals().count(), 1); - QCOMPARE(o.actuals().at(0), QVariant("19")); + QCOMPARE(o->error(), false); + QCOMPARE(o->invoked(), 11); + QCOMPARE(o->actuals().count(), 1); + QCOMPARE(o->actuals().at(0), QVariant("19")); - o.reset(); + o->reset(); { - QString expected = "MyInvokableObject(0x" + QString::number((quintptr)&o, 16) + ")"; + QString expected = "MyInvokableObject(0x" + QString::number((quintptr)o, 16) + ")"; QVERIFY(EVALUATE_VALUE("object.method_QString(object)", v8::Undefined())); - QCOMPARE(o.error(), false); - QCOMPARE(o.invoked(), 11); - QCOMPARE(o.actuals().count(), 1); - QCOMPARE(o.actuals().at(0), QVariant(expected)); + QCOMPARE(o->error(), false); + QCOMPARE(o->invoked(), 11); + QCOMPARE(o->actuals().count(), 1); + QCOMPARE(o->actuals().at(0), QVariant(expected)); } - o.reset(); + o->reset(); QVERIFY(EVALUATE_VALUE("object.method_QString(null)", v8::Undefined())); - QCOMPARE(o.error(), false); - QCOMPARE(o.invoked(), 11); - QCOMPARE(o.actuals().count(), 1); - QCOMPARE(o.actuals().at(0), QVariant(QString())); + QCOMPARE(o->error(), false); + QCOMPARE(o->invoked(), 11); + QCOMPARE(o->actuals().count(), 1); + QCOMPARE(o->actuals().at(0), QVariant(QString())); - o.reset(); + o->reset(); QVERIFY(EVALUATE_VALUE("object.method_QString(undefined)", v8::Undefined())); - QCOMPARE(o.error(), false); - QCOMPARE(o.invoked(), 11); - QCOMPARE(o.actuals().count(), 1); - QCOMPARE(o.actuals().at(0), QVariant(QString())); + QCOMPARE(o->error(), false); + QCOMPARE(o->invoked(), 11); + QCOMPARE(o->actuals().count(), 1); + QCOMPARE(o->actuals().at(0), QVariant(QString())); - o.reset(); + o->reset(); QVERIFY(EVALUATE_VALUE("object.method_QPointF(0)", v8::Undefined())); - QCOMPARE(o.error(), false); - QCOMPARE(o.invoked(), 12); - QCOMPARE(o.actuals().count(), 1); - QCOMPARE(o.actuals().at(0), QVariant(QPointF())); + QCOMPARE(o->error(), false); + QCOMPARE(o->invoked(), 12); + QCOMPARE(o->actuals().count(), 1); + QCOMPARE(o->actuals().at(0), QVariant(QPointF())); - o.reset(); + o->reset(); QVERIFY(EVALUATE_VALUE("object.method_QPointF(null)", v8::Undefined())); - QCOMPARE(o.error(), false); - QCOMPARE(o.invoked(), 12); - QCOMPARE(o.actuals().count(), 1); - QCOMPARE(o.actuals().at(0), QVariant(QPointF())); + QCOMPARE(o->error(), false); + QCOMPARE(o->invoked(), 12); + QCOMPARE(o->actuals().count(), 1); + QCOMPARE(o->actuals().at(0), QVariant(QPointF())); - o.reset(); + o->reset(); QVERIFY(EVALUATE_VALUE("object.method_QPointF(undefined)", v8::Undefined())); - QCOMPARE(o.error(), false); - QCOMPARE(o.invoked(), 12); - QCOMPARE(o.actuals().count(), 1); - QCOMPARE(o.actuals().at(0), QVariant(QPointF())); + QCOMPARE(o->error(), false); + QCOMPARE(o->invoked(), 12); + QCOMPARE(o->actuals().count(), 1); + QCOMPARE(o->actuals().at(0), QVariant(QPointF())); - o.reset(); + o->reset(); QVERIFY(EVALUATE_VALUE("object.method_QPointF(object)", v8::Undefined())); - QCOMPARE(o.error(), false); - QCOMPARE(o.invoked(), 12); - QCOMPARE(o.actuals().count(), 1); - QCOMPARE(o.actuals().at(0), QVariant(QPointF())); + QCOMPARE(o->error(), false); + QCOMPARE(o->invoked(), 12); + QCOMPARE(o->actuals().count(), 1); + QCOMPARE(o->actuals().at(0), QVariant(QPointF())); - o.reset(); + o->reset(); QVERIFY(EVALUATE_VALUE("object.method_QPointF(object.method_get_QPointF())", v8::Undefined())); - QCOMPARE(o.error(), false); - QCOMPARE(o.invoked(), 12); - QCOMPARE(o.actuals().count(), 1); - QCOMPARE(o.actuals().at(0), QVariant(QPointF(99.3, -10.2))); + QCOMPARE(o->error(), false); + QCOMPARE(o->invoked(), 12); + QCOMPARE(o->actuals().count(), 1); + QCOMPARE(o->actuals().at(0), QVariant(QPointF(99.3, -10.2))); - o.reset(); + o->reset(); QVERIFY(EVALUATE_VALUE("object.method_QPointF(object.method_get_QPoint())", v8::Undefined())); - QCOMPARE(o.error(), false); - QCOMPARE(o.invoked(), 12); - QCOMPARE(o.actuals().count(), 1); - QCOMPARE(o.actuals().at(0), QVariant(QPointF(9, 12))); + QCOMPARE(o->error(), false); + QCOMPARE(o->invoked(), 12); + QCOMPARE(o->actuals().count(), 1); + QCOMPARE(o->actuals().at(0), QVariant(QPointF(9, 12))); - o.reset(); + o->reset(); QVERIFY(EVALUATE_VALUE("object.method_QObject(0)", v8::Undefined())); - QCOMPARE(o.error(), false); - QCOMPARE(o.invoked(), 13); - QCOMPARE(o.actuals().count(), 1); - QCOMPARE(o.actuals().at(0), qVariantFromValue((QObject *)0)); + QCOMPARE(o->error(), false); + QCOMPARE(o->invoked(), 13); + QCOMPARE(o->actuals().count(), 1); + QCOMPARE(o->actuals().at(0), qVariantFromValue((QObject *)0)); - o.reset(); + o->reset(); QVERIFY(EVALUATE_VALUE("object.method_QObject(\"Hello world\")", v8::Undefined())); - QCOMPARE(o.error(), false); - QCOMPARE(o.invoked(), 13); - QCOMPARE(o.actuals().count(), 1); - QCOMPARE(o.actuals().at(0), qVariantFromValue((QObject *)0)); + QCOMPARE(o->error(), false); + QCOMPARE(o->invoked(), 13); + QCOMPARE(o->actuals().count(), 1); + QCOMPARE(o->actuals().at(0), qVariantFromValue((QObject *)0)); - o.reset(); + o->reset(); QVERIFY(EVALUATE_VALUE("object.method_QObject(null)", v8::Undefined())); - QCOMPARE(o.error(), false); - QCOMPARE(o.invoked(), 13); - QCOMPARE(o.actuals().count(), 1); - QCOMPARE(o.actuals().at(0), qVariantFromValue((QObject *)0)); + QCOMPARE(o->error(), false); + QCOMPARE(o->invoked(), 13); + QCOMPARE(o->actuals().count(), 1); + QCOMPARE(o->actuals().at(0), qVariantFromValue((QObject *)0)); - o.reset(); + o->reset(); QVERIFY(EVALUATE_VALUE("object.method_QObject(undefined)", v8::Undefined())); - QCOMPARE(o.error(), false); - QCOMPARE(o.invoked(), 13); - QCOMPARE(o.actuals().count(), 1); - QCOMPARE(o.actuals().at(0), qVariantFromValue((QObject *)0)); + QCOMPARE(o->error(), false); + QCOMPARE(o->invoked(), 13); + QCOMPARE(o->actuals().count(), 1); + QCOMPARE(o->actuals().at(0), qVariantFromValue((QObject *)0)); - o.reset(); + o->reset(); QVERIFY(EVALUATE_VALUE("object.method_QObject(object)", v8::Undefined())); - QCOMPARE(o.error(), false); - QCOMPARE(o.invoked(), 13); - QCOMPARE(o.actuals().count(), 1); - QCOMPARE(o.actuals().at(0), qVariantFromValue((QObject *)&o)); + QCOMPARE(o->error(), false); + QCOMPARE(o->invoked(), 13); + QCOMPARE(o->actuals().count(), 1); + QCOMPARE(o->actuals().at(0), qVariantFromValue((QObject *)o)); - o.reset(); + o->reset(); QVERIFY(EVALUATE_VALUE("object.method_QScriptValue(null)", v8::Undefined())); - QCOMPARE(o.error(), false); - QCOMPARE(o.invoked(), 14); - QCOMPARE(o.actuals().count(), 1); - QVERIFY(qvariant_cast(o.actuals().at(0)).isNull()); + QCOMPARE(o->error(), false); + QCOMPARE(o->invoked(), 14); + QCOMPARE(o->actuals().count(), 1); + QVERIFY(qvariant_cast(o->actuals().at(0)).isNull()); - o.reset(); + o->reset(); QVERIFY(EVALUATE_VALUE("object.method_QScriptValue(undefined)", v8::Undefined())); - QCOMPARE(o.error(), false); - QCOMPARE(o.invoked(), 14); - QCOMPARE(o.actuals().count(), 1); - QVERIFY(qvariant_cast(o.actuals().at(0)).isUndefined()); + QCOMPARE(o->error(), false); + QCOMPARE(o->invoked(), 14); + QCOMPARE(o->actuals().count(), 1); + QVERIFY(qvariant_cast(o->actuals().at(0)).isUndefined()); - o.reset(); + o->reset(); QVERIFY(EVALUATE_VALUE("object.method_QScriptValue(19)", v8::Undefined())); - QCOMPARE(o.error(), false); - QCOMPARE(o.invoked(), 14); - QCOMPARE(o.actuals().count(), 1); - QVERIFY(qvariant_cast(o.actuals().at(0)).strictlyEquals(QJSValue(19))); + QCOMPARE(o->error(), false); + QCOMPARE(o->invoked(), 14); + QCOMPARE(o->actuals().count(), 1); + QVERIFY(qvariant_cast(o->actuals().at(0)).strictlyEquals(QJSValue(19))); - o.reset(); + o->reset(); QVERIFY(EVALUATE_VALUE("object.method_QScriptValue([19, 20])", v8::Undefined())); - QCOMPARE(o.error(), false); - QCOMPARE(o.invoked(), 14); - QCOMPARE(o.actuals().count(), 1); - QVERIFY(qvariant_cast(o.actuals().at(0)).isArray()); + QCOMPARE(o->error(), false); + QCOMPARE(o->invoked(), 14); + QCOMPARE(o->actuals().count(), 1); + QVERIFY(qvariant_cast(o->actuals().at(0)).isArray()); - o.reset(); + o->reset(); QVERIFY(EVALUATE_VALUE("object.method_intQScriptValue(4, null)", v8::Undefined())); - QCOMPARE(o.error(), false); - QCOMPARE(o.invoked(), 15); - QCOMPARE(o.actuals().count(), 2); - QCOMPARE(o.actuals().at(0), QVariant(4)); - QVERIFY(qvariant_cast(o.actuals().at(1)).isNull()); + QCOMPARE(o->error(), false); + QCOMPARE(o->invoked(), 15); + QCOMPARE(o->actuals().count(), 2); + QCOMPARE(o->actuals().at(0), QVariant(4)); + QVERIFY(qvariant_cast(o->actuals().at(1)).isNull()); - o.reset(); + o->reset(); QVERIFY(EVALUATE_VALUE("object.method_intQScriptValue(8, undefined)", v8::Undefined())); - QCOMPARE(o.error(), false); - QCOMPARE(o.invoked(), 15); - QCOMPARE(o.actuals().count(), 2); - QCOMPARE(o.actuals().at(0), QVariant(8)); - QVERIFY(qvariant_cast(o.actuals().at(1)).isUndefined()); + QCOMPARE(o->error(), false); + QCOMPARE(o->invoked(), 15); + QCOMPARE(o->actuals().count(), 2); + QCOMPARE(o->actuals().at(0), QVariant(8)); + QVERIFY(qvariant_cast(o->actuals().at(1)).isUndefined()); - o.reset(); + o->reset(); QVERIFY(EVALUATE_VALUE("object.method_intQScriptValue(3, 19)", v8::Undefined())); - QCOMPARE(o.error(), false); - QCOMPARE(o.invoked(), 15); - QCOMPARE(o.actuals().count(), 2); - QCOMPARE(o.actuals().at(0), QVariant(3)); - QVERIFY(qvariant_cast(o.actuals().at(1)).strictlyEquals(QJSValue(19))); + QCOMPARE(o->error(), false); + QCOMPARE(o->invoked(), 15); + QCOMPARE(o->actuals().count(), 2); + QCOMPARE(o->actuals().at(0), QVariant(3)); + QVERIFY(qvariant_cast(o->actuals().at(1)).strictlyEquals(QJSValue(19))); - o.reset(); + o->reset(); QVERIFY(EVALUATE_VALUE("object.method_intQScriptValue(44, [19, 20])", v8::Undefined())); - QCOMPARE(o.error(), false); - QCOMPARE(o.invoked(), 15); - QCOMPARE(o.actuals().count(), 2); - QCOMPARE(o.actuals().at(0), QVariant(44)); - QVERIFY(qvariant_cast(o.actuals().at(1)).isArray()); + QCOMPARE(o->error(), false); + QCOMPARE(o->invoked(), 15); + QCOMPARE(o->actuals().count(), 2); + QCOMPARE(o->actuals().at(0), QVariant(44)); + QVERIFY(qvariant_cast(o->actuals().at(1)).isArray()); - o.reset(); + o->reset(); QVERIFY(EVALUATE_ERROR("object.method_overload()")); - QCOMPARE(o.error(), false); - QCOMPARE(o.invoked(), -1); - QCOMPARE(o.actuals().count(), 0); + QCOMPARE(o->error(), false); + QCOMPARE(o->invoked(), -1); + QCOMPARE(o->actuals().count(), 0); - o.reset(); + o->reset(); QVERIFY(EVALUATE_VALUE("object.method_overload(10)", v8::Undefined())); - QCOMPARE(o.error(), false); - QCOMPARE(o.invoked(), 16); - QCOMPARE(o.actuals().count(), 1); - QCOMPARE(o.actuals().at(0), QVariant(10)); + QCOMPARE(o->error(), false); + QCOMPARE(o->invoked(), 16); + QCOMPARE(o->actuals().count(), 1); + QCOMPARE(o->actuals().at(0), QVariant(10)); - o.reset(); + o->reset(); QVERIFY(EVALUATE_VALUE("object.method_overload(10, 11)", v8::Undefined())); - QCOMPARE(o.error(), false); - QCOMPARE(o.invoked(), 17); - QCOMPARE(o.actuals().count(), 2); - QCOMPARE(o.actuals().at(0), QVariant(10)); - QCOMPARE(o.actuals().at(1), QVariant(11)); + QCOMPARE(o->error(), false); + QCOMPARE(o->invoked(), 17); + QCOMPARE(o->actuals().count(), 2); + QCOMPARE(o->actuals().at(0), QVariant(10)); + QCOMPARE(o->actuals().at(1), QVariant(11)); - o.reset(); + o->reset(); QVERIFY(EVALUATE_VALUE("object.method_overload(\"Hello\")", v8::Undefined())); - QCOMPARE(o.error(), false); - QCOMPARE(o.invoked(), 18); - QCOMPARE(o.actuals().count(), 1); - QCOMPARE(o.actuals().at(0), QVariant(QString("Hello"))); + QCOMPARE(o->error(), false); + QCOMPARE(o->invoked(), 18); + QCOMPARE(o->actuals().count(), 1); + QCOMPARE(o->actuals().at(0), QVariant(QString("Hello"))); - o.reset(); + o->reset(); QVERIFY(EVALUATE_VALUE("object.method_with_enum(9)", v8::Undefined())); - QCOMPARE(o.error(), false); - QCOMPARE(o.invoked(), 19); - QCOMPARE(o.actuals().count(), 1); - QCOMPARE(o.actuals().at(0), QVariant(9)); + QCOMPARE(o->error(), false); + QCOMPARE(o->invoked(), 19); + QCOMPARE(o->actuals().count(), 1); + QCOMPARE(o->actuals().at(0), QVariant(9)); - o.reset(); + o->reset(); QVERIFY(EVALUATE_VALUE("object.method_default(10)", v8::Integer::New(19))); - QCOMPARE(o.error(), false); - QCOMPARE(o.invoked(), 20); - QCOMPARE(o.actuals().count(), 2); - QCOMPARE(o.actuals().at(0), QVariant(10)); - QCOMPARE(o.actuals().at(1), QVariant(19)); + QCOMPARE(o->error(), false); + QCOMPARE(o->invoked(), 20); + QCOMPARE(o->actuals().count(), 2); + QCOMPARE(o->actuals().at(0), QVariant(10)); + QCOMPARE(o->actuals().at(1), QVariant(19)); - o.reset(); + o->reset(); QVERIFY(EVALUATE_VALUE("object.method_default(10, 13)", v8::Integer::New(13))); - QCOMPARE(o.error(), false); - QCOMPARE(o.invoked(), 20); - QCOMPARE(o.actuals().count(), 2); - QCOMPARE(o.actuals().at(0), QVariant(10)); - QCOMPARE(o.actuals().at(1), QVariant(13)); + QCOMPARE(o->error(), false); + QCOMPARE(o->invoked(), 20); + QCOMPARE(o->actuals().count(), 2); + QCOMPARE(o->actuals().at(0), QVariant(10)); + QCOMPARE(o->actuals().at(1), QVariant(13)); - o.reset(); + o->reset(); QVERIFY(EVALUATE_VALUE("object.method_inherited(9)", v8::Undefined())); - QCOMPARE(o.error(), false); - QCOMPARE(o.invoked(), -3); - QCOMPARE(o.actuals().count(), 1); - QCOMPARE(o.actuals().at(0), QVariant(9)); + QCOMPARE(o->error(), false); + QCOMPARE(o->invoked(), -3); + QCOMPARE(o->actuals().count(), 1); + QCOMPARE(o->actuals().at(0), QVariant(9)); - o.reset(); + o->reset(); QVERIFY(EVALUATE_VALUE("object.method_QVariant(9)", v8::Undefined())); - QCOMPARE(o.error(), false); - QCOMPARE(o.invoked(), 21); - QCOMPARE(o.actuals().count(), 2); - QCOMPARE(o.actuals().at(0), QVariant(9)); - QCOMPARE(o.actuals().at(1), QVariant()); + QCOMPARE(o->error(), false); + QCOMPARE(o->invoked(), 21); + QCOMPARE(o->actuals().count(), 2); + QCOMPARE(o->actuals().at(0), QVariant(9)); + QCOMPARE(o->actuals().at(1), QVariant()); - o.reset(); + o->reset(); QVERIFY(EVALUATE_VALUE("object.method_QVariant(\"Hello\", \"World\")", v8::Undefined())); - QCOMPARE(o.error(), false); - QCOMPARE(o.invoked(), 21); - QCOMPARE(o.actuals().count(), 2); - QCOMPARE(o.actuals().at(0), QVariant(QString("Hello"))); - QCOMPARE(o.actuals().at(1), QVariant(QString("World"))); + QCOMPARE(o->error(), false); + QCOMPARE(o->invoked(), 21); + QCOMPARE(o->actuals().count(), 2); + QCOMPARE(o->actuals().at(0), QVariant(QString("Hello"))); + QCOMPARE(o->actuals().at(1), QVariant(QString("World"))); - o.reset(); + o->reset(); QVERIFY(EVALUATE_VALUE("object.method_QJsonObject({foo:123})", v8::Undefined())); - QCOMPARE(o.error(), false); - QCOMPARE(o.invoked(), 22); - QCOMPARE(o.actuals().count(), 1); - QCOMPARE(qvariant_cast(o.actuals().at(0)), QJsonDocument::fromJson("{\"foo\":123}").object()); + QCOMPARE(o->error(), false); + QCOMPARE(o->invoked(), 22); + QCOMPARE(o->actuals().count(), 1); + QCOMPARE(qvariant_cast(o->actuals().at(0)), QJsonDocument::fromJson("{\"foo\":123}").object()); - o.reset(); + o->reset(); QVERIFY(EVALUATE_VALUE("object.method_QJsonArray([123])", v8::Undefined())); - QCOMPARE(o.error(), false); - QCOMPARE(o.invoked(), 23); - QCOMPARE(o.actuals().count(), 1); - QCOMPARE(qvariant_cast(o.actuals().at(0)), QJsonDocument::fromJson("[123]").array()); + QCOMPARE(o->error(), false); + QCOMPARE(o->invoked(), 23); + QCOMPARE(o->actuals().count(), 1); + QCOMPARE(qvariant_cast(o->actuals().at(0)), QJsonDocument::fromJson("[123]").array()); - o.reset(); + o->reset(); QVERIFY(EVALUATE_VALUE("object.method_QJsonValue(123)", v8::Undefined())); - QCOMPARE(o.error(), false); - QCOMPARE(o.invoked(), 24); - QCOMPARE(o.actuals().count(), 1); - QCOMPARE(qvariant_cast(o.actuals().at(0)), QJsonValue(123)); + QCOMPARE(o->error(), false); + QCOMPARE(o->invoked(), 24); + QCOMPARE(o->actuals().count(), 1); + QCOMPARE(qvariant_cast(o->actuals().at(0)), QJsonValue(123)); - o.reset(); + o->reset(); QVERIFY(EVALUATE_VALUE("object.method_QJsonValue(42.35)", v8::Undefined())); - QCOMPARE(o.error(), false); - QCOMPARE(o.invoked(), 24); - QCOMPARE(o.actuals().count(), 1); - QCOMPARE(qvariant_cast(o.actuals().at(0)), QJsonValue(42.35)); + QCOMPARE(o->error(), false); + QCOMPARE(o->invoked(), 24); + QCOMPARE(o->actuals().count(), 1); + QCOMPARE(qvariant_cast(o->actuals().at(0)), QJsonValue(42.35)); - o.reset(); + o->reset(); QVERIFY(EVALUATE_VALUE("object.method_QJsonValue('ciao')", v8::Undefined())); - QCOMPARE(o.error(), false); - QCOMPARE(o.invoked(), 24); - QCOMPARE(o.actuals().count(), 1); - QCOMPARE(qvariant_cast(o.actuals().at(0)), QJsonValue(QStringLiteral("ciao"))); + QCOMPARE(o->error(), false); + QCOMPARE(o->invoked(), 24); + QCOMPARE(o->actuals().count(), 1); + QCOMPARE(qvariant_cast(o->actuals().at(0)), QJsonValue(QStringLiteral("ciao"))); - o.reset(); + o->reset(); QVERIFY(EVALUATE_VALUE("object.method_QJsonValue(true)", v8::Undefined())); - QCOMPARE(o.error(), false); - QCOMPARE(o.invoked(), 24); - QCOMPARE(o.actuals().count(), 1); - QCOMPARE(qvariant_cast(o.actuals().at(0)), QJsonValue(true)); + QCOMPARE(o->error(), false); + QCOMPARE(o->invoked(), 24); + QCOMPARE(o->actuals().count(), 1); + QCOMPARE(qvariant_cast(o->actuals().at(0)), QJsonValue(true)); - o.reset(); + o->reset(); QVERIFY(EVALUATE_VALUE("object.method_QJsonValue(false)", v8::Undefined())); - QCOMPARE(o.error(), false); - QCOMPARE(o.invoked(), 24); - QCOMPARE(o.actuals().count(), 1); - QCOMPARE(qvariant_cast(o.actuals().at(0)), QJsonValue(false)); + QCOMPARE(o->error(), false); + QCOMPARE(o->invoked(), 24); + QCOMPARE(o->actuals().count(), 1); + QCOMPARE(qvariant_cast(o->actuals().at(0)), QJsonValue(false)); - o.reset(); + o->reset(); QVERIFY(EVALUATE_VALUE("object.method_QJsonValue(null)", v8::Undefined())); - QCOMPARE(o.error(), false); - QCOMPARE(o.invoked(), 24); - QCOMPARE(o.actuals().count(), 1); - QCOMPARE(qvariant_cast(o.actuals().at(0)), QJsonValue(QJsonValue::Null)); + QCOMPARE(o->error(), false); + QCOMPARE(o->invoked(), 24); + QCOMPARE(o->actuals().count(), 1); + QCOMPARE(qvariant_cast(o->actuals().at(0)), QJsonValue(QJsonValue::Null)); - o.reset(); + o->reset(); QVERIFY(EVALUATE_VALUE("object.method_QJsonValue(undefined)", v8::Undefined())); - QCOMPARE(o.error(), false); - QCOMPARE(o.invoked(), 24); - QCOMPARE(o.actuals().count(), 1); - QCOMPARE(qvariant_cast(o.actuals().at(0)), QJsonValue(QJsonValue::Undefined)); + QCOMPARE(o->error(), false); + QCOMPARE(o->invoked(), 24); + QCOMPARE(o->actuals().count(), 1); + QCOMPARE(qvariant_cast(o->actuals().at(0)), QJsonValue(QJsonValue::Undefined)); - o.reset(); + o->reset(); QVERIFY(EVALUATE_VALUE("object.method_overload({foo:123})", v8::Undefined())); - QCOMPARE(o.error(), false); - QCOMPARE(o.invoked(), 25); - QCOMPARE(o.actuals().count(), 1); - QCOMPARE(qvariant_cast(o.actuals().at(0)), QJsonDocument::fromJson("{\"foo\":123}").object()); + QCOMPARE(o->error(), false); + QCOMPARE(o->invoked(), 25); + QCOMPARE(o->actuals().count(), 1); + QCOMPARE(qvariant_cast(o->actuals().at(0)), QJsonDocument::fromJson("{\"foo\":123}").object()); - o.reset(); + o->reset(); QVERIFY(EVALUATE_VALUE("object.method_overload([123])", v8::Undefined())); - QCOMPARE(o.error(), false); - QCOMPARE(o.invoked(), 26); - QCOMPARE(o.actuals().count(), 1); - QCOMPARE(qvariant_cast(o.actuals().at(0)), QJsonDocument::fromJson("[123]").array()); + QCOMPARE(o->error(), false); + QCOMPARE(o->invoked(), 26); + QCOMPARE(o->actuals().count(), 1); + QCOMPARE(qvariant_cast(o->actuals().at(0)), QJsonDocument::fromJson("[123]").array()); - o.reset(); + o->reset(); QVERIFY(EVALUATE_VALUE("object.method_overload(null)", v8::Undefined())); - QCOMPARE(o.error(), false); - QCOMPARE(o.invoked(), 27); - QCOMPARE(o.actuals().count(), 1); - QCOMPARE(qvariant_cast(o.actuals().at(0)), QJsonValue(QJsonValue::Null)); + QCOMPARE(o->error(), false); + QCOMPARE(o->invoked(), 27); + QCOMPARE(o->actuals().count(), 1); + QCOMPARE(qvariant_cast(o->actuals().at(0)), QJsonValue(QJsonValue::Null)); - o.reset(); + o->reset(); QVERIFY(EVALUATE_VALUE("object.method_overload(undefined)", v8::Undefined())); - QCOMPARE(o.error(), false); - QCOMPARE(o.invoked(), 27); - QCOMPARE(o.actuals().count(), 1); - QCOMPARE(qvariant_cast(o.actuals().at(0)), QJsonValue(QJsonValue::Undefined)); + QCOMPARE(o->error(), false); + QCOMPARE(o->invoked(), 27); + QCOMPARE(o->actuals().count(), 1); + QCOMPARE(qvariant_cast(o->actuals().at(0)), QJsonValue(QJsonValue::Undefined)); - o.reset(); + o->reset(); QVERIFY(EVALUATE_ERROR("object.method_unknown(null)")); - QCOMPARE(o.error(), false); - QCOMPARE(o.invoked(), -1); - QCOMPARE(o.actuals().count(), 0); + QCOMPARE(o->error(), false); + QCOMPARE(o->invoked(), -1); + QCOMPARE(o->actuals().count(), 0); } // QTBUG-13047 (check that you can pass registered object types as args) -- 1.7.2.5