1
0
Fork 0
mirror of https://github.com/OpenMW/openmw.git synced 2025-01-16 18:59:57 +00:00

Fix writing IndexRefId to ESM3

Use correct enum value.
This commit is contained in:
elsid 2023-07-04 11:34:24 +02:00
parent 8a33edd64a
commit a6dbd819a1
No known key found for this signature in database
GPG key ID: 4DE04C198CBA7625
2 changed files with 29 additions and 3 deletions

View file

@ -1,4 +1,6 @@
#include <components/esm/refid.hpp> #include "components/esm/refid.hpp"
#include "components/esm3/esmreader.hpp"
#include "components/esm3/esmwriter.hpp"
#include <gmock/gmock.h> #include <gmock/gmock.h>
#include <gtest/gtest.h> #include <gtest/gtest.h>
@ -464,10 +466,34 @@ namespace ESM
EXPECT_FALSE(a < b) << a; EXPECT_FALSE(a < b) << a;
} }
TYPED_TEST_P(ESMRefIdTypesTest, saveAndLoadShouldNotChange)
{
constexpr NAME fakeRecordId(fourCC("FAKE"));
constexpr NAME subRecordId(fourCC("NAME"));
const RefId expected = GenerateRefId<TypeParam>::call();
auto stream = std::make_unique<std::stringstream>();
{
ESMWriter writer;
writer.setFormatVersion(CurrentSaveGameFormatVersion);
writer.save(*stream);
writer.startRecord(fakeRecordId);
writer.writeHNCRefId(subRecordId, expected);
writer.endRecord(fakeRecordId);
}
ESMReader reader;
reader.open(std::move(stream), "stream");
ASSERT_TRUE(reader.hasMoreRecs());
ASSERT_EQ(reader.getRecName().toInt(), fakeRecordId);
reader.getRecHeader();
const RefId actual = reader.getHNRefId(subRecordId);
EXPECT_EQ(actual, expected);
}
REGISTER_TYPED_TEST_SUITE_P(ESMRefIdTypesTest, serializeThenDeserializeShouldProduceSameValue, REGISTER_TYPED_TEST_SUITE_P(ESMRefIdTypesTest, serializeThenDeserializeShouldProduceSameValue,
serializeTextThenDeserializeTextShouldProduceSameValue, shouldBeEqualToItself, shouldNotBeNotEqualToItself, serializeTextThenDeserializeTextShouldProduceSameValue, shouldBeEqualToItself, shouldNotBeNotEqualToItself,
shouldBeNotLessThanItself, serializeTextShouldReturnOnlyPrintableCharacters, shouldBeNotLessThanItself, serializeTextShouldReturnOnlyPrintableCharacters,
toStringShouldReturnOnlyPrintableCharacters, toDebugStringShouldReturnOnlyPrintableCharacters); toStringShouldReturnOnlyPrintableCharacters, toDebugStringShouldReturnOnlyPrintableCharacters,
saveAndLoadShouldNotChange);
template <class> template <class>
struct RefIdTypes; struct RefIdTypes;

View file

@ -57,7 +57,7 @@ namespace ESM
void operator()(IndexRefId v) const void operator()(IndexRefId v) const
{ {
mWriter.writeT(RefIdType::Generated); mWriter.writeT(RefIdType::Index);
mWriter.writeT(v.getRecordType()); mWriter.writeT(v.getRecordType());
mWriter.writeT(v.getValue()); mWriter.writeT(v.getValue());
} }