From a6dbd819a1d11d33eccc6e2bcd86fb159630c799 Mon Sep 17 00:00:00 2001 From: elsid Date: Tue, 4 Jul 2023 11:34:24 +0200 Subject: [PATCH] Fix writing IndexRefId to ESM3 Use correct enum value. --- apps/openmw_test_suite/esm/testrefid.cpp | 30 ++++++++++++++++++++++-- components/esm3/esmwriter.cpp | 2 +- 2 files changed, 29 insertions(+), 3 deletions(-) diff --git a/apps/openmw_test_suite/esm/testrefid.cpp b/apps/openmw_test_suite/esm/testrefid.cpp index 554964c425..e947aab4a9 100644 --- a/apps/openmw_test_suite/esm/testrefid.cpp +++ b/apps/openmw_test_suite/esm/testrefid.cpp @@ -1,4 +1,6 @@ -#include +#include "components/esm/refid.hpp" +#include "components/esm3/esmreader.hpp" +#include "components/esm3/esmwriter.hpp" #include #include @@ -464,10 +466,34 @@ namespace ESM EXPECT_FALSE(a < b) << a; } + TYPED_TEST_P(ESMRefIdTypesTest, saveAndLoadShouldNotChange) + { + constexpr NAME fakeRecordId(fourCC("FAKE")); + constexpr NAME subRecordId(fourCC("NAME")); + const RefId expected = GenerateRefId::call(); + auto stream = std::make_unique(); + { + 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, serializeTextThenDeserializeTextShouldProduceSameValue, shouldBeEqualToItself, shouldNotBeNotEqualToItself, shouldBeNotLessThanItself, serializeTextShouldReturnOnlyPrintableCharacters, - toStringShouldReturnOnlyPrintableCharacters, toDebugStringShouldReturnOnlyPrintableCharacters); + toStringShouldReturnOnlyPrintableCharacters, toDebugStringShouldReturnOnlyPrintableCharacters, + saveAndLoadShouldNotChange); template struct RefIdTypes; diff --git a/components/esm3/esmwriter.cpp b/components/esm3/esmwriter.cpp index 2a64948d24..94cd1a8009 100644 --- a/components/esm3/esmwriter.cpp +++ b/components/esm3/esmwriter.cpp @@ -57,7 +57,7 @@ namespace ESM void operator()(IndexRefId v) const { - mWriter.writeT(RefIdType::Generated); + mWriter.writeT(RefIdType::Index); mWriter.writeT(v.getRecordType()); mWriter.writeT(v.getValue()); }