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::QJsonValue:
|
||||||
case QMetaType::QJsonObject:
|
case QMetaType::QJsonObject:
|
||||||
case QMetaType::QJsonArray:
|
case QMetaType::QJsonArray:
|
||||||
case QMetaType::QJsonDocument:
|
|
||||||
case QMetaType::QCborValue:
|
case QMetaType::QCborValue:
|
||||||
case QMetaType::QCborArray:
|
case QMetaType::QCborArray:
|
||||||
case QMetaType::QCborMap:
|
case QMetaType::QCborMap:
|
||||||
@ -1561,6 +1560,9 @@ bool QMetaType::save(QDataStream &stream, int type, const void *data)
|
|||||||
case QMetaType::QCborSimpleType:
|
case QMetaType::QCborSimpleType:
|
||||||
stream << *static_cast<const quint8 *>(data);
|
stream << *static_cast<const quint8 *>(data);
|
||||||
break;
|
break;
|
||||||
|
case QMetaType::QJsonDocument:
|
||||||
|
stream << *static_cast<const NS(QJsonDocument)*>(data);
|
||||||
|
break;
|
||||||
#endif // QT_BOOTSTRAPPED
|
#endif // QT_BOOTSTRAPPED
|
||||||
case QMetaType::QFont:
|
case QMetaType::QFont:
|
||||||
case QMetaType::QPixmap:
|
case QMetaType::QPixmap:
|
||||||
@ -1648,7 +1650,6 @@ bool QMetaType::load(QDataStream &stream, int type, void *data)
|
|||||||
case QMetaType::QJsonValue:
|
case QMetaType::QJsonValue:
|
||||||
case QMetaType::QJsonObject:
|
case QMetaType::QJsonObject:
|
||||||
case QMetaType::QJsonArray:
|
case QMetaType::QJsonArray:
|
||||||
case QMetaType::QJsonDocument:
|
|
||||||
case QMetaType::QCborValue:
|
case QMetaType::QCborValue:
|
||||||
case QMetaType::QCborArray:
|
case QMetaType::QCborArray:
|
||||||
case QMetaType::QCborMap:
|
case QMetaType::QCborMap:
|
||||||
@ -1799,6 +1800,9 @@ bool QMetaType::load(QDataStream &stream, int type, void *data)
|
|||||||
case QMetaType::QCborSimpleType:
|
case QMetaType::QCborSimpleType:
|
||||||
stream >> *static_cast<quint8 *>(data);
|
stream >> *static_cast<quint8 *>(data);
|
||||||
break;
|
break;
|
||||||
|
case QMetaType::QJsonDocument:
|
||||||
|
stream >> *static_cast<NS(QJsonDocument)*>(data);
|
||||||
|
break;
|
||||||
#endif // QT_BOOTSTRAPPED
|
#endif // QT_BOOTSTRAPPED
|
||||||
case QMetaType::QFont:
|
case QMetaType::QFont:
|
||||||
case QMetaType::QPixmap:
|
case QMetaType::QPixmap:
|
||||||
|
@ -669,4 +669,20 @@ QDebug operator<<(QDebug dbg, const QJsonDocument &o)
|
|||||||
}
|
}
|
||||||
#endif
|
#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
|
QT_END_NAMESPACE
|
||||||
|
@ -172,6 +172,11 @@ Q_DECLARE_SHARED_NOT_MOVABLE_UNTIL_QT6(QJsonDocument)
|
|||||||
Q_CORE_EXPORT QDebug operator<<(QDebug, const QJsonDocument &);
|
Q_CORE_EXPORT QDebug operator<<(QDebug, const QJsonDocument &);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#ifndef QT_NO_DATASTREAM
|
||||||
|
Q_CORE_EXPORT QDataStream &operator<<(QDataStream &, const QJsonDocument &);
|
||||||
|
Q_CORE_EXPORT QDataStream &operator>>(QDataStream &, QJsonDocument &);
|
||||||
|
#endif
|
||||||
|
|
||||||
QT_END_NAMESPACE
|
QT_END_NAMESPACE
|
||||||
|
|
||||||
#endif // QJSONDOCUMENT_H
|
#endif // QJSONDOCUMENT_H
|
||||||
|
@ -1824,7 +1824,6 @@ DECLARE_NONSTREAMABLE(QPersistentModelIndex)
|
|||||||
DECLARE_NONSTREAMABLE(QJsonValue)
|
DECLARE_NONSTREAMABLE(QJsonValue)
|
||||||
DECLARE_NONSTREAMABLE(QJsonObject)
|
DECLARE_NONSTREAMABLE(QJsonObject)
|
||||||
DECLARE_NONSTREAMABLE(QJsonArray)
|
DECLARE_NONSTREAMABLE(QJsonArray)
|
||||||
DECLARE_NONSTREAMABLE(QJsonDocument)
|
|
||||||
DECLARE_NONSTREAMABLE(QCborValue)
|
DECLARE_NONSTREAMABLE(QCborValue)
|
||||||
DECLARE_NONSTREAMABLE(QCborArray)
|
DECLARE_NONSTREAMABLE(QCborArray)
|
||||||
DECLARE_NONSTREAMABLE(QCborMap)
|
DECLARE_NONSTREAMABLE(QCborMap)
|
||||||
|
@ -153,6 +153,10 @@ private Q_SLOTS:
|
|||||||
void implicitValueType();
|
void implicitValueType();
|
||||||
void implicitDocumentType();
|
void implicitDocumentType();
|
||||||
|
|
||||||
|
void streamSerialization_data();
|
||||||
|
void streamSerialization();
|
||||||
|
void streamVariantSerialization();
|
||||||
|
|
||||||
private:
|
private:
|
||||||
QString testDataDir;
|
QString testDataDir;
|
||||||
};
|
};
|
||||||
@ -3011,5 +3015,42 @@ void tst_QtJson::implicitDocumentType()
|
|||||||
QCOMPARE(arrayDocument[-1].toInt(123), 123);
|
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)
|
QTEST_MAIN(tst_QtJson)
|
||||||
#include "tst_qtjson.moc"
|
#include "tst_qtjson.moc"
|
||||||
|
Loading…
x
Reference in New Issue
Block a user