mirror of
				https://github.com/OpenMW/openmw.git
				synced 2025-11-04 02:26:41 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			57 lines
		
	
	
	
		
			1.8 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			57 lines
		
	
	
	
		
			1.8 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
#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);
 | 
						|
        }
 | 
						|
    }
 | 
						|
}
 |