| OLD | NEW | 
|---|
| (Empty) |  | 
|  | 1 // Copyright 2014 The Crashpad Authors. All rights reserved. | 
|  | 2 // | 
|  | 3 // Licensed under the Apache License, Version 2.0 (the "License"); | 
|  | 4 // you may not use this file except in compliance with the License. | 
|  | 5 // You may obtain a copy of the License at | 
|  | 6 // | 
|  | 7 //     http://www.apache.org/licenses/LICENSE-2.0 | 
|  | 8 // | 
|  | 9 // Unless required by applicable law or agreed to in writing, software | 
|  | 10 // distributed under the License is distributed on an "AS IS" BASIS, | 
|  | 11 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | 
|  | 12 // See the License for the specific language governing permissions and | 
|  | 13 // limitations under the License. | 
|  | 14 | 
|  | 15 #include "minidump/minidump_location_descriptor_list_writer.h" | 
|  | 16 | 
|  | 17 #include "base/strings/stringprintf.h" | 
|  | 18 #include "gtest/gtest.h" | 
|  | 19 #include "minidump/test/minidump_location_descriptor_list_test_util.h" | 
|  | 20 #include "minidump/test/minidump_writable_test_util.h" | 
|  | 21 #include "util/file/string_file_writer.h" | 
|  | 22 | 
|  | 23 namespace crashpad { | 
|  | 24 namespace test { | 
|  | 25 namespace { | 
|  | 26 | 
|  | 27 class TestMinidumpWritable final : public internal::MinidumpWritable { | 
|  | 28  public: | 
|  | 29   explicit TestMinidumpWritable(uint32_t value) | 
|  | 30       : MinidumpWritable(), | 
|  | 31         value_(value) { | 
|  | 32   } | 
|  | 33 | 
|  | 34   ~TestMinidumpWritable() override {} | 
|  | 35 | 
|  | 36  protected: | 
|  | 37   // MinidumpWritable: | 
|  | 38 | 
|  | 39   size_t SizeOfObject() override { return sizeof(value_); } | 
|  | 40 | 
|  | 41   bool WriteObject(FileWriterInterface* file_writer) override { | 
|  | 42     return file_writer->Write(&value_, sizeof(value_)); | 
|  | 43   } | 
|  | 44 | 
|  | 45  private: | 
|  | 46   uint32_t value_; | 
|  | 47 | 
|  | 48   DISALLOW_COPY_AND_ASSIGN(TestMinidumpWritable); | 
|  | 49 }; | 
|  | 50 | 
|  | 51 class TestMinidumpLocationDescriptorListWriter final | 
|  | 52     : public MinidumpLocationDescriptorListWriter { | 
|  | 53  public: | 
|  | 54   TestMinidumpLocationDescriptorListWriter() | 
|  | 55       : MinidumpLocationDescriptorListWriter() { | 
|  | 56   } | 
|  | 57 | 
|  | 58   ~TestMinidumpLocationDescriptorListWriter() override {} | 
|  | 59 | 
|  | 60   void AddChild(uint32_t value) { | 
|  | 61     auto child = make_scoped_ptr(new TestMinidumpWritable(value)); | 
|  | 62     MinidumpLocationDescriptorListWriter::AddChild(child.Pass()); | 
|  | 63   } | 
|  | 64 | 
|  | 65  private: | 
|  | 66   DISALLOW_COPY_AND_ASSIGN(TestMinidumpLocationDescriptorListWriter); | 
|  | 67 }; | 
|  | 68 | 
|  | 69 TEST(MinidumpLocationDescriptorListWriter, Empty) { | 
|  | 70   TestMinidumpLocationDescriptorListWriter list_writer; | 
|  | 71 | 
|  | 72   StringFileWriter file_writer; | 
|  | 73 | 
|  | 74   ASSERT_TRUE(list_writer.WriteEverything(&file_writer)); | 
|  | 75   EXPECT_EQ(sizeof(MinidumpLocationDescriptorList), | 
|  | 76             file_writer.string().size()); | 
|  | 77 | 
|  | 78   const MinidumpLocationDescriptorList* list = | 
|  | 79       MinidumpLocationDescriptorListAtStart(file_writer.string(), 0); | 
|  | 80   ASSERT_TRUE(list); | 
|  | 81 } | 
|  | 82 | 
|  | 83 TEST(MinidumpLocationDescriptorListWriter, OneChild) { | 
|  | 84   TestMinidumpLocationDescriptorListWriter list_writer; | 
|  | 85 | 
|  | 86   const uint32_t kValue = 0; | 
|  | 87   list_writer.AddChild(kValue); | 
|  | 88 | 
|  | 89   StringFileWriter file_writer; | 
|  | 90 | 
|  | 91   ASSERT_TRUE(list_writer.WriteEverything(&file_writer)); | 
|  | 92 | 
|  | 93   const MinidumpLocationDescriptorList* list = | 
|  | 94       MinidumpLocationDescriptorListAtStart(file_writer.string(), 1); | 
|  | 95   ASSERT_TRUE(list); | 
|  | 96 | 
|  | 97   const uint32_t* child = MinidumpWritableAtLocationDescriptor<uint32_t>( | 
|  | 98       file_writer.string(), list->children[0]); | 
|  | 99   ASSERT_TRUE(child); | 
|  | 100   EXPECT_EQ(kValue, *child); | 
|  | 101 } | 
|  | 102 | 
|  | 103 TEST(MinidumpLocationDescriptorListWriter, ThreeChildren) { | 
|  | 104   TestMinidumpLocationDescriptorListWriter list_writer; | 
|  | 105 | 
|  | 106   const uint32_t kValues[] = { 0x80000000, 0x55555555, 0x66006600 }; | 
|  | 107 | 
|  | 108   list_writer.AddChild(kValues[0]); | 
|  | 109   list_writer.AddChild(kValues[1]); | 
|  | 110   list_writer.AddChild(kValues[2]); | 
|  | 111 | 
|  | 112   StringFileWriter file_writer; | 
|  | 113 | 
|  | 114   ASSERT_TRUE(list_writer.WriteEverything(&file_writer)); | 
|  | 115 | 
|  | 116   const MinidumpLocationDescriptorList* list = | 
|  | 117       MinidumpLocationDescriptorListAtStart(file_writer.string(), | 
|  | 118                                             arraysize(kValues)); | 
|  | 119   ASSERT_TRUE(list); | 
|  | 120 | 
|  | 121   for (size_t index = 0; index < arraysize(kValues); ++index) { | 
|  | 122     SCOPED_TRACE(base::StringPrintf("index %zu", index)); | 
|  | 123 | 
|  | 124     const uint32_t* child = MinidumpWritableAtLocationDescriptor<uint32_t>( | 
|  | 125         file_writer.string(), list->children[index]); | 
|  | 126     ASSERT_TRUE(child); | 
|  | 127     EXPECT_EQ(kValues[index], *child); | 
|  | 128   } | 
|  | 129 } | 
|  | 130 | 
|  | 131 }  // namespace | 
|  | 132 }  // namespace test | 
|  | 133 }  // namespace crashpad | 
| OLD | NEW | 
|---|