forked from romixlab/qmsgpack
some bugs fixed, test written, version() added
This commit is contained in:
@@ -19,9 +19,6 @@ private Q_SLOTS:
|
||||
void test_str();
|
||||
void test_bin();
|
||||
void test_array();
|
||||
void test_map();
|
||||
void test_ext();
|
||||
void test_mixed();
|
||||
};
|
||||
|
||||
void PackTest::test_bool()
|
||||
@@ -316,180 +313,6 @@ void PackTest::test_array()
|
||||
QVERIFY(p[4] == 0x00);
|
||||
}
|
||||
|
||||
void PackTest::test_map()
|
||||
{
|
||||
QVariantMap map;
|
||||
map.insert(QString("%1").QString::arg(0, 5), "v");
|
||||
QByteArray arr = MsgPack::pack(map);
|
||||
QVERIFY(arr.size() == map.size() * 8 + 1);
|
||||
quint8 *p = (quint8 *)arr.data();
|
||||
QVERIFY(p[0] == (0x80 | map.size()));
|
||||
|
||||
for (int i = 1; i < 16; ++i)
|
||||
map.insert(QString("%1").QString::arg(i, 5), "v");
|
||||
arr = MsgPack::pack(map);
|
||||
QVERIFY(arr.size() == map.size() * 8 + 3);
|
||||
p = (quint8 *)arr.data();
|
||||
QVERIFY(p[0] == 0xde);
|
||||
QVERIFY(p[1] == 0x00);
|
||||
QVERIFY(p[2] == 0x10);
|
||||
|
||||
for (int i = 16; i < 65536; ++i)
|
||||
map.insert(QString("%1").QString::arg(i, 5), "v");
|
||||
arr = MsgPack::pack(map);
|
||||
QVERIFY(arr.size() == map.size() * 8 + 5);
|
||||
p = (quint8 *)arr.data();
|
||||
QVERIFY(p[0] == 0xdf);
|
||||
QVERIFY(p[1] == 0x00);
|
||||
QVERIFY(p[2] == 0x01);
|
||||
QVERIFY(p[3] == 0x00);
|
||||
QVERIFY(p[4] == 0x00);
|
||||
}
|
||||
|
||||
class CustomType
|
||||
{
|
||||
public:
|
||||
CustomType() {}
|
||||
CustomType(const CustomType &other) { m_size = other.m_size; }
|
||||
~CustomType() {}
|
||||
|
||||
CustomType(int size) : m_size(size) {}
|
||||
|
||||
int size() { return m_size; }
|
||||
void setSize(int size) { m_size = size; }
|
||||
private:
|
||||
int m_size;
|
||||
};
|
||||
|
||||
Q_DECLARE_METATYPE(CustomType)
|
||||
|
||||
quint32 pack_custom_type(const QVariant &variant, QByteArray &data, bool write)
|
||||
{
|
||||
CustomType ct = variant.value<CustomType>();
|
||||
if (write) {
|
||||
data.resize(ct.size());
|
||||
quint8 *p = (quint8 *)data.data();
|
||||
for (int i = 0; i < ct.size(); ++i)
|
||||
p[i] = 7;
|
||||
}
|
||||
|
||||
return ct.size();
|
||||
}
|
||||
|
||||
void PackTest::test_ext()
|
||||
{
|
||||
CustomType ct(1);
|
||||
QVariant custom;
|
||||
custom.setValue(ct);
|
||||
|
||||
MsgPack::registerPacker((QMetaType::Type)qMetaTypeId<CustomType>(),
|
||||
3, pack_custom_type);
|
||||
|
||||
QByteArray arr = MsgPack::pack(custom);
|
||||
QVERIFY(arr.size() == 2 + ct.size());
|
||||
quint8 *p = (quint8 *)arr.data();
|
||||
QVERIFY(p[0] == 0xd4);
|
||||
QVERIFY(p[1] == 0x03);
|
||||
QVERIFY(p[2] == 0x07);
|
||||
|
||||
ct.setSize(2);
|
||||
custom.setValue(ct);
|
||||
arr = MsgPack::pack(custom);
|
||||
QVERIFY(arr.size() == 2 + ct.size());
|
||||
p = (quint8 *)arr.data();
|
||||
QVERIFY(p[0] == 0xd5);
|
||||
QVERIFY(p[1] == 0x03);
|
||||
QVERIFY(p[2] == 0x07);
|
||||
QVERIFY(p[3] == 0x07);
|
||||
|
||||
ct.setSize(4);
|
||||
custom.setValue(ct);
|
||||
arr = MsgPack::pack(custom);
|
||||
QVERIFY(arr.size() == 2 + ct.size());
|
||||
p = (quint8 *)arr.data();
|
||||
QVERIFY(p[0] == 0xd6);
|
||||
QVERIFY(p[1] == 0x03);
|
||||
QVERIFY(p[2] == 0x07);
|
||||
QVERIFY(p[3] == 0x07);
|
||||
QVERIFY(p[4] == 0x07);
|
||||
QVERIFY(p[5] == 0x07);
|
||||
|
||||
ct.setSize(8);
|
||||
custom.setValue(ct);
|
||||
arr = MsgPack::pack(custom);
|
||||
QVERIFY(arr.size() == 2 + ct.size());
|
||||
p = (quint8 *)arr.data();
|
||||
QVERIFY(p[0] == 0xd7);
|
||||
QVERIFY(p[1] == 0x03);
|
||||
for (int i = 0; i < ct.size(); ++i)
|
||||
QVERIFY(p[2 + i] = 0x07);
|
||||
|
||||
ct.setSize(16);
|
||||
custom.setValue(ct);
|
||||
arr = MsgPack::pack(custom);
|
||||
QVERIFY(arr.size() == 2 + ct.size());
|
||||
p = (quint8 *)arr.data();
|
||||
QVERIFY(p[0] == 0xd8);
|
||||
QVERIFY(p[1] == 0x03);
|
||||
for (int i = 0; i < ct.size(); ++i)
|
||||
QVERIFY(p[2 + i] = 0x07);
|
||||
|
||||
ct.setSize(3);
|
||||
custom.setValue(ct);
|
||||
arr = MsgPack::pack(custom);
|
||||
QVERIFY(arr.size() == 3 + ct.size());
|
||||
p = (quint8 *)arr.data();
|
||||
QVERIFY(p[0] == 0xc7);
|
||||
QVERIFY(p[1] == 0x03);
|
||||
QVERIFY(p[2] == 0x03);
|
||||
for (int i = 0; i < ct.size(); ++i)
|
||||
QVERIFY(p[3 + i] = 0x07);
|
||||
|
||||
ct.setSize(256);
|
||||
custom.setValue(ct);
|
||||
arr = MsgPack::pack(custom);
|
||||
QVERIFY(arr.size() == 4 + ct.size());
|
||||
p = (quint8 *)arr.data();
|
||||
QVERIFY(p[0] == 0xc8);
|
||||
QVERIFY(p[1] == 0x01);
|
||||
QVERIFY(p[2] == 0x00);
|
||||
QVERIFY(p[3] == 0x03);
|
||||
for (int i = 0; i < ct.size(); ++i)
|
||||
QVERIFY(p[4 + i] = 0x07);
|
||||
|
||||
ct.setSize(65536);
|
||||
custom.setValue(ct);
|
||||
arr = MsgPack::pack(custom);
|
||||
QVERIFY(arr.size() == 6 + ct.size());
|
||||
p = (quint8 *)arr.data();
|
||||
QVERIFY(p[0] == 0xc9);
|
||||
QVERIFY(p[1] == 0x00);
|
||||
QVERIFY(p[2] == 0x01);
|
||||
QVERIFY(p[3] == 0x00);
|
||||
QVERIFY(p[4] == 0x00);
|
||||
QVERIFY(p[5] == 0x03);
|
||||
for (int i = 0; i < ct.size(); ++i)
|
||||
QVERIFY(p[6 + i] = 0x07);
|
||||
}
|
||||
|
||||
void PackTest::test_mixed()
|
||||
{
|
||||
QVariantMap map;
|
||||
// map["booleans"] = QVariantList() << false << true;
|
||||
// map["list2"] = QVariantList() << (QVariantList() << "abc" << "def")
|
||||
// << (QVariantList() << "qwe" << "rty");
|
||||
// map["integers"] = QVariantList() << 0 << 127 << -31 << 128 << 777;
|
||||
map["bytearray"] = QByteArray("bytes");
|
||||
|
||||
// QVariantMap map2;
|
||||
// map2["one"] = 1;
|
||||
// map2["two"] = QVariantMap();
|
||||
// map["map2"] = map2;
|
||||
|
||||
QByteArray arr = MsgPack::pack(map);
|
||||
qDebug() << arr.toBase64();
|
||||
}
|
||||
|
||||
QTEST_APPLESS_MAIN(PackTest)
|
||||
|
||||
#include "pack_test.moc"
|
||||
|
||||
Reference in New Issue
Block a user