Add a null pointer check to QJsonObject::toVariantMap
authorLars Knoll <lars.knoll@nokia.com>
Mon, 30 Jan 2012 13:37:36 +0000 (14:37 +0100)
committerQt by Nokia <qt-info@nokia.com>
Mon, 30 Jan 2012 17:49:27 +0000 (18:49 +0100)
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>
src/corelib/json/qjsonobject.cpp
tests/auto/corelib/json/tst_qtjson.cpp

index 22c5dbf..86b4e2c 100644 (file)
@@ -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;
 }
index dd2d611..5b5f882 100644 (file)
@@ -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;