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

Unified Diff: minidump/minidump_context_test_util.cc

Issue 628153004: Add MinidumpContextWriter test (Closed) Base URL: https://chromium.googlesource.com/crashpad/crashpad@master
Patch Set: Don’t use using directives (“using namespace”) in tests Created 6 years, 2 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « minidump/minidump_context_test_util.h ('k') | minidump/minidump_context_writer_test.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: minidump/minidump_context_test_util.cc
diff --git a/minidump/minidump_context_test_util.cc b/minidump/minidump_context_test_util.cc
new file mode 100644
index 0000000000000000000000000000000000000000..18c2b1421d4449051773f57804c96e577c45eda8
--- /dev/null
+++ b/minidump/minidump_context_test_util.cc
@@ -0,0 +1,319 @@
+// 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_context_test_util.h"
+
+#include "base/basictypes.h"
+#include "gtest/gtest.h"
+
+namespace crashpad {
+namespace test {
+
+void InitializeMinidumpContextX86(MinidumpContextX86* context, uint32_t seed) {
+ if (seed == 0) {
+ memset(context, 0, sizeof(*context));
+ context->context_flags = kMinidumpContextX86;
+ return;
+ }
+
+ context->context_flags = kMinidumpContextX86All;
+
+ uint32_t value = seed;
+
+ context->dr0 = value++;
+ context->dr1 = value++;
+ context->dr2 = value++;
+ context->dr3 = value++;
+ context->dr6 = value++;
+ context->dr7 = value++;
+ context->float_save.control_word = value++;
+ context->float_save.status_word = value++;
+ context->float_save.tag_word = value++;
+ context->float_save.error_offset = value++;
+ context->float_save.error_selector = value++;
+ context->float_save.data_offset = value++;
+ context->float_save.data_selector = value++;
+ for (size_t index = 0;
+ index < arraysize(context->float_save.register_area);
+ ++index) {
+ context->float_save.register_area[index] = value++;
+ }
+ context->float_save.spare_0 = value++;
+ context->gs = value++;
+ context->fs = value++;
+ context->es = value++;
+ context->ds = value++;
+ context->edi = value++;
+ context->esi = value++;
+ context->ebx = value++;
+ context->edx = value++;
+ context->ecx = value++;
+ context->eax = value++;
+ context->ebp = value++;
+ context->eip = value++;
+ context->cs = value++;
+ context->eflags = value++;
+ context->esp = value++;
+ context->ss = value++;
+ for (size_t index = 0; index < arraysize(context->extended_registers);
+ ++index) {
+ context->extended_registers[index] = value++;
+ }
+}
+
+void InitializeMinidumpContextAMD64(MinidumpContextAMD64* context,
+ uint32_t seed) {
+ if (seed == 0) {
+ memset(context, 0, sizeof(*context));
+ context->context_flags = kMinidumpContextAMD64;
+ return;
+ }
+
+ context->context_flags = kMinidumpContextAMD64All;
+
+ uint32_t value = seed;
+
+ context->p1_home = value++;
+ context->p2_home = value++;
+ context->p3_home = value++;
+ context->p4_home = value++;
+ context->p5_home = value++;
+ context->p6_home = value++;
+ context->mx_csr = value++;
+ context->cs = value++;
+ context->ds = value++;
+ context->es = value++;
+ context->fs = value++;
+ context->gs = value++;
+ context->ss = value++;
+ context->eflags = value++;
+ context->dr0 = value++;
+ context->dr1 = value++;
+ context->dr2 = value++;
+ context->dr3 = value++;
+ context->dr6 = value++;
+ context->dr7 = value++;
+ context->rax = value++;
+ context->rcx = value++;
+ context->rdx = value++;
+ context->rbx = value++;
+ context->rsp = value++;
+ context->rbp = value++;
+ context->rsi = value++;
+ context->rdi = value++;
+ context->r8 = value++;
+ context->r9 = value++;
+ context->r10 = value++;
+ context->r11 = value++;
+ context->r12 = value++;
+ context->r13 = value++;
+ context->r14 = value++;
+ context->r15 = value++;
+ context->rip = value++;
+ context->float_save.control_word = value++;
+ context->float_save.status_word = value++;
+ context->float_save.tag_word = value++;
+ context->float_save.reserved_1 = value++;
+ context->float_save.error_opcode = value++;
+ context->float_save.error_offset = value++;
+ context->float_save.error_selector = value++;
+ context->float_save.reserved_2 = value++;
+ context->float_save.data_offset = value++;
+ context->float_save.data_selector = value++;
+ context->float_save.reserved_3 = value++;
+ context->float_save.mx_csr = value++;
+ context->float_save.mx_csr_mask = value++;
+ for (size_t index = 0;
+ index < arraysize(context->float_save.float_registers);
+ ++index) {
+ context->float_save.float_registers[index].lo = value++;
+ context->float_save.float_registers[index].hi = value++;
+ }
+ for (size_t index = 0;
+ index < arraysize(context->float_save.xmm_registers);
+ ++index) {
+ context->float_save.xmm_registers[index].lo = value++;
+ context->float_save.xmm_registers[index].hi = value++;
+ }
+ for (size_t index = 0;
+ index < arraysize(context->float_save.reserved_4);
+ ++index) {
+ context->float_save.reserved_4[index] = value++;
+ }
+ for (size_t index = 0; index < arraysize(context->vector_register); ++index) {
+ context->vector_register[index].lo = value++;
+ context->vector_register[index].hi = value++;
+ }
+ context->vector_control = value++;
+ context->debug_control = value++;
+ context->last_branch_to_rip = value++;
+ context->last_branch_from_rip = value++;
+ context->last_exception_to_rip = value++;
+ context->last_exception_from_rip = value++;
+}
+
+void ExpectMinidumpContextX86(uint32_t expect_seed,
+ const MinidumpContextX86* observed) {
+ MinidumpContextX86 expected;
+ InitializeMinidumpContextX86(&expected, expect_seed);
+
+ EXPECT_EQ(expected.context_flags, observed->context_flags);
+ EXPECT_EQ(expected.dr0, observed->dr0);
+ EXPECT_EQ(expected.dr1, observed->dr1);
+ EXPECT_EQ(expected.dr2, observed->dr2);
+ EXPECT_EQ(expected.dr3, observed->dr3);
+ EXPECT_EQ(expected.dr6, observed->dr6);
+ EXPECT_EQ(expected.dr7, observed->dr7);
+ EXPECT_EQ(expected.float_save.control_word,
+ observed->float_save.control_word);
+ EXPECT_EQ(expected.float_save.status_word, observed->float_save.status_word);
+ EXPECT_EQ(expected.float_save.tag_word, observed->float_save.tag_word);
+ EXPECT_EQ(expected.float_save.error_offset,
+ observed->float_save.error_offset);
+ EXPECT_EQ(expected.float_save.error_selector,
+ observed->float_save.error_selector);
+ EXPECT_EQ(expected.float_save.data_offset, observed->float_save.data_offset);
+ EXPECT_EQ(expected.float_save.data_selector,
+ observed->float_save.data_selector);
+ for (size_t index = 0;
+ index < arraysize(expected.float_save.register_area);
+ ++index) {
+ EXPECT_EQ(expected.float_save.register_area[index],
+ observed->float_save.register_area[index]);
+ }
+ EXPECT_EQ(expected.float_save.spare_0, observed->float_save.spare_0);
+ EXPECT_EQ(expected.gs, observed->gs);
+ EXPECT_EQ(expected.fs, observed->fs);
+ EXPECT_EQ(expected.es, observed->es);
+ EXPECT_EQ(expected.ds, observed->ds);
+ EXPECT_EQ(expected.edi, observed->edi);
+ EXPECT_EQ(expected.esi, observed->esi);
+ EXPECT_EQ(expected.ebx, observed->ebx);
+ EXPECT_EQ(expected.edx, observed->edx);
+ EXPECT_EQ(expected.ecx, observed->ecx);
+ EXPECT_EQ(expected.eax, observed->eax);
+ EXPECT_EQ(expected.ebp, observed->ebp);
+ EXPECT_EQ(expected.eip, observed->eip);
+ EXPECT_EQ(expected.cs, observed->cs);
+ EXPECT_EQ(expected.eflags, observed->eflags);
+ EXPECT_EQ(expected.esp, observed->esp);
+ EXPECT_EQ(expected.ss, observed->ss);
+ for (size_t index = 0;
+ index < arraysize(expected.extended_registers);
+ ++index) {
+ EXPECT_EQ(expected.extended_registers[index],
+ observed->extended_registers[index]);
+ }
+}
+
+void ExpectMinidumpContextAMD64(uint32_t expect_seed,
+ const MinidumpContextAMD64* observed) {
+ MinidumpContextAMD64 expected;
+ InitializeMinidumpContextAMD64(&expected, expect_seed);
+
+ EXPECT_EQ(expected.context_flags, observed->context_flags);
+ EXPECT_EQ(expected.p1_home, observed->p1_home);
+ EXPECT_EQ(expected.p2_home, observed->p2_home);
+ EXPECT_EQ(expected.p3_home, observed->p3_home);
+ EXPECT_EQ(expected.p4_home, observed->p4_home);
+ EXPECT_EQ(expected.p5_home, observed->p5_home);
+ EXPECT_EQ(expected.p6_home, observed->p6_home);
+ EXPECT_EQ(expected.mx_csr, observed->mx_csr);
+ EXPECT_EQ(expected.cs, observed->cs);
+ EXPECT_EQ(expected.ds, observed->ds);
+ EXPECT_EQ(expected.es, observed->es);
+ EXPECT_EQ(expected.fs, observed->fs);
+ EXPECT_EQ(expected.gs, observed->gs);
+ EXPECT_EQ(expected.ss, observed->ss);
+ EXPECT_EQ(expected.eflags, observed->eflags);
+ EXPECT_EQ(expected.dr0, observed->dr0);
+ EXPECT_EQ(expected.dr1, observed->dr1);
+ EXPECT_EQ(expected.dr2, observed->dr2);
+ EXPECT_EQ(expected.dr3, observed->dr3);
+ EXPECT_EQ(expected.dr6, observed->dr6);
+ EXPECT_EQ(expected.dr7, observed->dr7);
+ EXPECT_EQ(expected.rax, observed->rax);
+ EXPECT_EQ(expected.rcx, observed->rcx);
+ EXPECT_EQ(expected.rdx, observed->rdx);
+ EXPECT_EQ(expected.rbx, observed->rbx);
+ EXPECT_EQ(expected.rsp, observed->rsp);
+ EXPECT_EQ(expected.rbp, observed->rbp);
+ EXPECT_EQ(expected.rsi, observed->rsi);
+ EXPECT_EQ(expected.rdi, observed->rdi);
+ EXPECT_EQ(expected.r8, observed->r8);
+ EXPECT_EQ(expected.r9, observed->r9);
+ EXPECT_EQ(expected.r10, observed->r10);
+ EXPECT_EQ(expected.r11, observed->r11);
+ EXPECT_EQ(expected.r12, observed->r12);
+ EXPECT_EQ(expected.r13, observed->r13);
+ EXPECT_EQ(expected.r14, observed->r14);
+ EXPECT_EQ(expected.r15, observed->r15);
+ EXPECT_EQ(expected.rip, observed->rip);
+ EXPECT_EQ(expected.float_save.control_word,
+ observed->float_save.control_word);
+ EXPECT_EQ(expected.float_save.status_word, observed->float_save.status_word);
+ EXPECT_EQ(expected.float_save.tag_word, observed->float_save.tag_word);
+ EXPECT_EQ(expected.float_save.reserved_1, observed->float_save.reserved_1);
+ EXPECT_EQ(expected.float_save.error_opcode,
+ observed->float_save.error_opcode);
+ EXPECT_EQ(expected.float_save.error_offset,
+ observed->float_save.error_offset);
+ EXPECT_EQ(expected.float_save.error_selector,
+ observed->float_save.error_selector);
+ EXPECT_EQ(expected.float_save.reserved_2, observed->float_save.reserved_2);
+ EXPECT_EQ(expected.float_save.data_offset, observed->float_save.data_offset);
+ EXPECT_EQ(expected.float_save.data_selector,
+ observed->float_save.data_selector);
+ EXPECT_EQ(expected.float_save.reserved_3, observed->float_save.reserved_3);
+ EXPECT_EQ(expected.float_save.mx_csr, observed->float_save.mx_csr);
+ EXPECT_EQ(expected.float_save.mx_csr_mask, observed->float_save.mx_csr_mask);
+ for (size_t index = 0;
+ index < arraysize(expected.float_save.float_registers);
+ ++index) {
+ EXPECT_EQ(expected.float_save.float_registers[index].lo,
+ observed->float_save.float_registers[index].lo);
+ EXPECT_EQ(expected.float_save.float_registers[index].hi,
+ observed->float_save.float_registers[index].hi);
+ }
+ for (size_t index = 0;
+ index < arraysize(expected.float_save.xmm_registers);
+ ++index) {
+ EXPECT_EQ(expected.float_save.xmm_registers[index].lo,
+ observed->float_save.xmm_registers[index].lo);
+ EXPECT_EQ(expected.float_save.xmm_registers[index].hi,
+ observed->float_save.xmm_registers[index].hi);
+ }
+ for (size_t index = 0;
+ index < arraysize(expected.float_save.reserved_4);
+ ++index) {
+ EXPECT_EQ(expected.float_save.reserved_4[index],
+ observed->float_save.reserved_4[index]);
+ }
+ for (size_t index = 0; index < arraysize(expected.vector_register); ++index) {
+ EXPECT_EQ(expected.vector_register[index].lo,
+ observed->vector_register[index].lo);
+ EXPECT_EQ(expected.vector_register[index].hi,
+ observed->vector_register[index].hi);
+ }
+ EXPECT_EQ(expected.vector_control, observed->vector_control);
+ EXPECT_EQ(expected.debug_control, observed->debug_control);
+ EXPECT_EQ(expected.last_branch_to_rip, observed->last_branch_to_rip);
+ EXPECT_EQ(expected.last_branch_from_rip, observed->last_branch_from_rip);
+ EXPECT_EQ(expected.last_exception_to_rip, observed->last_exception_to_rip);
+ EXPECT_EQ(expected.last_exception_from_rip,
+ observed->last_exception_from_rip);
+}
+
+} // namespace test
+} // namespace crashpad
« no previous file with comments | « minidump/minidump_context_test_util.h ('k') | minidump/minidump_context_writer_test.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698