#include #include #include #include namespace ESM { namespace { TEST(Esm3CStringIdTest, dialNameShouldBeNullTerminated) { std::unique_ptr stream; { auto ostream = std::make_unique(); ESMWriter writer; writer.setFormatVersion(DefaultFormatVersion); writer.save(*ostream); Dialogue record; record.blank(); record.mStringId = "topic name"; record.mId = RefId::stringRefId(record.mStringId); record.mType = Dialogue::Topic; writer.startRecord(Dialogue::sRecordId); record.save(writer); writer.endRecord(Dialogue::sRecordId); stream = std::move(ostream); } ESMReader reader; reader.open(std::move(stream), "stream"); ASSERT_TRUE(reader.hasMoreRecs()); ASSERT_EQ(reader.getRecName(), Dialogue::sRecordId); reader.getRecHeader(); while (reader.hasMoreSubs()) { reader.getSubName(); if (reader.retSubName().toInt() == SREC_NAME) { reader.getSubHeader(); auto size = reader.getSubSize(); std::string buffer(size, '1'); reader.getExact(buffer.data(), size); ASSERT_EQ(buffer[size - 1], '\0'); return; } else reader.skipHSub(); } ASSERT_FALSE(true); } } }