void boolPropertiesEvaluateAsBool();
void methods();
void signalAssignment();
+ void signalArguments();
void bindingLoop();
void basicExpressions();
void basicExpressions_data();
void signalWithJSValueInVariant_twoEngines();
void signalWithQJSValue_data();
void signalWithQJSValue();
- void moduleApi_data();
- void moduleApi();
+ void singletonType_data();
+ void singletonType();
+ void singletonTypeCaching_data();
+ void singletonTypeCaching();
+ void singletonTypeImportOrder();
+ void singletonTypeResolution();
void importScripts_data();
void importScripts();
void scarceResources();
void sequenceConversionBindings();
void sequenceConversionCopy();
void assignSequenceTypes();
+ void sequenceSort_data();
+ void sequenceSort();
void qtbug_22464();
void qtbug_21580();
void singleV8BindingDestroyedDuringEvaluation();
void overrideDataAssert();
void fallbackBindings_data();
void fallbackBindings();
+ void propertyOverride();
+ void concatenatedStringPropertyAccess();
private:
static void propertyVarWeakRefCallback(v8::Persistent<v8::Value> object, void* parameter);
{
QQmlComponent component(&engine, testFileUrl("signalAssignment.3.qml"));
+ QVERIFY(component.isError());
+ QString expectedErrorString = component.url().toString() + QLatin1String(":4 Signal uses unnamed parameter followed by named parameter.\n");
+ QCOMPARE(component.errorString(), expectedErrorString);
+ }
+
+ {
+ QQmlComponent component(&engine, testFileUrl("signalAssignment.4.qml"));
+ QVERIFY(component.isError());
+ QString expectedErrorString = component.url().toString() + QLatin1String(":5 Signal parameter \"parseInt\" hides global variable.\n");
+ QCOMPARE(component.errorString(), expectedErrorString);
+ }
+}
+
+void tst_qqmlecmascript::signalArguments()
+{
+ {
+ QQmlComponent component(&engine, testFileUrl("signalArguments.1.qml"));
MyQmlObject *object = qobject_cast<MyQmlObject *>(component.create());
QVERIFY(object != 0);
QCOMPARE(object->string(), QString());
- emit object->unnamedArgumentSignal(19, 10.25, "Hello world!");
- QEXPECT_FAIL("", "QTBUG-24481", Continue);
- QCOMPARE(object->string(), QString("pass 19 Hello world!"));
+ emit object->basicSignal();
+ QCOMPARE(object->string(), QString("pass"));
+ QCOMPARE(object->property("argumentCount").toInt(), 0);
+ QCOMPARE(object->property("calleeCorrect").toBool(), true);
delete object;
}
{
- QQmlComponent component(&engine, testFileUrl("signalAssignment.4.qml"));
+ QQmlComponent component(&engine, testFileUrl("signalArguments.2.qml"));
MyQmlObject *object = qobject_cast<MyQmlObject *>(component.create());
QVERIFY(object != 0);
QCOMPARE(object->string(), QString());
- emit object->signalWithGlobalName(19);
- QCOMPARE(object->string(), QString("pass 5"));
+ emit object->argumentSignal(19, "Hello world!", 10.25, MyQmlObject::EnumValue4, Qt::RightButton);
+ QCOMPARE(object->string(), QString("pass 19 Hello world! 10.25 3 2"));
+ QCOMPARE(object->property("argumentCount").toInt(), 5);
+ QCOMPARE(object->property("calleeCorrect").toBool(), true);
delete object;
}
}
MyExpression expr(&context, "[a, b, c, 10]");
QVariant result = expr.evaluate();
- QCOMPARE(result.userType(), qMetaTypeId<QList<QObject *> >());
- QList<QObject *> list = qvariant_cast<QList<QObject *> >(result);
+ QCOMPARE(result.userType(), qMetaTypeId<QVariantList>());
+ QVariantList list = qvariant_cast<QVariantList>(result);
QCOMPARE(list.count(), 4);
- QCOMPARE(list.at(0), &obj1);
- QCOMPARE(list.at(1), &obj2);
- QCOMPARE(list.at(2), &obj3);
- QCOMPARE(list.at(3), (QObject *)0);
+ QCOMPARE(list.at(0).value<QObject*>(), &obj1);
+ QCOMPARE(list.at(1).value<QObject*>(), &obj2);
+ QCOMPARE(list.at(2).value<QObject*>(), &obj3);
+ QCOMPARE(list.at(3).value<int>(), 10);
}
// Tests that modifying a context property will reevaluate expressions
QCOMPARE(child->property("enumTypeHasOwnProperty").toBool(), true);
QCOMPARE(child->property("typenameHasOwnProperty").toBool(), true);
QCOMPARE(child->property("typenameHasOwnProperty2").toBool(), true);
- QCOMPARE(child->property("moduleApiTypeHasOwnProperty").toBool(), true);
- QCOMPARE(child->property("moduleApiPropertyTypeHasOwnProperty").toBool(), true);
+ QCOMPARE(child->property("singletonTypeTypeHasOwnProperty").toBool(), true);
+ QCOMPARE(child->property("singletonTypePropertyTypeHasOwnProperty").toBool(), true);
QTest::ignoreMessage(QtWarningMsg, warning1.toLatin1().constData());
QMetaObject::invokeMethod(child, "testHasOwnPropertyFailureOne");
QCOMPARE(child->property("enumNonValueHasOwnProperty").toBool(), false);
QTest::ignoreMessage(QtWarningMsg, warning2.toLatin1().constData());
QMetaObject::invokeMethod(child, "testHasOwnPropertyFailureTwo");
- QCOMPARE(child->property("moduleApiNonPropertyHasOwnProperty").toBool(), false);
+ QCOMPARE(child->property("singletonTypeNonPropertyHasOwnProperty").toBool(), false);
QTest::ignoreMessage(QtWarningMsg, warning3.toLatin1().constData());
QMetaObject::invokeMethod(child, "testHasOwnPropertyFailureThree");
QCOMPARE(child->property("listAtInvalidHasOwnProperty").toBool(), false);
void tst_qqmlecmascript::callQtInvokables()
{
- MyInvokableObject o;
+ // This object has JS ownership, as the call to method_NoArgs_QObject() in this test will return
+ // it, which will set the indestructible flag to false.
+ MyInvokableObject *o = new MyInvokableObject();
QQmlEngine qmlengine;
QQmlEnginePrivate *ep = QQmlEnginePrivate::get(&qmlengine);
v8::HandleScope handle_scope;
v8::Context::Scope scope(engine->context());
- v8::Local<v8::Object> object = engine->newQObject(&o)->ToObject();
+ v8::Local<v8::Object> 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<v8::Value> 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<v8::Value> 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<v8::Value> 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<QJSValue>(o.actuals().at(0)).isNull());
+ QCOMPARE(o->error(), false);
+ QCOMPARE(o->invoked(), 14);
+ QCOMPARE(o->actuals().count(), 1);
+ QVERIFY(qvariant_cast<QJSValue>(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<QJSValue>(o.actuals().at(0)).isUndefined());
+ QCOMPARE(o->error(), false);
+ QCOMPARE(o->invoked(), 14);
+ QCOMPARE(o->actuals().count(), 1);
+ QVERIFY(qvariant_cast<QJSValue>(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<QJSValue>(o.actuals().at(0)).strictlyEquals(QJSValue(19)));
+ QCOMPARE(o->error(), false);
+ QCOMPARE(o->invoked(), 14);
+ QCOMPARE(o->actuals().count(), 1);
+ QVERIFY(qvariant_cast<QJSValue>(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<QJSValue>(o.actuals().at(0)).isArray());
+ QCOMPARE(o->error(), false);
+ QCOMPARE(o->invoked(), 14);
+ QCOMPARE(o->actuals().count(), 1);
+ QVERIFY(qvariant_cast<QJSValue>(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<QJSValue>(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<QJSValue>(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<QJSValue>(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<QJSValue>(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<QJSValue>(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<QJSValue>(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<QJSValue>(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<QJSValue>(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<QJsonObject>(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<QJsonObject>(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<QJsonArray>(o.actuals().at(0)), QJsonDocument::fromJson("[123]").array());
+ QCOMPARE(o->error(), false);
+ QCOMPARE(o->invoked(), 23);
+ QCOMPARE(o->actuals().count(), 1);
+ QCOMPARE(qvariant_cast<QJsonArray>(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<QJsonValue>(o.actuals().at(0)), QJsonValue(123));
+ QCOMPARE(o->error(), false);
+ QCOMPARE(o->invoked(), 24);
+ QCOMPARE(o->actuals().count(), 1);
+ QCOMPARE(qvariant_cast<QJsonValue>(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<QJsonValue>(o.actuals().at(0)), QJsonValue(42.35));
+ QCOMPARE(o->error(), false);
+ QCOMPARE(o->invoked(), 24);
+ QCOMPARE(o->actuals().count(), 1);
+ QCOMPARE(qvariant_cast<QJsonValue>(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<QJsonValue>(o.actuals().at(0)), QJsonValue(QStringLiteral("ciao")));
+ QCOMPARE(o->error(), false);
+ QCOMPARE(o->invoked(), 24);
+ QCOMPARE(o->actuals().count(), 1);
+ QCOMPARE(qvariant_cast<QJsonValue>(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<QJsonValue>(o.actuals().at(0)), QJsonValue(true));
+ QCOMPARE(o->error(), false);
+ QCOMPARE(o->invoked(), 24);
+ QCOMPARE(o->actuals().count(), 1);
+ QCOMPARE(qvariant_cast<QJsonValue>(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<QJsonValue>(o.actuals().at(0)), QJsonValue(false));
+ QCOMPARE(o->error(), false);
+ QCOMPARE(o->invoked(), 24);
+ QCOMPARE(o->actuals().count(), 1);
+ QCOMPARE(qvariant_cast<QJsonValue>(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<QJsonValue>(o.actuals().at(0)), QJsonValue(QJsonValue::Null));
+ QCOMPARE(o->error(), false);
+ QCOMPARE(o->invoked(), 24);
+ QCOMPARE(o->actuals().count(), 1);
+ QCOMPARE(qvariant_cast<QJsonValue>(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<QJsonValue>(o.actuals().at(0)), QJsonValue(QJsonValue::Undefined));
+ QCOMPARE(o->error(), false);
+ QCOMPARE(o->invoked(), 24);
+ QCOMPARE(o->actuals().count(), 1);
+ QCOMPARE(qvariant_cast<QJsonValue>(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<QJsonObject>(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<QJsonObject>(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<QJsonArray>(o.actuals().at(0)), QJsonDocument::fromJson("[123]").array());
+ QCOMPARE(o->error(), false);
+ QCOMPARE(o->invoked(), 26);
+ QCOMPARE(o->actuals().count(), 1);
+ QCOMPARE(qvariant_cast<QJsonArray>(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<QJsonValue>(o.actuals().at(0)), QJsonValue(QJsonValue::Null));
+ QCOMPARE(o->error(), false);
+ QCOMPARE(o->invoked(), 27);
+ QCOMPARE(o->actuals().count(), 1);
+ QCOMPARE(qvariant_cast<QJsonValue>(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<QJsonValue>(o.actuals().at(0)), QJsonValue(QJsonValue::Undefined));
+ QCOMPARE(o->error(), false);
+ QCOMPARE(o->invoked(), 27);
+ QCOMPARE(o->actuals().count(), 1);
+ QCOMPARE(qvariant_cast<QJsonValue>(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)
QCOMPARE(result.value, type.value);
+ MyQmlObject::MyOtherType othertype;
+ othertype.value = 17;
+ emit object->signalWithCompletelyUnknownType(othertype);
+
+ QVERIFY(!object->variant().isValid());
delete object;
}
QVERIFY(object->qjsvalue().strictlyEquals(value));
}
-void tst_qqmlecmascript::moduleApi_data()
+void tst_qqmlecmascript::singletonType_data()
{
QTest::addColumn<QUrl>("testfile");
QTest::addColumn<QString>("errorMessage");
QTest::addColumn<QStringList>("readBackProperties");
QTest::addColumn<QVariantList>("readBackExpectedValues");
- QTest::newRow("qobject, register + read + method")
- << testFileUrl("moduleapi/qobjectModuleApi.qml")
+ QTest::newRow("qobject, register + read + method [no qualifier]")
+ << testFileUrl("singletontype/qobjectSingletonTypeNoQualifier.qml")
<< QString()
<< QStringList()
- << (QStringList() << "existingUriTest" << "qobjectTest" << "qobjectMethodTest"
- << "qobjectMinorVersionTest" << "qobjectMajorVersionTest" << "qobjectParentedTest")
- << (QVariantList() << 20 << 20 << 1 << 20 << 20 << 26)
+ << (QStringList() << "qobjectPropertyTest" << "qobjectMethodTest")
+ << (QVariantList() << 20 << 1)
<< QStringList()
<< QVariantList()
<< QStringList()
<< QVariantList();
- QTest::newRow("script, register + read")
- << testFileUrl("moduleapi/scriptModuleApi.qml")
+ QTest::newRow("script, register + read [no qualifier]")
+ << testFileUrl("singletontype/scriptSingletonTypeNoQualifier.qml")
<< QString()
<< QStringList()
<< (QStringList() << "scriptTest")
<< QStringList()
<< QVariantList();
- QTest::newRow("qobject, caching + read")
- << testFileUrl("moduleapi/qobjectModuleApiCaching.qml")
+ QTest::newRow("qobject, register + read + method")
+ << testFileUrl("singletontype/qobjectSingletonType.qml")
<< QString()
<< QStringList()
- << (QStringList() << "existingUriTest" << "qobjectParentedTest")
- << (QVariantList() << 20 << 26) // 26, shouldn't have incremented to 27.
+ << (QStringList() << "existingUriTest" << "qobjectTest" << "qobjectMethodTest"
+ << "qobjectMinorVersionMethodTest" << "qobjectMinorVersionTest"
+ << "qobjectMajorVersionTest" << "qobjectParentedTest")
+ << (QVariantList() << 20 << 20 << 2 << 1 << 20 << 20 << 26)
<< QStringList()
<< QVariantList()
<< QStringList()
<< QVariantList();
- QTest::newRow("script, caching + read")
- << testFileUrl("moduleapi/scriptModuleApiCaching.qml")
+ QTest::newRow("script, register + read")
+ << testFileUrl("singletontype/scriptSingletonType.qml")
<< QString()
<< QStringList()
<< (QStringList() << "scriptTest")
- << (QVariantList() << 13) // 13, shouldn't have incremented to 14.
+ << (QVariantList() << 14) // will have incremented, since we create a new engine each row in this test.
<< QStringList()
<< QVariantList()
<< QStringList()
<< QVariantList();
QTest::newRow("qobject, writing + readonly constraints")
- << testFileUrl("moduleapi/qobjectModuleApiWriting.qml")
+ << testFileUrl("singletontype/qobjectSingletonTypeWriting.qml")
<< QString()
- << (QStringList() << QString(testFileUrl("moduleapi/qobjectModuleApiWriting.qml").toString() + QLatin1String(":15: Error: Cannot assign to read-only property \"qobjectTestProperty\"")))
+ << (QStringList() << QString(testFileUrl("singletontype/qobjectSingletonTypeWriting.qml").toString() + QLatin1String(":15: Error: Cannot assign to read-only property \"qobjectTestProperty\"")))
<< (QStringList() << "readOnlyProperty" << "writableProperty" << "writableFinalProperty")
<< (QVariantList() << 20 << 50 << 10)
<< (QStringList() << "firstProperty" << "secondProperty")
<< (QVariantList() << 20 << 30 << 30);
QTest::newRow("script, writing + readonly constraints")
- << testFileUrl("moduleapi/scriptModuleApiWriting.qml")
+ << testFileUrl("singletontype/scriptSingletonTypeWriting.qml")
<< QString()
- << (QStringList() << QString(testFileUrl("moduleapi/scriptModuleApiWriting.qml").toString() + QLatin1String(":21: Error: Cannot assign to read-only property \"scriptTestProperty\"")))
+ << (QStringList() << QString(testFileUrl("singletontype/scriptSingletonTypeWriting.qml").toString() + QLatin1String(":21: Error: Cannot assign to read-only property \"scriptTestProperty\"")))
<< (QStringList() << "readBack" << "unchanged")
- << (QVariantList() << 13 << 42)
+ << (QVariantList() << 15 << 42)
<< (QStringList() << "firstProperty" << "secondProperty")
<< (QVariantList() << 30 << 30)
<< (QStringList() << "readBack" << "unchanged")
<< (QVariantList() << 30 << 42);
- QTest::newRow("qobject module API enum values in JS")
- << testFileUrl("moduleapi/qobjectModuleApiEnums.qml")
+ QTest::newRow("qobject singleton Type enum values in JS")
+ << testFileUrl("singletontype/qobjectSingletonTypeEnums.qml")
<< QString()
<< QStringList()
<< (QStringList() << "enumValue" << "enumMethod")
<< QVariantList();
QTest::newRow("qobject, invalid major version fail")
- << testFileUrl("moduleapi/moduleApiMajorVersionFail.qml")
+ << testFileUrl("singletontype/singletonTypeMajorVersionFail.qml")
<< QString("QQmlComponent: Component is not ready")
<< QStringList()
<< QStringList()
<< QVariantList();
QTest::newRow("qobject, invalid minor version fail")
- << testFileUrl("moduleapi/moduleApiMinorVersionFail.qml")
+ << testFileUrl("singletontype/singletonTypeMinorVersionFail.qml")
<< QString("QQmlComponent: Component is not ready")
<< QStringList()
<< QStringList()
<< QVariantList()
<< QStringList()
<< QVariantList();
+
+ QTest::newRow("qobject, multiple in namespace")
+ << testFileUrl("singletontype/singletonTypeMultiple.qml")
+ << QString()
+ << QStringList()
+ << (QStringList() << "first" << "second")
+ << (QVariantList() << 35 << 42)
+ << QStringList()
+ << QVariantList()
+ << QStringList()
+ << QVariantList();
}
-void tst_qqmlecmascript::moduleApi()
+void tst_qqmlecmascript::singletonType()
{
QFETCH(QUrl, testfile);
QFETCH(QString, errorMessage);
QFETCH(QStringList, readBackProperties);
QFETCH(QVariantList, readBackExpectedValues);
- QQmlComponent component(&engine, testfile);
+ QQmlEngine cleanEngine; // so tests don't interfere which each other, as singleton types are engine-singletons only.
+ QQmlComponent component(&cleanEngine, testfile);
if (!errorMessage.isEmpty())
QTest::ignoreMessage(QtWarningMsg, errorMessage.toLatin1().constData());
}
}
+void tst_qqmlecmascript::singletonTypeCaching_data()
+{
+ QTest::addColumn<QUrl>("testfile");
+ QTest::addColumn<QStringList>("readProperties");
+
+ QTest::newRow("qobject, caching + read")
+ << testFileUrl("singletontype/qobjectSingletonTypeCaching.qml")
+ << (QStringList() << "existingUriTest" << "qobjectParentedTest");
+
+ QTest::newRow("script, caching + read")
+ << testFileUrl("singletontype/scriptSingletonTypeCaching.qml")
+ << (QStringList() << "scriptTest");
+}
+
+void tst_qqmlecmascript::singletonTypeCaching()
+{
+ QFETCH(QUrl, testfile);
+ QFETCH(QStringList, readProperties);
+
+ // ensure that the singleton type instances are cached per-engine.
+
+ QQmlEngine cleanEngine;
+ QQmlComponent component(&cleanEngine, testfile);
+ QObject *object = component.create();
+ QVERIFY(object != 0);
+ QList<QVariant> firstValues;
+ QMetaObject::invokeMethod(object, "modifyValues");
+ for (int i = 0; i < readProperties.size(); ++i)
+ firstValues << object->property(readProperties.at(i).toLatin1().constData());
+ delete object;
+
+ QQmlComponent component2(&cleanEngine, testfile);
+ QObject *object2 = component2.create();
+ QVERIFY(object2 != 0);
+ for (int i = 0; i < readProperties.size(); ++i)
+ QCOMPARE(object2->property(readProperties.at(i).toLatin1().constData()), firstValues.at(i)); // cached, shouldn't have changed.
+ delete object2;
+}
+
+void tst_qqmlecmascript::singletonTypeImportOrder()
+{
+ QQmlComponent component(&engine, testFileUrl("singletontype/singletonTypeImportOrder.qml"));
+ QObject *object = component.create();
+ QVERIFY(object);
+ QVERIFY(object->property("v") == 1);
+ delete object;
+}
+
+void tst_qqmlecmascript::singletonTypeResolution()
+{
+ QQmlComponent component(&engine, testFileUrl("singletontype/singletonTypeResolution.qml"));
+ QObject *object = component.create();
+ QVERIFY(object);
+ QVERIFY(object->property("success") == true);
+ delete object;
+}
+
void tst_qqmlecmascript::importScripts_data()
{
QTest::addColumn<QUrl>("testfile");
<< (QStringList() << QLatin1String("testValue"))
<< (QVariantList() << QVariant(18));
- QTest::newRow("import module api into js import")
- << testFileUrl("jsimport/testImportModuleApi.qml")
+ QTest::newRow("import singleton type into js import")
+ << testFileUrl("jsimport/testImportSingletonType.qml")
<< QString()
<< QStringList()
<< (QStringList() << QLatin1String("testValue"))
<< QVariant(QString("Hello"))
<< QVariant(QString("Hello")));
+ QTest::newRow("import module which exports a script which imports a remote module")
+ << testFileUrl("jsimport/testJsRemoteImport.qml")
+ << QString()
+ << QStringList()
+ << (QStringList() << QLatin1String("importedScriptStringValue")
+ << QLatin1String("renamedScriptStringValue")
+ << QLatin1String("reimportedScriptStringValue"))
+ << (QVariantList() << QVariant(QString("Hello"))
+ << QVariant(QString("Hello"))
+ << QVariant(QString("Hello")));
+
QTest::newRow("malformed import statement")
<< testFileUrl("jsimportfail/malformedImport.qml")
<< QString()
QTest::newRow("malformed file name")
<< testFileUrl("jsimportfail/malformedFile.qml")
<< QString()
- << (QStringList() << testFileUrl("jsimportfail/malformedFile.js").toString() + QLatin1String(":0:1: Imported file must be a script"))
+ << (QStringList() << testFileUrl("jsimportfail/malformedFile.js").toString() + QLatin1String(":1:9: Imported file must be a script"))
<< QStringList()
<< QVariantList();
QTest::newRow("missing file qualifier")
<< testFileUrl("jsimportfail/missingFileQualifier.qml")
<< QString()
- << (QStringList() << testFileUrl("jsimportfail/missingFileQualifier.js").toString() + QLatin1String(":0:1: File import requires a qualifier"))
+ << (QStringList() << testFileUrl("jsimportfail/missingFileQualifier.js").toString() + QLatin1String(":1:1: File import requires a qualifier"))
<< QStringList()
<< QVariantList();
QTest::newRow("malformed file qualifier")
<< testFileUrl("jsimportfail/malformedFileQualifier.qml")
<< QString()
- << (QStringList() << testFileUrl("jsimportfail/malformedFileQualifier.js").toString() + QLatin1String(":0:1: File import requires a qualifier"))
+ << (QStringList() << testFileUrl("jsimportfail/malformedFileQualifier.js").toString() + QLatin1String(":1:20: File import requires a qualifier"))
<< QStringList()
<< QVariantList();
QTest::newRow("malformed module qualifier 2")
<< testFileUrl("jsimportfail/malformedFileQualifier.2.qml")
<< QString()
- << (QStringList() << testFileUrl("jsimportfail/malformedFileQualifier.2.js").toString() + QLatin1String(":0:1: Invalid import qualifier"))
+ << (QStringList() << testFileUrl("jsimportfail/malformedFileQualifier.2.js").toString() + QLatin1String(":1:1: Invalid import qualifier"))
<< QStringList()
<< QVariantList();
QTest::newRow("malformed module uri")
<< testFileUrl("jsimportfail/malformedModule.qml")
<< QString()
- << (QStringList() << testFileUrl("jsimportfail/malformedModule.js").toString() + QLatin1String(":0:1: Invalid module URI"))
+ << (QStringList() << testFileUrl("jsimportfail/malformedModule.js").toString() + QLatin1String(":1:17: Invalid module URI"))
<< QStringList()
<< QVariantList();
QTest::newRow("missing module version")
<< testFileUrl("jsimportfail/missingModuleVersion.qml")
<< QString()
- << (QStringList() << testFileUrl("jsimportfail/missingModuleVersion.js").toString() + QLatin1String(":0:1: Module import requires a version"))
+ << (QStringList() << testFileUrl("jsimportfail/missingModuleVersion.js").toString() + QLatin1String(":1:17: Module import requires a version"))
<< QStringList()
<< QVariantList();
QTest::newRow("malformed module version")
<< testFileUrl("jsimportfail/malformedModuleVersion.qml")
<< QString()
- << (QStringList() << testFileUrl("jsimportfail/malformedModuleVersion.js").toString() + QLatin1String(":0:1: Module import requires a version"))
+ << (QStringList() << testFileUrl("jsimportfail/malformedModuleVersion.js").toString() + QLatin1String(":1:17: Module import requires a version"))
<< QStringList()
<< QVariantList();
QTest::newRow("missing module qualifier")
<< testFileUrl("jsimportfail/missingModuleQualifier.qml")
<< QString()
- << (QStringList() << testFileUrl("jsimportfail/missingModuleQualifier.js").toString() + QLatin1String(":0:1: Module import requires a qualifier"))
+ << (QStringList() << testFileUrl("jsimportfail/missingModuleQualifier.js").toString() + QLatin1String(":1:1: Module import requires a qualifier"))
<< QStringList()
<< QVariantList();
QTest::newRow("malformed module qualifier")
<< testFileUrl("jsimportfail/malformedModuleQualifier.qml")
<< QString()
- << (QStringList() << testFileUrl("jsimportfail/malformedModuleQualifier.js").toString() + QLatin1String(":0:1: Module import requires a qualifier"))
+ << (QStringList() << testFileUrl("jsimportfail/malformedModuleQualifier.js").toString() + QLatin1String(":1:21: Module import requires a qualifier"))
<< QStringList()
<< QVariantList();
QTest::newRow("malformed module qualifier 2")
<< testFileUrl("jsimportfail/malformedModuleQualifier.2.qml")
<< QString()
- << (QStringList() << testFileUrl("jsimportfail/malformedModuleQualifier.2.js").toString() + QLatin1String(":0:1: Invalid import qualifier"))
+ << (QStringList() << testFileUrl("jsimportfail/malformedModuleQualifier.2.js").toString() + QLatin1String(":1:1: Invalid import qualifier"))
<< QStringList()
<< QVariantList();
}
QFETCH(QStringList, propertyNames);
QFETCH(QVariantList, propertyValues);
+ TestHTTPServer server(8111);
+ QVERIFY(server.isValid());
+ server.serveDirectory(dataDirectory() + "/remote");
+
+ QStringList importPathList = engine.importPathList();
+
+ QString remotePath(QLatin1String("http://127.0.0.1:8111/"));
+ engine.addImportPath(remotePath);
+
QQmlComponent component(&engine, testfile);
if (!errorMessage.isEmpty())
foreach (const QString &warning, warningMessages)
QTest::ignoreMessage(QtWarningMsg, warning.toLatin1().constData());
+ QTRY_VERIFY(component.isReady());
+
QObject *object = component.create();
if (!errorMessage.isEmpty()) {
QVERIFY(object == 0);
QCOMPARE(object->property(propertyNames.at(i).toLatin1().constData()), propertyValues.at(i));
delete object;
}
+
+ engine.setImportPathList(importPathList);
}
void tst_qqmlecmascript::scarceResources_other()
MySequenceConversionObject *seq = object->findChild<MySequenceConversionObject*>("msco");
QVERIFY(seq != 0);
- // we haven't registered QList<QPoint> as a sequence type.
- QString warningOne = QLatin1String("QMetaProperty::read: Unable to handle unregistered datatype 'QList<QPoint>' for property 'MySequenceConversionObject::pointListProperty'");
+ // we haven't registered QList<NonRegisteredType> as a sequence type.
+ QString warningOne = QLatin1String("QMetaProperty::read: Unable to handle unregistered datatype 'QList<NonRegisteredType>' for property 'MySequenceConversionObject::typeListProperty'");
QString warningTwo = qmlFile.toString() + QLatin1String(":18: TypeError: Cannot read property 'length' of undefined");
QTest::ignoreMessage(QtWarningMsg, warningOne.toLatin1().constData());
QTest::ignoreMessage(QtWarningMsg, warningTwo.toLatin1().constData());
QMetaObject::invokeMethod(object, "performTest");
- // QList<QPoint> has not been registered as a sequence type.
+ // QList<NonRegisteredType> has not been registered as a sequence type.
QCOMPARE(object->property("pointListLength").toInt(), 0);
QVERIFY(!object->property("pointList").isValid());
- QTest::ignoreMessage(QtWarningMsg, "QMetaProperty::read: Unable to handle unregistered datatype 'QList<QPoint>' for property 'MySequenceConversionObject::pointListProperty'");
- QQmlProperty seqProp(seq, "pointListProperty", &engine);
+ QTest::ignoreMessage(QtWarningMsg, "QMetaProperty::read: Unable to handle unregistered datatype 'QList<NonRegisteredType>' for property 'MySequenceConversionObject::typeListProperty'");
+ QQmlProperty seqProp(seq, "typeListProperty", &engine);
QVERIFY(!seqProp.read().isValid()); // not a valid/known sequence type
delete object;
QCOMPARE(object->property("success").toBool(), true);
QMetaObject::invokeMethod(object, "testEqualitySemantics");
QCOMPARE(object->property("success").toBool(), true);
+ QMetaObject::invokeMethod(object, "testCopyParameters");
+ QCOMPARE(object->property("success").toBool(), true);
+ QMetaObject::invokeMethod(object, "testReferenceParameters");
+ QCOMPARE(object->property("success").toBool(), true);
delete object;
}
QTest::newRow("Property without fallback") << "fallbackBindings.1.qml";
QTest::newRow("Property fallback") << "fallbackBindings.2.qml";
- QTest::newRow("ModuleAPI without fallback") << "fallbackBindings.3.qml";
- QTest::newRow("ModuleAPI fallback") << "fallbackBindings.4.qml";
+ QTest::newRow("SingletonType without fallback") << "fallbackBindings.3.qml";
+ QTest::newRow("SingletonType fallback") << "fallbackBindings.4.qml";
QTest::newRow("Attached without fallback") << "fallbackBindings.5.qml";
QTest::newRow("Attached fallback") << "fallbackBindings.6.qml";
+ QTest::newRow("Subproperty without fallback") << "fallbackBindings.7.qml";
+ QTest::newRow("Subproperty fallback") << "fallbackBindings.8.qml";
}
void tst_qqmlecmascript::fallbackBindings()
QCOMPARE(object->property("success").toBool(), true);
}
+void tst_qqmlecmascript::propertyOverride()
+{
+ QQmlComponent component(&engine, testFileUrl("propertyOverride.qml"));
+ QScopedPointer<QObject> object(component.create());
+ QVERIFY(object != 0);
+
+ QCOMPARE(object->property("success").toBool(), true);
+}
+
+void tst_qqmlecmascript::sequenceSort_data()
+{
+ QTest::addColumn<QString>("function");
+ QTest::addColumn<bool>("useComparer");
+
+ QTest::newRow("qtbug_25269") << "test_qtbug_25269" << false;
+
+ const char *types[] = { "alphabet", "numbers", "reals" };
+ const char *sort[] = { "insertionSort", "quickSort" };
+
+ for (size_t t=0 ; t < sizeof(types)/sizeof(types[0]) ; ++t) {
+ for (size_t s=0 ; s < sizeof(sort)/sizeof(sort[0]) ; ++s) {
+ for (int c=0 ; c < 2 ; ++c) {
+ QString testName = QLatin1String(types[t]) + QLatin1String("_") + QLatin1String(sort[s]);
+ QString fnName = QLatin1String("test_") + testName;
+ bool useComparer = c != 0;
+ testName += useComparer ? QLatin1String("[custom]") : QLatin1String("[default]");
+ QTest::newRow(testName.toAscii().constData()) << fnName << useComparer;
+ }
+ }
+ }
+}
+
+void tst_qqmlecmascript::sequenceSort()
+{
+ QFETCH(QString, function);
+ QFETCH(bool, useComparer);
+
+ QQmlComponent component(&engine, testFileUrl("sequenceSort.qml"));
+
+ QObject *object = component.create();
+ if (object == 0)
+ qDebug() << component.errorString();
+ QVERIFY(object != 0);
+
+ QVariant q;
+ QMetaObject::invokeMethod(object, function.toAscii().constData(), Q_RETURN_ARG(QVariant, q), Q_ARG(QVariant, useComparer));
+ QVERIFY(q.toBool() == true);
+
+ delete object;
+}
+
+void tst_qqmlecmascript::concatenatedStringPropertyAccess()
+{
+ QQmlComponent component(&engine, testFileUrl("concatenatedStringPropertyAccess.qml"));
+ QObject *object = component.create();
+ QVERIFY(object);
+ QVERIFY(object->property("success").toBool());
+ delete object;
+}
+
QTEST_MAIN(tst_qqmlecmascript)
#include "tst_qqmlecmascript.moc"