| OLD | NEW |
| 1 // -*- mode: C++ -*- | 1 // -*- mode: C++ -*- |
| 2 | 2 |
| 3 // Copyright (c) 2010, Google Inc. | 3 // Copyright (c) 2010, Google Inc. |
| 4 // All rights reserved. | 4 // All rights reserved. |
| 5 // | 5 // |
| 6 // Redistribution and use in source and binary forms, with or without | 6 // Redistribution and use in source and binary forms, with or without |
| 7 // modification, are permitted provided that the following conditions are | 7 // modification, are permitted provided that the following conditions are |
| 8 // met: | 8 // met: |
| 9 // | 9 // |
| 10 // * Redistributions of source code must retain the above copyright | 10 // * Redistributions of source code must retain the above copyright |
| (...skipping 30 matching lines...) Expand all Loading... |
| 41 #include <string> | 41 #include <string> |
| 42 #include <vector> | 42 #include <vector> |
| 43 | 43 |
| 44 #include "common/using_std_string.h" | 44 #include "common/using_std_string.h" |
| 45 #include "google_breakpad/common/breakpad_types.h" | 45 #include "google_breakpad/common/breakpad_types.h" |
| 46 #include "google_breakpad/processor/code_module.h" | 46 #include "google_breakpad/processor/code_module.h" |
| 47 #include "google_breakpad/processor/code_modules.h" | 47 #include "google_breakpad/processor/code_modules.h" |
| 48 #include "google_breakpad/processor/memory_region.h" | 48 #include "google_breakpad/processor/memory_region.h" |
| 49 #include "google_breakpad/processor/symbol_supplier.h" | 49 #include "google_breakpad/processor/symbol_supplier.h" |
| 50 #include "google_breakpad/processor/system_info.h" | 50 #include "google_breakpad/processor/system_info.h" |
| 51 #include "processor/linked_ptr.h" |
| 51 | 52 |
| 52 class MockMemoryRegion: public google_breakpad::MemoryRegion { | 53 class MockMemoryRegion: public google_breakpad::MemoryRegion { |
| 53 public: | 54 public: |
| 54 MockMemoryRegion(): base_address_(0) { } | 55 MockMemoryRegion(): base_address_(0) { } |
| 55 | 56 |
| 56 // Set this region's address and contents. If we have placed an | 57 // Set this region's address and contents. If we have placed an |
| 57 // instance of this class in a test fixture class, individual tests | 58 // instance of this class in a test fixture class, individual tests |
| 58 // can use this to provide the region's contents. | 59 // can use this to provide the region's contents. |
| 59 void Init(uint64_t base_address, const string &contents) { | 60 void Init(uint64_t base_address, const string &contents) { |
| 60 base_address_ = base_address; | 61 base_address_ = base_address; |
| (...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 107 const string &code_file, const string &version) | 108 const string &code_file, const string &version) |
| 108 : base_address_(base_address), size_(size), code_file_(code_file) { } | 109 : base_address_(base_address), size_(size), code_file_(code_file) { } |
| 109 | 110 |
| 110 uint64_t base_address() const { return base_address_; } | 111 uint64_t base_address() const { return base_address_; } |
| 111 uint64_t size() const { return size_; } | 112 uint64_t size() const { return size_; } |
| 112 string code_file() const { return code_file_; } | 113 string code_file() const { return code_file_; } |
| 113 string code_identifier() const { return code_file_; } | 114 string code_identifier() const { return code_file_; } |
| 114 string debug_file() const { return code_file_; } | 115 string debug_file() const { return code_file_; } |
| 115 string debug_identifier() const { return code_file_; } | 116 string debug_identifier() const { return code_file_; } |
| 116 string version() const { return version_; } | 117 string version() const { return version_; } |
| 117 const google_breakpad::CodeModule *Copy() const { | 118 google_breakpad::CodeModule *Copy() const { |
| 118 abort(); // Tests won't use this. | 119 abort(); // Tests won't use this. |
| 119 } | 120 } |
| 121 virtual uint64_t shrink_down_delta() const { return 0; } |
| 122 virtual void SetShrinkDownDelta(uint64_t shrink_down_delta) {} |
| 120 | 123 |
| 121 private: | 124 private: |
| 122 uint64_t base_address_; | 125 uint64_t base_address_; |
| 123 uint64_t size_; | 126 uint64_t size_; |
| 124 string code_file_; | 127 string code_file_; |
| 125 string version_; | 128 string version_; |
| 126 }; | 129 }; |
| 127 | 130 |
| 128 class MockCodeModules: public google_breakpad::CodeModules { | 131 class MockCodeModules: public google_breakpad::CodeModules { |
| 129 public: | 132 public: |
| 130 typedef google_breakpad::CodeModule CodeModule; | 133 typedef google_breakpad::CodeModule CodeModule; |
| 131 typedef google_breakpad::CodeModules CodeModules; | 134 typedef google_breakpad::CodeModules CodeModules; |
| 132 | 135 |
| 133 void Add(const MockCodeModule *module) { | 136 void Add(const MockCodeModule *module) { |
| 134 modules_.push_back(module); | 137 modules_.push_back(module); |
| 135 } | 138 } |
| 136 | 139 |
| 137 unsigned int module_count() const { return modules_.size(); } | 140 unsigned int module_count() const { return modules_.size(); } |
| 138 | 141 |
| 139 const CodeModule *GetModuleForAddress(uint64_t address) const { | 142 const CodeModule *GetModuleForAddress(uint64_t address) const { |
| 140 for (ModuleVector::const_iterator i = modules_.begin(); | 143 for (ModuleVector::const_iterator i = modules_.begin(); |
| 141 i != modules_.end(); i++) { | 144 i != modules_.end(); i++) { |
| 142 const MockCodeModule *module = *i; | 145 const MockCodeModule *module = *i; |
| 143 if (module->base_address() <= address && | 146 if (module->base_address() <= address && |
| 144 address - module->base_address() < module->size()) | 147 address - module->base_address() < module->size()) |
| 145 return module; | 148 return module; |
| 146 } | 149 } |
| 147 return NULL; | 150 return NULL; |
| 148 }; | 151 }; |
| 149 | 152 |
| 150 const CodeModule *GetMainModule() const { return modules_[0]; } | 153 const CodeModule *GetMainModule() const { return modules_[0]; } |
| 151 | 154 |
| 152 const CodeModule *GetModuleAtSequence(unsigned int sequence) const { | 155 const CodeModule *GetModuleAtSequence(unsigned int sequence) const { |
| 153 return modules_.at(sequence); | 156 return modules_.at(sequence); |
| 154 } | 157 } |
| 155 | 158 |
| 156 const CodeModule *GetModuleAtIndex(unsigned int index) const { | 159 const CodeModule *GetModuleAtIndex(unsigned int index) const { |
| 157 return modules_.at(index); | 160 return modules_.at(index); |
| 158 } | 161 } |
| 159 | 162 |
| 160 const CodeModules *Copy() const { abort(); } // Tests won't use this. | 163 CodeModules *Copy() const { abort(); } // Tests won't use this |
| 161 | 164 |
| 162 private: | 165 virtual std::vector<google_breakpad::linked_ptr<const CodeModule> > |
| 166 GetShrunkRangeModules() const { |
| 167 return std::vector<google_breakpad::linked_ptr<const CodeModule> >(); |
| 168 } |
| 169 |
| 170 // Returns true, if module address range shrink is enabled. |
| 171 bool IsModuleShrinkEnabled() const { |
| 172 return false; |
| 173 } |
| 174 |
| 175 private: |
| 163 typedef std::vector<const MockCodeModule *> ModuleVector; | 176 typedef std::vector<const MockCodeModule *> ModuleVector; |
| 164 ModuleVector modules_; | 177 ModuleVector modules_; |
| 165 }; | 178 }; |
| 166 | 179 |
| 167 class MockSymbolSupplier: public google_breakpad::SymbolSupplier { | 180 class MockSymbolSupplier: public google_breakpad::SymbolSupplier { |
| 168 public: | 181 public: |
| 169 typedef google_breakpad::CodeModule CodeModule; | 182 typedef google_breakpad::CodeModule CodeModule; |
| 170 typedef google_breakpad::SystemInfo SystemInfo; | 183 typedef google_breakpad::SystemInfo SystemInfo; |
| 171 MOCK_METHOD3(GetSymbolFile, SymbolResult(const CodeModule *module, | 184 MOCK_METHOD3(GetSymbolFile, SymbolResult(const CodeModule *module, |
| 172 const SystemInfo *system_info, | 185 const SystemInfo *system_info, |
| (...skipping 29 matching lines...) Expand all Loading... |
| 202 } | 215 } |
| 203 } | 216 } |
| 204 | 217 |
| 205 private: | 218 private: |
| 206 // List of symbol data to be freed upon destruction | 219 // List of symbol data to be freed upon destruction |
| 207 typedef std::vector<char*> SymbolDataVector; | 220 typedef std::vector<char*> SymbolDataVector; |
| 208 SymbolDataVector symbol_data_to_free_; | 221 SymbolDataVector symbol_data_to_free_; |
| 209 }; | 222 }; |
| 210 | 223 |
| 211 #endif // PROCESSOR_STACKWALKER_UNITTEST_UTILS_H_ | 224 #endif // PROCESSOR_STACKWALKER_UNITTEST_UTILS_H_ |
| OLD | NEW |