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:
parent
17307fcf18
commit
2d72f97328
|
@ -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;
|
||||
|
||||
|
|
|
@ -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()
|
||||
|
|
Loading…
Reference in New Issue