diff --git a/src/_pytest/reports.py b/src/_pytest/reports.py index 8ab42478f..cd7a0b57f 100644 --- a/src/_pytest/reports.py +++ b/src/_pytest/reports.py @@ -1,3 +1,5 @@ +from pprint import pprint + import py import six @@ -258,8 +260,6 @@ class BaseReport(object): def _report_unserialization_failure(type_name, report_class, reportdict): - from pprint import pprint - url = "https://github.com/pytest-dev/pytest/issues" stream = py.io.TextIO() pprint("-" * 100, stream=stream) diff --git a/testing/test_reports.py b/testing/test_reports.py index 2f9162e10..879a9098d 100644 --- a/testing/test_reports.py +++ b/testing/test_reports.py @@ -1,3 +1,4 @@ +import pytest from _pytest.pathlib import Path from _pytest.reports import CollectReport from _pytest.reports import TestReport @@ -219,6 +220,28 @@ class TestReportSerialization(object): assert data["path1"] == str(testdir.tmpdir) assert data["path2"] == str(testdir.tmpdir) + def test_unserialization_failure(self, testdir): + """Check handling of failure during unserialization of report types.""" + testdir.makepyfile( + """ + def test_a(): + assert False + """ + ) + reprec = testdir.inline_run() + reports = reprec.getreports("pytest_runtest_logreport") + assert len(reports) == 3 + test_a_call = reports[1] + data = test_a_call._to_json() + entry = data["longrepr"]["reprtraceback"]["reprentries"][0] + assert entry["type"] == "ReprEntry" + + entry["type"] = "Unknown" + with pytest.raises( + RuntimeError, match="INTERNALERROR: Unknown entry type returned: Unknown" + ): + TestReport._from_json(data) + class TestHooks: """Test that the hooks are working correctly for plugins"""