Support variable size strings in ESM3

This commit is contained in:
elsid 2023-02-12 17:03:01 +01:00
parent beb017e699
commit 80e6d6cbe3
No known key found for this signature in database
GPG key ID: 4DE04C198CBA7625
13 changed files with 92 additions and 74 deletions

View file

@ -17,6 +17,7 @@ namespace ESM
using namespace ::testing;
constexpr std::array formats = {
MaxLimitedSizeStringsFormatVersion,
CurrentSaveGameFormatVersion,
};
@ -74,15 +75,37 @@ namespace ESM
std::minstd_rand mRandom;
std::uniform_int_distribution<short> mRefIdDistribution{ 'a', 'z' };
RefId generateRandomRefId(std::size_t size = 33)
std::string generateRandomString(std::size_t size)
{
std::string value;
while (value.size() < size)
value.push_back(static_cast<char>(mRefIdDistribution(mRandom)));
return RefId::stringRefId(value);
return value;
}
RefId generateRandomRefId(std::size_t size = 33) { return RefId::stringRefId(generateRandomString(size)); }
};
TEST_F(Esm3SaveLoadRecordTest, headerShouldNotChange)
{
const std::string author = generateRandomString(33);
const std::string description = generateRandomString(257);
auto stream = std::make_unique<std::stringstream>();
ESMWriter writer;
writer.setAuthor(author);
writer.setDescription(description);
writer.setFormatVersion(CurrentSaveGameFormatVersion);
writer.save(*stream);
writer.close();
ESMReader reader;
reader.open(std::move(stream), "stream");
EXPECT_EQ(reader.getAuthor(), author);
EXPECT_EQ(reader.getDesc(), description);
}
TEST_P(Esm3SaveLoadRecordTest, playerShouldNotChange)
{
std::minstd_rand random;