DeclarativeEngineDebugService: Fix Crash

Iterate through contents of QVariantMap to convert
QObjects to streamable type.

Change-Id: I2cb64a84aef674904de43f9a0c0fee539b87a59a
Reviewed-by: Kai Koehne <kai.koehne@nokia.com>
This commit is contained in:
Aurindam Jana 2012-02-17 11:09:31 +01:00 committed by Qt by Nokia
parent 17307fcf18
commit 2d72f97328
2 changed files with 20 additions and 0 deletions

View 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;

View 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()