Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(130)

Side by Side Diff: minidump/minidump_writable_test.cc

Issue 936153002: Add FileReaderInterface. Move StringFileWriter to StringFile and (Closed) Base URL: https://chromium.googlesource.com/crashpad/crashpad@master
Patch Set: Remove unused #include Created 5 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « minidump/minidump_thread_writer_test.cc ('k') | util/file/file_reader.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2014 The Crashpad Authors. All rights reserved. 1 // Copyright 2014 The Crashpad Authors. All rights reserved.
2 // 2 //
3 // Licensed under the Apache License, Version 2.0 (the "License"); 3 // Licensed under the Apache License, Version 2.0 (the "License");
4 // you may not use this file except in compliance with 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 5 // You may obtain a copy of the License at
6 // 6 //
7 // http://www.apache.org/licenses/LICENSE-2.0 7 // http://www.apache.org/licenses/LICENSE-2.0
8 // 8 //
9 // Unless required by applicable law or agreed to in writing, software 9 // Unless required by applicable law or agreed to in writing, software
10 // distributed under the License is distributed on an "AS IS" BASIS, 10 // distributed under the License is distributed on an "AS IS" BASIS,
11 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 11 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 // See the License for the specific language governing permissions and 12 // See the License for the specific language governing permissions and
13 // limitations under the License. 13 // limitations under the License.
14 14
15 #include "minidump/minidump_writable.h" 15 #include "minidump/minidump_writable.h"
16 16
17 #include <string> 17 #include <string>
18 #include <vector> 18 #include <vector>
19 19
20 #include "base/basictypes.h" 20 #include "base/basictypes.h"
21 #include "gtest/gtest.h" 21 #include "gtest/gtest.h"
22 #include "util/file/string_file_writer.h" 22 #include "util/file/string_file.h"
23 23
24 namespace crashpad { 24 namespace crashpad {
25 namespace test { 25 namespace test {
26 namespace { 26 namespace {
27 27
28 class BaseTestMinidumpWritable : public crashpad::internal::MinidumpWritable { 28 class BaseTestMinidumpWritable : public crashpad::internal::MinidumpWritable {
29 public: 29 public:
30 BaseTestMinidumpWritable() 30 BaseTestMinidumpWritable()
31 : MinidumpWritable(), 31 : MinidumpWritable(),
32 children_(), 32 children_(),
(...skipping 105 matching lines...) Expand 10 before | Expand all | Expand 10 after
138 return rv; 138 return rv;
139 } 139 }
140 140
141 private: 141 private:
142 std::string data_; 142 std::string data_;
143 143
144 DISALLOW_COPY_AND_ASSIGN(TestStringMinidumpWritable); 144 DISALLOW_COPY_AND_ASSIGN(TestStringMinidumpWritable);
145 }; 145 };
146 146
147 TEST(MinidumpWritable, MinidumpWritable) { 147 TEST(MinidumpWritable, MinidumpWritable) {
148 StringFileWriter writer; 148 StringFile string_file;
149 149
150 { 150 {
151 SCOPED_TRACE("empty"); 151 SCOPED_TRACE("empty");
152 writer.Reset(); 152 string_file.Reset();
153 TestStringMinidumpWritable string_writable; 153 TestStringMinidumpWritable string_writable;
154 EXPECT_TRUE(string_writable.WriteEverything(&writer)); 154 EXPECT_TRUE(string_writable.WriteEverything(&string_file));
155 EXPECT_TRUE(writer.string().empty()); 155 EXPECT_TRUE(string_file.string().empty());
156 string_writable.Verify(); 156 string_writable.Verify();
157 } 157 }
158 158
159 { 159 {
160 SCOPED_TRACE("childless"); 160 SCOPED_TRACE("childless");
161 writer.Reset(); 161 string_file.Reset();
162 TestStringMinidumpWritable string_writable; 162 TestStringMinidumpWritable string_writable;
163 string_writable.SetData("a"); 163 string_writable.SetData("a");
164 EXPECT_TRUE(string_writable.WriteEverything(&writer)); 164 EXPECT_TRUE(string_writable.WriteEverything(&string_file));
165 EXPECT_EQ(1u, writer.string().size()); 165 EXPECT_EQ(1u, string_file.string().size());
166 EXPECT_EQ("a", writer.string()); 166 EXPECT_EQ("a", string_file.string());
167 string_writable.Verify(); 167 string_writable.Verify();
168 } 168 }
169 169
170 { 170 {
171 SCOPED_TRACE("parent-child"); 171 SCOPED_TRACE("parent-child");
172 writer.Reset(); 172 string_file.Reset();
173 TestStringMinidumpWritable parent; 173 TestStringMinidumpWritable parent;
174 parent.SetData("b"); 174 parent.SetData("b");
175 TestStringMinidumpWritable child; 175 TestStringMinidumpWritable child;
176 child.SetData("c"); 176 child.SetData("c");
177 parent.AddChild(&child); 177 parent.AddChild(&child);
178 EXPECT_TRUE(parent.WriteEverything(&writer)); 178 EXPECT_TRUE(parent.WriteEverything(&string_file));
179 EXPECT_EQ(5u, writer.string().size()); 179 EXPECT_EQ(5u, string_file.string().size());
180 EXPECT_EQ(std::string("b\0\0\0c", 5), writer.string()); 180 EXPECT_EQ(std::string("b\0\0\0c", 5), string_file.string());
181 parent.Verify(); 181 parent.Verify();
182 } 182 }
183 183
184 { 184 {
185 SCOPED_TRACE("base alignment 2"); 185 SCOPED_TRACE("base alignment 2");
186 writer.Reset(); 186 string_file.Reset();
187 TestStringMinidumpWritable parent; 187 TestStringMinidumpWritable parent;
188 parent.SetData("de"); 188 parent.SetData("de");
189 TestStringMinidumpWritable child; 189 TestStringMinidumpWritable child;
190 child.SetData("f"); 190 child.SetData("f");
191 parent.AddChild(&child); 191 parent.AddChild(&child);
192 EXPECT_TRUE(parent.WriteEverything(&writer)); 192 EXPECT_TRUE(parent.WriteEverything(&string_file));
193 EXPECT_EQ(5u, writer.string().size()); 193 EXPECT_EQ(5u, string_file.string().size());
194 EXPECT_EQ(std::string("de\0\0f", 5), writer.string()); 194 EXPECT_EQ(std::string("de\0\0f", 5), string_file.string());
195 parent.Verify(); 195 parent.Verify();
196 } 196 }
197 197
198 { 198 {
199 SCOPED_TRACE("base alignment 3"); 199 SCOPED_TRACE("base alignment 3");
200 writer.Reset(); 200 string_file.Reset();
201 TestStringMinidumpWritable parent; 201 TestStringMinidumpWritable parent;
202 parent.SetData("ghi"); 202 parent.SetData("ghi");
203 TestStringMinidumpWritable child; 203 TestStringMinidumpWritable child;
204 child.SetData("j"); 204 child.SetData("j");
205 parent.AddChild(&child); 205 parent.AddChild(&child);
206 EXPECT_TRUE(parent.WriteEverything(&writer)); 206 EXPECT_TRUE(parent.WriteEverything(&string_file));
207 EXPECT_EQ(5u, writer.string().size()); 207 EXPECT_EQ(5u, string_file.string().size());
208 EXPECT_EQ(std::string("ghi\0j", 5), writer.string()); 208 EXPECT_EQ(std::string("ghi\0j", 5), string_file.string());
209 parent.Verify(); 209 parent.Verify();
210 } 210 }
211 211
212 { 212 {
213 SCOPED_TRACE("base alignment 4"); 213 SCOPED_TRACE("base alignment 4");
214 writer.Reset(); 214 string_file.Reset();
215 TestStringMinidumpWritable parent; 215 TestStringMinidumpWritable parent;
216 parent.SetData("klmn"); 216 parent.SetData("klmn");
217 TestStringMinidumpWritable child; 217 TestStringMinidumpWritable child;
218 child.SetData("o"); 218 child.SetData("o");
219 parent.AddChild(&child); 219 parent.AddChild(&child);
220 EXPECT_TRUE(parent.WriteEverything(&writer)); 220 EXPECT_TRUE(parent.WriteEverything(&string_file));
221 EXPECT_EQ(5u, writer.string().size()); 221 EXPECT_EQ(5u, string_file.string().size());
222 EXPECT_EQ("klmno", writer.string()); 222 EXPECT_EQ("klmno", string_file.string());
223 parent.Verify(); 223 parent.Verify();
224 } 224 }
225 225
226 { 226 {
227 SCOPED_TRACE("base alignment 5"); 227 SCOPED_TRACE("base alignment 5");
228 writer.Reset(); 228 string_file.Reset();
229 TestStringMinidumpWritable parent; 229 TestStringMinidumpWritable parent;
230 parent.SetData("pqrst"); 230 parent.SetData("pqrst");
231 TestStringMinidumpWritable child; 231 TestStringMinidumpWritable child;
232 child.SetData("u"); 232 child.SetData("u");
233 parent.AddChild(&child); 233 parent.AddChild(&child);
234 EXPECT_TRUE(parent.WriteEverything(&writer)); 234 EXPECT_TRUE(parent.WriteEverything(&string_file));
235 EXPECT_EQ(9u, writer.string().size()); 235 EXPECT_EQ(9u, string_file.string().size());
236 EXPECT_EQ(std::string("pqrst\0\0\0u", 9), writer.string()); 236 EXPECT_EQ(std::string("pqrst\0\0\0u", 9), string_file.string());
237 parent.Verify(); 237 parent.Verify();
238 } 238 }
239 239
240 { 240 {
241 SCOPED_TRACE("two children"); 241 SCOPED_TRACE("two children");
242 writer.Reset(); 242 string_file.Reset();
243 TestStringMinidumpWritable parent; 243 TestStringMinidumpWritable parent;
244 parent.SetData("parent"); 244 parent.SetData("parent");
245 TestStringMinidumpWritable child_0; 245 TestStringMinidumpWritable child_0;
246 child_0.SetData("child_0"); 246 child_0.SetData("child_0");
247 parent.AddChild(&child_0); 247 parent.AddChild(&child_0);
248 TestStringMinidumpWritable child_1; 248 TestStringMinidumpWritable child_1;
249 child_1.SetData("child_1"); 249 child_1.SetData("child_1");
250 parent.AddChild(&child_1); 250 parent.AddChild(&child_1);
251 EXPECT_TRUE(parent.WriteEverything(&writer)); 251 EXPECT_TRUE(parent.WriteEverything(&string_file));
252 EXPECT_EQ(23u, writer.string().size()); 252 EXPECT_EQ(23u, string_file.string().size());
253 EXPECT_EQ(std::string("parent\0\0child_0\0child_1", 23), writer.string()); 253 EXPECT_EQ(std::string("parent\0\0child_0\0child_1", 23), string_file.string( ));
254 parent.Verify(); 254 parent.Verify();
255 } 255 }
256 256
257 { 257 {
258 SCOPED_TRACE("grandchild"); 258 SCOPED_TRACE("grandchild");
259 writer.Reset(); 259 string_file.Reset();
260 TestStringMinidumpWritable parent; 260 TestStringMinidumpWritable parent;
261 parent.SetData("parent"); 261 parent.SetData("parent");
262 TestStringMinidumpWritable child; 262 TestStringMinidumpWritable child;
263 child.SetData("child"); 263 child.SetData("child");
264 parent.AddChild(&child); 264 parent.AddChild(&child);
265 TestStringMinidumpWritable grandchild; 265 TestStringMinidumpWritable grandchild;
266 grandchild.SetData("grandchild"); 266 grandchild.SetData("grandchild");
267 child.AddChild(&grandchild); 267 child.AddChild(&grandchild);
268 EXPECT_TRUE(parent.WriteEverything(&writer)); 268 EXPECT_TRUE(parent.WriteEverything(&string_file));
269 EXPECT_EQ(26u, writer.string().size()); 269 EXPECT_EQ(26u, string_file.string().size());
270 EXPECT_EQ(std::string("parent\0\0child\0\0\0grandchild", 26), 270 EXPECT_EQ(std::string("parent\0\0child\0\0\0grandchild", 26),
271 writer.string()); 271 string_file.string());
272 parent.Verify(); 272 parent.Verify();
273 } 273 }
274 274
275 { 275 {
276 SCOPED_TRACE("grandchild with empty parent"); 276 SCOPED_TRACE("grandchild with empty parent");
277 writer.Reset(); 277 string_file.Reset();
278 TestStringMinidumpWritable parent; 278 TestStringMinidumpWritable parent;
279 TestStringMinidumpWritable child; 279 TestStringMinidumpWritable child;
280 child.SetData("child"); 280 child.SetData("child");
281 parent.AddChild(&child); 281 parent.AddChild(&child);
282 TestStringMinidumpWritable grandchild; 282 TestStringMinidumpWritable grandchild;
283 grandchild.SetData("grandchild"); 283 grandchild.SetData("grandchild");
284 child.AddChild(&grandchild); 284 child.AddChild(&grandchild);
285 EXPECT_TRUE(parent.WriteEverything(&writer)); 285 EXPECT_TRUE(parent.WriteEverything(&string_file));
286 EXPECT_EQ(18u, writer.string().size()); 286 EXPECT_EQ(18u, string_file.string().size());
287 EXPECT_EQ(std::string("child\0\0\0grandchild", 18), writer.string()); 287 EXPECT_EQ(std::string("child\0\0\0grandchild", 18), string_file.string());
288 parent.Verify(); 288 parent.Verify();
289 } 289 }
290 290
291 { 291 {
292 SCOPED_TRACE("grandchild with empty child"); 292 SCOPED_TRACE("grandchild with empty child");
293 writer.Reset(); 293 string_file.Reset();
294 TestStringMinidumpWritable parent; 294 TestStringMinidumpWritable parent;
295 parent.SetData("parent"); 295 parent.SetData("parent");
296 TestStringMinidumpWritable child; 296 TestStringMinidumpWritable child;
297 parent.AddChild(&child); 297 parent.AddChild(&child);
298 TestStringMinidumpWritable grandchild; 298 TestStringMinidumpWritable grandchild;
299 grandchild.SetData("grandchild"); 299 grandchild.SetData("grandchild");
300 child.AddChild(&grandchild); 300 child.AddChild(&grandchild);
301 EXPECT_TRUE(parent.WriteEverything(&writer)); 301 EXPECT_TRUE(parent.WriteEverything(&string_file));
302 EXPECT_EQ(18u, writer.string().size()); 302 EXPECT_EQ(18u, string_file.string().size());
303 EXPECT_EQ(std::string("parent\0\0grandchild", 18), writer.string()); 303 EXPECT_EQ(std::string("parent\0\0grandchild", 18), string_file.string());
304 parent.Verify(); 304 parent.Verify();
305 } 305 }
306 306
307 { 307 {
308 SCOPED_TRACE("grandchild with empty grandchild"); 308 SCOPED_TRACE("grandchild with empty grandchild");
309 writer.Reset(); 309 string_file.Reset();
310 TestStringMinidumpWritable parent; 310 TestStringMinidumpWritable parent;
311 parent.SetData("parent"); 311 parent.SetData("parent");
312 TestStringMinidumpWritable child; 312 TestStringMinidumpWritable child;
313 child.SetData("child"); 313 child.SetData("child");
314 parent.AddChild(&child); 314 parent.AddChild(&child);
315 TestStringMinidumpWritable grandchild; 315 TestStringMinidumpWritable grandchild;
316 child.AddChild(&grandchild); 316 child.AddChild(&grandchild);
317 EXPECT_TRUE(parent.WriteEverything(&writer)); 317 EXPECT_TRUE(parent.WriteEverything(&string_file));
318 EXPECT_EQ(13u, writer.string().size()); 318 EXPECT_EQ(13u, string_file.string().size());
319 EXPECT_EQ(std::string("parent\0\0child", 13), writer.string()); 319 EXPECT_EQ(std::string("parent\0\0child", 13), string_file.string());
320 parent.Verify(); 320 parent.Verify();
321 } 321 }
322 322
323 { 323 {
324 SCOPED_TRACE("grandchild with late-phase grandchild"); 324 SCOPED_TRACE("grandchild with late-phase grandchild");
325 writer.Reset(); 325 string_file.Reset();
326 TestStringMinidumpWritable parent; 326 TestStringMinidumpWritable parent;
327 parent.SetData("parent"); 327 parent.SetData("parent");
328 TestStringMinidumpWritable child; 328 TestStringMinidumpWritable child;
329 child.SetData("child"); 329 child.SetData("child");
330 parent.AddChild(&child); 330 parent.AddChild(&child);
331 TestStringMinidumpWritable grandchild; 331 TestStringMinidumpWritable grandchild;
332 grandchild.SetData("grandchild"); 332 grandchild.SetData("grandchild");
333 grandchild.SetPhaseLate(); 333 grandchild.SetPhaseLate();
334 child.AddChild(&grandchild); 334 child.AddChild(&grandchild);
335 EXPECT_TRUE(parent.WriteEverything(&writer)); 335 EXPECT_TRUE(parent.WriteEverything(&string_file));
336 EXPECT_EQ(26u, writer.string().size()); 336 EXPECT_EQ(26u, string_file.string().size());
337 EXPECT_EQ(std::string("parent\0\0child\0\0\0grandchild", 26), 337 EXPECT_EQ(std::string("parent\0\0child\0\0\0grandchild", 26),
338 writer.string()); 338 string_file.string());
339 parent.Verify(); 339 parent.Verify();
340 } 340 }
341 341
342 { 342 {
343 SCOPED_TRACE("grandchild with late-phase child"); 343 SCOPED_TRACE("grandchild with late-phase child");
344 writer.Reset(); 344 string_file.Reset();
345 TestStringMinidumpWritable parent; 345 TestStringMinidumpWritable parent;
346 parent.SetData("parent"); 346 parent.SetData("parent");
347 TestStringMinidumpWritable child; 347 TestStringMinidumpWritable child;
348 child.SetData("child"); 348 child.SetData("child");
349 child.SetPhaseLate(); 349 child.SetPhaseLate();
350 parent.AddChild(&child); 350 parent.AddChild(&child);
351 TestStringMinidumpWritable grandchild; 351 TestStringMinidumpWritable grandchild;
352 grandchild.SetData("grandchild"); 352 grandchild.SetData("grandchild");
353 child.AddChild(&grandchild); 353 child.AddChild(&grandchild);
354 EXPECT_TRUE(parent.WriteEverything(&writer)); 354 EXPECT_TRUE(parent.WriteEverything(&string_file));
355 EXPECT_EQ(25u, writer.string().size()); 355 EXPECT_EQ(25u, string_file.string().size());
356 EXPECT_EQ(std::string("parent\0\0grandchild\0\0child", 25), 356 EXPECT_EQ(std::string("parent\0\0grandchild\0\0child", 25),
357 writer.string()); 357 string_file.string());
358 parent.Verify(); 358 parent.Verify();
359 } 359 }
360 360
361 { 361 {
362 SCOPED_TRACE("family tree"); 362 SCOPED_TRACE("family tree");
363 writer.Reset(); 363 string_file.Reset();
364 TestStringMinidumpWritable parent; 364 TestStringMinidumpWritable parent;
365 parent.SetData("P.."); 365 parent.SetData("P..");
366 TestStringMinidumpWritable child_0; 366 TestStringMinidumpWritable child_0;
367 child_0.SetData("C0."); 367 child_0.SetData("C0.");
368 parent.AddChild(&child_0); 368 parent.AddChild(&child_0);
369 TestStringMinidumpWritable child_1; 369 TestStringMinidumpWritable child_1;
370 child_1.SetData("C1."); 370 child_1.SetData("C1.");
371 parent.AddChild(&child_1); 371 parent.AddChild(&child_1);
372 TestStringMinidumpWritable grandchild_00; 372 TestStringMinidumpWritable grandchild_00;
373 grandchild_00.SetData("G00"); 373 grandchild_00.SetData("G00");
374 child_0.AddChild(&grandchild_00); 374 child_0.AddChild(&grandchild_00);
375 TestStringMinidumpWritable grandchild_01; 375 TestStringMinidumpWritable grandchild_01;
376 grandchild_01.SetData("G01"); 376 grandchild_01.SetData("G01");
377 child_0.AddChild(&grandchild_01); 377 child_0.AddChild(&grandchild_01);
378 TestStringMinidumpWritable grandchild_10; 378 TestStringMinidumpWritable grandchild_10;
379 grandchild_10.SetData("G10"); 379 grandchild_10.SetData("G10");
380 child_1.AddChild(&grandchild_10); 380 child_1.AddChild(&grandchild_10);
381 TestStringMinidumpWritable grandchild_11; 381 TestStringMinidumpWritable grandchild_11;
382 grandchild_11.SetData("G11"); 382 grandchild_11.SetData("G11");
383 child_1.AddChild(&grandchild_11); 383 child_1.AddChild(&grandchild_11);
384 EXPECT_TRUE(parent.WriteEverything(&writer)); 384 EXPECT_TRUE(parent.WriteEverything(&string_file));
385 EXPECT_EQ(27u, writer.string().size()); 385 EXPECT_EQ(27u, string_file.string().size());
386 EXPECT_EQ(std::string("P..\0C0.\0G00\0G01\0C1.\0G10\0G11", 27), 386 EXPECT_EQ(std::string("P..\0C0.\0G00\0G01\0C1.\0G10\0G11", 27),
387 writer.string()); 387 string_file.string());
388 parent.Verify(); 388 parent.Verify();
389 } 389 }
390 390
391 { 391 {
392 SCOPED_TRACE("family tree with C0 late"); 392 SCOPED_TRACE("family tree with C0 late");
393 writer.Reset(); 393 string_file.Reset();
394 TestStringMinidumpWritable parent; 394 TestStringMinidumpWritable parent;
395 parent.SetData("P.."); 395 parent.SetData("P..");
396 TestStringMinidumpWritable child_0; 396 TestStringMinidumpWritable child_0;
397 child_0.SetData("C0."); 397 child_0.SetData("C0.");
398 child_0.SetPhaseLate(); 398 child_0.SetPhaseLate();
399 parent.AddChild(&child_0); 399 parent.AddChild(&child_0);
400 TestStringMinidumpWritable child_1; 400 TestStringMinidumpWritable child_1;
401 child_1.SetData("C1."); 401 child_1.SetData("C1.");
402 parent.AddChild(&child_1); 402 parent.AddChild(&child_1);
403 TestStringMinidumpWritable grandchild_00; 403 TestStringMinidumpWritable grandchild_00;
404 grandchild_00.SetData("G00"); 404 grandchild_00.SetData("G00");
405 child_0.AddChild(&grandchild_00); 405 child_0.AddChild(&grandchild_00);
406 TestStringMinidumpWritable grandchild_01; 406 TestStringMinidumpWritable grandchild_01;
407 grandchild_01.SetData("G01"); 407 grandchild_01.SetData("G01");
408 child_0.AddChild(&grandchild_01); 408 child_0.AddChild(&grandchild_01);
409 TestStringMinidumpWritable grandchild_10; 409 TestStringMinidumpWritable grandchild_10;
410 grandchild_10.SetData("G10"); 410 grandchild_10.SetData("G10");
411 child_1.AddChild(&grandchild_10); 411 child_1.AddChild(&grandchild_10);
412 TestStringMinidumpWritable grandchild_11; 412 TestStringMinidumpWritable grandchild_11;
413 grandchild_11.SetData("G11"); 413 grandchild_11.SetData("G11");
414 child_1.AddChild(&grandchild_11); 414 child_1.AddChild(&grandchild_11);
415 EXPECT_TRUE(parent.WriteEverything(&writer)); 415 EXPECT_TRUE(parent.WriteEverything(&string_file));
416 EXPECT_EQ(27u, writer.string().size()); 416 EXPECT_EQ(27u, string_file.string().size());
417 EXPECT_EQ(std::string("P..\0G00\0G01\0C1.\0G10\0G11\0C0.", 27), 417 EXPECT_EQ(std::string("P..\0G00\0G01\0C1.\0G10\0G11\0C0.", 27),
418 writer.string()); 418 string_file.string());
419 parent.Verify(); 419 parent.Verify();
420 } 420 }
421 421
422 { 422 {
423 SCOPED_TRACE("family tree with G0 late"); 423 SCOPED_TRACE("family tree with G0 late");
424 writer.Reset(); 424 string_file.Reset();
425 TestStringMinidumpWritable parent; 425 TestStringMinidumpWritable parent;
426 parent.SetData("P.."); 426 parent.SetData("P..");
427 TestStringMinidumpWritable child_0; 427 TestStringMinidumpWritable child_0;
428 child_0.SetData("C0."); 428 child_0.SetData("C0.");
429 parent.AddChild(&child_0); 429 parent.AddChild(&child_0);
430 TestStringMinidumpWritable child_1; 430 TestStringMinidumpWritable child_1;
431 child_1.SetData("C1."); 431 child_1.SetData("C1.");
432 parent.AddChild(&child_1); 432 parent.AddChild(&child_1);
433 TestStringMinidumpWritable grandchild_00; 433 TestStringMinidumpWritable grandchild_00;
434 grandchild_00.SetData("G00"); 434 grandchild_00.SetData("G00");
435 grandchild_00.SetPhaseLate(); 435 grandchild_00.SetPhaseLate();
436 child_0.AddChild(&grandchild_00); 436 child_0.AddChild(&grandchild_00);
437 TestStringMinidumpWritable grandchild_01; 437 TestStringMinidumpWritable grandchild_01;
438 grandchild_01.SetData("G01"); 438 grandchild_01.SetData("G01");
439 grandchild_01.SetPhaseLate(); 439 grandchild_01.SetPhaseLate();
440 child_0.AddChild(&grandchild_01); 440 child_0.AddChild(&grandchild_01);
441 TestStringMinidumpWritable grandchild_10; 441 TestStringMinidumpWritable grandchild_10;
442 grandchild_10.SetData("G10"); 442 grandchild_10.SetData("G10");
443 child_1.AddChild(&grandchild_10); 443 child_1.AddChild(&grandchild_10);
444 TestStringMinidumpWritable grandchild_11; 444 TestStringMinidumpWritable grandchild_11;
445 grandchild_11.SetData("G11"); 445 grandchild_11.SetData("G11");
446 child_1.AddChild(&grandchild_11); 446 child_1.AddChild(&grandchild_11);
447 EXPECT_TRUE(parent.WriteEverything(&writer)); 447 EXPECT_TRUE(parent.WriteEverything(&string_file));
448 EXPECT_EQ(27u, writer.string().size()); 448 EXPECT_EQ(27u, string_file.string().size());
449 EXPECT_EQ(std::string("P..\0C0.\0C1.\0G10\0G11\0G00\0G01", 27), 449 EXPECT_EQ(std::string("P..\0C0.\0C1.\0G10\0G11\0G00\0G01", 27),
450 writer.string()); 450 string_file.string());
451 parent.Verify(); 451 parent.Verify();
452 } 452 }
453 453
454 { 454 {
455 SCOPED_TRACE("align 1"); 455 SCOPED_TRACE("align 1");
456 writer.Reset(); 456 string_file.Reset();
457 TestStringMinidumpWritable parent; 457 TestStringMinidumpWritable parent;
458 parent.SetData("p"); 458 parent.SetData("p");
459 TestStringMinidumpWritable child; 459 TestStringMinidumpWritable child;
460 child.SetData("c"); 460 child.SetData("c");
461 child.SetAlignment(1); 461 child.SetAlignment(1);
462 parent.AddChild(&child); 462 parent.AddChild(&child);
463 EXPECT_TRUE(parent.WriteEverything(&writer)); 463 EXPECT_TRUE(parent.WriteEverything(&string_file));
464 EXPECT_EQ(2u, writer.string().size()); 464 EXPECT_EQ(2u, string_file.string().size());
465 EXPECT_EQ("pc", writer.string()); 465 EXPECT_EQ("pc", string_file.string());
466 parent.Verify(); 466 parent.Verify();
467 } 467 }
468 468
469 { 469 {
470 SCOPED_TRACE("align 2"); 470 SCOPED_TRACE("align 2");
471 writer.Reset(); 471 string_file.Reset();
472 TestStringMinidumpWritable parent; 472 TestStringMinidumpWritable parent;
473 parent.SetData("p"); 473 parent.SetData("p");
474 TestStringMinidumpWritable child; 474 TestStringMinidumpWritable child;
475 child.SetData("c"); 475 child.SetData("c");
476 child.SetAlignment(2); 476 child.SetAlignment(2);
477 parent.AddChild(&child); 477 parent.AddChild(&child);
478 EXPECT_TRUE(parent.WriteEverything(&writer)); 478 EXPECT_TRUE(parent.WriteEverything(&string_file));
479 EXPECT_EQ(3u, writer.string().size()); 479 EXPECT_EQ(3u, string_file.string().size());
480 EXPECT_EQ(std::string("p\0c", 3), writer.string()); 480 EXPECT_EQ(std::string("p\0c", 3), string_file.string());
481 parent.Verify(); 481 parent.Verify();
482 } 482 }
483 } 483 }
484 484
485 class TestRVAMinidumpWritable final : public BaseTestMinidumpWritable { 485 class TestRVAMinidumpWritable final : public BaseTestMinidumpWritable {
486 public: 486 public:
487 TestRVAMinidumpWritable() : BaseTestMinidumpWritable(), rva_() {} 487 TestRVAMinidumpWritable() : BaseTestMinidumpWritable(), rva_() {}
488 488
489 ~TestRVAMinidumpWritable() {} 489 ~TestRVAMinidumpWritable() {}
490 490
(...skipping 15 matching lines...) Expand all
506 RVA rva_; 506 RVA rva_;
507 507
508 DISALLOW_COPY_AND_ASSIGN(TestRVAMinidumpWritable); 508 DISALLOW_COPY_AND_ASSIGN(TestRVAMinidumpWritable);
509 }; 509 };
510 510
511 RVA RVAAtIndex(const std::string& string, size_t index) { 511 RVA RVAAtIndex(const std::string& string, size_t index) {
512 return *reinterpret_cast<const RVA*>(&string[index * sizeof(RVA)]); 512 return *reinterpret_cast<const RVA*>(&string[index * sizeof(RVA)]);
513 } 513 }
514 514
515 TEST(MinidumpWritable, RVA) { 515 TEST(MinidumpWritable, RVA) {
516 StringFileWriter writer; 516 StringFile string_file;
517 517
518 { 518 {
519 SCOPED_TRACE("unset"); 519 SCOPED_TRACE("unset");
520 writer.Reset(); 520 string_file.Reset();
521 TestRVAMinidumpWritable rva_writable; 521 TestRVAMinidumpWritable rva_writable;
522 EXPECT_TRUE(rva_writable.WriteEverything(&writer)); 522 EXPECT_TRUE(rva_writable.WriteEverything(&string_file));
523 523
524 ASSERT_EQ(sizeof(RVA), writer.string().size()); 524 ASSERT_EQ(sizeof(RVA), string_file.string().size());
525 EXPECT_EQ(0 * sizeof(RVA), RVAAtIndex(writer.string(), 0)); 525 EXPECT_EQ(0 * sizeof(RVA), RVAAtIndex(string_file.string(), 0));
526 rva_writable.Verify(); 526 rva_writable.Verify();
527 } 527 }
528 528
529 { 529 {
530 SCOPED_TRACE("self"); 530 SCOPED_TRACE("self");
531 writer.Reset(); 531 string_file.Reset();
532 TestRVAMinidumpWritable rva_writable; 532 TestRVAMinidumpWritable rva_writable;
533 rva_writable.SetRVA(&rva_writable); 533 rva_writable.SetRVA(&rva_writable);
534 EXPECT_TRUE(rva_writable.WriteEverything(&writer)); 534 EXPECT_TRUE(rva_writable.WriteEverything(&string_file));
535 535
536 ASSERT_EQ(sizeof(RVA), writer.string().size()); 536 ASSERT_EQ(sizeof(RVA), string_file.string().size());
537 EXPECT_EQ(0 * sizeof(RVA), RVAAtIndex(writer.string(), 0)); 537 EXPECT_EQ(0 * sizeof(RVA), RVAAtIndex(string_file.string(), 0));
538 rva_writable.Verify(); 538 rva_writable.Verify();
539 } 539 }
540 540
541 { 541 {
542 SCOPED_TRACE("parent-child self"); 542 SCOPED_TRACE("parent-child self");
543 writer.Reset(); 543 string_file.Reset();
544 TestRVAMinidumpWritable parent; 544 TestRVAMinidumpWritable parent;
545 parent.SetRVA(&parent); 545 parent.SetRVA(&parent);
546 TestRVAMinidumpWritable child; 546 TestRVAMinidumpWritable child;
547 child.SetRVA(&child); 547 child.SetRVA(&child);
548 parent.AddChild(&child); 548 parent.AddChild(&child);
549 EXPECT_TRUE(parent.WriteEverything(&writer)); 549 EXPECT_TRUE(parent.WriteEverything(&string_file));
550 550
551 ASSERT_EQ(2 * sizeof(RVA), writer.string().size()); 551 ASSERT_EQ(2 * sizeof(RVA), string_file.string().size());
552 EXPECT_EQ(0 * sizeof(RVA), RVAAtIndex(writer.string(), 0)); 552 EXPECT_EQ(0 * sizeof(RVA), RVAAtIndex(string_file.string(), 0));
553 EXPECT_EQ(1 * sizeof(RVA), RVAAtIndex(writer.string(), 1)); 553 EXPECT_EQ(1 * sizeof(RVA), RVAAtIndex(string_file.string(), 1));
554 parent.Verify(); 554 parent.Verify();
555 } 555 }
556 556
557 { 557 {
558 SCOPED_TRACE("parent-child only"); 558 SCOPED_TRACE("parent-child only");
559 writer.Reset(); 559 string_file.Reset();
560 TestRVAMinidumpWritable parent; 560 TestRVAMinidumpWritable parent;
561 TestRVAMinidumpWritable child; 561 TestRVAMinidumpWritable child;
562 parent.SetRVA(&child); 562 parent.SetRVA(&child);
563 parent.AddChild(&child); 563 parent.AddChild(&child);
564 EXPECT_TRUE(parent.WriteEverything(&writer)); 564 EXPECT_TRUE(parent.WriteEverything(&string_file));
565 565
566 ASSERT_EQ(2 * sizeof(RVA), writer.string().size()); 566 ASSERT_EQ(2 * sizeof(RVA), string_file.string().size());
567 EXPECT_EQ(1 * sizeof(RVA), RVAAtIndex(writer.string(), 0)); 567 EXPECT_EQ(1 * sizeof(RVA), RVAAtIndex(string_file.string(), 0));
568 EXPECT_EQ(0 * sizeof(RVA), RVAAtIndex(writer.string(), 1)); 568 EXPECT_EQ(0 * sizeof(RVA), RVAAtIndex(string_file.string(), 1));
569 parent.Verify(); 569 parent.Verify();
570 } 570 }
571 571
572 { 572 {
573 SCOPED_TRACE("parent-child circular"); 573 SCOPED_TRACE("parent-child circular");
574 writer.Reset(); 574 string_file.Reset();
575 TestRVAMinidumpWritable parent; 575 TestRVAMinidumpWritable parent;
576 TestRVAMinidumpWritable child; 576 TestRVAMinidumpWritable child;
577 parent.SetRVA(&child); 577 parent.SetRVA(&child);
578 child.SetRVA(&parent); 578 child.SetRVA(&parent);
579 parent.AddChild(&child); 579 parent.AddChild(&child);
580 EXPECT_TRUE(parent.WriteEverything(&writer)); 580 EXPECT_TRUE(parent.WriteEverything(&string_file));
581 581
582 ASSERT_EQ(2 * sizeof(RVA), writer.string().size()); 582 ASSERT_EQ(2 * sizeof(RVA), string_file.string().size());
583 EXPECT_EQ(1 * sizeof(RVA), RVAAtIndex(writer.string(), 0)); 583 EXPECT_EQ(1 * sizeof(RVA), RVAAtIndex(string_file.string(), 0));
584 EXPECT_EQ(0 * sizeof(RVA), RVAAtIndex(writer.string(), 1)); 584 EXPECT_EQ(0 * sizeof(RVA), RVAAtIndex(string_file.string(), 1));
585 parent.Verify(); 585 parent.Verify();
586 } 586 }
587 587
588 { 588 {
589 SCOPED_TRACE("grandchildren"); 589 SCOPED_TRACE("grandchildren");
590 writer.Reset(); 590 string_file.Reset();
591 TestRVAMinidumpWritable parent; 591 TestRVAMinidumpWritable parent;
592 TestRVAMinidumpWritable child; 592 TestRVAMinidumpWritable child;
593 parent.SetRVA(&child); 593 parent.SetRVA(&child);
594 parent.AddChild(&child); 594 parent.AddChild(&child);
595 TestRVAMinidumpWritable grandchild_0; 595 TestRVAMinidumpWritable grandchild_0;
596 grandchild_0.SetRVA(&child); 596 grandchild_0.SetRVA(&child);
597 child.AddChild(&grandchild_0); 597 child.AddChild(&grandchild_0);
598 TestRVAMinidumpWritable grandchild_1; 598 TestRVAMinidumpWritable grandchild_1;
599 grandchild_1.SetRVA(&child); 599 grandchild_1.SetRVA(&child);
600 child.AddChild(&grandchild_1); 600 child.AddChild(&grandchild_1);
601 TestRVAMinidumpWritable grandchild_2; 601 TestRVAMinidumpWritable grandchild_2;
602 grandchild_2.SetRVA(&child); 602 grandchild_2.SetRVA(&child);
603 child.AddChild(&grandchild_2); 603 child.AddChild(&grandchild_2);
604 EXPECT_TRUE(parent.WriteEverything(&writer)); 604 EXPECT_TRUE(parent.WriteEverything(&string_file));
605 605
606 ASSERT_EQ(5 * sizeof(RVA), writer.string().size()); 606 ASSERT_EQ(5 * sizeof(RVA), string_file.string().size());
607 EXPECT_EQ(1 * sizeof(RVA), RVAAtIndex(writer.string(), 0)); 607 EXPECT_EQ(1 * sizeof(RVA), RVAAtIndex(string_file.string(), 0));
608 EXPECT_EQ(0 * sizeof(RVA), RVAAtIndex(writer.string(), 1)); 608 EXPECT_EQ(0 * sizeof(RVA), RVAAtIndex(string_file.string(), 1));
609 EXPECT_EQ(1 * sizeof(RVA), RVAAtIndex(writer.string(), 2)); 609 EXPECT_EQ(1 * sizeof(RVA), RVAAtIndex(string_file.string(), 2));
610 EXPECT_EQ(1 * sizeof(RVA), RVAAtIndex(writer.string(), 3)); 610 EXPECT_EQ(1 * sizeof(RVA), RVAAtIndex(string_file.string(), 3));
611 EXPECT_EQ(1 * sizeof(RVA), RVAAtIndex(writer.string(), 4)); 611 EXPECT_EQ(1 * sizeof(RVA), RVAAtIndex(string_file.string(), 4));
612 parent.Verify(); 612 parent.Verify();
613 } 613 }
614 } 614 }
615 615
616 class TestLocationDescriptorMinidumpWritable final 616 class TestLocationDescriptorMinidumpWritable final
617 : public BaseTestMinidumpWritable { 617 : public BaseTestMinidumpWritable {
618 public: 618 public:
619 TestLocationDescriptorMinidumpWritable() 619 TestLocationDescriptorMinidumpWritable()
620 : BaseTestMinidumpWritable(), location_descriptor_(), string_() {} 620 : BaseTestMinidumpWritable(), location_descriptor_(), string_() {}
621 621
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after
659 MINIDUMP_LOCATION_DESCRIPTOR location_descriptor; 659 MINIDUMP_LOCATION_DESCRIPTOR location_descriptor;
660 char string[1]; 660 char string[1];
661 }; 661 };
662 662
663 const LocationDescriptorAndData* LDDAtIndex(const std::string& string, 663 const LocationDescriptorAndData* LDDAtIndex(const std::string& string,
664 size_t index) { 664 size_t index) {
665 return reinterpret_cast<const LocationDescriptorAndData*>(&string[index]); 665 return reinterpret_cast<const LocationDescriptorAndData*>(&string[index]);
666 } 666 }
667 667
668 TEST(MinidumpWritable, LocationDescriptor) { 668 TEST(MinidumpWritable, LocationDescriptor) {
669 StringFileWriter writer; 669 StringFile string_file;
670 670
671 { 671 {
672 SCOPED_TRACE("unset"); 672 SCOPED_TRACE("unset");
673 writer.Reset(); 673 string_file.Reset();
674 TestLocationDescriptorMinidumpWritable location_descriptor_writable; 674 TestLocationDescriptorMinidumpWritable location_descriptor_writable;
675 EXPECT_TRUE(location_descriptor_writable.WriteEverything(&writer)); 675 EXPECT_TRUE(location_descriptor_writable.WriteEverything(&string_file));
676 676
677 ASSERT_EQ(9u, writer.string().size()); 677 ASSERT_EQ(9u, string_file.string().size());
678 const LocationDescriptorAndData* ldd = LDDAtIndex(writer.string(), 0); 678 const LocationDescriptorAndData* ldd = LDDAtIndex(string_file.string(), 0);
679 EXPECT_EQ(0u, ldd->location_descriptor.DataSize); 679 EXPECT_EQ(0u, ldd->location_descriptor.DataSize);
680 EXPECT_EQ(0u, ldd->location_descriptor.Rva); 680 EXPECT_EQ(0u, ldd->location_descriptor.Rva);
681 location_descriptor_writable.Verify(); 681 location_descriptor_writable.Verify();
682 } 682 }
683 683
684 { 684 {
685 SCOPED_TRACE("self"); 685 SCOPED_TRACE("self");
686 writer.Reset(); 686 string_file.Reset();
687 TestLocationDescriptorMinidumpWritable location_descriptor_writable; 687 TestLocationDescriptorMinidumpWritable location_descriptor_writable;
688 location_descriptor_writable.SetLocationDescriptor( 688 location_descriptor_writable.SetLocationDescriptor(
689 &location_descriptor_writable); 689 &location_descriptor_writable);
690 EXPECT_TRUE(location_descriptor_writable.WriteEverything(&writer)); 690 EXPECT_TRUE(location_descriptor_writable.WriteEverything(&string_file));
691 691
692 ASSERT_EQ(9u, writer.string().size()); 692 ASSERT_EQ(9u, string_file.string().size());
693 const LocationDescriptorAndData* ldd = LDDAtIndex(writer.string(), 0); 693 const LocationDescriptorAndData* ldd = LDDAtIndex(string_file.string(), 0);
694 EXPECT_EQ(9u, ldd->location_descriptor.DataSize); 694 EXPECT_EQ(9u, ldd->location_descriptor.DataSize);
695 EXPECT_EQ(0u, ldd->location_descriptor.Rva); 695 EXPECT_EQ(0u, ldd->location_descriptor.Rva);
696 location_descriptor_writable.Verify(); 696 location_descriptor_writable.Verify();
697 } 697 }
698 698
699 { 699 {
700 SCOPED_TRACE("self with data"); 700 SCOPED_TRACE("self with data");
701 writer.Reset(); 701 string_file.Reset();
702 TestLocationDescriptorMinidumpWritable location_descriptor_writable; 702 TestLocationDescriptorMinidumpWritable location_descriptor_writable;
703 location_descriptor_writable.SetLocationDescriptor( 703 location_descriptor_writable.SetLocationDescriptor(
704 &location_descriptor_writable); 704 &location_descriptor_writable);
705 location_descriptor_writable.SetString("zz"); 705 location_descriptor_writable.SetString("zz");
706 EXPECT_TRUE(location_descriptor_writable.WriteEverything(&writer)); 706 EXPECT_TRUE(location_descriptor_writable.WriteEverything(&string_file));
707 707
708 ASSERT_EQ(11u, writer.string().size()); 708 ASSERT_EQ(11u, string_file.string().size());
709 const LocationDescriptorAndData* ldd = LDDAtIndex(writer.string(), 0); 709 const LocationDescriptorAndData* ldd = LDDAtIndex(string_file.string(), 0);
710 EXPECT_EQ(11u, ldd->location_descriptor.DataSize); 710 EXPECT_EQ(11u, ldd->location_descriptor.DataSize);
711 EXPECT_EQ(0u, ldd->location_descriptor.Rva); 711 EXPECT_EQ(0u, ldd->location_descriptor.Rva);
712 EXPECT_STREQ("zz", ldd->string); 712 EXPECT_STREQ("zz", ldd->string);
713 location_descriptor_writable.Verify(); 713 location_descriptor_writable.Verify();
714 } 714 }
715 715
716 { 716 {
717 SCOPED_TRACE("parent-child self"); 717 SCOPED_TRACE("parent-child self");
718 writer.Reset(); 718 string_file.Reset();
719 TestLocationDescriptorMinidumpWritable parent; 719 TestLocationDescriptorMinidumpWritable parent;
720 parent.SetLocationDescriptor(&parent); 720 parent.SetLocationDescriptor(&parent);
721 parent.SetString("yy"); 721 parent.SetString("yy");
722 TestLocationDescriptorMinidumpWritable child; 722 TestLocationDescriptorMinidumpWritable child;
723 child.SetLocationDescriptor(&child); 723 child.SetLocationDescriptor(&child);
724 child.SetString("x"); 724 child.SetString("x");
725 parent.AddChild(&child); 725 parent.AddChild(&child);
726 EXPECT_TRUE(parent.WriteEverything(&writer)); 726 EXPECT_TRUE(parent.WriteEverything(&string_file));
727 727
728 ASSERT_EQ(22u, writer.string().size()); 728 ASSERT_EQ(22u, string_file.string().size());
729 const LocationDescriptorAndData* ldd = LDDAtIndex(writer.string(), 0); 729 const LocationDescriptorAndData* ldd = LDDAtIndex(string_file.string(), 0);
730 EXPECT_EQ(11u, ldd->location_descriptor.DataSize); 730 EXPECT_EQ(11u, ldd->location_descriptor.DataSize);
731 EXPECT_EQ(0u, ldd->location_descriptor.Rva); 731 EXPECT_EQ(0u, ldd->location_descriptor.Rva);
732 EXPECT_STREQ("yy", ldd->string); 732 EXPECT_STREQ("yy", ldd->string);
733 ldd = LDDAtIndex(writer.string(), 12); 733 ldd = LDDAtIndex(string_file.string(), 12);
734 EXPECT_EQ(10u, ldd->location_descriptor.DataSize); 734 EXPECT_EQ(10u, ldd->location_descriptor.DataSize);
735 EXPECT_EQ(12u, ldd->location_descriptor.Rva); 735 EXPECT_EQ(12u, ldd->location_descriptor.Rva);
736 EXPECT_STREQ("x", ldd->string); 736 EXPECT_STREQ("x", ldd->string);
737 parent.Verify(); 737 parent.Verify();
738 } 738 }
739 739
740 { 740 {
741 SCOPED_TRACE("parent-child only"); 741 SCOPED_TRACE("parent-child only");
742 writer.Reset(); 742 string_file.Reset();
743 TestLocationDescriptorMinidumpWritable parent; 743 TestLocationDescriptorMinidumpWritable parent;
744 TestLocationDescriptorMinidumpWritable child; 744 TestLocationDescriptorMinidumpWritable child;
745 parent.SetLocationDescriptor(&child); 745 parent.SetLocationDescriptor(&child);
746 parent.SetString("www"); 746 parent.SetString("www");
747 child.SetString("vv"); 747 child.SetString("vv");
748 parent.AddChild(&child); 748 parent.AddChild(&child);
749 EXPECT_TRUE(parent.WriteEverything(&writer)); 749 EXPECT_TRUE(parent.WriteEverything(&string_file));
750 750
751 ASSERT_EQ(23u, writer.string().size()); 751 ASSERT_EQ(23u, string_file.string().size());
752 const LocationDescriptorAndData* ldd = LDDAtIndex(writer.string(), 0); 752 const LocationDescriptorAndData* ldd = LDDAtIndex(string_file.string(), 0);
753 EXPECT_EQ(11u, ldd->location_descriptor.DataSize); 753 EXPECT_EQ(11u, ldd->location_descriptor.DataSize);
754 EXPECT_EQ(12u, ldd->location_descriptor.Rva); 754 EXPECT_EQ(12u, ldd->location_descriptor.Rva);
755 EXPECT_STREQ("www", ldd->string); 755 EXPECT_STREQ("www", ldd->string);
756 ldd = LDDAtIndex(writer.string(), 12); 756 ldd = LDDAtIndex(string_file.string(), 12);
757 EXPECT_EQ(0u, ldd->location_descriptor.DataSize); 757 EXPECT_EQ(0u, ldd->location_descriptor.DataSize);
758 EXPECT_EQ(0u, ldd->location_descriptor.Rva); 758 EXPECT_EQ(0u, ldd->location_descriptor.Rva);
759 EXPECT_STREQ("vv", ldd->string); 759 EXPECT_STREQ("vv", ldd->string);
760 parent.Verify(); 760 parent.Verify();
761 } 761 }
762 762
763 { 763 {
764 SCOPED_TRACE("parent-child circular"); 764 SCOPED_TRACE("parent-child circular");
765 writer.Reset(); 765 string_file.Reset();
766 TestLocationDescriptorMinidumpWritable parent; 766 TestLocationDescriptorMinidumpWritable parent;
767 TestLocationDescriptorMinidumpWritable child; 767 TestLocationDescriptorMinidumpWritable child;
768 parent.SetLocationDescriptor(&child); 768 parent.SetLocationDescriptor(&child);
769 parent.SetString("uuuu"); 769 parent.SetString("uuuu");
770 child.SetLocationDescriptor(&parent); 770 child.SetLocationDescriptor(&parent);
771 child.SetString("tttt"); 771 child.SetString("tttt");
772 parent.AddChild(&child); 772 parent.AddChild(&child);
773 EXPECT_TRUE(parent.WriteEverything(&writer)); 773 EXPECT_TRUE(parent.WriteEverything(&string_file));
774 774
775 ASSERT_EQ(29u, writer.string().size()); 775 ASSERT_EQ(29u, string_file.string().size());
776 const LocationDescriptorAndData* ldd = LDDAtIndex(writer.string(), 0); 776 const LocationDescriptorAndData* ldd = LDDAtIndex(string_file.string(), 0);
777 EXPECT_EQ(13u, ldd->location_descriptor.DataSize); 777 EXPECT_EQ(13u, ldd->location_descriptor.DataSize);
778 EXPECT_EQ(16u, ldd->location_descriptor.Rva); 778 EXPECT_EQ(16u, ldd->location_descriptor.Rva);
779 EXPECT_STREQ("uuuu", ldd->string); 779 EXPECT_STREQ("uuuu", ldd->string);
780 ldd = LDDAtIndex(writer.string(), 16); 780 ldd = LDDAtIndex(string_file.string(), 16);
781 EXPECT_EQ(13u, ldd->location_descriptor.DataSize); 781 EXPECT_EQ(13u, ldd->location_descriptor.DataSize);
782 EXPECT_EQ(0u, ldd->location_descriptor.Rva); 782 EXPECT_EQ(0u, ldd->location_descriptor.Rva);
783 EXPECT_STREQ("tttt", ldd->string); 783 EXPECT_STREQ("tttt", ldd->string);
784 parent.Verify(); 784 parent.Verify();
785 } 785 }
786 786
787 { 787 {
788 SCOPED_TRACE("grandchildren"); 788 SCOPED_TRACE("grandchildren");
789 writer.Reset(); 789 string_file.Reset();
790 TestLocationDescriptorMinidumpWritable parent; 790 TestLocationDescriptorMinidumpWritable parent;
791 TestLocationDescriptorMinidumpWritable child; 791 TestLocationDescriptorMinidumpWritable child;
792 parent.SetLocationDescriptor(&child); 792 parent.SetLocationDescriptor(&child);
793 parent.SetString("s"); 793 parent.SetString("s");
794 parent.AddChild(&child); 794 parent.AddChild(&child);
795 child.SetString("r"); 795 child.SetString("r");
796 TestLocationDescriptorMinidumpWritable grandchild_0; 796 TestLocationDescriptorMinidumpWritable grandchild_0;
797 grandchild_0.SetLocationDescriptor(&child); 797 grandchild_0.SetLocationDescriptor(&child);
798 grandchild_0.SetString("q"); 798 grandchild_0.SetString("q");
799 child.AddChild(&grandchild_0); 799 child.AddChild(&grandchild_0);
800 TestLocationDescriptorMinidumpWritable grandchild_1; 800 TestLocationDescriptorMinidumpWritable grandchild_1;
801 grandchild_1.SetLocationDescriptor(&child); 801 grandchild_1.SetLocationDescriptor(&child);
802 grandchild_1.SetString("p"); 802 grandchild_1.SetString("p");
803 child.AddChild(&grandchild_1); 803 child.AddChild(&grandchild_1);
804 TestLocationDescriptorMinidumpWritable grandchild_2; 804 TestLocationDescriptorMinidumpWritable grandchild_2;
805 grandchild_2.SetLocationDescriptor(&child); 805 grandchild_2.SetLocationDescriptor(&child);
806 grandchild_2.SetString("o"); 806 grandchild_2.SetString("o");
807 child.AddChild(&grandchild_2); 807 child.AddChild(&grandchild_2);
808 EXPECT_TRUE(parent.WriteEverything(&writer)); 808 EXPECT_TRUE(parent.WriteEverything(&string_file));
809 809
810 ASSERT_EQ(58u, writer.string().size()); 810 ASSERT_EQ(58u, string_file.string().size());
811 const LocationDescriptorAndData* ldd = LDDAtIndex(writer.string(), 0); 811 const LocationDescriptorAndData* ldd = LDDAtIndex(string_file.string(), 0);
812 EXPECT_EQ(10u, ldd->location_descriptor.DataSize); 812 EXPECT_EQ(10u, ldd->location_descriptor.DataSize);
813 EXPECT_EQ(12u, ldd->location_descriptor.Rva); 813 EXPECT_EQ(12u, ldd->location_descriptor.Rva);
814 EXPECT_STREQ("s", ldd->string); 814 EXPECT_STREQ("s", ldd->string);
815 ldd = LDDAtIndex(writer.string(), 12); 815 ldd = LDDAtIndex(string_file.string(), 12);
816 EXPECT_EQ(0u, ldd->location_descriptor.DataSize); 816 EXPECT_EQ(0u, ldd->location_descriptor.DataSize);
817 EXPECT_EQ(0u, ldd->location_descriptor.Rva); 817 EXPECT_EQ(0u, ldd->location_descriptor.Rva);
818 EXPECT_STREQ("r", ldd->string); 818 EXPECT_STREQ("r", ldd->string);
819 ldd = LDDAtIndex(writer.string(), 24); 819 ldd = LDDAtIndex(string_file.string(), 24);
820 EXPECT_EQ(10u, ldd->location_descriptor.DataSize); 820 EXPECT_EQ(10u, ldd->location_descriptor.DataSize);
821 EXPECT_EQ(12u, ldd->location_descriptor.Rva); 821 EXPECT_EQ(12u, ldd->location_descriptor.Rva);
822 EXPECT_STREQ("q", ldd->string); 822 EXPECT_STREQ("q", ldd->string);
823 ldd = LDDAtIndex(writer.string(), 36); 823 ldd = LDDAtIndex(string_file.string(), 36);
824 EXPECT_EQ(10u, ldd->location_descriptor.DataSize); 824 EXPECT_EQ(10u, ldd->location_descriptor.DataSize);
825 EXPECT_EQ(12u, ldd->location_descriptor.Rva); 825 EXPECT_EQ(12u, ldd->location_descriptor.Rva);
826 EXPECT_STREQ("p", ldd->string); 826 EXPECT_STREQ("p", ldd->string);
827 ldd = LDDAtIndex(writer.string(), 48); 827 ldd = LDDAtIndex(string_file.string(), 48);
828 EXPECT_EQ(10u, ldd->location_descriptor.DataSize); 828 EXPECT_EQ(10u, ldd->location_descriptor.DataSize);
829 EXPECT_EQ(12u, ldd->location_descriptor.Rva); 829 EXPECT_EQ(12u, ldd->location_descriptor.Rva);
830 EXPECT_STREQ("o", ldd->string); 830 EXPECT_STREQ("o", ldd->string);
831 parent.Verify(); 831 parent.Verify();
832 } 832 }
833 } 833 }
834 834
835 } // namespace 835 } // namespace
836 } // namespace test 836 } // namespace test
837 } // namespace crashpad 837 } // namespace crashpad
OLDNEW
« no previous file with comments | « minidump/minidump_thread_writer_test.cc ('k') | util/file/file_reader.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698