DeclarativeEngineDebugService: Fix Crash
authorAurindam Jana <aurindam.jana@nokia.com>
Fri, 17 Feb 2012 10:09:31 +0000 (11:09 +0100)
committerQt by Nokia <qt-info@nokia.com>
Tue, 21 Feb 2012 00:21:41 +0000 (01:21 +0100)
Iterate through contents of QVariantMap to convert
QObjects to streamable type.

Change-Id: I2cb64a84aef674904de43f9a0c0fee539b87a59a
Reviewed-by: Kai Koehne <kai.koehne@nokia.com>
src/declarative/debugger/qdeclarativeenginedebugservice.cpp
tests/auto/declarative/debugger/qdeclarativeenginedebug/tst_qdeclarativeenginedebug.cpp

index cd500e1..4943959 100644 (file)
@@ -176,6 +176,9 @@ QVariant QDeclarativeEngineDebugService::valueContents(const QVariant &value) co
 {
     int userType = value.userType();
 
+    //QObject * is not streamable.
+    //Convert all such instances to a String value
+
     if (value.type() == QVariant::List) {
         QVariantList contents;
         QVariantList list = value.toList();
@@ -185,6 +188,16 @@ QVariant QDeclarativeEngineDebugService::valueContents(const QVariant &value) co
         return contents;
     }
 
+    if (value.type() == QVariant::Map) {
+        QVariantMap contents;
+        QMapIterator<QString, QVariant> i(value.toMap());
+         while (i.hasNext()) {
+             i.next();
+             contents.insert(i.key(), valueContents(i.value()));
+         }
+        return contents;
+    }
+
     if (QDeclarativeValueTypeFactory::isValueType(userType))
         return value;
 
index 098ac90..246ba60 100644 (file)
@@ -317,11 +317,15 @@ void tst_QDeclarativeEngineDebug::initTestCase()
                 "}"
                 "property variant varObj\n"
                 "property variant varObjList: []\n"
+                "property variant varObjMap\n"
                 "Component.onCompleted: {\n"
                     "varObj = blueRect;\n"
                     "var list = varObjList;\n"
                     "list[0] = blueRect;\n"
                     "varObjList = list;\n"
+                    "var map = new Object;\n"
+                    "map.rect = blueRect;\n"
+                    "varObjMap = map;\n"
                 "}\n"
                 "NonScriptPropertyElement {\n"
                 "}\n"
@@ -852,6 +856,9 @@ void tst_QDeclarativeEngineDebug::queryExpressionResult_data()
     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>"));
+    QVariantMap map;
+    map.insert(QLatin1String("rect"), QVariant(QLatin1String("<unnamed object>")));
+    QTest::newRow("varObjMap") << "varObjMap" << qVariantFromValue(map);
 }
 
 void tst_QDeclarativeEngineDebug::tst_QDeclarativeDebugFileReference()