| 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.callstack import StackFrame, CallStack | 8 from crash.callstack import StackFrame, CallStack |
| 9 from crash.fracas_parser import FracasParser | 9 from crash.fracas_parser import FracasParser |
| 10 from crash.stacktrace import Stacktrace | 10 from crash.stacktrace import Stacktrace |
| (...skipping 22 matching lines...) Expand all Loading... |
| 33 ) | 33 ) |
| 34 self._VerifyTwoStacktracesEqual(parser.Parse(stacktrace_string, deps), | 34 self._VerifyTwoStacktracesEqual(parser.Parse(stacktrace_string, deps), |
| 35 Stacktrace()) | 35 Stacktrace()) |
| 36 | 36 |
| 37 def testFracasParserParseLineOneCallstack(self): | 37 def testFracasParserParseLineOneCallstack(self): |
| 38 parser = FracasParser() | 38 parser = FracasParser() |
| 39 deps = {'src/': Dependency('src/', 'https://repo', '1')} | 39 deps = {'src/': Dependency('src/', 'https://repo', '1')} |
| 40 stacktrace_string = textwrap.dedent( | 40 stacktrace_string = textwrap.dedent( |
| 41 """ | 41 """ |
| 42 CRASHED [EXC @ 0x508] | 42 CRASHED [EXC @ 0x508] |
| 43 #0 0x7fee in a::b::c(p* &d) src/f0.cc:177 | 43 #0 0x7fee in a::c(p* &d) src/f0.cc:177 |
| 44 #1 0x4b6e in a::b::d(a* c) src/f1.cc:227:2 | 44 #1 0x4b6e in a::d(a* c) src/f1.cc:227 |
| 45 #2 0x7ff9 in a::b::e(int) src/f2.cc:87:3 | 45 #2 0x7ff9 in a::e(int) src/f2.cc:87:1 |
| 46 """ | 46 """ |
| 47 ) | 47 ) |
| 48 | 48 |
| 49 stacktrace = parser.Parse(stacktrace_string, deps) | 49 stacktrace = parser.Parse(stacktrace_string, deps) |
| 50 | 50 |
| 51 expected_callstack = CallStack(0) | 51 expected_callstack = CallStack(0) |
| 52 expected_callstack.extend( | 52 expected_callstack.extend( |
| 53 [StackFrame(0, 'src/', '', 'a::b::c(p* &d)', 'f0.cc', [177]), | 53 [StackFrame(0, 'src/', 'a::c(p* &d)', 'f0.cc', 'src/f0.cc', [177]), |
| 54 StackFrame(1, 'src/', '', 'a::b::d(a* c)', 'f1.cc', [227, 228, 229]), | 54 StackFrame(1, 'src/', 'a::d(a* c)', 'f1.cc', 'src/f1.cc', [227]), |
| 55 StackFrame(2, 'src/', '', 'a::b::e(int)', 'f2.cc', [87, 88, 89, 90])]) | 55 StackFrame(2, 'src/', 'a::e(int)', 'f2.cc', 'src/f2.cc', [87, 88])]) |
| 56 | 56 |
| 57 expected_stacktrace = Stacktrace() | 57 expected_stacktrace = Stacktrace() |
| 58 expected_stacktrace.append(expected_callstack) | 58 expected_stacktrace.append(expected_callstack) |
| 59 | 59 |
| 60 self._VerifyTwoStacktracesEqual(stacktrace, expected_stacktrace) | 60 self._VerifyTwoStacktracesEqual(stacktrace, expected_stacktrace) |
| 61 | 61 |
| 62 def testFracasParserParseLineMultipleCallstacks(self): | 62 def testFracasParserParseLineMultipleCallstacks(self): |
| 63 parser = FracasParser() | 63 parser = FracasParser() |
| 64 deps = {'src/': Dependency('src/', 'https://repo', '1')} | 64 deps = {'src/': Dependency('src/', 'https://repo', '1')} |
| 65 stacktrace_string = textwrap.dedent( | 65 stacktrace_string = textwrap.dedent( |
| 66 """ | 66 """ |
| 67 CRASHED [EXC @ 0x66] | 67 CRASHED [EXC @ 0x66] |
| 68 #0 0x7fee in a::b::c(p* &d) src/f0.cc:177 | 68 #0 0x7fee in a::b::c(p* &d) src/f0.cc:177 |
| 69 #1 0x4b6e in a::b::d(a* c) src/f1.cc:227:2 | 69 #1 0x4b6e in a::b::d(a* c) src/f1.cc:227 |
| 70 | 70 |
| 71 CRASHED [EXC @ 0x508] | 71 CRASHED [EXC @ 0x508] |
| 72 #0 0x8fee in e::f::g(p* &d) src/f.cc:20:2 | 72 #0 0x8fee in e::f::g(p* &d) src/f.cc:20:2 |
| 73 #1 0x1fae in h::i::j(p* &d) src/ff.cc:9:1 | 73 #1 0x1fae in h::i::j(p* &d) src/ff.cc:9:1 |
| 74 """ | 74 """ |
| 75 ) | 75 ) |
| 76 | 76 |
| 77 stacktrace = parser.Parse(stacktrace_string, deps) | 77 stacktrace = parser.Parse(stacktrace_string, deps) |
| 78 | 78 |
| 79 expected_callstack0 = CallStack(0) | 79 expected_callstack0 = CallStack(0) |
| 80 expected_callstack0.extend( | 80 expected_callstack0.extend( |
| 81 [StackFrame(0, 'src/', '', 'a::b::c(p* &d)', 'f0.cc', [177]), | 81 [StackFrame(0, 'src/', 'a::b::c(p* &d)', 'f0.cc', 'src/f0.cc', [177]), |
| 82 StackFrame(1, 'src/', '', 'a::b::d(a* c)', 'f1.cc', [227, 228, 229])]) | 82 StackFrame(1, 'src/', 'a::b::d(a* c)', 'f1.cc', 'src/f1.cc', [227])]) |
| 83 | 83 |
| 84 expected_callstack1 = CallStack(0) | 84 expected_callstack1 = CallStack(0) |
| 85 expected_callstack1.extend( | 85 expected_callstack1.extend( |
| 86 [StackFrame(0, 'src/', '', 'e::f::g(p* &d)', 'f.cc', [20, 21, 22]), | 86 [StackFrame( |
| 87 StackFrame(1, 'src/', '', 'h::i::j(p* &d)', 'ff.cc', [9, 10])]) | 87 0, 'src/', 'e::f::g(p* &d)', 'f.cc', 'src/f.cc', [20, 21, 22]), |
| 88 StackFrame( |
| 89 1, 'src/', 'h::i::j(p* &d)', 'ff.cc', 'src/ff.cc', [9, 10])]) |
| 88 | 90 |
| 89 expected_stacktrace = Stacktrace() | 91 expected_stacktrace = Stacktrace() |
| 90 expected_stacktrace.extend([expected_callstack0, expected_callstack1]) | 92 expected_stacktrace.extend([expected_callstack0, expected_callstack1]) |
| 91 | 93 |
| 92 self._VerifyTwoStacktracesEqual(stacktrace, expected_stacktrace) | 94 self._VerifyTwoStacktracesEqual(stacktrace, expected_stacktrace) |
| OLD | NEW |