| 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 from common.dependency import Dependency | 5 from common.dependency import Dependency |
| 6 from crash.callstack import StackFrame, CallStack | 6 from crash.callstack import StackFrame, CallStack |
| 7 from crash.test.stacktrace_test_suite import StacktraceTestSuite | 7 from crash.test.stacktrace_test_suite import StacktraceTestSuite |
| 8 from crash.type_enums import CallStackFormatType | 8 from crash.type_enums import CallStackFormatType |
| 9 | 9 |
| 10 | 10 |
| 11 class CallStackTest(StacktraceTestSuite): | 11 class CallStackTest(StacktraceTestSuite): |
| 12 | 12 |
| 13 def testStackFrameToString(self): | 13 def testStackFrameToString(self): |
| 14 self.assertEqual( | 14 self.assertEqual( |
| 15 StackFrame(0, 'src/', '', 'func', 'f.cc', []).ToString(), | 15 StackFrame(0, 'src/', 'func', 'f.cc', 'src/f.cc', []).ToString(), |
| 16 '#0 in func @ f.cc') | 16 '#0 in func @ f.cc') |
| 17 self.assertEqual( | 17 self.assertEqual( |
| 18 StackFrame(0, 'src/', '', 'func', 'f.cc', [1]).ToString(), | 18 StackFrame(0, 'src/', 'func', 'f.cc', 'src/f.cc', [1]).ToString(), |
| 19 '#0 in func @ f.cc:1') | 19 '#0 in func @ f.cc:1') |
| 20 self.assertEqual( | 20 self.assertEqual( |
| 21 StackFrame(0, 'src/', '', 'func', 'f.cc', [1, 2, 3, 4]).ToString(), | 21 StackFrame(0, 'src/', 'func', 'f.cc', 'src/f.cc', [1, 2]).ToString(), |
| 22 '#0 in func @ f.cc:1:3') | 22 '#0 in func @ f.cc:1:1') |
| 23 | 23 |
| 24 def testFrameListInitCallStack(self): | 24 def testFrameListInitCallStack(self): |
| 25 stack = CallStack(0) | 25 stack = CallStack(0) |
| 26 stack.extend([StackFrame(0, 'src/', '', 'func', 'f.cc', [2])]) | 26 stack.extend([StackFrame(0, 'src/', '', 'func', 'f.cc', [2])]) |
| 27 | 27 |
| 28 copy_stack = CallStack(stack.priority, frame_list=stack) | 28 copy_stack = CallStack(stack.priority, frame_list=stack) |
| 29 self._VerifyTwoCallStacksEqual(copy_stack, stack) | 29 self._VerifyTwoCallStacksEqual(copy_stack, stack) |
| 30 | 30 |
| 31 def testParseLineForJavaCallstackFormat(self): | 31 def testParseLineForJavaCallstackFormat(self): |
| 32 stack = CallStack(0, CallStackFormatType.JAVA) | 32 stack = CallStack(0, CallStackFormatType.JAVA) |
| 33 | 33 |
| 34 stack.ParseLine('dummy line', {}) | 34 stack.ParseLine('dummy line', {}) |
| 35 self.assertEqual(stack, []) | 35 self.assertEqual(stack, []) |
| 36 | 36 |
| 37 deps = {'org/': Dependency('org/', 'https://repo', '1')} | 37 deps = {'org/': Dependency('org/', 'https://repo', '1')} |
| 38 stack.ParseLine(' at org.a.b(a.java:609)', deps) | 38 stack.ParseLine(' at org.a.b(a.java:609)', deps) |
| 39 self._VerifyTwoStackFramesEqual( | 39 self._VerifyTwoStackFramesEqual( |
| 40 stack[0], | 40 stack[0], |
| 41 StackFrame(0, 'org/', '', 'org.a.b', 'a.java', [609])) | 41 StackFrame(0, 'org/', 'org.a.b', 'a.java', 'org/a.java', [609])) |
| 42 | 42 |
| 43 def testParseLineForSyzyasanCallstackFormat(self): | 43 def testParseLineForSyzyasanCallstackFormat(self): |
| 44 stack = CallStack(0, CallStackFormatType.SYZYASAN) | 44 stack = CallStack(0, CallStackFormatType.SYZYASAN) |
| 45 | 45 |
| 46 stack.ParseLine('dummy line', {}) | 46 stack.ParseLine('dummy line', {}) |
| 47 self.assertEqual(stack, []) | 47 self.assertEqual(stack, []) |
| 48 | 48 |
| 49 deps = {'src/content/': Dependency('src/content/', 'https://repo', '1')} | 49 deps = {'src/content/': Dependency('src/content/', 'https://repo', '1')} |
| 50 stack.ParseLine('c::p::n [src/content/e.cc @ 165]', deps) | 50 stack.ParseLine('c::p::n [src/content/e.cc @ 165]', deps) |
| 51 self._VerifyTwoStackFramesEqual( | 51 self._VerifyTwoStackFramesEqual( |
| 52 stack[0], | 52 stack[0], |
| 53 StackFrame(0, 'src/content/', '', 'c::p::n', 'e.cc', [165])) | 53 StackFrame( |
| 54 0, 'src/content/', 'c::p::n', 'e.cc', 'src/content/e.cc', [165])) |
| 54 | 55 |
| 55 def testParseLineForDefaultCallstackFormat(self): | 56 def testParseLineForDefaultCallstackFormat(self): |
| 56 stack = CallStack(0, CallStackFormatType.DEFAULT) | 57 stack = CallStack(0, CallStackFormatType.DEFAULT) |
| 57 | 58 |
| 58 stack.ParseLine('dummy line', {}) | 59 stack.ParseLine('dummy line', {}) |
| 59 self.assertEqual(stack, []) | 60 self.assertEqual(stack, []) |
| 60 | 61 |
| 61 stack.ParseLine('#dummy line', {}) | 62 stack.ParseLine('#dummy line', {}) |
| 62 self.assertEqual(stack, []) | 63 self.assertEqual(stack, []) |
| 63 | 64 |
| 64 deps = {'tp/webrtc/': Dependency('tp/webrtc/', 'https://repo', '1')} | 65 deps = {'tp/webrtc/': Dependency('tp/webrtc/', 'https://repo', '1')} |
| 65 stack.ParseLine('#0 0x52617a in func0 tp/webrtc/a.c:38:3', deps) | 66 stack.ParseLine('#0 0x52617a in func0 tp/webrtc/a.c:38:3', deps) |
| 66 self._VerifyTwoStackFramesEqual( | 67 self._VerifyTwoStackFramesEqual( |
| 67 stack[0], | 68 stack[0], |
| 68 StackFrame(0, 'tp/webrtc/', '', 'func0', 'a.c', [38, 39, 40, 41])) | 69 StackFrame( |
| 70 0, 'tp/webrtc/', 'func0', 'a.c', 'tp/webrtc/a.c', [38, 39, 40, 41])) |
| OLD | NEW |