Chromium Code Reviews| Index: minidump/minidump_location_descriptor_list_writer_test.cc |
| diff --git a/minidump/minidump_location_descriptor_list_writer_test.cc b/minidump/minidump_location_descriptor_list_writer_test.cc |
| new file mode 100644 |
| index 0000000000000000000000000000000000000000..06f15cb556c46bfb453846cfa76f7f1feed8d604 |
| --- /dev/null |
| +++ b/minidump/minidump_location_descriptor_list_writer_test.cc |
| @@ -0,0 +1,138 @@ |
| +// 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_location_descriptor_list_writer.h" |
| + |
| +#include "base/strings/stringprintf.h" |
| +#include "gtest/gtest.h" |
| +#include "minidump/test/minidump_location_descriptor_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 TestMinidumpWritable final : public internal::MinidumpWritable { |
| + public: |
| + explicit TestMinidumpWritable(uint32_t value) |
| + : MinidumpWritable(), |
| + value_(value) { |
| + } |
| + |
| + ~TestMinidumpWritable() override {} |
| + |
| + protected: |
| + // MinidumpWritable: |
| + |
| + size_t SizeOfObject() override { return sizeof(value_); } |
| + |
| + bool WriteObject(FileWriterInterface* file_writer) override { |
| + return file_writer->Write(&value_, sizeof(value_)); |
| + } |
| + |
| + private: |
| + uint32_t value_; |
| + |
| + DISALLOW_COPY_AND_ASSIGN(TestMinidumpWritable); |
| +}; |
| + |
| +class TestMinidumpLocationDescriptorListWriter final |
| + : public MinidumpLocationDescriptorListWriter { |
| + public: |
| + TestMinidumpLocationDescriptorListWriter() |
| + : MinidumpLocationDescriptorListWriter() { |
| + } |
| + |
| + ~TestMinidumpLocationDescriptorListWriter() override {} |
| + |
| + void AddChild(scoped_ptr<TestMinidumpWritable> child) { |
|
Robert Sesek
2014/11/06 19:44:28
Nothing is done with the parameter after it is pas
|
| + MinidumpLocationDescriptorListWriter::AddChild(child.Pass()); |
| + } |
| + |
| + private: |
| + DISALLOW_COPY_AND_ASSIGN(TestMinidumpLocationDescriptorListWriter); |
| +}; |
| + |
| +TEST(MinidumpLocationDescriptorListWriter, Empty) { |
| + TestMinidumpLocationDescriptorListWriter list_writer; |
| + |
| + StringFileWriter file_writer; |
| + |
| + ASSERT_TRUE(list_writer.WriteEverything(&file_writer)); |
| + EXPECT_EQ(sizeof(MinidumpLocationDescriptorList), |
| + file_writer.string().size()); |
| + |
| + const MinidumpLocationDescriptorList* list = |
| + MinidumpLocationDescriptorListAtStart(file_writer.string(), 0); |
| + ASSERT_TRUE(list); |
| +} |
| + |
| +TEST(MinidumpLocationDescriptorListWriter, OneChild) { |
| + TestMinidumpLocationDescriptorListWriter list_writer; |
| + |
| + const uint32_t kValue = 0; |
| + auto child_writable = make_scoped_ptr(new TestMinidumpWritable(kValue)); |
| + list_writer.AddChild(child_writable.Pass()); |
| + |
| + StringFileWriter file_writer; |
| + |
| + ASSERT_TRUE(list_writer.WriteEverything(&file_writer)); |
| + |
| + const MinidumpLocationDescriptorList* list = |
| + MinidumpLocationDescriptorListAtStart(file_writer.string(), 1); |
| + ASSERT_TRUE(list); |
| + |
| + const uint32_t* child = MinidumpWritableAtLocationDescriptor<uint32_t>( |
| + file_writer.string(), list->children[0]); |
| + ASSERT_TRUE(child); |
| + EXPECT_EQ(kValue, *child); |
| +} |
| + |
| +TEST(MinidumpLocationDescriptorListWriter, ThreeChildren) { |
| + TestMinidumpLocationDescriptorListWriter list_writer; |
| + |
| + const uint32_t kValues[] = { 0x80000000, 0x55555555, 0x66006600 }; |
| + |
| + auto child_writable_0 = make_scoped_ptr(new TestMinidumpWritable(kValues[0])); |
| + list_writer.AddChild(child_writable_0.Pass()); |
| + |
| + auto child_writable_1 = make_scoped_ptr(new TestMinidumpWritable(kValues[1])); |
| + list_writer.AddChild(child_writable_1.Pass()); |
| + |
| + auto child_writable_2 = make_scoped_ptr(new TestMinidumpWritable(kValues[2])); |
| + list_writer.AddChild(child_writable_2.Pass()); |
| + |
| + StringFileWriter file_writer; |
| + |
| + ASSERT_TRUE(list_writer.WriteEverything(&file_writer)); |
| + |
| + const MinidumpLocationDescriptorList* list = |
| + MinidumpLocationDescriptorListAtStart(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 = MinidumpWritableAtLocationDescriptor<uint32_t>( |
| + file_writer.string(), list->children[index]); |
| + ASSERT_TRUE(child); |
| + EXPECT_EQ(kValues[index], *child); |
| + } |
| +} |
| + |
| +} // namespace |
| +} // namespace test |
| +} // namespace crashpad |