Don't provide typehint in QQmlExpression::evaluate()
authorChris Adams <christopher.adams@nokia.com>
Thu, 5 Jul 2012 01:53:18 +0000 (11:53 +1000)
committerQt by Nokia <qt-info@nokia.com>
Wed, 11 Jul 2012 00:59:49 +0000 (02:59 +0200)
Previously, the result returned by QQmlExpression::evaluate() was
converted from the actual JavaScript result with a default typehint
of QList<QObject*>.  This commit removes that typehint so that the
engine's conversion code will choose the most appropriate return type
for the result JavaScript value, instead.

Task-number: QTBUG-17082
Change-Id: I368a018b235e9e001b1b92db3699de377748b74f
Reviewed-by: Michael Brasser <michael.brasser@nokia.com>
src/qml/qml/qqmlexpression.cpp
tests/auto/qml/debugger/qqmlenginedebugservice/tst_qqmlenginedebugservice.cpp
tests/auto/qml/qqmlecmascript/tst_qqmlecmascript.cpp

index 8c24c4a..2ab412b 100644 (file)
@@ -378,7 +378,7 @@ QVariant QQmlExpressionPrivate::value(bool *isUndefined)
         v8::HandleScope handle_scope;
         v8::Context::Scope context_scope(ep->v8engine()->context());
         v8::Local<v8::Value> result = v8value(isUndefined);
-        rv = ep->v8engine()->toVariant(result, qMetaTypeId<QList<QObject*> >());
+        rv = ep->v8engine()->toVariant(result, -1);
     }
 
     ep->dereferenceScarceResources(); // "release" scarce resources if top-level expression evaluation is complete.
index f0e3d95..3ecc0d6 100644 (file)
@@ -858,7 +858,7 @@ void tst_QQmlEngineDebugService::queryExpressionResult_data()
     QTest::newRow("blueRect.width") << "blueRect.width" << qVariantFromValue(500);
     QTest::newRow("bad expr") << "aeaef" << qVariantFromValue(QString("<undefined>"));
     QTest::newRow("QObject*") << "varObj" << qVariantFromValue(QString("<unnamed object>"));
-    QTest::newRow("list of QObject*") << "varObjList" << qVariantFromValue(QString("<unknown value>"));
+    QTest::newRow("list of QObject*") << "varObjList" << qVariantFromValue(QVariantList() << QVariant(QString("<unnamed object>")));
     QVariantMap map;
     map.insert(QLatin1String("rect"), QVariant(QLatin1String("<unnamed object>")));
     QTest::newRow("varObjMap") << "varObjMap" << qVariantFromValue(map);
@@ -906,7 +906,7 @@ void tst_QQmlEngineDebugService::queryExpressionResultBC_data()
     QTest::newRow("blueRect.width") << "blueRect.width" << qVariantFromValue(500);
     QTest::newRow("bad expr") << "aeaef" << qVariantFromValue(QString("<undefined>"));
     QTest::newRow("QObject*") << "varObj" << qVariantFromValue(QString("<unnamed object>"));
-    QTest::newRow("list of QObject*") << "varObjList" << qVariantFromValue(QString("<unknown value>"));
+    QTest::newRow("list of QObject*") << "varObjList" << qVariantFromValue(QVariantList() << QVariant(QString("<unnamed object>")));
     QVariantMap map;
     map.insert(QLatin1String("rect"), QVariant(QLatin1String("<unnamed object>")));
     QTest::newRow("varObjMap") << "varObjMap" << qVariantFromValue(map);
index 66ae27e..aaa6d36 100644 (file)
@@ -660,13 +660,13 @@ void tst_qqmlecmascript::arrayExpressions()
 
     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