def test_unique_errors(self): errorlog = errors.ErrorLog() current_frame = frame_state.SimpleFrame( test_utils.FakeOpcode("foo.py", 123, "foo")) backframe1 = frame_state.SimpleFrame( test_utils.FakeOpcode("foo.py", 1, "bar")) backframe2 = frame_state.SimpleFrame( test_utils.FakeOpcode("foo.py", 2, "baz")) errorlog.error([backframe1, current_frame], "error") errorlog.error([backframe2, current_frame], "error") # Keep both errors, since the tracebacks are different. unique_errors = errorlog.unique_sorted_errors() self.assertEqual(len(unique_errors), 2) self.assertSetEqual(set(errorlog), set(unique_errors))
def test_with_stack(self): # Opcode of None. e = errors.Error.with_stack(None, errors.SEVERITY_ERROR, _MESSAGE, keyword="here") self.assertEqual(errors.SEVERITY_ERROR, e._severity) self.assertEqual(_MESSAGE, e._message) self.assertEqual(e._name, _TEST_ERROR) self.assertEqual(None, e._filename) self.assertEqual(0, e._lineno) self.assertEqual(None, e._methodname) self.assertEqual("here", e.keyword) # Opcode of None. op = test_utils.FakeOpcode("foo.py", 123, "foo") e = errors.Error.with_stack(op.to_stack(), errors.SEVERITY_ERROR, _MESSAGE, keyword="here") self.assertEqual(errors.SEVERITY_ERROR, e._severity) self.assertEqual(_MESSAGE, e._message) self.assertEqual(e._name, _TEST_ERROR) self.assertEqual("foo.py", e._filename) self.assertEqual(123, e._lineno) self.assertEqual("foo", e._methodname) self.assertEqual("here", e.keyword)
def test_warn(self): errorlog = errors.ErrorLog() op = test_utils.FakeOpcode("foo.py", 123, "foo") errorlog.warn(op.to_stack(), "unknown attribute %s", "xyz") self.assertEqual(len(errorlog), 1) e = list(errorlog)[0] # iterate the log and save the first error. self.assertEqual(errors.SEVERITY_WARNING, e._severity) self.assertEqual("unknown attribute xyz", e._message) self.assertEqual(e._name, _TEST_ERROR) self.assertEqual("foo.py", e._filename)
def test_color_print_to_file(self): errorlog = errors.ErrorLog() op = test_utils.FakeOpcode("foo.py", 123, "foo") errorlog.error(op.to_stack(), "unknown attribute %s" % "xyz") self.assertEqual(len(errorlog), 1) string_io = io.StringIO() errorlog.print_to_file(string_io) self.assertIn("[test-error]", string_io.getvalue()) color_snippet = "xyz [\x1b[1m\x1b[31mtest-error\x1b[39m\x1b[0m]" self.assertNotIn(color_snippet, string_io.getvalue())
def test_color_print_to_stderr(self): errorlog = errors.ErrorLog() op = test_utils.FakeOpcode("foo.py", 123, "foo") errorlog.error(op.to_stack(), "unknown attribute %s" % "xyz") self.assertEqual(len(errorlog), 1) mock_stderr = io.StringIO() with mock.patch("sys.stderr", mock_stderr): errorlog.print_to_stderr() color_snippet = "xyz [\x1b[1m\x1b[31mtest-error\x1b[39m\x1b[0m]" self.assertIn(color_snippet, mock_stderr.getvalue())
def test_write_to_csv(self): errorlog = errors.ErrorLog() op = test_utils.FakeOpcode("foo.py", 123, "foo") message, details = "This is an error", "with\nsome\ndetails: \"1\", 2, 3" errorlog.error(op.to_stack(), message, details + "0") errorlog.error(op.to_stack(), message, details + "1") with file_utils.Tempdir() as d: filename = d.create_file("errors.csv") errorlog.print_to_csv_file(filename) with open(filename, "r") as fi: rows = list(csv.reader(fi, delimiter=",")) self.assertEqual(len(rows), 2) for i, row in enumerate(rows): filename, lineno, name, actual_message, actual_details = row self.assertEqual(filename, "foo.py") self.assertEqual(lineno, "123") self.assertEqual(name, _TEST_ERROR) self.assertEqual(actual_message, message) self.assertEqual(actual_details, details + str(i))
def test_empty_data(self): """Test that we can trace values without data.""" op = test_utils.FakeOpcode("foo.py", 123, "foo") self.trace_vm.trace_opcode(op, "x", 42) self.assertEqual(self.trace_vm.opcode_traces, [(op, "x", (None, ))])
def test_no_traceback_no_opcode(self): # Frame without opcode op = test_utils.FakeOpcode("foo.py", 123, "foo") stack = [frame_state.SimpleFrame(), frame_state.SimpleFrame(op)] error = errors.Error.with_stack(stack, errors.SEVERITY_ERROR, "") self.assertIsNone(error._traceback)
def test_no_traceback_stack_len_1(self): # Stack of length 1 op = test_utils.FakeOpcode("foo.py", 123, "foo") error = errors.Error.with_stack(op.to_stack(), errors.SEVERITY_ERROR, "") self.assertIsNone(error._traceback)