From 88c02676be5b37e8cd5eed128375d1bde3ff8107 Mon Sep 17 00:00:00 2001 From: Ned Batchelder Date: Tue, 26 Oct 2021 09:01:09 -0400 Subject: test: a true unit test for render_report --- coverage/report.py | 2 +- tests/test_report.py | 50 ++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 51 insertions(+), 1 deletion(-) create mode 100644 tests/test_report.py 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") -- cgit v1.2.1