mirror of
https://github.com/OpenMW/openmw.git
synced 2025-03-06 03:49:52 +00:00
To construct serializer from given entities: * Data source/destination - any value that has to be serialized/deserialized, usually already existing type. * Format - functional object to define high level serialization logic to define specific format and data schema. Like order of fields, allocation. * Visitor - functional object to define low level serialization logic to operator on given data part. * BinaryWriter - copies given value into provided buffer. * BinaryReader - copies value into given destination from provided buffer. * SizeAccumulator - calculates required buffer size for given data.
56 lines
2.2 KiB
C++
56 lines
2.2 KiB
C++
#include "format.hpp"
|
|
|
|
#include <components/detournavigator/serialization/sizeaccumulator.hpp>
|
|
#include <components/detournavigator/serialization/binarywriter.hpp>
|
|
#include <components/detournavigator/serialization/binaryreader.hpp>
|
|
|
|
#include <gtest/gtest.h>
|
|
#include <gmock/gmock.h>
|
|
|
|
#include <vector>
|
|
|
|
namespace
|
|
{
|
|
using namespace testing;
|
|
using namespace DetourNavigator::Serialization;
|
|
using namespace DetourNavigator::SerializationTesting;
|
|
|
|
struct DetourNavigatorSerializationIntegrationTest : Test
|
|
{
|
|
Composite mComposite;
|
|
|
|
DetourNavigatorSerializationIntegrationTest()
|
|
{
|
|
mComposite.mIntVector = {4, 5, 6};
|
|
mComposite.mEnumVector = {Enum::A, Enum::B, Enum::C};
|
|
mComposite.mPodVector = {Pod {4, 23.87}, Pod {5, -31.76}, Pod {6, 65.12}};
|
|
mComposite.mPodBuffer = {Pod {7, 456.123}, Pod {8, -628.346}};
|
|
mComposite.mPodDataSize = mComposite.mPodBuffer.size();
|
|
std::string charData = "serialization";
|
|
mComposite.mCharBuffer = {charData.begin(), charData.end()};
|
|
mComposite.mCharDataSize = charData.size();
|
|
}
|
|
};
|
|
|
|
TEST_F(DetourNavigatorSerializationIntegrationTest, sizeAccumulatorShouldSupportCustomSerializer)
|
|
{
|
|
SizeAccumulator sizeAccumulator;
|
|
TestFormat<Mode::Write>{}(sizeAccumulator, mComposite);
|
|
EXPECT_EQ(sizeAccumulator.value(), 143);
|
|
}
|
|
|
|
TEST_F(DetourNavigatorSerializationIntegrationTest, binaryReaderShouldDeserializeDataWrittenByBinaryWriter)
|
|
{
|
|
std::vector<std::byte> data(143);
|
|
TestFormat<Mode::Write>{}(BinaryWriter(data.data(), data.data() + data.size()), mComposite);
|
|
Composite result;
|
|
TestFormat<Mode::Read>{}(BinaryReader(data.data(), data.data() + data.size()), result);
|
|
EXPECT_EQ(result.mIntVector, mComposite.mIntVector);
|
|
EXPECT_EQ(result.mEnumVector, mComposite.mEnumVector);
|
|
EXPECT_EQ(result.mPodVector, mComposite.mPodVector);
|
|
EXPECT_EQ(result.mPodDataSize, mComposite.mPodDataSize);
|
|
EXPECT_EQ(result.mPodBuffer, mComposite.mPodBuffer);
|
|
EXPECT_EQ(result.mCharDataSize, mComposite.mCharDataSize);
|
|
EXPECT_EQ(result.mCharBuffer, mComposite.mCharBuffer);
|
|
}
|
|
}
|