diff options
-rw-r--r-- | coverage/report.py | 2 | ||||
-rw-r--r-- | tests/test_report.py | 50 |
2 files changed, 51 insertions, 1 deletions
diff --git a/coverage/report.py b/coverage/report.py index 3a5a03b7..82994ecf 100644 --- a/coverage/report.py +++ b/coverage/report.py @@ -10,7 +10,7 @@ from coverage.misc import ensure_dir_for_file, file_be_gone def render_report(output_path, reporter, morfs): - """Run a report generator, managing the output file. + """Run a one-file report generator, managing the output file. This function ensures the output file is ready to be written to. Then writes the report to it. Then closes the file and cleans up. diff --git a/tests/test_report.py b/tests/test_report.py new file mode 100644 index 00000000..1a9dd179 --- /dev/null +++ b/tests/test_report.py @@ -0,0 +1,50 @@ +# Licensed under the Apache License: http://www.apache.org/licenses/LICENSE-2.0 +# For details: https://github.com/nedbat/coveragepy/blob/master/NOTICE.txt + +"""Tests for helpers in report.py""" + +import pytest + +from coverage.exceptions import CoverageException +from coverage.report import render_report +from tests.coveragetest import CoverageTest + + +class FakeReporter: + """A fake implementation of a one-file reporter.""" + + def __init__(self, output="", error=False): + self.output = output + self.error = error + self.morfs = None + + def report(self, morfs, outfile): + """Fake.""" + self.morfs = morfs + outfile.write(self.output) + if self.error: + raise CoverageException("You asked for it!") + + +class RenderReportTest(CoverageTest): + """Tests of render_report.""" + + def test_stdout(self): + fake = FakeReporter(output="Hello!\n") + render_report("-", fake, [pytest, "coverage"]) + assert fake.morfs == [pytest, "coverage"] + assert self.stdout() == "Hello!\n" + + def test_file(self): + fake = FakeReporter(output="Gréètings!\n") + render_report("output.txt", fake, []) + assert self.stdout() == "" + with open("output.txt", "rb") as f: + assert f.read() == b"Gr\xc3\xa9\xc3\xa8tings!\n" + + def test_exception(self): + fake = FakeReporter(error=True) + with pytest.raises(CoverageException, match="You asked for it!"): + render_report("output.txt", fake, []) + assert self.stdout() == "" + self.assert_doesnt_exist("output.txt") |