mirror of
https://github.com/romixlab/qmsgpack.git
synced 2025-08-04 12:44:27 +02:00
Qt types stream operators, documentation updated, custom types support improved, bug fixes and new tests.
This commit is contained in:
@@ -8,7 +8,7 @@ if (Qt5Core_FOUND)
|
||||
set(TEST_LIBRARIES ${Qt5Test_LIBRARIES})
|
||||
endif ()
|
||||
|
||||
set(TEST_SUBDIRS pack unpack mixed stream)
|
||||
set(TEST_SUBDIRS pack unpack mixed stream qttypes)
|
||||
|
||||
foreach(subdir ${TEST_SUBDIRS})
|
||||
add_subdirectory(${subdir})
|
||||
|
@@ -4,18 +4,63 @@
|
||||
#include <msgpack.h>
|
||||
#include <limits>
|
||||
|
||||
#ifdef QT_GUI_LIB
|
||||
#include <QColor>
|
||||
#endif
|
||||
|
||||
#ifdef QT_LOCATION_LIB
|
||||
#include <QGeoCoordinate>
|
||||
#endif
|
||||
|
||||
class QtTypesTest : public QObject
|
||||
{
|
||||
Q_OBJECT
|
||||
|
||||
private Q_SLOTS:
|
||||
#ifdef QT_GUI_LIB
|
||||
void test_qcolor();
|
||||
#endif
|
||||
#ifdef QT_LOCATION_LIB
|
||||
void test_qgeocoordinte();
|
||||
#endif
|
||||
void test_qtime();
|
||||
void test_qdate();
|
||||
void test_qdatetime();
|
||||
void test_qpoint();
|
||||
void test_qsize();
|
||||
void test_qrect();
|
||||
};
|
||||
|
||||
#ifdef QT_GUI_LIB
|
||||
void QtTypesTest::test_qcolor()
|
||||
{
|
||||
MsgPack::registerType(QMetaType::QColor, 0x75);
|
||||
QColor color;
|
||||
QByteArray packed = MsgPack::pack(color);
|
||||
QColor color2 = MsgPack::unpack(packed).value<QColor>();
|
||||
QVERIFY(color == color2);
|
||||
QVERIFY(packed.size() == 3);
|
||||
|
||||
color = QColor(100, 200, 255);
|
||||
packed = MsgPack::pack(color);
|
||||
color2 = MsgPack::unpack(packed).value<QColor>();
|
||||
QVERIFY(color == color2);
|
||||
QVERIFY(packed.size() == 6);
|
||||
}
|
||||
#endif
|
||||
|
||||
#ifdef QT_LOCATION_LIB
|
||||
void QtTypesTest::test_qgeocoordinte()
|
||||
{
|
||||
MsgPack::registerType((QMetaType::Type)qMetaTypeId<QGeoCoordinate>(), 0x76);
|
||||
QGeoCoordinate c;
|
||||
QByteArray packed = MsgPack::pack(QVariant::fromValue(c));
|
||||
QGeoCoordinate c2 = MsgPack::unpack(packed).value<QGeoCoordinate>();
|
||||
QVERIFY(c == c2);
|
||||
QVERIFY(packed.size() == 3);
|
||||
}
|
||||
#endif
|
||||
|
||||
void QtTypesTest::test_qtime()
|
||||
{
|
||||
MsgPack::registerType(QMetaType::QTime, 0x77);
|
||||
@@ -23,7 +68,7 @@ void QtTypesTest::test_qtime()
|
||||
QByteArray packed = MsgPack::pack(t);
|
||||
QTime t2 = MsgPack::unpack(packed).toTime();
|
||||
QVERIFY(t == t2);
|
||||
QVERIFY(packed.size() == 1);
|
||||
QVERIFY(packed.size() == 3);
|
||||
|
||||
t = QTime(12, 01, 01, 0);
|
||||
packed = MsgPack::pack(t);
|
||||
@@ -51,7 +96,7 @@ void QtTypesTest::test_qdate()
|
||||
QByteArray packed = MsgPack::pack(d);
|
||||
QDate d2 = MsgPack::unpack(packed).toDate();
|
||||
QVERIFY(d == d2);
|
||||
QVERIFY(packed.size() == 1);
|
||||
QVERIFY(packed.size() == 3);
|
||||
|
||||
d = QDate(1234, 12, 1);
|
||||
packed = MsgPack::pack(d);
|
||||
@@ -64,13 +109,35 @@ void QtTypesTest::test_qdate()
|
||||
QVERIFY(d == d2);
|
||||
}
|
||||
|
||||
void QtTypesTest::test_qdatetime()
|
||||
{
|
||||
MsgPack::registerType(QMetaType::QDateTime, 3);
|
||||
QDateTime dt;
|
||||
QByteArray packed = MsgPack::pack(dt);
|
||||
QVERIFY(packed.size() == 3);
|
||||
QDateTime dt2 = MsgPack::unpack(packed).toDateTime();
|
||||
QVERIFY(dt == dt2);
|
||||
|
||||
dt = QDateTime(QDate(1234, 12, 1), QTime(12, 34, 56));
|
||||
packed = MsgPack::pack(dt);
|
||||
QVERIFY(packed.size() == 8);
|
||||
dt2 = MsgPack::unpack(packed).toDateTime();
|
||||
QVERIFY(dt == dt2);
|
||||
|
||||
dt = QDateTime(QDate(1234, 12, 1), QTime(12, 34, 56, 789));
|
||||
packed = MsgPack::pack(dt);
|
||||
QVERIFY(packed.size() == 10);
|
||||
dt2 = MsgPack::unpack(packed).toDateTime();
|
||||
QVERIFY(dt == dt2);
|
||||
}
|
||||
|
||||
void QtTypesTest::test_qpoint()
|
||||
{
|
||||
MsgPack::registerType(QMetaType::QPoint, 0x79);
|
||||
|
||||
QPoint pt;
|
||||
QByteArray packed = MsgPack::pack(pt);
|
||||
QVERIFY(packed.size() == 1);
|
||||
QVERIFY(packed.size() == 3);
|
||||
QPoint pt2 = MsgPack::unpack(packed).toPoint();
|
||||
QVERIFY(pt == pt2);
|
||||
|
||||
@@ -99,7 +166,7 @@ void QtTypesTest::test_qsize()
|
||||
|
||||
QSize sz;
|
||||
QByteArray packed = MsgPack::pack(sz);
|
||||
// QVERIFY(packed.size() == 1);
|
||||
QVERIFY(packed.size() == 3);
|
||||
QSize sz2 = MsgPack::unpack(packed).toSize();
|
||||
QVERIFY(sz == sz2);
|
||||
|
||||
@@ -121,7 +188,7 @@ void QtTypesTest::test_qrect()
|
||||
MsgPack::registerType(QMetaType::QRect, 81);
|
||||
QRect r;
|
||||
QByteArray packed = MsgPack::pack(r);
|
||||
QVERIFY(packed.size() == 1);
|
||||
QVERIFY(packed.size() == 3);
|
||||
QRect r2 = MsgPack::unpack(packed).toRect();
|
||||
QVERIFY(r == r2);
|
||||
|
||||
|
@@ -3,6 +3,8 @@
|
||||
#include <QDebug>
|
||||
#include <msgpackstream.h>
|
||||
#include <msgpack.h>
|
||||
#include <stream/time.h>
|
||||
#include <stream/geometry.h>
|
||||
#include <limits>
|
||||
|
||||
class StreamTest : public QObject
|
||||
@@ -18,6 +20,9 @@ private Q_SLOTS:
|
||||
void test_double();
|
||||
void test_bin();
|
||||
void test_array();
|
||||
void test_ext();
|
||||
void test_time();
|
||||
void test_geometry();
|
||||
};
|
||||
|
||||
void StreamTest::test_unpack_integers()
|
||||
@@ -367,5 +372,357 @@ void StreamTest::test_array()
|
||||
}
|
||||
}
|
||||
|
||||
void StreamTest::test_ext()
|
||||
{
|
||||
{
|
||||
QByteArray ba;
|
||||
MsgPackStream out(&ba, QIODevice::WriteOnly);
|
||||
out.writeExtHeader(1, 7);
|
||||
QVERIFY(out.status() == MsgPackStream::Ok);
|
||||
quint8 *p = (quint8 *)ba.data();
|
||||
QVERIFY(ba.length() == 2);
|
||||
QVERIFY(p[0] == 0xd4);
|
||||
QVERIFY(p[1] == 7);
|
||||
|
||||
MsgPackStream in(ba);
|
||||
quint32 len;
|
||||
QVERIFY(in.readExtHeader(len));
|
||||
QVERIFY(in.status() == MsgPackStream::Ok);
|
||||
QVERIFY(len == 1);
|
||||
QVERIFY(in.device()->pos() == 2);
|
||||
}
|
||||
{
|
||||
QByteArray ba;
|
||||
MsgPackStream out(&ba, QIODevice::WriteOnly);
|
||||
out.writeExtHeader(17, 7);
|
||||
QVERIFY(out.status() == MsgPackStream::Ok);
|
||||
quint8 *p = (quint8 *)ba.data();
|
||||
QVERIFY(ba.length() == 3);
|
||||
QVERIFY(p[0] == 0xc7);
|
||||
QVERIFY(p[2] == 7);
|
||||
|
||||
MsgPackStream in(ba);
|
||||
quint32 len;
|
||||
QVERIFY(in.readExtHeader(len));
|
||||
QVERIFY(in.status() == MsgPackStream::Ok);
|
||||
QVERIFY(len == 17);
|
||||
QVERIFY(in.device()->pos() == 3);
|
||||
}
|
||||
{
|
||||
QByteArray ba;
|
||||
MsgPackStream out(&ba, QIODevice::WriteOnly);
|
||||
out.writeExtHeader(256, 7);
|
||||
QVERIFY(out.status() == MsgPackStream::Ok);
|
||||
quint8 *p = (quint8 *)ba.data();
|
||||
QVERIFY(ba.length() == 4);
|
||||
QVERIFY(p[0] == 0xc8);
|
||||
QVERIFY(p[3] == 7);
|
||||
|
||||
MsgPackStream in(ba);
|
||||
quint32 len;
|
||||
QVERIFY(in.readExtHeader(len));
|
||||
QVERIFY(in.status() == MsgPackStream::Ok);
|
||||
QVERIFY(len == 256);
|
||||
QVERIFY(in.device()->pos() == 4);
|
||||
}
|
||||
{
|
||||
QByteArray ba;
|
||||
MsgPackStream out(&ba, QIODevice::WriteOnly);
|
||||
out.writeExtHeader(65536, 7);
|
||||
QVERIFY(out.status() == MsgPackStream::Ok);
|
||||
quint8 *p = (quint8 *)ba.data();
|
||||
QVERIFY(ba.length() == 6);
|
||||
QVERIFY(p[0] == 0xc9);
|
||||
QVERIFY(p[5] == 7);
|
||||
|
||||
MsgPackStream in(ba);
|
||||
quint32 len;
|
||||
QVERIFY(in.readExtHeader(len));
|
||||
QVERIFY(in.status() == MsgPackStream::Ok);
|
||||
QVERIFY(len == 65536);
|
||||
QVERIFY(in.device()->pos() == 6);
|
||||
}
|
||||
}
|
||||
|
||||
void StreamTest::test_time()
|
||||
{
|
||||
MsgPack::registerType(QMetaType::QTime, 3);
|
||||
MsgPack::registerType(QMetaType::QDate, 4);
|
||||
MsgPack::registerType(QMetaType::QDateTime, 5);
|
||||
{
|
||||
QTime t;
|
||||
QByteArray ba;
|
||||
MsgPackStream out(&ba, QIODevice::WriteOnly);
|
||||
out << t;
|
||||
QVERIFY(out.status() == MsgPackStream::Ok);
|
||||
QVERIFY(ba.length() == 3);
|
||||
|
||||
MsgPackStream in(ba);
|
||||
QTime t2;
|
||||
in >> t2;
|
||||
QVERIFY(out.status() == MsgPackStream::Ok);
|
||||
QVERIFY(t == t2);
|
||||
}
|
||||
{
|
||||
QTime t = QTime(12, 01, 01, 0);
|
||||
QByteArray ba;
|
||||
MsgPackStream out(&ba, QIODevice::WriteOnly);
|
||||
out << t;
|
||||
QVERIFY(out.status() == MsgPackStream::Ok);
|
||||
QVERIFY(ba.length() == 4);
|
||||
|
||||
MsgPackStream in(ba);
|
||||
QTime t2;
|
||||
in >> t2;
|
||||
QVERIFY(out.status() == MsgPackStream::Ok);
|
||||
QVERIFY(t == t2);
|
||||
}
|
||||
{
|
||||
QTime t = QTime(12, 59, 59, 0);
|
||||
QByteArray ba;
|
||||
MsgPackStream out(&ba, QIODevice::WriteOnly);
|
||||
out << t;
|
||||
QVERIFY(out.status() == MsgPackStream::Ok);
|
||||
QVERIFY(ba.length() == 4);
|
||||
|
||||
MsgPackStream in(ba);
|
||||
QTime t2;
|
||||
in >> t2;
|
||||
QVERIFY(out.status() == MsgPackStream::Ok);
|
||||
QVERIFY(t == t2);
|
||||
}
|
||||
{
|
||||
QTime t = QTime(12, 34, 56, 789);
|
||||
QByteArray ba;
|
||||
MsgPackStream out(&ba, QIODevice::WriteOnly);
|
||||
out << t;
|
||||
QVERIFY(out.status() == MsgPackStream::Ok);
|
||||
QVERIFY(ba.length() == 6);
|
||||
|
||||
MsgPackStream in(ba);
|
||||
QTime t2;
|
||||
in >> t2;
|
||||
QVERIFY(out.status() == MsgPackStream::Ok);
|
||||
QVERIFY(t == t2);
|
||||
}
|
||||
{
|
||||
QDate d;
|
||||
QByteArray ba;
|
||||
MsgPackStream out(&ba, QIODevice::WriteOnly);
|
||||
out << d;
|
||||
QVERIFY(out.status() == MsgPackStream::Ok);
|
||||
QVERIFY(ba.length() == 3);
|
||||
|
||||
MsgPackStream in(ba);
|
||||
QDate d2;
|
||||
in >> d2;
|
||||
QVERIFY(out.status() == MsgPackStream::Ok);
|
||||
QVERIFY(d == d2);
|
||||
}
|
||||
{
|
||||
QDate d = QDate(1234, 12, 1);
|
||||
QByteArray ba;
|
||||
MsgPackStream out(&ba, QIODevice::WriteOnly);
|
||||
out << d;
|
||||
QVERIFY(out.status() == MsgPackStream::Ok);
|
||||
QVERIFY(ba.length() == 6);
|
||||
|
||||
MsgPackStream in(ba);
|
||||
QDate d2;
|
||||
in >> d2;
|
||||
QVERIFY(out.status() == MsgPackStream::Ok);
|
||||
QVERIFY(d == d2);
|
||||
}
|
||||
{
|
||||
QDate d = QDate(9999, 1, 31);
|
||||
QByteArray ba;
|
||||
MsgPackStream out(&ba, QIODevice::WriteOnly);
|
||||
out << d;
|
||||
QVERIFY(out.status() == MsgPackStream::Ok);
|
||||
QVERIFY(ba.length() == 6);
|
||||
|
||||
MsgPackStream in(ba);
|
||||
QDate d2;
|
||||
in >> d2;
|
||||
QVERIFY(out.status() == MsgPackStream::Ok);
|
||||
QVERIFY(d == d2);
|
||||
}
|
||||
{
|
||||
QDateTime dt;
|
||||
QByteArray ba;
|
||||
MsgPackStream out(&ba, QIODevice::WriteOnly);
|
||||
out << dt;
|
||||
QVERIFY(out.status() == MsgPackStream::Ok);
|
||||
QVERIFY(ba.length() == 3);
|
||||
|
||||
MsgPackStream in(ba);
|
||||
QDateTime dt2;
|
||||
in >> dt2;
|
||||
QVERIFY(out.status() == MsgPackStream::Ok);
|
||||
QVERIFY(dt == dt2);
|
||||
}
|
||||
{
|
||||
QDateTime dt(QDate(1234, 12, 1), QTime(12, 34, 56));
|
||||
QByteArray ba;
|
||||
MsgPackStream out(&ba, QIODevice::WriteOnly);
|
||||
out << dt;
|
||||
QVERIFY(out.status() == MsgPackStream::Ok);
|
||||
QVERIFY(ba.length() == 8);
|
||||
|
||||
MsgPackStream in(ba);
|
||||
QDateTime dt2;
|
||||
in >> dt2;
|
||||
QVERIFY(out.status() == MsgPackStream::Ok);
|
||||
QVERIFY(dt == dt2);
|
||||
}
|
||||
{
|
||||
QDateTime dt(QDate(1234, 12, 1), QTime(12, 34, 56, 789));
|
||||
QByteArray ba;
|
||||
MsgPackStream out(&ba, QIODevice::WriteOnly);
|
||||
out << dt;
|
||||
QVERIFY(out.status() == MsgPackStream::Ok);
|
||||
QVERIFY(ba.length() == 10);
|
||||
|
||||
MsgPackStream in(ba);
|
||||
QDateTime dt2;
|
||||
in >> dt2;
|
||||
QVERIFY(out.status() == MsgPackStream::Ok);
|
||||
QVERIFY(dt == dt2);
|
||||
}
|
||||
}
|
||||
|
||||
void StreamTest::test_geometry()
|
||||
{
|
||||
MsgPack::registerType(QMetaType::QPoint, 6);
|
||||
MsgPack::registerType(QMetaType::QSize, 7);
|
||||
MsgPack::registerType(QMetaType::QRect, 8);
|
||||
{
|
||||
QPoint pt;
|
||||
QByteArray ba;
|
||||
MsgPackStream out(&ba, QIODevice::WriteOnly);
|
||||
out << pt;
|
||||
QVERIFY(out.status() == MsgPackStream::Ok);
|
||||
QVERIFY(ba.length() == 3);
|
||||
|
||||
MsgPackStream in(ba);
|
||||
QPoint pt2;
|
||||
in >> pt2;
|
||||
QVERIFY(out.status() == MsgPackStream::Ok);
|
||||
QVERIFY(pt == pt2);
|
||||
}
|
||||
{
|
||||
QPoint pt(1, 2);
|
||||
QByteArray ba;
|
||||
MsgPackStream out(&ba, QIODevice::WriteOnly);
|
||||
out << pt;
|
||||
QVERIFY(out.status() == MsgPackStream::Ok);
|
||||
QVERIFY(ba.length() == 4);
|
||||
|
||||
MsgPackStream in(ba);
|
||||
QPoint pt2;
|
||||
in >> pt2;
|
||||
QVERIFY(out.status() == MsgPackStream::Ok);
|
||||
QVERIFY(pt == pt2);
|
||||
}
|
||||
{
|
||||
QPoint pt(1234, 5678);
|
||||
QByteArray ba;
|
||||
MsgPackStream out(&ba, QIODevice::WriteOnly);
|
||||
out << pt;
|
||||
QVERIFY(out.status() == MsgPackStream::Ok);
|
||||
QVERIFY(ba.length() == 9);
|
||||
|
||||
MsgPackStream in(ba);
|
||||
QPoint pt2;
|
||||
in >> pt2;
|
||||
QVERIFY(out.status() == MsgPackStream::Ok);
|
||||
QVERIFY(pt == pt2);
|
||||
}
|
||||
{
|
||||
QSize sz;
|
||||
QByteArray ba;
|
||||
MsgPackStream out(&ba, QIODevice::WriteOnly);
|
||||
out << sz;
|
||||
QVERIFY(out.status() == MsgPackStream::Ok);
|
||||
QVERIFY(ba.length() == 3);
|
||||
|
||||
MsgPackStream in(ba);
|
||||
QSize sz2;
|
||||
in >> sz2;
|
||||
QVERIFY(out.status() == MsgPackStream::Ok);
|
||||
QVERIFY(sz == sz2);
|
||||
}
|
||||
{
|
||||
QSize sz(1, 2);
|
||||
QByteArray ba;
|
||||
MsgPackStream out(&ba, QIODevice::WriteOnly);
|
||||
out << sz;
|
||||
QVERIFY(out.status() == MsgPackStream::Ok);
|
||||
QVERIFY(ba.length() == 4);
|
||||
|
||||
MsgPackStream in(ba);
|
||||
QSize sz2;
|
||||
in >> sz2;
|
||||
QVERIFY(out.status() == MsgPackStream::Ok);
|
||||
QVERIFY(sz == sz2);
|
||||
}
|
||||
{
|
||||
QSize sz(1234, 5678);
|
||||
QByteArray ba;
|
||||
MsgPackStream out(&ba, QIODevice::WriteOnly);
|
||||
out << sz;
|
||||
QVERIFY(out.status() == MsgPackStream::Ok);
|
||||
QVERIFY(ba.length() == 9);
|
||||
|
||||
MsgPackStream in(ba);
|
||||
QSize sz2;
|
||||
in >> sz2;
|
||||
QVERIFY(out.status() == MsgPackStream::Ok);
|
||||
QVERIFY(sz == sz2);
|
||||
}
|
||||
{
|
||||
QRect rect;
|
||||
QByteArray ba;
|
||||
MsgPackStream out(&ba, QIODevice::WriteOnly);
|
||||
out << rect;
|
||||
QVERIFY(out.status() == MsgPackStream::Ok);
|
||||
QVERIFY(ba.length() == 3);
|
||||
|
||||
MsgPackStream in(ba);
|
||||
QRect rect2;
|
||||
in >> rect2;
|
||||
QVERIFY(out.status() == MsgPackStream::Ok);
|
||||
QVERIFY(rect == rect2);
|
||||
}
|
||||
{
|
||||
QRect rect(1, 2, 3, 4);
|
||||
QByteArray ba;
|
||||
MsgPackStream out(&ba, QIODevice::WriteOnly);
|
||||
out << rect;
|
||||
QVERIFY(out.status() == MsgPackStream::Ok);
|
||||
QVERIFY(ba.length() == 6);
|
||||
|
||||
MsgPackStream in(ba);
|
||||
QRect rect2;
|
||||
in >> rect2;
|
||||
QVERIFY(out.status() == MsgPackStream::Ok);
|
||||
QVERIFY(rect == rect2);
|
||||
}
|
||||
{
|
||||
QRect rect(0, 0, 65536, 65536);
|
||||
QByteArray ba;
|
||||
MsgPackStream out(&ba, QIODevice::WriteOnly);
|
||||
out << rect;
|
||||
QVERIFY(out.status() == MsgPackStream::Ok);
|
||||
QVERIFY(ba.length() == 15);
|
||||
|
||||
MsgPackStream in(ba);
|
||||
QRect rect2;
|
||||
in >> rect2;
|
||||
QVERIFY(out.status() == MsgPackStream::Ok);
|
||||
QVERIFY(rect == rect2);
|
||||
}
|
||||
}
|
||||
|
||||
QTEST_APPLESS_MAIN(StreamTest)
|
||||
#include "stream_test.moc"
|
||||
|
Reference in New Issue
Block a user