aboutsummaryrefslogtreecommitdiff
path: root/src/processor/source_line_resolver_unittest.cc
diff options
context:
space:
mode:
authorbryner <bryner@4c0a9323-5329-0410-9bdc-e9ce6186880e>2006-08-25 21:14:45 +0000
committerbryner <bryner@4c0a9323-5329-0410-9bdc-e9ce6186880e>2006-08-25 21:14:45 +0000
commitcb91a2f879250f2ef5f74321b5d08807247d41a7 (patch)
tree6eebf88acb8342b6c27d9c29df78f92cbb035c4d /src/processor/source_line_resolver_unittest.cc
parentAdding a test html file (diff)
downloadbreakpad-cb91a2f879250f2ef5f74321b5d08807247d41a7.tar.xz
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
Diffstat (limited to 'src/processor/source_line_resolver_unittest.cc')
-rw-r--r--src/processor/source_line_resolver_unittest.cc86
1 files changed, 86 insertions, 0 deletions
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 <stdio.h>
+#include <string>
+#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;
+}