summaryrefslogtreecommitdiff
path: root/tests/test_html.py
diff options
context:
space:
mode:
Diffstat (limited to 'tests/test_html.py')
-rw-r--r--tests/test_html.py107
1 files changed, 66 insertions, 41 deletions
diff --git a/tests/test_html.py b/tests/test_html.py
index 64be3cb6..4fc4282c 100644
--- a/tests/test_html.py
+++ b/tests/test_html.py
@@ -12,6 +12,8 @@ import os.path
import re
import sys
+import mock
+
import coverage
from coverage.backward import unicode_class
from coverage import env
@@ -51,13 +53,6 @@ class HtmlTestHelpers(CoverageTest):
self.start_import_stop(cov, "main_file")
return cov.html_report(**(htmlargs or {}))
- def remove_html_files(self):
- """Remove the HTML files created as part of the HTML report."""
- os.remove("htmlcov/index.html")
- os.remove("htmlcov/main_file_py.html")
- os.remove("htmlcov/helper1_py.html")
- os.remove("htmlcov/helper2_py.html")
-
def get_html_report_content(self, module):
"""Return the content of the HTML report for `module`."""
filename = module.replace(".", "_").replace("/", "_") + ".html"
@@ -95,6 +90,18 @@ class HtmlTestHelpers(CoverageTest):
)
+class FileWriteTracker(object):
+ """A fake object to track how `open` is used to write files."""
+ def __init__(self, written):
+ self.written = written
+
+ def open(self, filename, mode="r"):
+ """Be just like `open`, but write written file names to `self.written`."""
+ if mode.startswith("w"):
+ self.written.add(filename.replace('\\', '/'))
+ return open(filename, mode)
+
+
class HtmlDeltaTest(HtmlTestHelpers, CoverageTest):
"""Tests of the HTML delta speed-ups."""
@@ -106,17 +113,25 @@ class HtmlDeltaTest(HtmlTestHelpers, CoverageTest):
self.real_coverage_version = coverage.__version__
self.addCleanup(setattr, coverage, "__version__", self.real_coverage_version)
+ self.files_written = None
+
def run_coverage(self, covargs=None, htmlargs=None):
- """For the delta tests, we always want source=. """
+ """Run coverage in-process for the delta tests.
+
+ For the delta tests, we always want `source=.` and we want to track
+ which files are written. `self.files_written` will be the file names
+ that were opened for writting in html.py.
+
+ """
covargs = covargs or {}
covargs['source'] = "."
- super(HtmlDeltaTest, self).run_coverage(covargs=covargs, htmlargs=htmlargs)
-
- def test_html_created(self):
- # Test basic HTML generation: files should be created.
- self.create_initial_files()
- self.run_coverage()
+ self.files_written = set()
+ mock_open = FileWriteTracker(self.files_written).open
+ with mock.patch("coverage.html.open", mock_open):
+ return super(HtmlDeltaTest, self).run_coverage(covargs=covargs, htmlargs=htmlargs)
+ def assert_htmlcov_files_exist(self):
+ """Assert that all the expected htmlcov files exist."""
self.assert_exists("htmlcov/index.html")
self.assert_exists("htmlcov/main_file_py.html")
self.assert_exists("htmlcov/helper1_py.html")
@@ -124,15 +139,19 @@ class HtmlDeltaTest(HtmlTestHelpers, CoverageTest):
self.assert_exists("htmlcov/style.css")
self.assert_exists("htmlcov/coverage_html.js")
+ def test_html_created(self):
+ # Test basic HTML generation: files should be created.
+ self.create_initial_files()
+ self.run_coverage()
+
def test_html_delta_from_source_change(self):
# HTML generation can create only the files that have changed.
# In this case, helper1 changes because its source is different.
self.create_initial_files()
self.run_coverage()
index1 = self.get_html_index_content()
- self.remove_html_files()
- # Now change a file and do it again
+ # Now change a file (but only in a comment) and do it again.
self.make_file("helper1.py", """\
def func1(x): # A nice function
if x % 2:
@@ -142,10 +161,13 @@ class HtmlDeltaTest(HtmlTestHelpers, CoverageTest):
self.run_coverage()
# Only the changed files should have been created.
- self.assert_exists("htmlcov/index.html")
- self.assert_exists("htmlcov/helper1_py.html")
- self.assert_doesnt_exist("htmlcov/main_file_py.html")
- self.assert_doesnt_exist("htmlcov/helper2_py.html")
+ self.assert_htmlcov_files_exist()
+ assert "htmlcov/index.html" in self.files_written
+ assert "htmlcov/helper1_py.html" in self.files_written
+ assert "htmlcov/helper2_py.html" not in self.files_written
+ assert "htmlcov/main_file_py.html" not in self.files_written
+
+ # Because the source change was only a comment, the index is the same.
index2 = self.get_html_index_content()
self.assertMultiLineEqual(index1, index2)
@@ -154,9 +176,9 @@ class HtmlDeltaTest(HtmlTestHelpers, CoverageTest):
# In this case, helper1 changes because its coverage is different.
self.create_initial_files()
self.run_coverage()
- self.remove_html_files()
- # Now change a file and do it again
+ # Now change a file and do it again. main_file is different, and calls
+ # helper1 differently.
self.make_file("main_file.py", """\
import helper1, helper2
helper1.func1(23)
@@ -166,10 +188,11 @@ class HtmlDeltaTest(HtmlTestHelpers, CoverageTest):
self.run_coverage()
# Only the changed files should have been created.
- self.assert_exists("htmlcov/index.html")
- self.assert_exists("htmlcov/helper1_py.html")
- self.assert_exists("htmlcov/main_file_py.html")
- self.assert_doesnt_exist("htmlcov/helper2_py.html")
+ self.assert_htmlcov_files_exist()
+ assert "htmlcov/index.html" in self.files_written
+ assert "htmlcov/helper1_py.html" in self.files_written
+ assert "htmlcov/helper2_py.html" not in self.files_written
+ assert "htmlcov/main_file_py.html" in self.files_written
def test_html_delta_from_settings_change(self):
# HTML generation can create only the files that have changed.
@@ -178,15 +201,16 @@ class HtmlDeltaTest(HtmlTestHelpers, CoverageTest):
self.create_initial_files()
self.run_coverage(covargs=dict(omit=[]))
index1 = self.get_html_index_content()
- self.remove_html_files()
self.run_coverage(covargs=dict(omit=['xyzzy*']))
# All the files have been reported again.
- self.assert_exists("htmlcov/index.html")
- self.assert_exists("htmlcov/helper1_py.html")
- self.assert_exists("htmlcov/main_file_py.html")
- self.assert_exists("htmlcov/helper2_py.html")
+ self.assert_htmlcov_files_exist()
+ assert "htmlcov/index.html" in self.files_written
+ assert "htmlcov/helper1_py.html" in self.files_written
+ assert "htmlcov/helper2_py.html" in self.files_written
+ assert "htmlcov/main_file_py.html" in self.files_written
+
index2 = self.get_html_index_content()
self.assertMultiLineEqual(index1, index2)
@@ -197,7 +221,6 @@ class HtmlDeltaTest(HtmlTestHelpers, CoverageTest):
self.create_initial_files()
self.run_coverage()
index1 = self.get_html_index_content()
- self.remove_html_files()
# "Upgrade" coverage.py!
coverage.__version__ = "XYZZY"
@@ -205,10 +228,12 @@ class HtmlDeltaTest(HtmlTestHelpers, CoverageTest):
self.run_coverage()
# All the files have been reported again.
- self.assert_exists("htmlcov/index.html")
- self.assert_exists("htmlcov/helper1_py.html")
- self.assert_exists("htmlcov/main_file_py.html")
- self.assert_exists("htmlcov/helper2_py.html")
+ self.assert_htmlcov_files_exist()
+ assert "htmlcov/index.html" in self.files_written
+ assert "htmlcov/helper1_py.html" in self.files_written
+ assert "htmlcov/helper2_py.html" in self.files_written
+ assert "htmlcov/main_file_py.html" in self.files_written
+
index2 = self.get_html_index_content()
fixed_index2 = index2.replace("XYZZY", self.real_coverage_version)
self.assertMultiLineEqual(index1, fixed_index2)
@@ -233,7 +258,6 @@ class HtmlDeltaTest(HtmlTestHelpers, CoverageTest):
def test_status_format_change(self):
self.create_initial_files()
self.run_coverage()
- self.remove_html_files()
with open("htmlcov/status.json") as status_json:
status_data = json.load(status_json)
@@ -246,10 +270,11 @@ class HtmlDeltaTest(HtmlTestHelpers, CoverageTest):
self.run_coverage()
# All the files have been reported again.
- self.assert_exists("htmlcov/index.html")
- self.assert_exists("htmlcov/helper1_py.html")
- self.assert_exists("htmlcov/main_file_py.html")
- self.assert_exists("htmlcov/helper2_py.html")
+ self.assert_htmlcov_files_exist()
+ assert "htmlcov/index.html" in self.files_written
+ assert "htmlcov/helper1_py.html" in self.files_written
+ assert "htmlcov/helper2_py.html" in self.files_written
+ assert "htmlcov/main_file_py.html" in self.files_written
class HtmlTitleTest(HtmlTestHelpers, CoverageTest):