| OLD | NEW |
| 1 # Copyright 2016 The Chromium Authors. All rights reserved. | 1 # Copyright 2016 The Chromium Authors. All rights reserved. |
| 2 # Use of this source code is governed by a BSD-style license that can be | 2 # Use of this source code is governed by a BSD-style license that can be |
| 3 # found in the LICENSE file. | 3 # found in the LICENSE file. |
| 4 | 4 |
| 5 import textwrap | 5 import textwrap |
| 6 | 6 |
| 7 from common.dependency import Dependency | 7 from common.dependency import Dependency |
| 8 from crash.chromecrash_parser import ChromeCrashParser | 8 from crash.chromecrash_parser import ChromeCrashParser |
| 9 from crash.stacktrace import StackFrame | 9 from crash.stacktrace import StackFrame |
| 10 from crash.stacktrace import CallStack | 10 from crash.stacktrace import CallStack |
| (...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 51 """ | 51 """ |
| 52 CRASHED [EXC @ 0x508] | 52 CRASHED [EXC @ 0x508] |
| 53 #0 0x7fee in a::c(p* &d) src/f0.cc:177 | 53 #0 0x7fee in a::c(p* &d) src/f0.cc:177 |
| 54 #1 0x4b6e in a::d(a* c) src/f1.cc:227 | 54 #1 0x4b6e in a::d(a* c) src/f1.cc:227 |
| 55 #2 0x7ff9 in a::e(int) src/f2.cc:87:1 | 55 #2 0x7ff9 in a::e(int) src/f2.cc:87:1 |
| 56 """ | 56 """ |
| 57 ) | 57 ) |
| 58 | 58 |
| 59 stacktrace = parser.Parse(stacktrace_string, deps) | 59 stacktrace = parser.Parse(stacktrace_string, deps) |
| 60 | 60 |
| 61 expected_callstack = CallStack(0) | 61 expected_stacktrace = Stacktrace([CallStack(0, frame_list=[ |
| 62 expected_callstack.extend( | 62 StackFrame(0, 'src/', 'a::c(p* &d)', 'f0.cc', 'src/f0.cc', [177]), |
| 63 [StackFrame(0, 'src/', 'a::c(p* &d)', 'f0.cc', 'src/f0.cc', [177]), | 63 StackFrame(1, 'src/', 'a::d(a* c)', 'f1.cc', 'src/f1.cc', [227]), |
| 64 StackFrame(1, 'src/', 'a::d(a* c)', 'f1.cc', 'src/f1.cc', [227]), | 64 StackFrame(2, 'src/', 'a::e(int)', 'f2.cc', 'src/f2.cc', [87, 88])])]) |
| 65 StackFrame(2, 'src/', 'a::e(int)', 'f2.cc', 'src/f2.cc', [87, 88])]) | |
| 66 | |
| 67 expected_stacktrace = Stacktrace() | |
| 68 expected_stacktrace.append(expected_callstack) | |
| 69 | 65 |
| 70 self._VerifyTwoStacktracesEqual(stacktrace, expected_stacktrace) | 66 self._VerifyTwoStacktracesEqual(stacktrace, expected_stacktrace) |
| 71 | 67 |
| 72 def testChromeCrashParserParseLineJavaCallstack(self): | 68 def testChromeCrashParserParseLineJavaCallstack(self): |
| 73 parser = ChromeCrashParser() | 69 parser = ChromeCrashParser() |
| 74 deps = {'src/': Dependency('src/', 'https://repo', '1')} | 70 deps = {'src/': Dependency('src/', 'https://repo', '1')} |
| 75 stacktrace_string = textwrap.dedent( | 71 stacktrace_string = textwrap.dedent( |
| 76 """ | 72 """ |
| 77 (JAVA) CRASHED [EXC @ 0x508] | 73 (JAVA) CRASHED [EXC @ 0x508] |
| 78 #0 0x7fee in a.f0.c f0.java:177 | 74 #0 0x7fee in a.f0.c f0.java:177 |
| 79 #1 0x4b6e in org.chromium.chrome.browser.a.f1.d f1.java:227 | 75 #1 0x4b6e in org.chromium.chrome.browser.a.f1.d f1.java:227 |
| 80 #2 0x7ff9 in a.f2.e f2.java:87:1 | 76 #2 0x7ff9 in a.f2.e f2.java:87:1 |
| 81 """ | 77 """ |
| 82 ) | 78 ) |
| 83 | 79 |
| 84 stacktrace = parser.Parse(stacktrace_string, deps) | 80 stacktrace = parser.Parse(stacktrace_string, deps) |
| 85 | 81 |
| 86 expected_callstack = CallStack(0, language_type=CallStackLanguageType.JAVA) | 82 expected_stacktrace = Stacktrace([CallStack(0, |
| 87 expected_callstack.extend( | 83 language_type=CallStackLanguageType.JAVA, |
| 88 [StackFrame(0, '', 'a.f0.c', 'a/f0.java', 'a/f0.java', [177]), | 84 frame_list=[ |
| 89 StackFrame( | 85 StackFrame(0, '', 'a.f0.c', 'a/f0.java', 'a/f0.java', [177]), |
| 90 1, 'src/', 'org.chromium.chrome.browser.a.f1.d', | 86 StackFrame( |
| 91 'chrome/android/java/src/org/chromium/chrome/browser/a/f1.java', | 87 1, 'src/', 'org.chromium.chrome.browser.a.f1.d', |
| 92 'src/chrome/android/java/src/org/chromium/chrome/' | 88 'chrome/android/java/src/org/chromium/chrome/browser/a/f1.java', |
| 93 'browser/a/f1.java', | 89 'src/chrome/android/java/src/org/chromium/chrome/' |
| 94 [227]), | 90 'browser/a/f1.java', |
| 95 StackFrame(2, '', 'a.f2.e', 'a/f2.java', 'a/f2.java', [87, 88])]) | 91 [227]), |
| 96 | 92 StackFrame(2, '', 'a.f2.e', 'a/f2.java', 'a/f2.java', [87, 88])])]) |
| 97 expected_stacktrace = Stacktrace() | |
| 98 expected_stacktrace.append(expected_callstack) | |
| 99 | 93 |
| 100 self._VerifyTwoStacktracesEqual(stacktrace, expected_stacktrace) | 94 self._VerifyTwoStacktracesEqual(stacktrace, expected_stacktrace) |
| 101 | 95 |
| 102 def testChromeCrashParserParseLineMultipleCallstacks(self): | 96 def testChromeCrashParserParseLineMultipleCallstacks(self): |
| 103 parser = ChromeCrashParser() | 97 parser = ChromeCrashParser() |
| 104 deps = {'src/': Dependency('src/', 'https://repo', '1')} | 98 deps = {'src/': Dependency('src/', 'https://repo', '1')} |
| 105 stacktrace_string = textwrap.dedent( | 99 stacktrace_string = textwrap.dedent( |
| 106 """ | 100 """ |
| 107 CRASHED [EXC @ 0x66] | 101 CRASHED [EXC @ 0x66] |
| 108 #0 0x7fee in a::b::c(p* &d) src/f0.cc:177 | 102 #0 0x7fee in a::b::c(p* &d) src/f0.cc:177 |
| 109 #1 0x4b6e in a::b::d(a* c) src/f1.cc:227 | 103 #1 0x4b6e in a::b::d(a* c) src/f1.cc:227 |
| 110 | 104 |
| 111 CRASHED [EXC @ 0x508] | 105 CRASHED [EXC @ 0x508] |
| 112 #0 0x8fee in e::f::g(p* &d) src/f.cc:20:2 | 106 #0 0x8fee in e::f::g(p* &d) src/f.cc:20:2 |
| 113 #1 0x1fae in h::i::j(p* &d) src/ff.cc:9:1 | 107 #1 0x1fae in h::i::j(p* &d) src/ff.cc:9:1 |
| 114 """ | 108 """ |
| 115 ) | 109 ) |
| 116 | 110 |
| 117 stacktrace = parser.Parse(stacktrace_string, deps) | 111 stacktrace = parser.Parse(stacktrace_string, deps) |
| 118 | 112 |
| 119 expected_callstack0 = CallStack(0) | 113 expected_callstack0 = CallStack(0, frame_list=[ |
| 120 expected_callstack0.extend( | 114 StackFrame(0, 'src/', 'a::b::c(p* &d)', 'f0.cc', 'src/f0.cc', [177]), |
| 121 [StackFrame(0, 'src/', 'a::b::c(p* &d)', 'f0.cc', 'src/f0.cc', [177]), | 115 StackFrame(1, 'src/', 'a::b::d(a* c)', 'f1.cc', 'src/f1.cc', [227])]) |
| 122 StackFrame(1, 'src/', 'a::b::d(a* c)', 'f1.cc', 'src/f1.cc', [227])]) | |
| 123 | 116 |
| 124 expected_callstack1 = CallStack(0) | 117 expected_callstack1 = CallStack(0, frame_list=[ |
| 125 expected_callstack1.extend( | 118 StackFrame( |
| 126 [StackFrame( | |
| 127 0, 'src/', 'e::f::g(p* &d)', 'f.cc', 'src/f.cc', [20, 21, 22]), | 119 0, 'src/', 'e::f::g(p* &d)', 'f.cc', 'src/f.cc', [20, 21, 22]), |
| 128 StackFrame( | 120 StackFrame( |
| 129 1, 'src/', 'h::i::j(p* &d)', 'ff.cc', 'src/ff.cc', [9, 10])]) | 121 1, 'src/', 'h::i::j(p* &d)', 'ff.cc', 'src/ff.cc', [9, 10])]) |
| 130 | 122 |
| 131 expected_stacktrace = Stacktrace() | 123 expected_stacktrace = Stacktrace([expected_callstack0, expected_callstack1]) |
| 132 expected_stacktrace.extend([expected_callstack0, expected_callstack1]) | |
| 133 | 124 |
| 134 self._VerifyTwoStacktracesEqual(stacktrace, expected_stacktrace) | 125 self._VerifyTwoStacktracesEqual(stacktrace, expected_stacktrace) |
| OLD | NEW |