mirror of https://github.com/qt/qtgrpc.git
Refactor tst_protobuf_deserialization_basictypes tests
Use common serialization data for serialization and deserialization
of basic types.
Task-number: QTBUG-111070
Change-Id: I2691e50d570a4a7b357f1e1eaea486f606b71bbe
Reviewed-by: Alexey Edelev <alexey.edelev@qt.io>
(cherry picked from commit d241085ef7)
This commit is contained in:
parent
d6fdc8100d
commit
9254d98002
|
|
@ -0,0 +1,210 @@
|
|||
// Copyright (C) 2022 The Qt Company Ltd.
|
||||
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
|
||||
|
||||
#include <QtCore/QStringLiteral>
|
||||
#include <QtCore/qsize.h>
|
||||
#include <limits>
|
||||
#include <optional>
|
||||
|
||||
namespace qtprotobufnamespace::tests {
|
||||
|
||||
using namespace Qt::Literals::StringLiterals;
|
||||
|
||||
#define INT_MIN_SDATA(type, size, data) \
|
||||
std::numeric_limits<type>::min(), size, data, QString("%1_min").arg(#type)
|
||||
#define INT_MAX_SDATA(type, size, data) \
|
||||
std::numeric_limits<type>::max(), size, data, QString("%1_max").arg(#type)
|
||||
#define BELOW_INT_MAX_SDATA(type, size, data) \
|
||||
std::numeric_limits<type>::min() - 1, size, data, QString("below_%1_min").arg(#type)
|
||||
#define OVER_INT_MAX_SDATA(type, size, data) \
|
||||
std::numeric_limits<type>::max() + 1, size, data, QString("over_%1_max").arg(#type)
|
||||
|
||||
constexpr qsizetype Fixed32IntSize = 5;
|
||||
constexpr qsizetype Fixed64IntSize = 9;
|
||||
|
||||
enum class IntTypes : uint8_t {
|
||||
Int = 0,
|
||||
UInt,
|
||||
SInt,
|
||||
Fixed,
|
||||
SFixed,
|
||||
};
|
||||
|
||||
template <typename T>
|
||||
struct SerializeData
|
||||
{
|
||||
T value;
|
||||
qsizetype size;
|
||||
QByteArray hexData;
|
||||
std::optional<QString> name = std::nullopt;
|
||||
|
||||
static QList<SerializeData<T>> getSerializeData(IntTypes type);
|
||||
|
||||
private:
|
||||
static QList<SerializeData<T>> getCommonIntValues(IntTypes type);
|
||||
static constexpr QList<SerializeData<T>> getInt32LimitValues(IntTypes type);
|
||||
static constexpr QList<SerializeData<T>> getInt64LimitValues(IntTypes type);
|
||||
};
|
||||
|
||||
template <typename T>
|
||||
QList<SerializeData<T>> SerializeData<T>::getCommonIntValues(IntTypes type)
|
||||
{
|
||||
QList<SerializeData<T>> data{ { (T)0, 0, ""_ba, u"empty_data"_s } };
|
||||
switch (type) {
|
||||
case IntTypes::Int:
|
||||
data.append({ { (T)-1, 11ll, "08ffffffffffffffffff01"_ba },
|
||||
{ (T)-462, 11ll, "08b2fcffffffffffffff01"_ba },
|
||||
{ (T)-63585, 11ll, "089f8ffcffffffffffff01"_ba } });
|
||||
Q_FALLTHROUGH(); // Got negative values, fallthrough to positive
|
||||
case IntTypes::UInt:
|
||||
data.append({ { (T)15, 2ll, "080f"_ba },
|
||||
{ (T)300, 3ll, "08ac02"_ba },
|
||||
{ (T)65545, 4ll, "08898004"_ba } });
|
||||
break;
|
||||
case IntTypes::SInt:
|
||||
data.append({ { (T)15, 2ll, "081e"_ba },
|
||||
{ (T)300, 3ll, "08d804"_ba },
|
||||
{ (T)65545, 4ll, "08928008"_ba },
|
||||
{ (T)-1, 2ll, "0801"_ba },
|
||||
{ (T)-462, 3ll, "089b07"_ba },
|
||||
{ (T)-63585, 4ll, "08c1e107"_ba } });
|
||||
break;
|
||||
case IntTypes::SFixed:
|
||||
data.append({ { (T)-1, Fixed32IntSize, "0dffffffff"_ba },
|
||||
{ (T)-462, Fixed32IntSize, "0d32feffff"_ba },
|
||||
{ (T)-63585, Fixed32IntSize, "0d9f07ffff"_ba } });
|
||||
Q_FALLTHROUGH(); // Got negative values, fallthrough to positive
|
||||
case IntTypes::Fixed:
|
||||
data.append({ { (T)15, Fixed32IntSize, "0d0f000000"_ba },
|
||||
{ (T)300, Fixed32IntSize, "0d2c010000"_ba },
|
||||
{ (T)65545, Fixed32IntSize, "0d09000100"_ba } });
|
||||
break;
|
||||
}
|
||||
if constexpr (std::is_same_v<T, int64_t> || std::is_same_v<T, uint64_t>) {
|
||||
if (type == IntTypes::Fixed || type == IntTypes::SFixed) {
|
||||
// Do not merge with 32-bit version
|
||||
data = { { (T)0, 0, ""_ba, u"empty_data"_s },
|
||||
{ (T)15, Fixed64IntSize, "090f00000000000000"_ba },
|
||||
{ (T)300, Fixed64IntSize, "092c01000000000000"_ba },
|
||||
{ (T)65545, Fixed64IntSize, "090900010000000000"_ba } };
|
||||
}
|
||||
if (type == IntTypes::SFixed) {
|
||||
data.append({ { (T)-1, Fixed64IntSize, "09ffffffffffffffff"_ba },
|
||||
{ (T)-462, Fixed64IntSize, "0932feffffffffffff"_ba },
|
||||
{ (T)-63585, Fixed64IntSize, "099f07ffffffffffff"_ba } });
|
||||
}
|
||||
}
|
||||
return data;
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
constexpr QList<SerializeData<T>> SerializeData<T>::getInt32LimitValues(IntTypes type)
|
||||
{
|
||||
switch (type) {
|
||||
case IntTypes::Int:
|
||||
return { { (T)INT_MAX_SDATA(int8_t, 2ll, "087f"_ba) },
|
||||
{ (T)INT_MAX_SDATA(int16_t, 4ll, "08ffff01"_ba) },
|
||||
{ (T)INT_MAX_SDATA(int32_t, 6ll, "08ffffffff07"_ba) },
|
||||
{ (T)OVER_INT_MAX_SDATA(int8_t, 3ll, "088001"_ba) },
|
||||
{ (T)OVER_INT_MAX_SDATA(int16_t, 4ll, "08808002"_ba) },
|
||||
{ (T)INT_MIN_SDATA(int8_t, 11ll, "0880ffffffffffffffff01"_ba) },
|
||||
{ (T)INT_MIN_SDATA(int16_t, 11ll, "088080feffffffffffff01"_ba) },
|
||||
{ (T)INT_MIN_SDATA(int32_t, 11ll, "0880808080f8ffffffff01"_ba) },
|
||||
{ (T)BELOW_INT_MAX_SDATA(int8_t, 11ll, "08fffeffffffffffffff01"_ba) },
|
||||
{ (T)BELOW_INT_MAX_SDATA(int16_t, 11ll, "08fffffdffffffffffff01"_ba) } };
|
||||
case IntTypes::UInt:
|
||||
return { { (T)INT_MAX_SDATA(uint8_t, 3ll, "08ff01"_ba) },
|
||||
{ (T)INT_MAX_SDATA(uint16_t, 4ll, "08ffff03"_ba) },
|
||||
{ (T)INT_MAX_SDATA(uint32_t, 6ll, "08ffffffff0f"_ba) },
|
||||
{ (T)OVER_INT_MAX_SDATA(uint8_t, 3ll, "088002"_ba) },
|
||||
{ (T)OVER_INT_MAX_SDATA(uint16_t, 4ll, "08808004"_ba) } };
|
||||
case IntTypes::SInt:
|
||||
return { { (T)INT_MAX_SDATA(int8_t, 3ll, "08fe01"_ba) },
|
||||
{ (T)INT_MAX_SDATA(int16_t, 4ll, "08feff03"_ba) },
|
||||
{ (T)INT_MAX_SDATA(int32_t, 6ll, "08feffffff0f"_ba) },
|
||||
{ (T)OVER_INT_MAX_SDATA(int8_t, 3ll, "088002"_ba) },
|
||||
{ (T)OVER_INT_MAX_SDATA(int16_t, 4ll, "08808004"_ba) },
|
||||
{ (T)INT_MIN_SDATA(int8_t, 3ll, "08ff01"_ba) },
|
||||
{ (T)INT_MIN_SDATA(int16_t, 4ll, "08ffff03"_ba) },
|
||||
{ (T)INT_MIN_SDATA(int32_t, 6ll, "08ffffffff0f"_ba) },
|
||||
{ (T)BELOW_INT_MAX_SDATA(int8_t, 3ll, "088102"_ba) },
|
||||
{ (T)BELOW_INT_MAX_SDATA(int16_t, 4ll, "08818004"_ba) } };
|
||||
case IntTypes::Fixed:
|
||||
if constexpr (std::is_same_v<T, uint32_t>) {
|
||||
return { { (T)INT_MAX_SDATA(uint8_t, Fixed32IntSize, "0dff000000"_ba) },
|
||||
{ (T)INT_MAX_SDATA(uint16_t, Fixed32IntSize, "0dffff0000"_ba) },
|
||||
{ (T)INT_MAX_SDATA(uint32_t, Fixed32IntSize, "0dffffffff"_ba) },
|
||||
{ (T)OVER_INT_MAX_SDATA(uint8_t, Fixed32IntSize, "0d00010000"_ba) },
|
||||
{ (T)OVER_INT_MAX_SDATA(uint16_t, Fixed32IntSize, "0d00000100"_ba) } };
|
||||
}
|
||||
case IntTypes::SFixed:
|
||||
if constexpr (std::is_same_v<T, int32_t>) {
|
||||
return { { (T)INT_MAX_SDATA(int8_t, Fixed32IntSize, "0d7f000000"_ba) },
|
||||
{ (T)INT_MAX_SDATA(int16_t, Fixed32IntSize, "0dff7f0000"_ba) },
|
||||
{ (T)INT_MAX_SDATA(int32_t, Fixed32IntSize, "0dffffff7f"_ba) },
|
||||
{ (T)OVER_INT_MAX_SDATA(int8_t, Fixed32IntSize, "0d80000000"_ba) },
|
||||
{ (T)OVER_INT_MAX_SDATA(int16_t, Fixed32IntSize, "0d00800000"_ba) },
|
||||
{ (T)INT_MIN_SDATA(int8_t, Fixed32IntSize, "0d80ffffff"_ba) },
|
||||
{ (T)INT_MIN_SDATA(int16_t, Fixed32IntSize, "0d0080ffff"_ba) },
|
||||
{ (T)INT_MIN_SDATA(int32_t, Fixed32IntSize, "0d00000080"_ba) },
|
||||
{ (T)BELOW_INT_MAX_SDATA(int8_t, Fixed32IntSize, "0d7fffffff"_ba) },
|
||||
{ (T)BELOW_INT_MAX_SDATA(int16_t, Fixed32IntSize, "0dff7fffff"_ba) } };
|
||||
}
|
||||
}
|
||||
return {};
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
constexpr QList<SerializeData<T>> SerializeData<T>::getInt64LimitValues(IntTypes type)
|
||||
{
|
||||
if constexpr (std::is_same_v<T, int64_t> || std::is_same_v<T, uint64_t>) {
|
||||
switch (type) {
|
||||
case IntTypes::Int:
|
||||
return { { (T)INT_MAX_SDATA(int64_t, 10ll, "08ffffffffffffffff7f"_ba) },
|
||||
{ (T)OVER_INT_MAX_SDATA(int32_t, 6ll, "088080808008"_ba) },
|
||||
{ (T)INT_MIN_SDATA(int64_t, 11ll, "0880808080808080808001"_ba) },
|
||||
{ (T)BELOW_INT_MAX_SDATA(int32_t, 11ll, "08fffffffff7ffffffff01"_ba) } };
|
||||
case IntTypes::UInt:
|
||||
return { { (T)INT_MAX_SDATA(int64_t, 10ll, "08ffffffffffffffff7f"_ba) },
|
||||
{ (T)OVER_INT_MAX_SDATA(int32_t, 6ll, "088080808008"_ba) } };
|
||||
case IntTypes::SInt:
|
||||
return { { (T)INT_MAX_SDATA(int64_t, 11ll, "08feffffffffffffffff01"_ba) },
|
||||
{ (T)OVER_INT_MAX_SDATA(int32_t, 6ll, "088080808010"_ba) },
|
||||
{ (T)INT_MIN_SDATA(int64_t, 11ll, "08ffffffffffffffffff01"_ba) },
|
||||
{ (T)BELOW_INT_MAX_SDATA(int32_t, 6ll, "088180808010"_ba) } };
|
||||
case IntTypes::Fixed:
|
||||
return { { (T)INT_MAX_SDATA(uint8_t, Fixed64IntSize, "09ff00000000000000"_ba) },
|
||||
{ (T)INT_MAX_SDATA(uint16_t, Fixed64IntSize, "09ffff000000000000"_ba) },
|
||||
{ (T)INT_MAX_SDATA(uint32_t, Fixed64IntSize, "09ffffffff00000000"_ba) },
|
||||
{ (T)INT_MAX_SDATA(uint64_t, Fixed64IntSize, "09ffffffffffffffff"_ba) },
|
||||
{ (T)OVER_INT_MAX_SDATA(uint8_t, Fixed64IntSize, "090001000000000000"_ba) },
|
||||
{ (T)OVER_INT_MAX_SDATA(uint16_t, Fixed64IntSize, "090000010000000000"_ba) },
|
||||
{ (T)OVER_INT_MAX_SDATA(uint32_t, Fixed64IntSize, "090000000001000000"_ba) } };
|
||||
case IntTypes::SFixed:
|
||||
return { { (T)INT_MAX_SDATA(int8_t, Fixed64IntSize, "097f00000000000000"_ba) },
|
||||
{ (T)INT_MAX_SDATA(int16_t, Fixed64IntSize, "09ff7f000000000000"_ba) },
|
||||
{ (T)INT_MAX_SDATA(int32_t, Fixed64IntSize, "09ffffff7f00000000"_ba) },
|
||||
{ (T)INT_MAX_SDATA(int64_t, Fixed64IntSize, "09ffffffffffffff7f"_ba) },
|
||||
{ (T)OVER_INT_MAX_SDATA(int8_t, Fixed64IntSize, "098000000000000000"_ba) },
|
||||
{ (T)OVER_INT_MAX_SDATA(int16_t, Fixed64IntSize, "090080000000000000"_ba) },
|
||||
{ (T)OVER_INT_MAX_SDATA(int32_t, Fixed64IntSize, "090000008000000000"_ba) },
|
||||
{ (T)INT_MIN_SDATA(int8_t, Fixed64IntSize, "0980ffffffffffffff"_ba) },
|
||||
{ (T)INT_MIN_SDATA(int16_t, Fixed64IntSize, "090080ffffffffffff"_ba) },
|
||||
{ (T)INT_MIN_SDATA(int32_t, Fixed64IntSize, "0900000080ffffffff"_ba) },
|
||||
{ (T)INT_MIN_SDATA(int64_t, Fixed64IntSize, "090000000000000080"_ba) },
|
||||
{ (T)BELOW_INT_MAX_SDATA(int8_t, Fixed64IntSize, "097fffffffffffffff"_ba) },
|
||||
{ (T)BELOW_INT_MAX_SDATA(int16_t, Fixed64IntSize, "09ff7fffffffffffff"_ba) },
|
||||
{ (T)BELOW_INT_MAX_SDATA(int32_t, Fixed64IntSize, "09ffffff7fffffffff"_ba) } };
|
||||
}
|
||||
}
|
||||
return {};
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
QList<SerializeData<T>> SerializeData<T>::getSerializeData(IntTypes type)
|
||||
{
|
||||
return SerializeData<T>::getCommonIntValues(type) + SerializeData<T>::getInt32LimitValues(type)
|
||||
+ SerializeData<T>::getInt64LimitValues(type);
|
||||
}
|
||||
|
||||
} // namespace qtprotobufnamespace::tests
|
||||
|
|
@ -4,35 +4,47 @@
|
|||
|
||||
#include "basicmessages.qpb.h"
|
||||
#include "fieldindexrange.qpb.h"
|
||||
#include "qtprotobufserializertestdata.h"
|
||||
|
||||
#include <QObject>
|
||||
|
||||
#include <QTest>
|
||||
#include <QProtobufSerializer>
|
||||
#include <QTest>
|
||||
|
||||
#include <limits>
|
||||
|
||||
using namespace Qt::Literals::StringLiterals;
|
||||
|
||||
class QtProtobufTypesDeserializationTest : public QObject
|
||||
{
|
||||
Q_OBJECT
|
||||
private slots:
|
||||
void init()
|
||||
{
|
||||
serializer.reset(new QProtobufSerializer);
|
||||
}
|
||||
void init() { serializer.reset(new QProtobufSerializer); }
|
||||
|
||||
void FixedInt32MessageDeserializeTest_data();
|
||||
void FixedInt32MessageDeserializeTest();
|
||||
void FixedInt64MessageDeserializeTest_data();
|
||||
void FixedInt64MessageDeserializeTest();
|
||||
void SFixedInt32MessageDeserializeTest_data();
|
||||
void SFixedInt32MessageDeserializeTest();
|
||||
void SFixedInt64MessageDeserializeTest_data();
|
||||
void SFixedInt64MessageDeserializeTest();
|
||||
void FloatMessageDeserializeTest_data();
|
||||
void FloatMessageDeserializeTest();
|
||||
void DoubleMessageDeserializeTest_data();
|
||||
void DoubleMessageDeserializeTest();
|
||||
void IntMessageDeserializeTest_data();
|
||||
void IntMessageDeserializeTest();
|
||||
void StringMessageDeserializeTest_data();
|
||||
void StringMessageDeserializeTest();
|
||||
void ComplexTypeDeserializeTest_data();
|
||||
void ComplexTypeDeserializeTest();
|
||||
void SIntMessageDeserializeTest_data();
|
||||
void SIntMessageDeserializeTest();
|
||||
void UIntMessageDeserializeTest_data();
|
||||
void UIntMessageDeserializeTest();
|
||||
void BoolDeserializeTest_data();
|
||||
void BoolDeserializeTest();
|
||||
void RedundantFieldIsIgnoredAtDeserializationTest_data();
|
||||
void RedundantFieldIsIgnoredAtDeserializationTest();
|
||||
void FieldIndexRangeTest();
|
||||
private:
|
||||
|
|
@ -41,487 +53,336 @@ private:
|
|||
|
||||
using namespace qtprotobufnamespace::tests;
|
||||
|
||||
#define EMPTY_VALUE_TEST_ROW(type) QTest::newRow("empty_data") << ""_ba << (type)0
|
||||
|
||||
template <typename T>
|
||||
void generateTestData(IntTypes type)
|
||||
{
|
||||
QTest::addColumn<QByteArray>("hexData");
|
||||
QTest::addColumn<T>("expectedValue");
|
||||
|
||||
EMPTY_VALUE_TEST_ROW(T);
|
||||
const auto data = SerializeData<T>::getSerializeData(type);
|
||||
for (const auto &test : data) {
|
||||
auto testName = QString("value_%1")
|
||||
.arg(test.name ? *(test.name) : QString::number(test.value));
|
||||
QTest::newRow(testName.toStdString().c_str()) << test.hexData << test.value;
|
||||
}
|
||||
}
|
||||
|
||||
void QtProtobufTypesDeserializationTest::FixedInt32MessageDeserializeTest_data()
|
||||
{
|
||||
generateTestData<uint32_t>(IntTypes::Fixed);
|
||||
}
|
||||
|
||||
void QtProtobufTypesDeserializationTest::FixedInt32MessageDeserializeTest()
|
||||
{
|
||||
QFETCH(const QByteArray, hexData);
|
||||
QFETCH(const uint32_t, expectedValue);
|
||||
|
||||
SimpleFixedInt32Message test;
|
||||
test.deserialize(serializer.get(), QByteArray::fromHex("0d0f000000"));
|
||||
QCOMPARE(test.testFieldFixedInt32(), 15u);
|
||||
test.deserialize(serializer.get(), QByteArray::fromHex(hexData));
|
||||
QCOMPARE(test.testFieldFixedInt32(), expectedValue);
|
||||
}
|
||||
|
||||
test.deserialize(serializer.get(), QByteArray::fromHex("0d2c010000"));
|
||||
QCOMPARE(test.testFieldFixedInt32(), 300u);
|
||||
|
||||
test.deserialize(serializer.get(), QByteArray::fromHex("0d09000100"));
|
||||
QCOMPARE(test.testFieldFixedInt32(), 65545u);
|
||||
|
||||
test.deserialize(serializer.get(), QByteArray::fromHex("0d00000000"));
|
||||
QCOMPARE(test.testFieldFixedInt32(), 0u);
|
||||
|
||||
test.deserialize(serializer.get(), QByteArray::fromHex("0d2c010000"));
|
||||
QCOMPARE(test.testFieldFixedInt32(), 300u);
|
||||
|
||||
test.deserialize(serializer.get(), QByteArray::fromHex("0d00010000"));
|
||||
QCOMPARE(test.testFieldFixedInt32(), (uint32_t)UINT8_MAX + 1);
|
||||
|
||||
test.deserialize(serializer.get(), QByteArray::fromHex("0d00000100"));
|
||||
QCOMPARE(test.testFieldFixedInt32(), (uint32_t)UINT16_MAX + 1);
|
||||
|
||||
test.deserialize(serializer.get(), QByteArray::fromHex("0dff000000"));
|
||||
QCOMPARE(test.testFieldFixedInt32(), (uint32_t)UINT8_MAX);
|
||||
|
||||
test.deserialize(serializer.get(), QByteArray::fromHex("0dffff0000"));
|
||||
QCOMPARE(test.testFieldFixedInt32(), (uint32_t)UINT16_MAX);
|
||||
|
||||
test.deserialize(serializer.get(), QByteArray::fromHex("0dffffffff"));
|
||||
QCOMPARE(test.testFieldFixedInt32(), (uint32_t)UINT32_MAX);
|
||||
|
||||
test.setTestFieldFixedInt32(11);
|
||||
test.deserialize(serializer.get(), QByteArray::fromHex(""));
|
||||
QCOMPARE(test.testFieldFixedInt32(), 0u);
|
||||
void QtProtobufTypesDeserializationTest::FixedInt64MessageDeserializeTest_data()
|
||||
{
|
||||
generateTestData<uint64_t>(IntTypes::Fixed);
|
||||
}
|
||||
|
||||
void QtProtobufTypesDeserializationTest::FixedInt64MessageDeserializeTest()
|
||||
{
|
||||
QFETCH(const QByteArray, hexData);
|
||||
QFETCH(const uint64_t, expectedValue);
|
||||
|
||||
SimpleFixedInt64Message test;
|
||||
test.deserialize(serializer.get(), QByteArray::fromHex("090f00000000000000"));
|
||||
QCOMPARE(test.testFieldFixedInt64(), 15u);
|
||||
test.deserialize(serializer.get(), QByteArray::fromHex(hexData));
|
||||
QCOMPARE(test.testFieldFixedInt64(), expectedValue);
|
||||
}
|
||||
|
||||
|
||||
test.deserialize(serializer.get(), QByteArray::fromHex("092c01000000000000"));
|
||||
QCOMPARE(test.testFieldFixedInt64(), 300u);
|
||||
|
||||
test.deserialize(serializer.get(), QByteArray::fromHex("090900010000000000"));
|
||||
QCOMPARE(test.testFieldFixedInt64(), 65545u);
|
||||
|
||||
test.deserialize(serializer.get(), QByteArray::fromHex("090000000000000000"));
|
||||
QCOMPARE(test.testFieldFixedInt64(), 0u);
|
||||
|
||||
test.deserialize(serializer.get(), QByteArray::fromHex("090001000000000000"));
|
||||
QCOMPARE(test.testFieldFixedInt64(), (uint64_t)UINT8_MAX + 1);
|
||||
|
||||
test.deserialize(serializer.get(), QByteArray::fromHex("090000010000000000"));
|
||||
QCOMPARE(test.testFieldFixedInt64(), (uint64_t)UINT16_MAX + 1);
|
||||
|
||||
test.deserialize(serializer.get(), QByteArray::fromHex("090000000001000000"));
|
||||
QCOMPARE(test.testFieldFixedInt64(), (uint64_t)UINT32_MAX + 1);
|
||||
|
||||
test.deserialize(serializer.get(), QByteArray::fromHex("09ff00000000000000"));
|
||||
QCOMPARE(test.testFieldFixedInt64(), (uint64_t)UINT8_MAX);
|
||||
|
||||
test.deserialize(serializer.get(), QByteArray::fromHex("09ffff000000000000"));
|
||||
QCOMPARE(test.testFieldFixedInt64(), (uint64_t)UINT16_MAX);
|
||||
|
||||
test.deserialize(serializer.get(), QByteArray::fromHex("09ffffffff00000000"));
|
||||
QCOMPARE(test.testFieldFixedInt64(), (uint64_t)UINT32_MAX);
|
||||
|
||||
test.deserialize(serializer.get(), QByteArray::fromHex("09ffffffffffffffff"));
|
||||
QCOMPARE(test.testFieldFixedInt64(), (uint64_t)UINT64_MAX);
|
||||
|
||||
test.setTestFieldFixedInt64(11);
|
||||
test.deserialize(serializer.get(), QByteArray::fromHex(""));
|
||||
QCOMPARE(test.testFieldFixedInt64(), 0u);
|
||||
void QtProtobufTypesDeserializationTest::SFixedInt32MessageDeserializeTest_data()
|
||||
{
|
||||
generateTestData<int32_t>(IntTypes::SFixed);
|
||||
}
|
||||
|
||||
void QtProtobufTypesDeserializationTest::SFixedInt32MessageDeserializeTest()
|
||||
{
|
||||
QFETCH(const QByteArray, hexData);
|
||||
QFETCH(const int32_t, expectedValue);
|
||||
|
||||
SimpleSFixedInt32Message test;
|
||||
test.deserialize(serializer.get(), QByteArray::fromHex("0d0f000000"));
|
||||
QCOMPARE(test.testFieldFixedInt32(), 15);
|
||||
test.deserialize(serializer.get(), QByteArray::fromHex(hexData));
|
||||
QCOMPARE(test.testFieldFixedInt32(), expectedValue);
|
||||
}
|
||||
|
||||
test.deserialize(serializer.get(), QByteArray::fromHex("0d2c010000"));
|
||||
QCOMPARE(test.testFieldFixedInt32(), 300);
|
||||
|
||||
test.deserialize(serializer.get(), QByteArray::fromHex("0d09000100"));
|
||||
QCOMPARE(test.testFieldFixedInt32(), 65545);
|
||||
|
||||
test.deserialize(serializer.get(), QByteArray::fromHex("0d00000000"));
|
||||
QCOMPARE(test.testFieldFixedInt32(), 0);
|
||||
|
||||
test.deserialize(serializer.get(), QByteArray::fromHex("0d2c010000"));
|
||||
QCOMPARE(test.testFieldFixedInt32(), 300);
|
||||
|
||||
test.deserialize(serializer.get(), QByteArray::fromHex("0d80000000"));
|
||||
QCOMPARE(test.testFieldFixedInt32(), INT8_MAX + 1);
|
||||
|
||||
test.deserialize(serializer.get(), QByteArray::fromHex("0d00800000"));
|
||||
QCOMPARE(test.testFieldFixedInt32(), INT16_MAX + 1);
|
||||
|
||||
test.deserialize(serializer.get(), QByteArray::fromHex("0d7f000000"));
|
||||
QCOMPARE(test.testFieldFixedInt32(), INT8_MAX);
|
||||
|
||||
test.deserialize(serializer.get(), QByteArray::fromHex("0dff7f0000"));
|
||||
QCOMPARE(test.testFieldFixedInt32(), INT16_MAX);
|
||||
|
||||
test.deserialize(serializer.get(), QByteArray::fromHex("0dffffff7f"));
|
||||
QCOMPARE(test.testFieldFixedInt32(), INT32_MAX);
|
||||
|
||||
test.deserialize(serializer.get(), QByteArray::fromHex("0d7fffffff"));
|
||||
QCOMPARE(test.testFieldFixedInt32(), INT8_MIN - 1);
|
||||
|
||||
test.deserialize(serializer.get(), QByteArray::fromHex("0dff7fffff"));
|
||||
QCOMPARE(test.testFieldFixedInt32(), INT16_MIN - 1);
|
||||
|
||||
test.deserialize(serializer.get(), QByteArray::fromHex("0d80ffffff"));
|
||||
QCOMPARE(test.testFieldFixedInt32(), INT8_MIN);
|
||||
|
||||
test.deserialize(serializer.get(), QByteArray::fromHex("0d0080ffff"));
|
||||
QCOMPARE(test.testFieldFixedInt32(), INT16_MIN);
|
||||
|
||||
test.deserialize(serializer.get(), QByteArray::fromHex("0d00000080"));
|
||||
QCOMPARE(test.testFieldFixedInt32(), INT32_MIN);
|
||||
|
||||
test.setTestFieldFixedInt32(11);
|
||||
test.deserialize(serializer.get(), QByteArray::fromHex(""));
|
||||
QCOMPARE(test.testFieldFixedInt32(), 0);
|
||||
void QtProtobufTypesDeserializationTest::SFixedInt64MessageDeserializeTest_data()
|
||||
{
|
||||
generateTestData<int64_t>(IntTypes::SFixed);
|
||||
}
|
||||
|
||||
void QtProtobufTypesDeserializationTest::SFixedInt64MessageDeserializeTest()
|
||||
{
|
||||
QFETCH(const QByteArray, hexData);
|
||||
QFETCH(const int64_t, expectedValue);
|
||||
|
||||
SimpleSFixedInt64Message test;
|
||||
test.deserialize(serializer.get(), QByteArray::fromHex("090f00000000000000"));
|
||||
QCOMPARE(test.testFieldFixedInt64(), 15);
|
||||
test.deserialize(serializer.get(), QByteArray::fromHex(hexData));
|
||||
QCOMPARE(test.testFieldFixedInt64(), expectedValue);
|
||||
}
|
||||
|
||||
test.deserialize(serializer.get(), QByteArray::fromHex("092c01000000000000"));
|
||||
QCOMPARE(test.testFieldFixedInt64(), 300);
|
||||
void QtProtobufTypesDeserializationTest::FloatMessageDeserializeTest_data()
|
||||
{
|
||||
QTest::addColumn<QByteArray>("hexData");
|
||||
QTest::addColumn<float>("expectedValue");
|
||||
|
||||
test.deserialize(serializer.get(), QByteArray::fromHex("090900010000000000"));
|
||||
QCOMPARE(test.testFieldFixedInt64(), 65545);
|
||||
|
||||
test.deserialize(serializer.get(), QByteArray::fromHex("090000000000000000"));
|
||||
QCOMPARE(test.testFieldFixedInt64(), 0);
|
||||
|
||||
test.deserialize(serializer.get(), QByteArray::fromHex("098000000000000000"));
|
||||
QCOMPARE(test.testFieldFixedInt64(), INT8_MAX + 1);
|
||||
|
||||
test.deserialize(serializer.get(), QByteArray::fromHex("090080000000000000"));
|
||||
QCOMPARE(test.testFieldFixedInt64(), INT16_MAX + 1);
|
||||
|
||||
test.deserialize(serializer.get(), QByteArray::fromHex("090000008000000000"));
|
||||
QCOMPARE(test.testFieldFixedInt64(), (int64_t)INT32_MAX + 1);
|
||||
|
||||
test.deserialize(serializer.get(), QByteArray::fromHex("097f00000000000000"));
|
||||
QCOMPARE(test.testFieldFixedInt64(), INT8_MAX);
|
||||
|
||||
test.deserialize(serializer.get(), QByteArray::fromHex("09ff7f000000000000"));
|
||||
QCOMPARE(test.testFieldFixedInt64(), INT16_MAX);
|
||||
|
||||
test.deserialize(serializer.get(), QByteArray::fromHex("09ffffff7f00000000"));
|
||||
QCOMPARE(test.testFieldFixedInt64(), INT32_MAX);
|
||||
|
||||
test.deserialize(serializer.get(), QByteArray::fromHex("09ffffffffffffff7f"));
|
||||
QCOMPARE(test.testFieldFixedInt64(), INT64_MAX);
|
||||
|
||||
test.deserialize(serializer.get(), QByteArray::fromHex("097fffffffffffffff"));
|
||||
QCOMPARE(test.testFieldFixedInt64(), INT8_MIN - 1);
|
||||
|
||||
test.deserialize(serializer.get(), QByteArray::fromHex("09ff7fffffffffffff"));
|
||||
QCOMPARE(test.testFieldFixedInt64(), INT16_MIN - 1);
|
||||
|
||||
test.deserialize(serializer.get(), QByteArray::fromHex("09ffffff7fffffffff"));
|
||||
QCOMPARE(test.testFieldFixedInt64(), (qlonglong)INT32_MIN - 1);
|
||||
|
||||
test.deserialize(serializer.get(), QByteArray::fromHex("0980ffffffffffffff"));
|
||||
QCOMPARE(test.testFieldFixedInt64(), INT8_MIN);
|
||||
|
||||
test.deserialize(serializer.get(), QByteArray::fromHex("090080ffffffffffff"));
|
||||
QCOMPARE(test.testFieldFixedInt64(), INT16_MIN);
|
||||
|
||||
test.deserialize(serializer.get(), QByteArray::fromHex("0900000080ffffffff"));
|
||||
QCOMPARE(test.testFieldFixedInt64(), INT32_MIN);
|
||||
|
||||
test.deserialize(serializer.get(), QByteArray::fromHex("090000000000000080"));
|
||||
QCOMPARE(test.testFieldFixedInt64(), INT64_MIN);
|
||||
|
||||
test.setTestFieldFixedInt64(11);
|
||||
test.deserialize(serializer.get(), QByteArray::fromHex(""));
|
||||
QCOMPARE(test.testFieldFixedInt64(), 0);
|
||||
EMPTY_VALUE_TEST_ROW(float);
|
||||
QTest::newRow("value_-4.2") << "3d666686c0"_ba << -4.2f;
|
||||
QTest::newRow("value_-0.0") << "3d00000000"_ba << -0.0f;
|
||||
QTest::newRow("value_0.1") << "3dcdcccc3d"_ba << 0.1f;
|
||||
QTest::newRow("value_float_min") << "3d00008000"_ba << std::numeric_limits<float>::min();
|
||||
QTest::newRow("value_float_max") << "3dffff7f7f"_ba << std::numeric_limits<float>::max();
|
||||
}
|
||||
|
||||
void QtProtobufTypesDeserializationTest::FloatMessageDeserializeTest()
|
||||
{
|
||||
QFETCH(const QByteArray, hexData);
|
||||
QFETCH(const float, expectedValue);
|
||||
|
||||
SimpleFloatMessage test;
|
||||
test.deserialize(serializer.get(), QByteArray::fromHex("3dcdcccc3d"));
|
||||
QCOMPARE(test.testFieldFloat(), 0.1f);
|
||||
test.deserialize(serializer.get(), QByteArray::fromHex(hexData));
|
||||
QCOMPARE(test.testFieldFloat(), expectedValue);
|
||||
}
|
||||
|
||||
test.deserialize(serializer.get(), QByteArray::fromHex("3d00008000"));
|
||||
QCOMPARE(test.testFieldFloat(), std::numeric_limits<float>::min());
|
||||
void QtProtobufTypesDeserializationTest::DoubleMessageDeserializeTest_data()
|
||||
{
|
||||
QTest::addColumn<QByteArray>("hexData");
|
||||
QTest::addColumn<double>("expectedValue");
|
||||
|
||||
test.deserialize(serializer.get(), QByteArray::fromHex("3dffff7f7f"));
|
||||
QCOMPARE(test.testFieldFloat(), std::numeric_limits<float>::max());
|
||||
|
||||
test.deserialize(serializer.get(), QByteArray::fromHex("3d666686c0"));
|
||||
QCOMPARE(test.testFieldFloat(), -4.2f);
|
||||
|
||||
test.deserialize(serializer.get(), QByteArray::fromHex("3d00000000"));
|
||||
QCOMPARE(test.testFieldFloat(), -0.0f);
|
||||
|
||||
test.setTestFieldFloat(11.0f);
|
||||
test.deserialize(serializer.get(), QByteArray::fromHex(""));
|
||||
QCOMPARE(test.testFieldFloat(), 0.0f);
|
||||
EMPTY_VALUE_TEST_ROW(double);
|
||||
QTest::newRow("value_-4.2") << "41cdcccccccccc10c0"_ba << -4.2;
|
||||
QTest::newRow("value_0.0") << "410000000000000000"_ba << 0.0;
|
||||
QTest::newRow("value_0.1") << "419a9999999999b93f"_ba << 0.1;
|
||||
QTest::newRow("value_double_min")
|
||||
<< "410000000000001000"_ba << std::numeric_limits<double>::min();
|
||||
QTest::newRow("value_double_max")
|
||||
<< "41ffffffffffffef7f"_ba << std::numeric_limits<double>::max();
|
||||
}
|
||||
|
||||
void QtProtobufTypesDeserializationTest::DoubleMessageDeserializeTest()
|
||||
{
|
||||
QFETCH(const QByteArray, hexData);
|
||||
QFETCH(const double, expectedValue);
|
||||
|
||||
SimpleDoubleMessage test;
|
||||
test.deserialize(serializer.get(), QByteArray::fromHex("419a9999999999b93f"));
|
||||
QCOMPARE(0.1, test.testFieldDouble());
|
||||
test.deserialize(serializer.get(), QByteArray::fromHex(hexData));
|
||||
QCOMPARE(test.testFieldDouble(), expectedValue);
|
||||
}
|
||||
|
||||
test.deserialize(serializer.get(), QByteArray::fromHex("410000000000001000"));
|
||||
QCOMPARE(std::numeric_limits<double>::min(), test.testFieldDouble());
|
||||
|
||||
test.deserialize(serializer.get(), QByteArray::fromHex("41ffffffffffffef7f"));
|
||||
QCOMPARE(std::numeric_limits<double>::max(), test.testFieldDouble());
|
||||
|
||||
test.deserialize(serializer.get(), QByteArray::fromHex("41cdcccccccccc10c0"));
|
||||
QCOMPARE(-4.2, test.testFieldDouble());
|
||||
|
||||
test.deserialize(serializer.get(), QByteArray::fromHex("410000000000000000"));
|
||||
QCOMPARE(0.0, test.testFieldDouble());
|
||||
|
||||
test.setTestFieldDouble(11.0);
|
||||
test.deserialize(serializer.get(), QByteArray::fromHex(""));
|
||||
QCOMPARE(test.testFieldDouble(), 0.0f);
|
||||
void QtProtobufTypesDeserializationTest::IntMessageDeserializeTest_data()
|
||||
{
|
||||
generateTestData<int32_t>(IntTypes::Int);
|
||||
}
|
||||
|
||||
void QtProtobufTypesDeserializationTest::IntMessageDeserializeTest()
|
||||
{
|
||||
qtprotobufnamespace::tests::SimpleIntMessage test;
|
||||
test.deserialize(serializer.get(), QByteArray::fromHex("080f"));
|
||||
QCOMPARE(test.testFieldInt(), 15);
|
||||
QFETCH(const QByteArray, hexData);
|
||||
QFETCH(const int32_t, expectedValue);
|
||||
|
||||
test.deserialize(serializer.get(), QByteArray::fromHex("08ac02"));
|
||||
QCOMPARE(test.testFieldInt(), 300);
|
||||
SimpleIntMessage test;
|
||||
test.deserialize(serializer.get(), QByteArray::fromHex(hexData));
|
||||
QCOMPARE(test.testFieldInt(), expectedValue);
|
||||
}
|
||||
|
||||
test.deserialize(serializer.get(), QByteArray::fromHex("08898004"));
|
||||
QCOMPARE(test.testFieldInt(), 65545);
|
||||
void QtProtobufTypesDeserializationTest::StringMessageDeserializeTest_data()
|
||||
{
|
||||
QTest::addColumn<QByteArray>("hexData");
|
||||
QTest::addColumn<QString>("expectedValue");
|
||||
|
||||
test.deserialize(serializer.get(), QByteArray::fromHex("088001"));
|
||||
QCOMPARE(INT8_MAX + 1, test.testFieldInt());
|
||||
|
||||
test.deserialize(serializer.get(), QByteArray::fromHex("08808002"));
|
||||
QCOMPARE(INT16_MAX + 1, test.testFieldInt());
|
||||
|
||||
test.deserialize(serializer.get(), QByteArray::fromHex("087f"));
|
||||
QCOMPARE(INT8_MAX, test.testFieldInt());
|
||||
|
||||
test.deserialize(serializer.get(), QByteArray::fromHex("08ffff01"));
|
||||
QCOMPARE(INT16_MAX, test.testFieldInt());
|
||||
|
||||
test.deserialize(serializer.get(), QByteArray::fromHex("08ffffffff07"));
|
||||
QCOMPARE(INT32_MAX, test.testFieldInt());
|
||||
|
||||
test.deserialize(serializer.get(), QByteArray::fromHex("08ffffffffffffffffff01"));
|
||||
QCOMPARE(-1, test.testFieldInt());
|
||||
|
||||
test.deserialize(serializer.get(), QByteArray::fromHex("08b2fcffffffffffffff01"));
|
||||
QCOMPARE(-462, test.testFieldInt());
|
||||
|
||||
test.deserialize(serializer.get(), QByteArray::fromHex("089f8ffcffffffffffff01"));
|
||||
QCOMPARE(-63585, test.testFieldInt());
|
||||
|
||||
test.deserialize(serializer.get(), QByteArray::fromHex("0880ffffffffffffffff01"));
|
||||
QCOMPARE(INT8_MIN, test.testFieldInt());
|
||||
|
||||
test.deserialize(serializer.get(), QByteArray::fromHex("088080feffffffffffff01"));
|
||||
QCOMPARE(INT16_MIN, test.testFieldInt());
|
||||
|
||||
test.deserialize(serializer.get(), QByteArray::fromHex("0880808080f8ffffffff01"));
|
||||
QCOMPARE(INT32_MIN, test.testFieldInt());
|
||||
|
||||
test.deserialize(serializer.get(), QByteArray::fromHex("08fffeffffffffffffff01"));
|
||||
QCOMPARE(INT8_MIN - 1, test.testFieldInt());
|
||||
|
||||
test.deserialize(serializer.get(), QByteArray::fromHex("08fffffdffffffffffff01"));
|
||||
QCOMPARE(INT16_MIN - 1, test.testFieldInt());
|
||||
|
||||
test.setTestFieldInt(11);
|
||||
test.deserialize(serializer.get(), QByteArray::fromHex(""));
|
||||
QCOMPARE(test.testFieldInt(), 0);
|
||||
QTest::newRow("empty_value") << ""_ba << u""_s;
|
||||
QTest::newRow("simple_string") << "3206717765727479"_ba << u"qwerty"_s;
|
||||
QTest::newRow("complex_string")
|
||||
<< "3280046f6570534e4c4956473038554a706b3257374a74546b6b4278794b303658306c51364d4c"
|
||||
"37494d6435354b3858433154707363316b4457796d3576387a3638623446517570394f39355153"
|
||||
"6741766a48494131354f583642753638657362514654394c507a5341444a367153474254594248"
|
||||
"583551535a67333274724364484d6a383058754448717942674d34756636524b71326d67576238"
|
||||
"4f76787872304e774c786a484f66684a384d726664325237686255676a65737062596f51686267"
|
||||
"48456a32674b45563351766e756d596d7256586531426b437a5a684b56586f6444686a304f6641"
|
||||
"453637766941793469334f6167316872317a34417a6f384f3558713638504f455a3143735a506f"
|
||||
"3244584e4e52386562564364594f7a3051364a4c50536c356a61734c434672514e374569564e6a"
|
||||
"516d437253735a4852674c4e796c76676f454678475978584a39676d4b346d72304f47645a6347"
|
||||
"4a4f5252475a4f514370514d68586d68657a46616c4e494a584d50505861525658695268524150"
|
||||
"434e55456965384474614357414d717a346e4e5578524d5a355563584258735850736879677a6b"
|
||||
"7979586e4e575449446f6a466c7263736e4b71536b5131473645383567535a6274495942683773"
|
||||
"714f36474458486a4f72585661564356435575626a634a4b54686c79736c7432397a4875497335"
|
||||
"4a47707058785831"_ba
|
||||
<< u"oepSNLIVG08UJpk2W7JtTkkBxyK06X0lQ6ML7IMd55K8XC1Tpsc1kDWym5v8z68b4FQup9O95QSgAvjHIA"
|
||||
"15OX6Bu68esbQFT9LPzSADJ6qSGBTYBHX5QSZg32trCdHMj80XuDHqyBgM4uf6RKq2mgWb8Ovxxr0NwLxjH"
|
||||
"OfhJ8Mrfd2R7hbUgjespbYoQhbgHEj2gKEV3QvnumYmrVXe1BkCzZhKVXodDhj0OfAE67viAy4i3Oag1hr1"
|
||||
"z4Azo8O5Xq68POEZ1CsZPo2DXNNR8ebVCdYOz0Q6JLPSl5jasLCFrQN7EiVNjQmCrSsZHRgLNylvgoEFxGY"
|
||||
"xXJ9gmK4mr0OGdZcGJORRGZOQCpQMhXmhezFalNIJXMPPXaRVXiRhRAPCNUEie8DtaCWAMqz4nNUxRMZ5Uc"
|
||||
"XBXsXPshygzkyyXnNWTIDojFlrcsnKqSkQ1G6E85gSZbtIYBh7sqO6GDXHjOrXVaVCVCUubjcJKThlyslt2"
|
||||
"9zHuIs5JGppXxX1"_s;
|
||||
}
|
||||
|
||||
void QtProtobufTypesDeserializationTest::StringMessageDeserializeTest()
|
||||
{
|
||||
QFETCH(const QByteArray, hexData);
|
||||
QFETCH(const QString, expectedValue);
|
||||
|
||||
SimpleStringMessage test;
|
||||
test.deserialize(serializer.get(), QByteArray::fromHex("3206717765727479"));
|
||||
QCOMPARE(test.testFieldString().toStdString().c_str(), "qwerty");
|
||||
test.deserialize(serializer.get(), QByteArray::fromHex(hexData));
|
||||
QCOMPARE(test.testFieldString().toStdString().c_str(), expectedValue);
|
||||
}
|
||||
|
||||
test.deserialize(serializer.get(), QByteArray::fromHex("3280046f6570534e4c4956473038554a706b3257374a74546b6b4278794b303658306c51364d4c37494d6435354b3858433154707363316b4457796d3576387a3638623446517570394f393551536741766a48494131354f583642753638657362514654394c507a5341444a367153474254594248583551535a67333274724364484d6a383058754448717942674d34756636524b71326d675762384f76787872304e774c786a484f66684a384d726664325237686255676a65737062596f5168626748456a32674b45563351766e756d596d7256586531426b437a5a684b56586f6444686a304f6641453637766941793469334f6167316872317a34417a6f384f3558713638504f455a3143735a506f3244584e4e52386562564364594f7a3051364a4c50536c356a61734c434672514e374569564e6a516d437253735a4852674c4e796c76676f454678475978584a39676d4b346d72304f47645a63474a4f5252475a4f514370514d68586d68657a46616c4e494a584d50505861525658695268524150434e55456965384474614357414d717a346e4e5578524d5a355563584258735850736879677a6b7979586e4e575449446f6a466c7263736e4b71536b5131473645383567535a6274495942683773714f36474458486a4f72585661564356435575626a634a4b54686c79736c7432397a48754973354a47707058785831"));
|
||||
QCOMPARE(test.testFieldString().toStdString().c_str(), "oepSNLIVG08UJpk2W7JtTkkBxyK06X0lQ6ML7IMd55K8XC1Tpsc1kDWym5v8z68b4FQup9O95QSgAvjHIA15OX6Bu68esbQFT9LPzSADJ6qSGBTYBHX5QSZg32trCdHMj80XuDHqyBgM4uf6RKq2mgWb8Ovxxr0NwLxjHOfhJ8Mrfd2R7hbUgjespbYoQhbgHEj2gKEV3QvnumYmrVXe1BkCzZhKVXodDhj0OfAE67viAy4i3Oag1hr1z4Azo8O5Xq68POEZ1CsZPo2DXNNR8ebVCdYOz0Q6JLPSl5jasLCFrQN7EiVNjQmCrSsZHRgLNylvgoEFxGYxXJ9gmK4mr0OGdZcGJORRGZOQCpQMhXmhezFalNIJXMPPXaRVXiRhRAPCNUEie8DtaCWAMqz4nNUxRMZ5UcXBXsXPshygzkyyXnNWTIDojFlrcsnKqSkQ1G6E85gSZbtIYBh7sqO6GDXHjOrXVaVCVCUubjcJKThlyslt29zHuIs5JGppXxX1");
|
||||
void QtProtobufTypesDeserializationTest::ComplexTypeDeserializeTest_data()
|
||||
{
|
||||
QTest::addColumn<QByteArray>("hexData");
|
||||
QTest::addColumn<int32_t>("intField");
|
||||
QTest::addColumn<QString>("stringField");
|
||||
|
||||
test.setTestFieldString("qwerty");
|
||||
test.deserialize(serializer.get(), QByteArray());
|
||||
QCOMPARE(test.testFieldString().toStdString().c_str(), "");
|
||||
QTest::newRow("empty_value") << ""_ba << 0 << u""_s;
|
||||
QTest::newRow("only_int") << "08d3ffffffffffffffff01"_ba << -45 << u""_s;
|
||||
QTest::newRow("only_string") << "12083206717765727479"_ba << 0 << u"qwerty"_s;
|
||||
QTest::newRow("int_and_string")
|
||||
<< "1208320671776572747908d3ffffffffffffffff01"_ba << -45 << u"qwerty"_s;
|
||||
QTest::newRow("int_and_string2")
|
||||
<< "1208320671776572747908d3ffffffffffffffff01"_ba << -45 << u"qwerty"_s;
|
||||
QTest::newRow("int_and_utf8_string")
|
||||
<< "128404328104595652664a766a78716267764677533159764f5a5867746a356666474c53374169"
|
||||
"4e487a396f5a496f4b626d377a3848373978427579506b70515876476f4f30394f593978526177"
|
||||
"7833654f417339786a6f544131784a68727732385441637131436562596c433957556651433668"
|
||||
"49616e74614e647948694b546f666669305a74376c613432535278585a53503447757862635a49"
|
||||
"703533704a6e79437766437931716446637a5430646d6e3768386670794164656d456176774665"
|
||||
"646134643050417047665355326a4c74333958386b595542784e4d325767414c52426748645664"
|
||||
"6538377136506935553639546a684d6432385731534644314478796f67434372714f6374325a50"
|
||||
"49436f4c6e72716446334f644e7a6a52564c6665797651384c674c76524e465239576657417941"
|
||||
"7a37396e4b6742616d64384e746c7674344d6733354535675653326737415137726b6d37326342"
|
||||
"646e5739734345794761626558417548356a34475262754c543771425a574463464c4634537343"
|
||||
"64533357664647644e48667761696a7a796b42796f3731507646566c54584832574a576f467652"
|
||||
"3546414c6a42546e37624364503070416953624c435938587a324d736333644262354666394749"
|
||||
"53506255704e6d557642644d5a4d485176714f6d544e584550704e306237344d444f4d5166574a"
|
||||
"53684f6f334e6b41764d6a73082a"_ba
|
||||
<< 42
|
||||
<< u"YVRfJvjxqbgvFwS1YvOZXgtj5ffGLS7AiNHz9oZIoKbm7z8H79xBuyPkpQXvGoO09OY9xRawx3eOA"
|
||||
"s9xjoTA1xJhrw28TAcq1CebYlC9WUfQC6hIantaNdyHiKToffi0Zt7la42SRxXZSP4GuxbcZIp53p"
|
||||
"JnyCwfCy1qdFczT0dmn7h8fpyAdemEavwFeda4d0PApGfSU2jLt39X8kYUBxNM2WgALRBgHdVde87"
|
||||
"q6Pi5U69TjhMd28W1SFD1DxyogCCrqOct2ZPICoLnrqdF3OdNzjRVLfeyvQ8LgLvRNFR9WfWAyAz7"
|
||||
"9nKgBamd8Ntlvt4Mg35E5gVS2g7AQ7rkm72cBdnW9sCEyGabeXAuH5j4GRbuLT7qBZWDcFLF4SsCd"
|
||||
"S3WfFGdNHfwaijzykByo71PvFVlTXH2WJWoFvR5FALjBTn7bCdP0pAiSbLCY8Xz2Msc3dBb5Ff9GI"
|
||||
"SPbUpNmUvBdMZMHQvqOmTNXEPpN0b74MDOMQfWJShOo3NkAvMjs"_s;
|
||||
|
||||
QTest::newRow("int_and_utf8_string2")
|
||||
<< "082a128404328104595652664a766a78716267764677533159764f5a5867746a356666474c5337"
|
||||
"41694e487a396f5a496f4b626d377a3848373978427579506b70515876476f4f30394f59397852"
|
||||
"61777833654f417339786a6f544131784a68727732385441637131436562596c43395755665143"
|
||||
"366849616e74614e647948694b546f666669305a74376c613432535278585a5350344775786263"
|
||||
"5a49703533704a6e79437766437931716446637a5430646d6e3768386670794164656d45617677"
|
||||
"4665646134643050417047665355326a4c74333958386b595542784e4d325767414c5242674864"
|
||||
"56646538377136506935553639546a684d6432385731534644314478796f67434372714f637432"
|
||||
"5a5049436f4c6e72716446334f644e7a6a52564c6665797651384c674c76524e46523957665741"
|
||||
"79417a37396e4b6742616d64384e746c7674344d6733354535675653326737415137726b6d3732"
|
||||
"6342646e5739734345794761626558417548356a34475262754c543771425a574463464c463453"
|
||||
"734364533357664647644e48667761696a7a796b42796f3731507646566c54584832574a576f46"
|
||||
"76523546414c6a42546e37624364503070416953624c435938587a324d73633364426235466639"
|
||||
"474953506255704e6d557642644d5a4d485176714f6d544e584550704e306237344d444f4d5166"
|
||||
"574a53684f6f334e6b41764d6a73"_ba
|
||||
<< 42
|
||||
<< u"YVRfJvjxqbgvFwS1YvOZXgtj5ffGLS7AiNHz9oZIoKbm7z8H79xBuyPkpQXvGoO09OY9xRawx3eOA"
|
||||
"s9xjoTA1xJhrw28TAcq1CebYlC9WUfQC6hIantaNdyHiKToffi0Zt7la42SRxXZSP4GuxbcZIp53p"
|
||||
"JnyCwfCy1qdFczT0dmn7h8fpyAdemEavwFeda4d0PApGfSU2jLt39X8kYUBxNM2WgALRBgHdVde87"
|
||||
"q6Pi5U69TjhMd28W1SFD1DxyogCCrqOct2ZPICoLnrqdF3OdNzjRVLfeyvQ8LgLvRNFR9WfWAyAz7"
|
||||
"9nKgBamd8Ntlvt4Mg35E5gVS2g7AQ7rkm72cBdnW9sCEyGabeXAuH5j4GRbuLT7qBZWDcFLF4SsCd"
|
||||
"S3WfFGdNHfwaijzykByo71PvFVlTXH2WJWoFvR5FALjBTn7bCdP0pAiSbLCY8Xz2Msc3dBb5Ff9GI"
|
||||
"SPbUpNmUvBdMZMHQvqOmTNXEPpN0b74MDOMQfWJShOo3NkAvMjs"_s;
|
||||
}
|
||||
|
||||
void QtProtobufTypesDeserializationTest::ComplexTypeDeserializeTest()
|
||||
{
|
||||
QFETCH(const QByteArray, hexData);
|
||||
QFETCH(const int32_t, intField);
|
||||
QFETCH(const QString, stringField);
|
||||
|
||||
ComplexMessage test;
|
||||
SimpleStringMessage stringMsg;
|
||||
stringMsg.setTestFieldString("qwerty");
|
||||
|
||||
test.deserialize(serializer.get(), QByteArray::fromHex("1208320671776572747908d3ffffffffffffffff01"));
|
||||
QCOMPARE(test.testFieldInt(), -45);
|
||||
QCOMPARE(test.testComplexField().testFieldString(), QString::fromUtf8("qwerty"));
|
||||
test.deserialize(serializer.get(), QByteArray::fromHex(hexData));
|
||||
QCOMPARE(test.testFieldInt(), intField);
|
||||
QCOMPARE(test.testComplexField().testFieldString(), stringField);
|
||||
}
|
||||
|
||||
test.deserialize(serializer.get(), QByteArray::fromHex("08d3ffffffffffffffff0112083206717765727479"));
|
||||
QCOMPARE(test.testFieldInt(), -45);
|
||||
QCOMPARE(test.testComplexField().testFieldString(), QString::fromUtf8("qwerty"));
|
||||
|
||||
test.deserialize(serializer.get(), QByteArray::fromHex("128404328104595652664a766a78716267764677533159764f5a5867746a356666474c533741694e487a396f5a496f4b626d377a3848373978427579506b70515876476f4f30394f5939785261777833654f417339786a6f544131784a68727732385441637131436562596c43395755665143366849616e74614e647948694b546f666669305a74376c613432535278585a53503447757862635a49703533704a6e79437766437931716446637a5430646d6e3768386670794164656d456176774665646134643050417047665355326a4c74333958386b595542784e4d325767414c524267486456646538377136506935553639546a684d6432385731534644314478796f67434372714f6374325a5049436f4c6e72716446334f644e7a6a52564c6665797651384c674c76524e4652395766574179417a37396e4b6742616d64384e746c7674344d6733354535675653326737415137726b6d37326342646e5739734345794761626558417548356a34475262754c543771425a574463464c463453734364533357664647644e48667761696a7a796b42796f3731507646566c54584832574a576f4676523546414c6a42546e37624364503070416953624c435938587a324d73633364426235466639474953506255704e6d557642644d5a4d485176714f6d544e584550704e306237344d444f4d5166574a53684f6f334e6b41764d6a73082a"));
|
||||
QCOMPARE(test.testFieldInt(), 42);
|
||||
QCOMPARE(test.testComplexField().testFieldString(),
|
||||
QString::fromUtf8(
|
||||
"YVRfJvjxqbgvFwS1YvOZXgtj5ffGLS7AiNHz9oZIoKbm7z8H79xBuyPkpQXvGoO09OY9xRawx3eOA"
|
||||
"s9xjoTA1xJhrw28TAcq1CebYlC9WUfQC6hIantaNdyHiKToffi0Zt7la42SRxXZSP4GuxbcZIp53p"
|
||||
"JnyCwfCy1qdFczT0dmn7h8fpyAdemEavwFeda4d0PApGfSU2jLt39X8kYUBxNM2WgALRBgHdVde87"
|
||||
"q6Pi5U69TjhMd28W1SFD1DxyogCCrqOct2ZPICoLnrqdF3OdNzjRVLfeyvQ8LgLvRNFR9WfWAyAz7"
|
||||
"9nKgBamd8Ntlvt4Mg35E5gVS2g7AQ7rkm72cBdnW9sCEyGabeXAuH5j4GRbuLT7qBZWDcFLF4SsCd"
|
||||
"S3WfFGdNHfwaijzykByo71PvFVlTXH2WJWoFvR5FALjBTn7bCdP0pAiSbLCY8Xz2Msc3dBb5Ff9GI"
|
||||
"SPbUpNmUvBdMZMHQvqOmTNXEPpN0b74MDOMQfWJShOo3NkAvMjs"));
|
||||
|
||||
test.deserialize(serializer.get(), QByteArray::fromHex("082a128404328104595652664a766a78716267764677533159764f5a5867746a356666474c533741694e487a396f5a496f4b626d377a3848373978427579506b70515876476f4f30394f5939785261777833654f417339786a6f544131784a68727732385441637131436562596c43395755665143366849616e74614e647948694b546f666669305a74376c613432535278585a53503447757862635a49703533704a6e79437766437931716446637a5430646d6e3768386670794164656d456176774665646134643050417047665355326a4c74333958386b595542784e4d325767414c524267486456646538377136506935553639546a684d6432385731534644314478796f67434372714f6374325a5049436f4c6e72716446334f644e7a6a52564c6665797651384c674c76524e4652395766574179417a37396e4b6742616d64384e746c7674344d6733354535675653326737415137726b6d37326342646e5739734345794761626558417548356a34475262754c543771425a574463464c463453734364533357664647644e48667761696a7a796b42796f3731507646566c54584832574a576f4676523546414c6a42546e37624364503070416953624c435938587a324d73633364426235466639474953506255704e6d557642644d5a4d485176714f6d544e584550704e306237344d444f4d5166574a53684f6f334e6b41764d6a73"));
|
||||
QCOMPARE(test.testFieldInt(), 42);
|
||||
QCOMPARE(test.testComplexField().testFieldString(),
|
||||
QString::fromUtf8(
|
||||
"YVRfJvjxqbgvFwS1YvOZXgtj5ffGLS7AiNHz9oZIoKbm7z8H79xBuyPkpQXvGoO09OY9xRawx3eOA"
|
||||
"s9xjoTA1xJhrw28TAcq1CebYlC9WUfQC6hIantaNdyHiKToffi0Zt7la42SRxXZSP4GuxbcZIp53p"
|
||||
"JnyCwfCy1qdFczT0dmn7h8fpyAdemEavwFeda4d0PApGfSU2jLt39X8kYUBxNM2WgALRBgHdVde87"
|
||||
"q6Pi5U69TjhMd28W1SFD1DxyogCCrqOct2ZPICoLnrqdF3OdNzjRVLfeyvQ8LgLvRNFR9WfWAyAz7"
|
||||
"9nKgBamd8Ntlvt4Mg35E5gVS2g7AQ7rkm72cBdnW9sCEyGabeXAuH5j4GRbuLT7qBZWDcFLF4SsCd"
|
||||
"S3WfFGdNHfwaijzykByo71PvFVlTXH2WJWoFvR5FALjBTn7bCdP0pAiSbLCY8Xz2Msc3dBb5Ff9GI"
|
||||
"SPbUpNmUvBdMZMHQvqOmTNXEPpN0b74MDOMQfWJShOo3NkAvMjs"));
|
||||
|
||||
test.setTestFieldInt(-45);
|
||||
test.setTestComplexField(stringMsg);
|
||||
test.deserialize(serializer.get(), QByteArray::fromHex("08d3ffffffffffffffff01"));
|
||||
QCOMPARE(test.testFieldInt(), -45);
|
||||
QCOMPARE(test.testComplexField().testFieldString(), QLatin1String(""));
|
||||
|
||||
test.setTestFieldInt(-45);
|
||||
test.setTestComplexField(stringMsg);
|
||||
test.deserialize(serializer.get(), QByteArray::fromHex("12083206717765727479"));
|
||||
QCOMPARE(test.testFieldInt(), 0);
|
||||
QCOMPARE(test.testComplexField().testFieldString(), QLatin1String("qwerty"));
|
||||
void QtProtobufTypesDeserializationTest::SIntMessageDeserializeTest_data()
|
||||
{
|
||||
generateTestData<int32_t>(IntTypes::SInt);
|
||||
}
|
||||
|
||||
void QtProtobufTypesDeserializationTest::SIntMessageDeserializeTest()
|
||||
{
|
||||
QFETCH(const QByteArray, hexData);
|
||||
QFETCH(const int32_t, expectedValue);
|
||||
|
||||
SimpleSIntMessage test;
|
||||
test.deserialize(serializer.get(), QByteArray::fromHex("081e"));
|
||||
QCOMPARE(test.testFieldInt(), 15);
|
||||
test.deserialize(serializer.get(), QByteArray::fromHex(hexData));
|
||||
QCOMPARE(test.testFieldInt(), expectedValue);
|
||||
}
|
||||
|
||||
test.deserialize(serializer.get(), QByteArray::fromHex("08d804"));
|
||||
QCOMPARE(test.testFieldInt(), 300);
|
||||
|
||||
test.deserialize(serializer.get(), QByteArray::fromHex("08928008"));
|
||||
QCOMPARE(test.testFieldInt(), 65545);
|
||||
|
||||
test.deserialize(serializer.get(), QByteArray::fromHex(""));
|
||||
QCOMPARE(test.testFieldInt(), 0);
|
||||
|
||||
test.deserialize(serializer.get(), QByteArray::fromHex("088002"));
|
||||
QCOMPARE(INT8_MAX + 1, test.testFieldInt());
|
||||
|
||||
test.deserialize(serializer.get(), QByteArray::fromHex("08808004"));
|
||||
QCOMPARE(INT16_MAX + 1, test.testFieldInt());
|
||||
|
||||
test.deserialize(serializer.get(), QByteArray::fromHex("08fe01"));
|
||||
QCOMPARE(INT8_MAX, test.testFieldInt());
|
||||
|
||||
test.deserialize(serializer.get(), QByteArray::fromHex("08feff03"));
|
||||
QCOMPARE(INT16_MAX, test.testFieldInt());
|
||||
|
||||
test.deserialize(serializer.get(), QByteArray::fromHex("08feffffff0f"));
|
||||
QCOMPARE(INT32_MAX, test.testFieldInt());
|
||||
|
||||
test.deserialize(serializer.get(), QByteArray::fromHex("0801"));
|
||||
QCOMPARE(-1, test.testFieldInt());
|
||||
|
||||
test.deserialize(serializer.get(), QByteArray::fromHex("089b07"));
|
||||
QCOMPARE(-462, test.testFieldInt());
|
||||
|
||||
test.deserialize(serializer.get(), QByteArray::fromHex("08c1e107"));
|
||||
QCOMPARE(-63585, test.testFieldInt());
|
||||
|
||||
test.deserialize(serializer.get(), QByteArray::fromHex("08ff01"));
|
||||
QCOMPARE(INT8_MIN, test.testFieldInt());
|
||||
|
||||
test.deserialize(serializer.get(), QByteArray::fromHex("08ffff03"));
|
||||
QCOMPARE(INT16_MIN, test.testFieldInt());
|
||||
|
||||
test.deserialize(serializer.get(), QByteArray::fromHex("08ffffffff0f"));
|
||||
QCOMPARE(INT32_MIN, test.testFieldInt());
|
||||
|
||||
test.deserialize(serializer.get(), QByteArray::fromHex("088102"));
|
||||
QCOMPARE(INT8_MIN - 1, test.testFieldInt());
|
||||
|
||||
test.deserialize(serializer.get(), QByteArray::fromHex("08818004"));
|
||||
QCOMPARE(INT16_MIN - 1, test.testFieldInt());
|
||||
void QtProtobufTypesDeserializationTest::UIntMessageDeserializeTest_data()
|
||||
{
|
||||
generateTestData<uint32_t>(IntTypes::UInt);
|
||||
}
|
||||
|
||||
void QtProtobufTypesDeserializationTest::UIntMessageDeserializeTest()
|
||||
{
|
||||
QFETCH(const QByteArray, hexData);
|
||||
QFETCH(const uint32_t, expectedValue);
|
||||
|
||||
SimpleUIntMessage test;
|
||||
test.deserialize(serializer.get(), QByteArray::fromHex("080f"));
|
||||
QCOMPARE(test.testFieldInt(), 15u);
|
||||
test.deserialize(serializer.get(), QByteArray::fromHex(hexData));
|
||||
QCOMPARE(test.testFieldInt(), expectedValue);
|
||||
}
|
||||
|
||||
test.deserialize(serializer.get(), QByteArray::fromHex("08ac02"));
|
||||
QCOMPARE(test.testFieldInt(), 300u);
|
||||
void QtProtobufTypesDeserializationTest::BoolDeserializeTest_data()
|
||||
{
|
||||
QTest::addColumn<QByteArray>("hexData");
|
||||
QTest::addColumn<bool>("expectedValue");
|
||||
|
||||
test.deserialize(serializer.get(), QByteArray::fromHex("08898004"));
|
||||
QCOMPARE(test.testFieldInt(), 65545u);
|
||||
|
||||
test.deserialize(serializer.get(), QByteArray::fromHex(""));
|
||||
QCOMPARE(test.testFieldInt(), 0u);
|
||||
|
||||
test.deserialize(serializer.get(), QByteArray::fromHex("088002"));
|
||||
QCOMPARE((uint32_t)UINT8_MAX + 1, test.testFieldInt());
|
||||
|
||||
test.deserialize(serializer.get(), QByteArray::fromHex("08808004"));
|
||||
QCOMPARE((uint32_t)UINT16_MAX + 1, test.testFieldInt());
|
||||
|
||||
test.deserialize(serializer.get(), QByteArray::fromHex("08ff01"));
|
||||
QCOMPARE((uint32_t)UINT8_MAX, test.testFieldInt());
|
||||
|
||||
test.deserialize(serializer.get(), QByteArray::fromHex("08ffff03"));
|
||||
QCOMPARE((uint32_t)UINT16_MAX, test.testFieldInt());
|
||||
|
||||
test.deserialize(serializer.get(), QByteArray::fromHex("08ffffffff0f"));
|
||||
QCOMPARE((uint32_t)UINT32_MAX, test.testFieldInt());
|
||||
QTest::newRow("empty") << ""_ba << false;
|
||||
QTest::newRow("True") << "0801"_ba << true;
|
||||
QTest::newRow("False") << "0800"_ba << false;
|
||||
}
|
||||
|
||||
void QtProtobufTypesDeserializationTest::BoolDeserializeTest()
|
||||
{
|
||||
SimpleBoolMessage test;
|
||||
test.deserialize(serializer.get(), QByteArray::fromHex("0801"));
|
||||
QCOMPARE(test.testFieldBool(), true);
|
||||
QFETCH(const QByteArray, hexData);
|
||||
QFETCH(const bool, expectedValue);
|
||||
|
||||
test.deserialize(serializer.get(), QByteArray::fromHex(""));
|
||||
test.deserialize(serializer.get(), QByteArray::fromHex("0800"));
|
||||
QCOMPARE(test.testFieldBool(), false);
|
||||
SimpleBoolMessage test;
|
||||
test.deserialize(serializer.get(), QByteArray::fromHex(hexData));
|
||||
QCOMPARE(test.testFieldBool(), expectedValue);
|
||||
}
|
||||
|
||||
void QtProtobufTypesDeserializationTest::RedundantFieldIsIgnoredAtDeserializationTest_data()
|
||||
{
|
||||
QTest::addColumn<QByteArray>("hexData");
|
||||
QTest::addColumn<QString>("expectedValue");
|
||||
|
||||
//3206717765727479 length delimited field number 6
|
||||
QTest::newRow("field_6") << "120832067177657274793206717765727479"_ba << u"qwerty"_s;
|
||||
//3dcdcccc3d fixed32 field number 7
|
||||
QTest::newRow("field_7") << "120832067177657274793dcdcccc3d"_ba << u"qwerty"_s;
|
||||
//419a9999999999b93f fixed64 field number 8
|
||||
QTest::newRow("field_8") << "12083206717765727479419a9999999999b93f"_ba << u"qwerty"_s;
|
||||
//60d3ffffffffffffffff01 varint field number 12
|
||||
QTest::newRow("field_12") << "60d3ffffffffffffffff0112083206717765727479"_ba << u"qwerty"_s;
|
||||
}
|
||||
|
||||
void QtProtobufTypesDeserializationTest::RedundantFieldIsIgnoredAtDeserializationTest()
|
||||
{
|
||||
QFETCH(const QByteArray, hexData);
|
||||
QFETCH(const QString, expectedValue);
|
||||
|
||||
ComplexMessage test;
|
||||
//3206717765727479 length delimited field number 6
|
||||
test.deserialize(serializer.get(), QByteArray::fromHex("120832067177657274793206717765727479"));
|
||||
test.deserialize(serializer.get(), QByteArray::fromHex(hexData));
|
||||
QCOMPARE(test.testFieldInt(), 0);
|
||||
QCOMPARE(test.testComplexField().testFieldString().toStdString().c_str(), "qwerty");
|
||||
|
||||
//3dcdcccc3d fixed32 field number 7
|
||||
test.deserialize(serializer.get(), QByteArray::fromHex("120832067177657274793dcdcccc3d"));
|
||||
QCOMPARE(test.testFieldInt(), 0);
|
||||
QCOMPARE(test.testComplexField().testFieldString().toStdString().c_str(), "qwerty");
|
||||
|
||||
//419a9999999999b93f fixed64 field number 8
|
||||
test.deserialize(serializer.get(), QByteArray::fromHex("12083206717765727479419a9999999999b93f"));
|
||||
QCOMPARE(test.testFieldInt(), 0);
|
||||
QCOMPARE(test.testComplexField().testFieldString().toStdString().c_str(), "qwerty");
|
||||
|
||||
//60d3ffffffffffffffff01 varint field number 12
|
||||
test.deserialize(serializer.get(), QByteArray::fromHex("60d3ffffffffffffffff0112083206717765727479"));
|
||||
QCOMPARE(test.testFieldInt(), 0);
|
||||
QCOMPARE(test.testComplexField().testFieldString().toStdString().c_str(), "qwerty");
|
||||
QCOMPARE(test.testComplexField().testFieldString(), expectedValue);
|
||||
}
|
||||
|
||||
void QtProtobufTypesDeserializationTest::FieldIndexRangeTest()
|
||||
|
|
|
|||
|
|
@ -4,6 +4,7 @@
|
|||
|
||||
#include "basicmessages.qpb.h"
|
||||
#include "fieldindexrange.qpb.h"
|
||||
#include "qtprotobufserializertestdata.h"
|
||||
|
||||
#include <QProtobufSerializer>
|
||||
#include <QTest>
|
||||
|
|
@ -56,196 +57,6 @@ private:
|
|||
|
||||
using namespace qtprotobufnamespace::tests;
|
||||
|
||||
constexpr qsizetype Fixed32IntSize = 5;
|
||||
constexpr qsizetype Fixed64IntSize = 9;
|
||||
|
||||
template <typename T>
|
||||
struct SerializeData
|
||||
{
|
||||
T value;
|
||||
qsizetype expectedSize;
|
||||
QByteArray expectedData;
|
||||
std::optional<QString> name = std::nullopt;
|
||||
};
|
||||
|
||||
enum class IntTypes : uint8_t {
|
||||
Int = 0,
|
||||
UInt,
|
||||
SInt,
|
||||
Fixed,
|
||||
SFixed,
|
||||
};
|
||||
|
||||
template <typename T>
|
||||
QList<SerializeData<T>> getCommonIntValues(IntTypes type)
|
||||
{
|
||||
QList<SerializeData<T>> data{ { (T)0, 0, ""_ba, u"empty_data"_s } };
|
||||
switch (type) {
|
||||
case IntTypes::Int:
|
||||
data.append({ { (T)-1, 11ll, "08ffffffffffffffffff01"_ba },
|
||||
{ (T)-462, 11ll, "08b2fcffffffffffffff01"_ba },
|
||||
{ (T)-63585, 11ll, "089f8ffcffffffffffff01"_ba } });
|
||||
Q_FALLTHROUGH(); // Got negative values, fallthrough to positive
|
||||
case IntTypes::UInt:
|
||||
data.append({ { (T)15, 2ll, "080f"_ba },
|
||||
{ (T)300, 3ll, "08ac02"_ba },
|
||||
{ (T)65545, 4ll, "08898004"_ba } });
|
||||
break;
|
||||
case IntTypes::SInt:
|
||||
data.append({ { (T)15, 2ll, "081e"_ba },
|
||||
{ (T)300, 3ll, "08d804"_ba },
|
||||
{ (T)65545, 4ll, "08928008"_ba },
|
||||
{ (T)-1, 2ll, "0801"_ba },
|
||||
{ (T)-462, 3ll, "089b07"_ba },
|
||||
{ (T)-63585, 4ll, "08c1e107"_ba } });
|
||||
break;
|
||||
case IntTypes::SFixed:
|
||||
data.append({ { (T)-1, Fixed32IntSize, "0dffffffff"_ba },
|
||||
{ (T)-462, Fixed32IntSize, "0d32feffff"_ba },
|
||||
{ (T)-63585, Fixed32IntSize, "0d9f07ffff"_ba } });
|
||||
Q_FALLTHROUGH(); // Got negative values, fallthrough to positive
|
||||
case IntTypes::Fixed:
|
||||
data.append({ { (T)15, Fixed32IntSize, "0d0f000000"_ba },
|
||||
{ (T)300, Fixed32IntSize, "0d2c010000"_ba },
|
||||
{ (T)65545, Fixed32IntSize, "0d09000100"_ba } });
|
||||
break;
|
||||
}
|
||||
if constexpr (std::is_same_v<T, int64_t> || std::is_same_v<T, uint64_t>) {
|
||||
if (type == IntTypes::Fixed || type == IntTypes::SFixed) {
|
||||
// Do not merge with 32-bit version
|
||||
data = { { (T)0, 0, ""_ba, u"empty_data"_s },
|
||||
{ (T)15, Fixed64IntSize, "090f00000000000000"_ba },
|
||||
{ (T)300, Fixed64IntSize, "092c01000000000000"_ba },
|
||||
{ (T)65545, Fixed64IntSize, "090900010000000000"_ba } };
|
||||
}
|
||||
if (type == IntTypes::SFixed) {
|
||||
data.append({ { (T)-1, Fixed64IntSize, "09ffffffffffffffff"_ba },
|
||||
{ (T)-462, Fixed64IntSize, "0932feffffffffffff"_ba },
|
||||
{ (T)-63585, Fixed64IntSize, "099f07ffffffffffff"_ba } });
|
||||
}
|
||||
}
|
||||
return data;
|
||||
}
|
||||
|
||||
#define INT_MIN_SDATA(type, size, data) \
|
||||
std::numeric_limits<type>::min(), size, data, QString("%1_min").arg(#type)
|
||||
#define INT_MAX_SDATA(type, size, data) \
|
||||
std::numeric_limits<type>::max(), size, data, QString("%1_max").arg(#type)
|
||||
#define BELOW_INT_MAX_SDATA(type, size, data) \
|
||||
std::numeric_limits<type>::min() - 1, size, data, QString("below_%1_min").arg(#type)
|
||||
#define OVER_INT_MAX_SDATA(type, size, data) \
|
||||
std::numeric_limits<type>::max() + 1, size, data, QString("over_%1_max").arg(#type)
|
||||
|
||||
template <typename T>
|
||||
constexpr QList<SerializeData<T>> getInt32LimitValues(IntTypes type)
|
||||
{
|
||||
switch (type) {
|
||||
case IntTypes::Int:
|
||||
return { { (T)INT_MAX_SDATA(int8_t, 2ll, "087f"_ba) },
|
||||
{ (T)INT_MAX_SDATA(int16_t, 4ll, "08ffff01"_ba) },
|
||||
{ (T)INT_MAX_SDATA(int32_t, 6ll, "08ffffffff07"_ba) },
|
||||
{ (T)OVER_INT_MAX_SDATA(int8_t, 3ll, "088001"_ba) },
|
||||
{ (T)OVER_INT_MAX_SDATA(int16_t, 4ll, "08808002"_ba) },
|
||||
{ (T)INT_MIN_SDATA(int8_t, 11ll, "0880ffffffffffffffff01"_ba) },
|
||||
{ (T)INT_MIN_SDATA(int16_t, 11ll, "088080feffffffffffff01"_ba) },
|
||||
{ (T)INT_MIN_SDATA(int32_t, 11ll, "0880808080f8ffffffff01"_ba) },
|
||||
{ (T)BELOW_INT_MAX_SDATA(int8_t, 11ll, "08fffeffffffffffffff01"_ba) },
|
||||
{ (T)BELOW_INT_MAX_SDATA(int16_t, 11ll, "08fffffdffffffffffff01"_ba) } };
|
||||
case IntTypes::UInt:
|
||||
return { { (T)INT_MAX_SDATA(uint8_t, 3ll, "08ff01"_ba) },
|
||||
{ (T)INT_MAX_SDATA(uint16_t, 4ll, "08ffff03"_ba) },
|
||||
{ (T)INT_MAX_SDATA(uint32_t, 6ll, "08ffffffff0f"_ba) },
|
||||
{ (T)OVER_INT_MAX_SDATA(uint8_t, 3ll, "088002"_ba) },
|
||||
{ (T)OVER_INT_MAX_SDATA(uint16_t, 4ll, "08808004"_ba) } };
|
||||
case IntTypes::SInt:
|
||||
return { { (T)INT_MAX_SDATA(int8_t, 3ll, "08fe01"_ba) },
|
||||
{ (T)INT_MAX_SDATA(int16_t, 4ll, "08feff03"_ba) },
|
||||
{ (T)INT_MAX_SDATA(int32_t, 6ll, "08feffffff0f"_ba) },
|
||||
{ (T)OVER_INT_MAX_SDATA(int8_t, 3ll, "088002"_ba) },
|
||||
{ (T)OVER_INT_MAX_SDATA(int16_t, 4ll, "08808004"_ba) },
|
||||
{ (T)INT_MIN_SDATA(int8_t, 3ll, "08ff01"_ba) },
|
||||
{ (T)INT_MIN_SDATA(int16_t, 4ll, "08ffff03"_ba) },
|
||||
{ (T)INT_MIN_SDATA(int32_t, 6ll, "08ffffffff0f"_ba) },
|
||||
{ (T)BELOW_INT_MAX_SDATA(int8_t, 3ll, "088102"_ba) },
|
||||
{ (T)BELOW_INT_MAX_SDATA(int16_t, 4ll, "08818004"_ba) } };
|
||||
case IntTypes::Fixed:
|
||||
if constexpr (std::is_same_v<T, uint32_t>) {
|
||||
return { { (T)INT_MAX_SDATA(uint8_t, Fixed32IntSize, "0dff000000"_ba) },
|
||||
{ (T)INT_MAX_SDATA(uint16_t, Fixed32IntSize, "0dffff0000"_ba) },
|
||||
{ (T)INT_MAX_SDATA(uint32_t, Fixed32IntSize, "0dffffffff"_ba) },
|
||||
{ (T)OVER_INT_MAX_SDATA(uint8_t, Fixed32IntSize, "0d00010000"_ba) },
|
||||
{ (T)OVER_INT_MAX_SDATA(uint16_t, Fixed32IntSize, "0d00000100"_ba) } };
|
||||
}
|
||||
case IntTypes::SFixed:
|
||||
if constexpr (std::is_same_v<T, int32_t>) {
|
||||
return { { (T)INT_MAX_SDATA(int8_t, Fixed32IntSize, "0d7f000000"_ba) },
|
||||
{ (T)INT_MAX_SDATA(int16_t, Fixed32IntSize, "0dff7f0000"_ba) },
|
||||
{ (T)INT_MAX_SDATA(int32_t, Fixed32IntSize, "0dffffff7f"_ba) },
|
||||
{ (T)OVER_INT_MAX_SDATA(int8_t, Fixed32IntSize, "0d80000000"_ba) },
|
||||
{ (T)OVER_INT_MAX_SDATA(int16_t, Fixed32IntSize, "0d00800000"_ba) },
|
||||
{ (T)INT_MIN_SDATA(int8_t, Fixed32IntSize, "0d80ffffff"_ba) },
|
||||
{ (T)INT_MIN_SDATA(int16_t, Fixed32IntSize, "0d0080ffff"_ba) },
|
||||
{ (T)INT_MIN_SDATA(int32_t, Fixed32IntSize, "0d00000080"_ba) },
|
||||
{ (T)BELOW_INT_MAX_SDATA(int8_t, Fixed32IntSize, "0d7fffffff"_ba) },
|
||||
{ (T)BELOW_INT_MAX_SDATA(int16_t, Fixed32IntSize, "0dff7fffff"_ba) } };
|
||||
}
|
||||
}
|
||||
return {};
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
constexpr QList<SerializeData<T>> getInt64LimitValues(IntTypes type)
|
||||
{
|
||||
if constexpr (std::is_same_v<T, int64_t> || std::is_same_v<T, uint64_t>) {
|
||||
switch (type) {
|
||||
case IntTypes::Int:
|
||||
return { { (T)INT_MAX_SDATA(int64_t, 10ll, "08ffffffffffffffff7f"_ba) },
|
||||
{ (T)OVER_INT_MAX_SDATA(int32_t, 6ll, "088080808008"_ba) },
|
||||
{ (T)INT_MIN_SDATA(int64_t, 11ll, "0880808080808080808001"_ba) },
|
||||
{ (T)BELOW_INT_MAX_SDATA(int32_t, 11ll, "08fffffffff7ffffffff01"_ba) } };
|
||||
case IntTypes::UInt:
|
||||
return { { (T)INT_MAX_SDATA(int64_t, 10ll, "08ffffffffffffffff7f"_ba) },
|
||||
{ (T)OVER_INT_MAX_SDATA(int32_t, 6ll, "088080808008"_ba) } };
|
||||
case IntTypes::SInt:
|
||||
return { { (T)INT_MAX_SDATA(int64_t, 11ll, "08feffffffffffffffff01"_ba) },
|
||||
{ (T)OVER_INT_MAX_SDATA(int32_t, 6ll, "088080808010"_ba) },
|
||||
{ (T)INT_MIN_SDATA(int64_t, 11ll, "08ffffffffffffffffff01"_ba) },
|
||||
{ (T)BELOW_INT_MAX_SDATA(int32_t, 6ll, "088180808010"_ba) } };
|
||||
case IntTypes::Fixed:
|
||||
return { { (T)INT_MAX_SDATA(uint8_t, Fixed64IntSize, "09ff00000000000000"_ba) },
|
||||
{ (T)INT_MAX_SDATA(uint16_t, Fixed64IntSize, "09ffff000000000000"_ba) },
|
||||
{ (T)INT_MAX_SDATA(uint32_t, Fixed64IntSize, "09ffffffff00000000"_ba) },
|
||||
{ (T)INT_MAX_SDATA(uint64_t, Fixed64IntSize, "09ffffffffffffffff"_ba) },
|
||||
{ (T)OVER_INT_MAX_SDATA(uint8_t, Fixed64IntSize, "090001000000000000"_ba) },
|
||||
{ (T)OVER_INT_MAX_SDATA(uint16_t, Fixed64IntSize, "090000010000000000"_ba) },
|
||||
{ (T)OVER_INT_MAX_SDATA(uint32_t, Fixed64IntSize, "090000000001000000"_ba) } };
|
||||
case IntTypes::SFixed:
|
||||
return { { (T)INT_MAX_SDATA(int8_t, Fixed64IntSize, "097f00000000000000"_ba) },
|
||||
{ (T)INT_MAX_SDATA(int16_t, Fixed64IntSize, "09ff7f000000000000"_ba) },
|
||||
{ (T)INT_MAX_SDATA(int32_t, Fixed64IntSize, "09ffffff7f00000000"_ba) },
|
||||
{ (T)INT_MAX_SDATA(int64_t, Fixed64IntSize, "09ffffffffffffff7f"_ba) },
|
||||
{ (T)OVER_INT_MAX_SDATA(int8_t, Fixed64IntSize, "098000000000000000"_ba) },
|
||||
{ (T)OVER_INT_MAX_SDATA(int16_t, Fixed64IntSize, "090080000000000000"_ba) },
|
||||
{ (T)OVER_INT_MAX_SDATA(int32_t, Fixed64IntSize, "090000008000000000"_ba) },
|
||||
{ (T)INT_MIN_SDATA(int8_t, Fixed64IntSize, "0980ffffffffffffff"_ba) },
|
||||
{ (T)INT_MIN_SDATA(int16_t, Fixed64IntSize, "090080ffffffffffff"_ba) },
|
||||
{ (T)INT_MIN_SDATA(int32_t, Fixed64IntSize, "0900000080ffffffff"_ba) },
|
||||
{ (T)INT_MIN_SDATA(int64_t, Fixed64IntSize, "090000000000000080"_ba) },
|
||||
{ (T)BELOW_INT_MAX_SDATA(int8_t, Fixed64IntSize, "097fffffffffffffff"_ba) },
|
||||
{ (T)BELOW_INT_MAX_SDATA(int16_t, Fixed64IntSize, "09ff7fffffffffffff"_ba) },
|
||||
{ (T)BELOW_INT_MAX_SDATA(int32_t, Fixed64IntSize, "09ffffff7fffffffff"_ba) } };
|
||||
}
|
||||
}
|
||||
return {};
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
QList<SerializeData<T>> getSerializeData(IntTypes type)
|
||||
{
|
||||
return getCommonIntValues<T>(type) + getInt32LimitValues<T>(type)
|
||||
+ getInt64LimitValues<T>(type);
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
void generateTestData(IntTypes type)
|
||||
{
|
||||
|
|
@ -253,12 +64,12 @@ void generateTestData(IntTypes type)
|
|||
QTest::addColumn<qsizetype>("expectedSize");
|
||||
QTest::addColumn<QByteArray>("expectedData");
|
||||
|
||||
const auto data = getSerializeData<T>(type);
|
||||
const auto data = SerializeData<T>::getSerializeData(type);
|
||||
for (const auto &test : data) {
|
||||
auto testName = QString("value_%1")
|
||||
.arg(test.name ? *(test.name) : QString::number(test.value));
|
||||
QTest::newRow(testName.toStdString().c_str())
|
||||
<< test.value << test.expectedSize << test.expectedData;
|
||||
<< test.value << test.size << test.hexData;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue