| Index: minidump/minidump_simple_string_dictionary_writer_test.cc
|
| diff --git a/minidump/minidump_simple_string_dictionary_writer_test.cc b/minidump/minidump_simple_string_dictionary_writer_test.cc
|
| index 62b1479f88f1a45453b463e132fc63b32636db40..ec79787c697b449255a211eed40c1e84aa2b547f 100644
|
| --- a/minidump/minidump_simple_string_dictionary_writer_test.cc
|
| +++ b/minidump/minidump_simple_string_dictionary_writer_test.cc
|
| @@ -14,6 +14,7 @@
|
|
|
| #include "minidump/minidump_simple_string_dictionary_writer.h"
|
|
|
| +#include <map>
|
| #include <string>
|
|
|
| #include "gtest/gtest.h"
|
| @@ -43,6 +44,8 @@ TEST(MinidumpSimpleStringDictionaryWriter, EmptySimpleStringDictionary) {
|
|
|
| MinidumpSimpleStringDictionaryWriter dictionary_writer;
|
|
|
| + EXPECT_FALSE(dictionary_writer.IsUseful());
|
| +
|
| EXPECT_TRUE(dictionary_writer.WriteEverything(&file_writer));
|
| ASSERT_EQ(sizeof(MinidumpSimpleStringDictionary),
|
| file_writer.string().size());
|
| @@ -61,6 +64,8 @@ TEST(MinidumpSimpleStringDictionaryWriter, EmptyKeyValue) {
|
| make_scoped_ptr(new MinidumpSimpleStringDictionaryEntryWriter());
|
| dictionary_writer.AddEntry(entry_writer.Pass());
|
|
|
| + EXPECT_TRUE(dictionary_writer.IsUseful());
|
| +
|
| EXPECT_TRUE(dictionary_writer.WriteEverything(&file_writer));
|
| ASSERT_EQ(sizeof(MinidumpSimpleStringDictionary) +
|
| sizeof(MinidumpSimpleStringDictionaryEntry) +
|
| @@ -93,6 +98,8 @@ TEST(MinidumpSimpleStringDictionaryWriter, OneKeyValue) {
|
| entry_writer->SetKeyValue(kKey, kValue);
|
| dictionary_writer.AddEntry(entry_writer.Pass());
|
|
|
| + EXPECT_TRUE(dictionary_writer.IsUseful());
|
| +
|
| EXPECT_TRUE(dictionary_writer.WriteEverything(&file_writer));
|
| ASSERT_EQ(sizeof(MinidumpSimpleStringDictionary) +
|
| sizeof(MinidumpSimpleStringDictionaryEntry) +
|
| @@ -137,6 +144,8 @@ TEST(MinidumpSimpleStringDictionaryWriter, ThreeKeysValues) {
|
| entry_writer_2->SetKeyValue(kKey2, kValue2);
|
| dictionary_writer.AddEntry(entry_writer_2.Pass());
|
|
|
| + EXPECT_TRUE(dictionary_writer.IsUseful());
|
| +
|
| EXPECT_TRUE(dictionary_writer.WriteEverything(&file_writer));
|
| ASSERT_EQ(sizeof(MinidumpSimpleStringDictionary) +
|
| 3 * sizeof(MinidumpSimpleStringDictionaryEntry) +
|
| @@ -199,6 +208,8 @@ TEST(MinidumpSimpleStringDictionaryWriter, DuplicateKeyValue) {
|
| entry_writer_1->SetKeyValue(kKey, kValue1);
|
| dictionary_writer.AddEntry(entry_writer_1.Pass());
|
|
|
| + EXPECT_TRUE(dictionary_writer.IsUseful());
|
| +
|
| EXPECT_TRUE(dictionary_writer.WriteEverything(&file_writer));
|
| ASSERT_EQ(sizeof(MinidumpSimpleStringDictionary) +
|
| sizeof(MinidumpSimpleStringDictionaryEntry) +
|
| @@ -219,6 +230,58 @@ TEST(MinidumpSimpleStringDictionaryWriter, DuplicateKeyValue) {
|
| dictionary->entries[0].value));
|
| }
|
|
|
| +TEST(MinidumpSimpleStringDictionaryWriter, InitializeFromMap) {
|
| + char kKey0[] = "Dictionaries";
|
| + char kValue0[] = "USEFUL*";
|
| + char kKey1[] = "#1 Key!";
|
| + char kValue1[] = "";
|
| + char kKey2[] = "key two";
|
| + char kValue2[] = "value two";
|
| +
|
| + std::map<std::string, std::string> map;
|
| + map[kKey0] = kValue0;
|
| + map[kKey1] = kValue1;
|
| + map[kKey2] = kValue2;
|
| +
|
| + MinidumpSimpleStringDictionaryWriter dictionary_writer;
|
| + dictionary_writer.InitializeFromMap(map);
|
| +
|
| + EXPECT_TRUE(dictionary_writer.IsUseful());
|
| +
|
| + StringFileWriter file_writer;
|
| + ASSERT_TRUE(dictionary_writer.WriteEverything(&file_writer));
|
| +
|
| + const MinidumpSimpleStringDictionary* dictionary =
|
| + MinidumpSimpleStringDictionaryAtStart(file_writer.string(), map.size());
|
| + ASSERT_TRUE(dictionary);
|
| + ASSERT_EQ(3u, dictionary->count);
|
| +
|
| + // The entries don’t appear in the order they were added. The current
|
| + // implementation uses a std::map and sorts keys, so the entires appear in
|
| + // alphabetical order. However, this is an implementation detail, and it’s OK
|
| + // if the writer stops sorting in this order. Testing for a specific order is
|
| + // just the easiest way to write this test while the writer will output things
|
| + // in a known order.
|
| + EXPECT_EQ(kKey1,
|
| + MinidumpUTF8StringAtRVAAsString(file_writer.string(),
|
| + dictionary->entries[0].key));
|
| + EXPECT_EQ(kValue1,
|
| + MinidumpUTF8StringAtRVAAsString(file_writer.string(),
|
| + dictionary->entries[0].value));
|
| + EXPECT_EQ(kKey0,
|
| + MinidumpUTF8StringAtRVAAsString(file_writer.string(),
|
| + dictionary->entries[1].key));
|
| + EXPECT_EQ(kValue0,
|
| + MinidumpUTF8StringAtRVAAsString(file_writer.string(),
|
| + dictionary->entries[1].value));
|
| + EXPECT_EQ(kKey2,
|
| + MinidumpUTF8StringAtRVAAsString(file_writer.string(),
|
| + dictionary->entries[2].key));
|
| + EXPECT_EQ(kValue2,
|
| + MinidumpUTF8StringAtRVAAsString(file_writer.string(),
|
| + dictionary->entries[2].value));
|
| +}
|
| +
|
| } // namespace
|
| } // namespace test
|
| } // namespace crashpad
|
|
|