File: testcstringids.cpp

package info (click to toggle)
openmw 0.49.0-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 33,992 kB
  • sloc: cpp: 372,479; xml: 2,149; sh: 1,403; python: 797; makefile: 26
file content (57 lines) | stat: -rw-r--r-- 1,804 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
#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);
        }
    }
}