diff options
author | Lars Knoll <lars.knoll@nokia.com> | 2012-01-30 14:37:36 +0100 |
---|---|---|
committer | Qt by Nokia <qt-info@nokia.com> | 2012-01-30 18:49:27 +0100 |
commit | a4ab8d0bbc4075e90547dac9df91a4cfac93942a (patch) | |
tree | 8bfa2f462ccad88a7ac4f1f229a1036ba2ef4dc2 | |
parent | 34e8dd5d6f250463194e9b7a0f63e7e021ec8d6b (diff) |
Add a null pointer check to QJsonObject::toVariantMap
If the object is null, simply return an empty variant map.
Added another test case checking conversion from QJsonArray
to a QVariantList.
Change-Id: Ieccd163e76630f7db7f41255acd9d1baf66bb38d
Reviewed-by: Jonas Gastal <jgastal@profusion.mobi>
Reviewed-by: Kevin Simons <kevin.simons@nokia.com>
-rw-r--r-- | src/corelib/json/qjsonobject.cpp | 8 | ||||
-rw-r--r-- | tests/auto/corelib/json/tst_qtjson.cpp | 35 |
2 files changed, 39 insertions, 4 deletions
diff --git a/src/corelib/json/qjsonobject.cpp b/src/corelib/json/qjsonobject.cpp index 22c5dbfa91..86b4e2cb0a 100644 --- a/src/corelib/json/qjsonobject.cpp +++ b/src/corelib/json/qjsonobject.cpp @@ -158,9 +158,11 @@ QJsonObject QJsonObject::fromVariantMap(const QVariantMap &map) QVariantMap QJsonObject::toVariantMap() const { QVariantMap map; - for (uint i = 0; i < o->length; ++i) { - QJsonPrivate::Entry *e = o->entryAt(i); - map.insert(e->key(), QJsonValue(d, o, e->value).toVariant()); + if (o) { + for (uint i = 0; i < o->length; ++i) { + QJsonPrivate::Entry *e = o->entryAt(i); + map.insert(e->key(), QJsonValue(d, o, e->value).toVariant()); + } } return map; } diff --git a/tests/auto/corelib/json/tst_qtjson.cpp b/tests/auto/corelib/json/tst_qtjson.cpp index dd2d611ded..5b5f8828d6 100644 --- a/tests/auto/corelib/json/tst_qtjson.cpp +++ b/tests/auto/corelib/json/tst_qtjson.cpp @@ -88,6 +88,7 @@ private Q_SLOTS: void fromVariantMap(); void toVariantMap(); + void toVariantList(); void toJson(); void fromJson(); @@ -883,6 +884,9 @@ void TestQtJson::fromVariantMap() void TestQtJson::toVariantMap() { QJsonObject object; + QVariantMap map = object.toVariantMap(); + QVERIFY(map.isEmpty()); + object.insert("Key", QString("Value")); object.insert("null", QJsonValue()); QJsonArray array; @@ -892,7 +896,7 @@ void TestQtJson::toVariantMap() array.append(QJsonValue()); object.insert("Array", array); - QVariantMap map = object.toVariantMap(); + map = object.toVariantMap(); QCOMPARE(map.size(), 3); QCOMPARE(map.value("Key"), QVariant(QString("Value"))); @@ -906,6 +910,35 @@ void TestQtJson::toVariantMap() QCOMPARE(list.at(3), QVariant()); } +void TestQtJson::toVariantList() +{ + QJsonArray array; + QVariantList list = array.toVariantList(); + QVERIFY(list.isEmpty()); + + array.append(QString("Value")); + array.append(QJsonValue()); + QJsonArray inner; + inner.append(true); + inner.append(999.); + inner.append(QLatin1String("string")); + inner.append(QJsonValue()); + array.append(inner); + + list = array.toVariantList(); + + QCOMPARE(list.size(), 3); + QCOMPARE(list[0], QVariant(QString("Value"))); + QCOMPARE(list[1], QVariant()); + QCOMPARE(list[2].type(), QVariant::List); + QVariantList vlist = list[2].toList(); + QCOMPARE(vlist.size(), 4); + QCOMPARE(vlist.at(0), QVariant(true)); + QCOMPARE(vlist.at(1), QVariant(999.)); + QCOMPARE(vlist.at(2), QVariant(QLatin1String("string"))); + QCOMPARE(vlist.at(3), QVariant()); +} + void TestQtJson::toJson() { QJsonObject object; |