def test_duplicate_error_no_traceback(self): errorlog = errors.ErrorLog() stack = test_utils.fake_stack(2) errorlog.error(stack, "error") # traceback errorlog.error(stack[-1:], "error") # no traceback # Keep the error with no traceback. unique_errors = errorlog.unique_sorted_errors() self.assertEqual(len(unique_errors), 1) self.assertIsNone(unique_errors[0]._traceback)
def test_truncated_traceback(self): stack = test_utils.fake_stack(errors.MAX_TRACEBACK_LENGTH + 2) error = errors.Error.with_stack(stack, errors.SEVERITY_ERROR, "") self.assertMultiLineEqual( error._traceback, textwrap.dedent(""" Called from (traceback): line 0, in function0 ... line 3, in function3""").lstrip())
def test_traceback(self): stack = test_utils.fake_stack(errors.MAX_TRACEBACK_LENGTH + 1) error = errors.Error.with_stack(stack, errors.SEVERITY_ERROR, "") self.assertMultiLineEqual( error._traceback, textwrap.dedent("""\ Called from (traceback): line 0, in function0 line 1, in function1 line 2, in function2"""))
def test_duplicate_error_shorter_traceback(self): errorlog = errors.ErrorLog() stack = test_utils.fake_stack(3) errorlog.error(stack, "error") # longer traceback errorlog.error(stack[-2:], "error") # shorter traceback # Keep the error with a shorter traceback. unique_errors = errorlog.unique_sorted_errors() self.assertEqual(len(unique_errors), 1) self.assertMultiLineEqual( unique_errors[0]._traceback, textwrap.dedent(""" Called from (traceback): line 1, in function1""").lstrip())
def test_error_without_stack(self): errorlog = errors.ErrorLog() stack = test_utils.fake_stack(1) errorlog.error(stack, "error_with_stack") errorlog.error([], "error_without_stack") unique_errors = errorlog.unique_sorted_errors() unique_errors = [(error.message, error.filename, error.lineno) for error in unique_errors] self.assertEqual( [("error_without_stack", None, 0), ("error_with_stack", "foo.py", 0)], unique_errors, )
def test_write_to_csv_with_traceback(self): errorlog = errors.ErrorLog() stack = test_utils.fake_stack(2) errorlog.error(stack, "", "some\ndetails") with file_utils.Tempdir() as d: filename = d.create_file("errors.csv") errorlog.print_to_csv_file(filename) with open(filename, "r") as fi: (_, _, _, _, actual_details), = list(csv.reader(fi, delimiter=",")) self.assertMultiLineEqual( actual_details, textwrap.dedent(""" some details Called from (traceback): line 0, in function0""").lstrip())