Index: minidump/minidump_rva_list_writer_test.cc |
diff --git a/minidump/minidump_rva_list_writer_test.cc b/minidump/minidump_rva_list_writer_test.cc |
new file mode 100644 |
index 0000000000000000000000000000000000000000..368f8a7285e5e75524e64aa641b85b95639c435b |
--- /dev/null |
+++ b/minidump/minidump_rva_list_writer_test.cc |
@@ -0,0 +1,101 @@ |
+// Copyright 2014 The Crashpad Authors. All rights reserved. |
+// |
+// Licensed under the Apache License, Version 2.0 (the "License"); |
+// you may not use this file except in compliance with the License. |
+// You may obtain a copy of the License at |
+// |
+// http://www.apache.org/licenses/LICENSE-2.0 |
+// |
+// Unless required by applicable law or agreed to in writing, software |
+// distributed under the License is distributed on an "AS IS" BASIS, |
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
+// See the License for the specific language governing permissions and |
+// limitations under the License. |
+ |
+#include "minidump/minidump_rva_list_writer.h" |
+ |
+#include "base/strings/stringprintf.h" |
+#include "gtest/gtest.h" |
+#include "minidump/test/minidump_rva_list_test_util.h" |
+#include "minidump/test/minidump_writable_test_util.h" |
+#include "util/file/string_file_writer.h" |
+ |
+namespace crashpad { |
+namespace test { |
+namespace { |
+ |
+class TestMinidumpRVAListWriter final : public MinidumpRVAListWriter { |
+ public: |
+ TestMinidumpRVAListWriter() : MinidumpRVAListWriter() {} |
+ ~TestMinidumpRVAListWriter() override {} |
+ |
+ void AddChild(uint32_t value) { |
+ auto child = make_scoped_ptr(new TestUInt32MinidumpWritable(value)); |
+ MinidumpRVAListWriter::AddChild(child.Pass()); |
+ } |
+ |
+ private: |
+ DISALLOW_COPY_AND_ASSIGN(TestMinidumpRVAListWriter); |
+}; |
+ |
+TEST(MinidumpRVAListWriter, Empty) { |
+ TestMinidumpRVAListWriter list_writer; |
+ |
+ StringFileWriter file_writer; |
+ |
+ ASSERT_TRUE(list_writer.WriteEverything(&file_writer)); |
+ EXPECT_EQ(sizeof(MinidumpRVAList), file_writer.string().size()); |
+ |
+ const MinidumpRVAList* list = MinidumpRVAListAtStart(file_writer.string(), 0); |
+ ASSERT_TRUE(list); |
+} |
+ |
+TEST(MinidumpRVAListWriter, OneChild) { |
+ TestMinidumpRVAListWriter list_writer; |
+ |
+ const uint32_t kValue = 0; |
+ list_writer.AddChild(kValue); |
+ |
+ StringFileWriter file_writer; |
+ |
+ ASSERT_TRUE(list_writer.WriteEverything(&file_writer)); |
+ |
+ const MinidumpRVAList* list = MinidumpRVAListAtStart(file_writer.string(), 1); |
+ ASSERT_TRUE(list); |
+ |
+ const uint32_t* child = MinidumpWritableAtRVA<uint32_t>( |
+ file_writer.string(), list->children[0]); |
+ ASSERT_TRUE(child); |
+ EXPECT_EQ(kValue, *child); |
+} |
+ |
+TEST(MinidumpRVAListWriter, ThreeChildren) { |
+ TestMinidumpRVAListWriter list_writer; |
+ |
+ const uint32_t kValues[] = { 0x80000000, 0x55555555, 0x66006600 }; |
+ |
+ list_writer.AddChild(kValues[0]); |
+ list_writer.AddChild(kValues[1]); |
+ list_writer.AddChild(kValues[2]); |
+ |
+ StringFileWriter file_writer; |
+ |
+ ASSERT_TRUE(list_writer.WriteEverything(&file_writer)); |
+ |
+ const MinidumpRVAList* list = |
+ MinidumpRVAListAtStart(file_writer.string(), arraysize(kValues)); |
+ ASSERT_TRUE(list); |
+ |
+ for (size_t index = 0; index < arraysize(kValues); ++index) { |
+ SCOPED_TRACE(base::StringPrintf("index %zu", index)); |
+ |
+ const uint32_t* child = MinidumpWritableAtRVA<uint32_t>( |
+ file_writer.string(), list->children[index]); |
+ ASSERT_TRUE(child); |
+ EXPECT_EQ(kValues[index], *child); |
+ } |
+} |
+ |
+} // namespace |
+} // namespace test |
+} // namespace crashpad |