| OLD | NEW |
| (Empty) |
| 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 | |
| 3 # found in the LICENSE file. | |
| 4 | |
| 5 from common import constants | |
| 6 from common.pipeline_wrapper import pipeline_handlers | |
| 7 from crash.classifier import Occurrence | |
| 8 from crash.classifier import Classifier | |
| 9 from crash.classifier import DefaultRankFunction | |
| 10 from crash.stacktrace import StackFrame | |
| 11 from crash.stacktrace import CallStack | |
| 12 from crash.results import Result | |
| 13 from crash.test.crash_testcase import CrashTestCase | |
| 14 | |
| 15 | |
| 16 class DummyClassifier(Classifier): | |
| 17 | |
| 18 def GetClassFromStackFrame(self, frame): | |
| 19 if frame.dep_path == 'src/': | |
| 20 return 'class_1' | |
| 21 | |
| 22 return 'class_2' | |
| 23 | |
| 24 def GetClassFromResult(self, result): # pragma: no cover. | |
| 25 return 'class_3' | |
| 26 | |
| 27 def Classify(self, results, crash_stack): | |
| 28 class_list = self._Classify(results, crash_stack, 4, 1) | |
| 29 if class_list: | |
| 30 return class_list[0] | |
| 31 | |
| 32 return '' | |
| 33 | |
| 34 | |
| 35 class ClassifierTest(CrashTestCase): | |
| 36 | |
| 37 def testDefaultRankFunction(self): | |
| 38 self.assertEqual(DefaultRankFunction(Occurrence('c1', [0])), | |
| 39 (-1, 0)) | |
| 40 self.assertEqual(DefaultRankFunction(Occurrence('c1', [0, 1])), | |
| 41 (-float('inf'), 0)) | |
| 42 | |
| 43 def testClassifyCrashStack(self): | |
| 44 dummy_classifier = DummyClassifier() | |
| 45 | |
| 46 crash_stack = CallStack(0) | |
| 47 self.assertEqual(dummy_classifier.Classify([], crash_stack), '') | |
| 48 | |
| 49 crash_stack.extend( | |
| 50 [StackFrame(0, 'src/', 'a::c(p* &d)', 'f0.cc', 'src/f0.cc', [177]), | |
| 51 StackFrame(1, 'src/', 'a::d(a* c)', 'f1.cc', 'src/f1.cc', [227]), | |
| 52 StackFrame(2, 'src/dummy', 'a::e(int)', 'f2.cc', 'src/f2.cc', [87])]) | |
| 53 | |
| 54 self.assertEqual(dummy_classifier.Classify([], crash_stack), 'class_1') | |
| 55 | |
| 56 crash_stack = CallStack(0) | |
| 57 crash_stack.extend( | |
| 58 [StackFrame(0, 'src/', 'a::c(p* &d)', 'f0.cc', 'src/f0.cc', [177]), | |
| 59 StackFrame(1, 'src/dummy', 'a::d(a* c)', 'f1.cc', 'src/f1.cc', [227]), | |
| 60 StackFrame(2, 'src/dummy', 'a::e(int)', 'f2.cc', 'src/f2.cc', [87])]) | |
| 61 | |
| 62 self.assertEqual(dummy_classifier.Classify([], crash_stack), 'class_2') | |
| 63 | |
| 64 def testClassifyResults(self): | |
| 65 dummy_classifier = DummyClassifier() | |
| 66 | |
| 67 result = Result(self.GetDummyChangeLog(), 'src/') | |
| 68 result.file_to_stack_infos = { | |
| 69 'f0.cc': [(StackFrame( | |
| 70 0, 'src/', 'a::c(p* &d)', 'f0.cc', 'src/f0.cc', [177]), 0)] | |
| 71 } | |
| 72 | |
| 73 self.assertEqual(dummy_classifier.Classify([result], CallStack(0)), | |
| 74 'class_3') | |
| 75 | |
| 76 | |
| OLD | NEW |