Qt types stream operators, documentation updated, custom types support improved, bug fixes and new tests.

This commit is contained in:
Isaikin Roman
2015-09-12 16:48:21 +03:00
parent 4da435044d
commit 5761f66683
25 changed files with 1244 additions and 102 deletions

View File

@@ -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})

View File

@@ -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);

View File

@@ -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"