From 4981c2c8b50b988366cc1a6f7a2658433df8021a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C4=99drzej=20Nowacki?= Date: Mon, 3 Sep 2018 16:12:44 +0200 Subject: Implement QJsonObject data stream operator Change-Id: I8528f18ad72828cd97a5ac00e1925958acf73f9f Reviewed-by: Thiago Macieira --- .../corelib/kernel/qmetatype/tst_qmetatype.cpp | 1 - .../auto/corelib/serialization/json/tst_qtjson.cpp | 34 ++++++++++++++++++++++ .../serialization/qdatastream/tst_qdatastream.cpp | 25 ++++++++++++++++ 3 files changed, 59 insertions(+), 1 deletion(-) (limited to 'tests/auto') diff --git a/tests/auto/corelib/kernel/qmetatype/tst_qmetatype.cpp b/tests/auto/corelib/kernel/qmetatype/tst_qmetatype.cpp index 8c1ee17daa..ce6ca308ce 100644 --- a/tests/auto/corelib/kernel/qmetatype/tst_qmetatype.cpp +++ b/tests/auto/corelib/kernel/qmetatype/tst_qmetatype.cpp @@ -1822,7 +1822,6 @@ DECLARE_NONSTREAMABLE(void*) DECLARE_NONSTREAMABLE(QModelIndex) DECLARE_NONSTREAMABLE(QPersistentModelIndex) DECLARE_NONSTREAMABLE(QJsonValue) -DECLARE_NONSTREAMABLE(QJsonObject) DECLARE_NONSTREAMABLE(QCborValue) DECLARE_NONSTREAMABLE(QCborArray) DECLARE_NONSTREAMABLE(QCborMap) diff --git a/tests/auto/corelib/serialization/json/tst_qtjson.cpp b/tests/auto/corelib/serialization/json/tst_qtjson.cpp index 5b03964140..feae858a10 100644 --- a/tests/auto/corelib/serialization/json/tst_qtjson.cpp +++ b/tests/auto/corelib/serialization/json/tst_qtjson.cpp @@ -157,6 +157,8 @@ private Q_SLOTS: void streamSerializationQJsonDocument(); void streamSerializationQJsonArray_data(); void streamSerializationQJsonArray(); + void streamSerializationQJsonObject_data(); + void streamSerializationQJsonObject(); void streamVariantSerialization(); private: @@ -3059,6 +3061,27 @@ void tst_QtJson::streamSerializationQJsonArray() QCOMPARE(output, array); } +void tst_QtJson::streamSerializationQJsonObject_data() +{ + QTest::addColumn("object"); + QTest::newRow("empty") << QJsonObject(); + QTest::newRow("non-empty") << QJsonObject{{"foo", 665}, {"bar", 666}}; +} + +void tst_QtJson::streamSerializationQJsonObject() +{ + // Check interface only, implementation is tested through to and from + // json functions. + QByteArray buffer; + QFETCH(QJsonObject, object); + QJsonObject output; + QDataStream save(&buffer, QIODevice::WriteOnly); + save << object; + QDataStream load(buffer); + load >> output; + QCOMPARE(output, object); +} + void tst_QtJson::streamVariantSerialization() { // Check interface only, implementation is tested through to and from @@ -3086,6 +3109,17 @@ void tst_QtJson::streamVariantSerialization() QCOMPARE(output.userType(), QMetaType::QJsonArray); QCOMPARE(output.toJsonArray(), array); } + { + QJsonObject obj{{"foo", 42}}; + QVariant output; + QVariant variant(obj); + QDataStream save(&buffer, QIODevice::WriteOnly); + save << variant; + QDataStream load(buffer); + load >> output; + QCOMPARE(output.userType(), QMetaType::QJsonObject); + QCOMPARE(output.toJsonObject(), obj); + } } QTEST_MAIN(tst_QtJson) diff --git a/tests/auto/corelib/serialization/qdatastream/tst_qdatastream.cpp b/tests/auto/corelib/serialization/qdatastream/tst_qdatastream.cpp index 88fe57d668..ed0c3ade8b 100644 --- a/tests/auto/corelib/serialization/qdatastream/tst_qdatastream.cpp +++ b/tests/auto/corelib/serialization/qdatastream/tst_qdatastream.cpp @@ -137,6 +137,7 @@ private slots: void stream_QJsonDocument(); void stream_QJsonArray(); + void stream_QJsonObject(); void setVersion_data(); void setVersion(); @@ -2146,6 +2147,30 @@ void tst_QDataStream::stream_QJsonArray() } } +void tst_QDataStream::stream_QJsonObject() +{ + QByteArray buffer; + { + QDataStream save(&buffer, QIODevice::WriteOnly); + save << QByteArrayLiteral("invalidJson"); + QDataStream load(&buffer, QIODevice::ReadOnly); + QJsonObject object; + load >> object; + QVERIFY(object.isEmpty()); + QVERIFY(load.status() != QDataStream::Ok); + QCOMPARE(load.status(), QDataStream::ReadCorruptData); + } + { + QDataStream save(&buffer, QIODevice::WriteOnly); + QJsonObject objSave{{"foo", 1}, {"bar", 2}}; + save << objSave; + QDataStream load(&buffer, QIODevice::ReadOnly); + QJsonObject objLoad; + load >> objLoad; + QCOMPARE(objLoad, objSave); + } +} + void tst_QDataStream::setVersion_data() { QTest::addColumn("vers"); -- cgit v1.2.3