Handle QVariantHash in QJsonDocument::fromVariant

It absence is just an oversight. The patch also adds test for the valid
inputs of the method.

[ChangeLog][QtCore][QJsonDocument] fromVariant can now take a QVariantHash argument.

Task-number: QTBUG-39751
Change-Id: I7e051413f930023db3cbb81452e77c56a7ceffe8
Reviewed-by: Lars Knoll <lars.knoll@qt.io>
bb10
Allan Sandfeld Jensen 2016-07-12 17:20:40 +02:00 committed by Allan Sandfeld Jensen
parent 69b37630d1
commit 690d6be542
2 changed files with 43 additions and 1 deletions

View File

@ -260,7 +260,7 @@ QJsonDocument QJsonDocument::fromBinaryData(const QByteArray &data, DataValidati
Creates a QJsonDocument from the QVariant \a variant.
If the \a variant contains any other type than a QVariantMap,
QVariantList or QStringList, the returned document
QVariantHash, QVariantList or QStringList, the returned document
document is invalid.
\sa toVariant()
@ -270,6 +270,8 @@ QJsonDocument QJsonDocument::fromVariant(const QVariant &variant)
QJsonDocument doc;
if (variant.type() == QVariant::Map) {
doc.setObject(QJsonObject::fromVariantMap(variant.toMap()));
} else if (variant.type() == QVariant::Hash) {
doc.setObject(QJsonObject::fromVariantHash(variant.toHash()));
} else if (variant.type() == QVariant::List) {
doc.setArray(QJsonArray::fromVariantList(variant.toList()));
} else if (variant.type() == QVariant::StringList) {

View File

@ -137,6 +137,8 @@ private Q_SLOTS:
void garbageAtEnd();
void removeNonLatinKey();
void documentFromVariant();
private:
QString testDataDir;
};
@ -2788,5 +2790,43 @@ void tst_QtJson::removeNonLatinKey()
QVERIFY(restoredObject.contains(nonLatinKeyName));
}
void tst_QtJson::documentFromVariant()
{
// Test the valid forms of QJsonDocument::fromVariant.
QString string = QStringLiteral("value");
QStringList strList;
strList.append(string);
QJsonDocument da1 = QJsonDocument::fromVariant(QVariant(strList));
QVERIFY(da1.isArray());
QVariantList list;
list.append(string);
QJsonDocument da2 = QJsonDocument::fromVariant(list);
QVERIFY(da2.isArray());
// As JSON arrays they should be equal.
QCOMPARE(da1.array(), da2.array());
QMap <QString, QVariant> map;
map["key"] = string;
QJsonDocument do1 = QJsonDocument::fromVariant(QVariant(map));
QVERIFY(do1.isObject());
QHash <QString, QVariant> hash;
hash["key"] = string;
QJsonDocument do2 = QJsonDocument::fromVariant(QVariant(hash));
QVERIFY(do2.isObject());
// As JSON objects they should be equal.
QCOMPARE(do1.object(), do2.object());
}
QTEST_MAIN(tst_QtJson)
#include "tst_qtjson.moc"