X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=tests%2Fauto%2Fqml%2Fqqmlecmascript%2Ftst_qqmlecmascript.cpp;h=96c0ec10803a030dc847643721efbf5325165a8f;hb=a6277bb84d208279abb600f9eae801b3aacecc4c;hp=6fa6c3b49e0abecb95bc5d039bb1af371d7e54e1;hpb=6ebf215fdaf2d757ab90ae4d46c4b938e978e2dc;p=profile%2Fivi%2Fqtdeclarative.git diff --git a/tests/auto/qml/qqmlecmascript/tst_qqmlecmascript.cpp b/tests/auto/qml/qqmlecmascript/tst_qqmlecmascript.cpp index 6fa6c3b..96c0ec1 100644 --- a/tests/auto/qml/qqmlecmascript/tst_qqmlecmascript.cpp +++ b/tests/auto/qml/qqmlecmascript/tst_qqmlecmascript.cpp @@ -79,6 +79,7 @@ private slots: void boolPropertiesEvaluateAsBool(); void methods(); void signalAssignment(); + void signalArguments(); void bindingLoop(); void basicExpressions(); void basicExpressions_data(); @@ -152,11 +153,10 @@ private slots: void signalWithQJSValue(); void singletonType_data(); void singletonType(); + void singletonTypeCaching_data(); + void singletonTypeCaching(); void singletonTypeImportOrder(); void singletonTypeResolution(); - void singletonTypeConflicts1(); - void singletonTypeConflicts2(); - void singletonTypeConflicts3(); void importScripts_data(); void importScripts(); void scarceResources(); @@ -281,6 +281,8 @@ private slots: void overrideDataAssert(); void fallbackBindings_data(); void fallbackBindings(); + void propertyOverride(); + void concatenatedStringPropertyAccess(); private: static void propertyVarWeakRefCallback(v8::Persistent object, void* parameter); @@ -512,21 +514,42 @@ void tst_qqmlecmascript::signalAssignment() { 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(component.create()); QVERIFY(object != 0); QCOMPARE(object->string(), QString()); - emit object->unnamedArgumentSignal(19, 10.25, "Hello world!"); - 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(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; } } @@ -2216,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) @@ -3431,6 +3456,11 @@ void tst_qqmlecmascript::signalWithUnknownTypes() QCOMPARE(result.value, type.value); + MyQmlObject::MyOtherType othertype; + othertype.value = 17; + emit object->signalWithCompletelyUnknownType(othertype); + + QVERIFY(!object->variant().isValid()); delete object; } @@ -3571,8 +3601,9 @@ void tst_qqmlecmascript::singletonType_data() << QString() << QStringList() << (QStringList() << "existingUriTest" << "qobjectTest" << "qobjectMethodTest" - << "qobjectMinorVersionTest" << "qobjectMajorVersionTest" << "qobjectParentedTest") - << (QVariantList() << 20 << 20 << 2 << 20 << 20 << 26) + << "qobjectMinorVersionMethodTest" << "qobjectMinorVersionTest" + << "qobjectMajorVersionTest" << "qobjectParentedTest") + << (QVariantList() << 20 << 20 << 2 << 1 << 20 << 20 << 26) << QStringList() << QVariantList() << QStringList() @@ -3583,29 +3614,7 @@ void tst_qqmlecmascript::singletonType_data() << QString() << QStringList() << (QStringList() << "scriptTest") - << (QVariantList() << 13) - << QStringList() - << QVariantList() - << QStringList() - << QVariantList(); - - QTest::newRow("qobject, caching + read") - << testFileUrl("singletontype/qobjectSingletonTypeCaching.qml") - << QString() - << QStringList() - << (QStringList() << "existingUriTest" << "qobjectParentedTest") - << (QVariantList() << 20 << 26) // 26, shouldn't have incremented to 27. - << QStringList() - << QVariantList() - << QStringList() - << QVariantList(); - - QTest::newRow("script, caching + read") - << testFileUrl("singletontype/scriptSingletonTypeCaching.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() @@ -3627,7 +3636,7 @@ void tst_qqmlecmascript::singletonType_data() << QString() << (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") @@ -3665,6 +3674,17 @@ void tst_qqmlecmascript::singletonType_data() << 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::singletonType() @@ -3679,7 +3699,8 @@ void tst_qqmlecmascript::singletonType() 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()); @@ -3703,6 +3724,45 @@ void tst_qqmlecmascript::singletonType() } } +void tst_qqmlecmascript::singletonTypeCaching_data() +{ + QTest::addColumn("testfile"); + QTest::addColumn("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 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")); @@ -3721,72 +3781,6 @@ void tst_qqmlecmascript::singletonTypeResolution() delete object; } -void tst_qqmlecmascript::singletonTypeConflicts1() -{ - const char *warning = "Cannot register singleton type TypeName in uri Test.Conflict1 1.5 (a conflicting singleton type already exists)"; - QTest::ignoreMessage(QtWarningMsg, warning); - - int i0 = qmlRegisterSingletonType("Test.Conflict1", 1, 5, "TypeName", 0); - QVERIFY(i0 != -1); - - int i1 = qmlRegisterSingletonType("Test.Conflict1", 2, 0, "TypeName", 0); - QVERIFY(i1 != -1); - - int i2 = qmlRegisterSingletonType("Test.Conflict1", 1, 5, "TypeName", 0); - QVERIFY(i2 == -1); - - int i3 = qmlRegisterSingletonType("Test.Conflict1", 1, 2, "TypeName", 0); - QVERIFY(i3 != -1); - - int i4 = qmlRegisterSingletonType("Test.Conflict1", 1, 8, "TypeName", 0); - QVERIFY(i4 != -1); -} - -void tst_qqmlecmascript::singletonTypeConflicts2() -{ - int i0 = qmlRegisterType("Test.Conflict2", 1, 5, "TypeName"); - QVERIFY(i0 != -1); - - int i2 = qmlRegisterType("Test.Conflict2", 1, 8, "TypeName"); - QVERIFY(i2 != -1); - - int i3 = qmlRegisterType("Test.Conflict2", 2, 0, "TypeName"); - QVERIFY(i3 != -1); - - int i4 = qmlRegisterSingletonType("Test.Conflict2", 1, 0, "TypeName", 0); - QVERIFY(i4 != -1); - - const char *warning2 = "Cannot register singleton type TypeName in uri Test.Conflict2 1.9 (a conflicting type already exists)"; - QTest::ignoreMessage(QtWarningMsg, warning2); - - int i5 = qmlRegisterSingletonType("Test.Conflict2", 1, 9, "TypeName", 0); - QVERIFY(i5 == -1); -} - -void tst_qqmlecmascript::singletonTypeConflicts3() -{ - int i0 = qmlRegisterSingletonType("Test.Conflict3", 1, 0, "TypeName", 0); - QVERIFY(i0 != -1); - - int i1 = qmlRegisterSingletonType("Test.Conflict3", 1, 5, "TypeName", 0); - QVERIFY(i1 != -1); - - int i2 = qmlRegisterSingletonType("Test.Conflict3", 1, 8, "TypeName", 0); - QVERIFY(i2 != -1); - - int i3 = qmlRegisterSingletonType("Test.Conflict3", 2, 0, "TypeName", 0); - QVERIFY(i3 != -1); - - const char *warning = "Cannot register type TypeName in uri Test.Conflict3 1.0 (a conflicting singleton type already exists)"; - QTest::ignoreMessage(QtWarningMsg, warning); - - int i4 = qmlRegisterType("Test.Conflict3", 1, 0, "TypeName"); - QVERIFY(i4 == -1); - - int i5 = qmlRegisterType("Test.Conflict3", 1, 3, "TypeName"); - QVERIFY(i5 != -1); -} - void tst_qqmlecmascript::importScripts_data() { QTest::addColumn("testfile"); @@ -3917,70 +3911,70 @@ void tst_qqmlecmascript::importScripts_data() 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(); } @@ -5388,19 +5382,19 @@ void tst_qqmlecmascript::sequenceConversionRead() MySequenceConversionObject *seq = object->findChild("msco"); QVERIFY(seq != 0); - // we haven't registered QList as a sequence type. - QString warningOne = QLatin1String("QMetaProperty::read: Unable to handle unregistered datatype 'QList' for property 'MySequenceConversionObject::pointListProperty'"); + // we haven't registered QList as a sequence type. + QString warningOne = QLatin1String("QMetaProperty::read: Unable to handle unregistered datatype 'QList' 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 has not been registered as a sequence type. + // QList 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' for property 'MySequenceConversionObject::pointListProperty'"); - QQmlProperty seqProp(seq, "pointListProperty", &engine); + QTest::ignoreMessage(QtWarningMsg, "QMetaProperty::read: Unable to handle unregistered datatype 'QList' for property 'MySequenceConversionObject::typeListProperty'"); + QQmlProperty seqProp(seq, "typeListProperty", &engine); QVERIFY(!seqProp.read().isValid()); // not a valid/known sequence type delete object; @@ -5569,6 +5563,10 @@ void tst_qqmlecmascript::sequenceConversionCopy() 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; } @@ -7221,6 +7219,8 @@ void tst_qqmlecmascript::fallbackBindings_data() 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() @@ -7234,6 +7234,15 @@ void tst_qqmlecmascript::fallbackBindings() QCOMPARE(object->property("success").toBool(), true); } +void tst_qqmlecmascript::propertyOverride() +{ + QQmlComponent component(&engine, testFileUrl("propertyOverride.qml")); + QScopedPointer object(component.create()); + QVERIFY(object != 0); + + QCOMPARE(object->property("success").toBool(), true); +} + void tst_qqmlecmascript::sequenceSort_data() { QTest::addColumn("function"); @@ -7276,6 +7285,15 @@ void tst_qqmlecmascript::sequenceSort() 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"