summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNed Batchelder <ned@nedbatchelder.com>2021-10-26 09:01:09 -0400
committerNed Batchelder <ned@nedbatchelder.com>2021-10-26 18:34:01 -0400
commit88c02676be5b37e8cd5eed128375d1bde3ff8107 (patch)
treeb3bc514cab004ee2c57f2ba01d5a39ed4fabf358
parent8e8fdb4308c56375a1463fa65de7e84303610522 (diff)
downloadpython-coveragepy-git-88c02676be5b37e8cd5eed128375d1bde3ff8107.tar.gz
test: a true unit test for render_report
-rw-r--r--coverage/report.py2
-rw-r--r--tests/test_report.py50
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")