Implement QJsonDocument data stream operators
Task-number: QTBUG-48313 Change-Id: I25ebeed94c9340819e925a7740bbee21de73a0ca Reviewed-by: Luca Beldi <v.ronin@yahoo.it> Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
This commit is contained in:
parent
98ec8bed19
commit
cc24fc0406
@ -1416,7 +1416,6 @@ bool QMetaType::save(QDataStream &stream, int type, const void *data)
|
||||
case QMetaType::QJsonValue:
|
||||
case QMetaType::QJsonObject:
|
||||
case QMetaType::QJsonArray:
|
||||
case QMetaType::QJsonDocument:
|
||||
case QMetaType::QCborValue:
|
||||
case QMetaType::QCborArray:
|
||||
case QMetaType::QCborMap:
|
||||
@ -1561,6 +1560,9 @@ bool QMetaType::save(QDataStream &stream, int type, const void *data)
|
||||
case QMetaType::QCborSimpleType:
|
||||
stream << *static_cast<const quint8 *>(data);
|
||||
break;
|
||||
case QMetaType::QJsonDocument:
|
||||
stream << *static_cast<const NS(QJsonDocument)*>(data);
|
||||
break;
|
||||
#endif // QT_BOOTSTRAPPED
|
||||
case QMetaType::QFont:
|
||||
case QMetaType::QPixmap:
|
||||
@ -1648,7 +1650,6 @@ bool QMetaType::load(QDataStream &stream, int type, void *data)
|
||||
case QMetaType::QJsonValue:
|
||||
case QMetaType::QJsonObject:
|
||||
case QMetaType::QJsonArray:
|
||||
case QMetaType::QJsonDocument:
|
||||
case QMetaType::QCborValue:
|
||||
case QMetaType::QCborArray:
|
||||
case QMetaType::QCborMap:
|
||||
@ -1799,6 +1800,9 @@ bool QMetaType::load(QDataStream &stream, int type, void *data)
|
||||
case QMetaType::QCborSimpleType:
|
||||
stream >> *static_cast<quint8 *>(data);
|
||||
break;
|
||||
case QMetaType::QJsonDocument:
|
||||
stream >> *static_cast<NS(QJsonDocument)*>(data);
|
||||
break;
|
||||
#endif // QT_BOOTSTRAPPED
|
||||
case QMetaType::QFont:
|
||||
case QMetaType::QPixmap:
|
||||
|
@ -669,4 +669,20 @@ QDebug operator<<(QDebug dbg, const QJsonDocument &o)
|
||||
}
|
||||
#endif
|
||||
|
||||
#ifndef QT_NO_DATASTREAM
|
||||
QDataStream &operator<<(QDataStream &stream, const QJsonDocument &doc)
|
||||
{
|
||||
stream << doc.toJson(QJsonDocument::Compact);
|
||||
return stream;
|
||||
}
|
||||
|
||||
QDataStream &operator>>(QDataStream &stream, QJsonDocument &doc)
|
||||
{
|
||||
QByteArray buffer;
|
||||
stream >> buffer;
|
||||
doc = QJsonDocument::fromJson(buffer);
|
||||
return stream;
|
||||
}
|
||||
#endif
|
||||
|
||||
QT_END_NAMESPACE
|
||||
|
@ -172,6 +172,11 @@ Q_DECLARE_SHARED_NOT_MOVABLE_UNTIL_QT6(QJsonDocument)
|
||||
Q_CORE_EXPORT QDebug operator<<(QDebug, const QJsonDocument &);
|
||||
#endif
|
||||
|
||||
#ifndef QT_NO_DATASTREAM
|
||||
Q_CORE_EXPORT QDataStream &operator<<(QDataStream &, const QJsonDocument &);
|
||||
Q_CORE_EXPORT QDataStream &operator>>(QDataStream &, QJsonDocument &);
|
||||
#endif
|
||||
|
||||
QT_END_NAMESPACE
|
||||
|
||||
#endif // QJSONDOCUMENT_H
|
||||
|
@ -1824,7 +1824,6 @@ DECLARE_NONSTREAMABLE(QPersistentModelIndex)
|
||||
DECLARE_NONSTREAMABLE(QJsonValue)
|
||||
DECLARE_NONSTREAMABLE(QJsonObject)
|
||||
DECLARE_NONSTREAMABLE(QJsonArray)
|
||||
DECLARE_NONSTREAMABLE(QJsonDocument)
|
||||
DECLARE_NONSTREAMABLE(QCborValue)
|
||||
DECLARE_NONSTREAMABLE(QCborArray)
|
||||
DECLARE_NONSTREAMABLE(QCborMap)
|
||||
|
@ -153,6 +153,10 @@ private Q_SLOTS:
|
||||
void implicitValueType();
|
||||
void implicitDocumentType();
|
||||
|
||||
void streamSerialization_data();
|
||||
void streamSerialization();
|
||||
void streamVariantSerialization();
|
||||
|
||||
private:
|
||||
QString testDataDir;
|
||||
};
|
||||
@ -3011,5 +3015,42 @@ void tst_QtJson::implicitDocumentType()
|
||||
QCOMPARE(arrayDocument[-1].toInt(123), 123);
|
||||
}
|
||||
|
||||
void tst_QtJson::streamSerialization_data()
|
||||
{
|
||||
QTest::addColumn<QJsonDocument>("document");
|
||||
QTest::newRow("empty") << QJsonDocument();
|
||||
QTest::newRow("object") << QJsonDocument(QJsonObject{{"value", 42}});
|
||||
}
|
||||
|
||||
void tst_QtJson::streamSerialization()
|
||||
{
|
||||
// Check interface only, implementation is tested through to and from
|
||||
// json functions.
|
||||
QByteArray buffer;
|
||||
QFETCH(QJsonDocument, document);
|
||||
QJsonDocument output;
|
||||
QDataStream save(&buffer, QIODevice::WriteOnly);
|
||||
save << document;
|
||||
QDataStream load(buffer);
|
||||
load >> output;
|
||||
QCOMPARE(output, document);
|
||||
}
|
||||
|
||||
void tst_QtJson::streamVariantSerialization()
|
||||
{
|
||||
// Check interface only, implementation is tested through to and from
|
||||
// json functions.
|
||||
QByteArray buffer;
|
||||
QJsonDocument objectDoc(QJsonArray{665, 666, 667});
|
||||
QVariant output;
|
||||
QVariant variant(objectDoc);
|
||||
QDataStream save(&buffer, QIODevice::WriteOnly);
|
||||
save << variant;
|
||||
QDataStream load(buffer);
|
||||
load >> output;
|
||||
QCOMPARE(output.userType(), QMetaType::QJsonDocument);
|
||||
QCOMPARE(output.toJsonDocument(), objectDoc);
|
||||
}
|
||||
|
||||
QTEST_MAIN(tst_QtJson)
|
||||
#include "tst_qtjson.moc"
|
||||
|
Loading…
x
Reference in New Issue
Block a user