From a9e429a30fcc906b4bd0a471f22e0b96b7b1528c Mon Sep 17 00:00:00 2001 From: Roman Isaikin Date: Sun, 30 Jun 2019 09:03:04 +0300 Subject: [PATCH] Pack QMetaType::Nullptr QVariant's as nil. --- src/private/pack_p.cpp | 2 +- tests/pack/pack_test.cpp | 14 ++++++++++++++ 2 files changed, 15 insertions(+), 1 deletion(-) diff --git a/src/private/pack_p.cpp b/src/private/pack_p.cpp index da890d6..449e092 100644 --- a/src/private/pack_p.cpp +++ b/src/private/pack_p.cpp @@ -20,7 +20,7 @@ QReadWriteLock MsgPackPrivate::packers_lock; quint8 *MsgPackPrivate::pack(const QVariant &v, quint8 *p, bool wr, QVector &user_data) { QMetaType::Type t = (QMetaType::Type)v.type(); - if (v.isNull() && !v.isValid()) + if ((v.isNull() && !v.isValid()) || t == QMetaType::Nullptr) p = pack_nil(p, wr); else if (t == QMetaType::Int) p = pack_int(v.toInt(), p, wr); diff --git a/tests/pack/pack_test.cpp b/tests/pack/pack_test.cpp index ca0eb4e..005d1ab 100644 --- a/tests/pack/pack_test.cpp +++ b/tests/pack/pack_test.cpp @@ -5,12 +5,14 @@ #include #include "msgpack.h" #include +#include class PackTest : public QObject { Q_OBJECT private Q_SLOTS: + void test_nil(); void test_bool(); void test_fixint(); void test_integer8(); @@ -23,6 +25,18 @@ private Q_SLOTS: void test_array(); }; +void PackTest::test_nil() +{ + QJsonObject j; + j.insert("nil", QJsonValue::Null); + QVariant v = j.toVariantMap()["nil"]; + QVERIFY((QMetaType::Type)v.type() == QMetaType::Nullptr); + QByteArray arr = MsgPack::pack(v); + quint8 *p = (quint8 *)arr.data(); + QVERIFY(arr.size() == 1); + QVERIFY(p[0] == 0xc0); +} + void PackTest::test_bool() { QByteArray arr = MsgPack::pack(false);