From cb91a2f879250f2ef5f74321b5d08807247d41a7 Mon Sep 17 00:00:00 2001 From: bryner Date: Fri, 25 Aug 2006 21:14:45 +0000 Subject: Initial import, which includes the Windows client-side dump_syms tool, and part of the server-side dump processor. git-svn-id: http://google-breakpad.googlecode.com/svn/trunk@4 4c0a9323-5329-0410-9bdc-e9ce6186880e --- src/processor/source_line_resolver_unittest.cc | 86 ++++++++++++++++++++++++++ 1 file changed, 86 insertions(+) create mode 100644 src/processor/source_line_resolver_unittest.cc (limited to 'src/processor/source_line_resolver_unittest.cc') diff --git a/src/processor/source_line_resolver_unittest.cc b/src/processor/source_line_resolver_unittest.cc new file mode 100644 index 00000000..99f499df --- /dev/null +++ b/src/processor/source_line_resolver_unittest.cc @@ -0,0 +1,86 @@ +// Copyright (C) 2006 Google Inc. +// +// 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 +#include +#include "source_line_resolver.h" + +using STL_NAMESPACE::string; +using GOOGLE_NAMESPACE::SourceLineResolver; + +#define ASSERT_TRUE(cond) \ + if (!(cond)) { \ + fprintf(stderr, "FAILED: %s at %s:%d\n", #cond, __FILE__, __LINE__); \ + return false; \ + } + +#define ASSERT_FALSE(cond) ASSERT_TRUE(!(cond)) + +#define ASSERT_EQ(e1, e2) ASSERT_TRUE((e1) == (e2)) + +static bool VerifyEmpty(const SourceLineResolver::SourceLineInfo &info) { + ASSERT_TRUE(info.function_name.empty()); + ASSERT_TRUE(info.source_file.empty()); + ASSERT_EQ(info.source_line, 0); + return true; +} + +static bool RunTests() { + string testdata_dir = string(getenv("srcdir") ? getenv("srcdir") : ".") + + "/src/processor/testdata"; + + SourceLineResolver resolver; + ASSERT_TRUE(resolver.LoadModule("module1", testdata_dir + "/module1.out")); + ASSERT_TRUE(resolver.LoadModule("module2", testdata_dir + "/module2.out")); + + SourceLineResolver::SourceLineInfo info; + resolver.LookupAddress(0x1000, "module1", &info); + ASSERT_EQ(info.function_name, "Function1_1"); + ASSERT_EQ(info.source_file, "file1_1.cc"); + ASSERT_EQ(info.source_line, 44); + + info.Reset(); + ASSERT_TRUE(VerifyEmpty(info)); + + resolver.LookupAddress(0x800, "module1", &info); + ASSERT_TRUE(VerifyEmpty(info)); + + resolver.LookupAddress(0x1280, "module1", &info); + ASSERT_EQ(info.function_name, "Function1_3"); + ASSERT_TRUE(info.source_file.empty()); + ASSERT_EQ(info.source_line, 0); + + resolver.LookupAddress(0x1380, "module1", &info); + ASSERT_EQ(info.function_name, "Function1_4"); + ASSERT_TRUE(info.source_file.empty()); + ASSERT_EQ(info.source_line, 0); + + resolver.LookupAddress(0x2180, "module2", &info); + ASSERT_EQ(info.function_name, "Function2_2"); + ASSERT_EQ(info.source_file, "file2_2.cc"); + ASSERT_EQ(info.source_line, 21); + + ASSERT_FALSE(resolver.LoadModule("module3", + testdata_dir + "/module3_bad.out")); + ASSERT_FALSE(resolver.LoadModule("module4", + testdata_dir + "/invalid-filename")); + return true; +} + +int main(int argc, char **argv) { + if (!RunTests()) { + return 1; + } + return 0; +} -- cgit v1.2.1