mirror of https://github.com/OpenMW/openmw.git
You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
58 lines
1.8 KiB
C++
58 lines
1.8 KiB
C++
3 months ago
|
#include <components/esm3/esmreader.hpp>
|
||
|
#include <components/esm3/esmwriter.hpp>
|
||
|
#include <components/esm3/loaddial.hpp>
|
||
|
|
||
|
#include <gtest/gtest.h>
|
||
|
|
||
|
namespace ESM
|
||
|
{
|
||
|
namespace
|
||
|
{
|
||
|
TEST(Esm3CStringIdTest, dialNameShouldBeNullTerminated)
|
||
|
{
|
||
|
std::unique_ptr<std::istream> stream;
|
||
|
|
||
|
{
|
||
|
auto ostream = std::make_unique<std::stringstream>();
|
||
|
|
||
|
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);
|
||
|
}
|
||
|
}
|
||
|
}
|