diff options
Diffstat (limited to 'src/common')
-rw-r--r-- | src/common/test_assembler.h | 9 | ||||
-rw-r--r-- | src/common/test_assembler_unittest.cc | 18 |
2 files changed, 27 insertions, 0 deletions
diff --git a/src/common/test_assembler.h b/src/common/test_assembler.h index 560f7aef..19782b92 100644 --- a/src/common/test_assembler.h +++ b/src/common/test_assembler.h @@ -324,6 +324,15 @@ class Section { return *this; } + // Append at most SIZE bytes from DATA; if DATA is less than SIZE bytes + // long, pad with '\0' characters. + Section &AppendCString(const string &data, size_t size) { + contents_.append(data, 0, size); + if (data.size() < size) + Append(size - data.size(), 0); + return *this; + } + // Append VALUE or LABEL to this section, with the given bit width and // endianness. Return a reference to this section. // diff --git a/src/common/test_assembler_unittest.cc b/src/common/test_assembler_unittest.cc index 9b6990ce..c26a9383 100644 --- a/src/common/test_assembler_unittest.cc +++ b/src/common/test_assembler_unittest.cc @@ -788,6 +788,24 @@ TEST_F(Append, String) { ASSERT_STREQ(contents.c_str(), "howdy there"); } +TEST_F(Append, CString) { + section.AppendCString("howdy"); + section.AppendCString(""); + section.AppendCString("there"); + ASSERT_TRUE(section.GetContents(&contents)); + ASSERT_EQ(string("howdy\0\0there\0", 13), contents); +} + +TEST_F(Append, CStringSize) { + section.AppendCString("howdy", 3); + section.AppendCString("there", 5); + section.AppendCString("fred", 6); + section.AppendCString("natalie", 0); + section.AppendCString("", 10); + ASSERT_TRUE(section.GetContents(&contents)); + ASSERT_EQ(string("howtherefred\0\0\0\0\0\0\0\0\0\0\0\0", 24), contents); +} + TEST_F(Append, RepeatedBytes) { section.Append((size_t) 10, '*'); ASSERT_TRUE(section.GetContents(&contents)); |