aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/common/test_assembler.h9
-rw-r--r--src/common/test_assembler_unittest.cc18
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));