summaryrefslogtreecommitdiff
path: root/tests/test_html.py
diff options
context:
space:
mode:
authorNed Batchelder <ned@nedbatchelder.com>2015-04-22 07:22:52 -0400
committerNed Batchelder <ned@nedbatchelder.com>2015-04-22 07:22:52 -0400
commitee57777c1d8d3923d19b5c2c41947e74793c563a (patch)
tree40852ebacbaddf50f7d827d5821bc010f5f4e3fa /tests/test_html.py
parent2a7a4f2161d26eeb898f3deec3f7ce21b0f2f957 (diff)
downloadpython-coveragepy-ee57777c1d8d3923d19b5c2c41947e74793c563a.tar.gz
Make HTML tests impervious to clock issues arising from timestamps
Diffstat (limited to 'tests/test_html.py')
-rw-r--r--tests/test_html.py74
1 files changed, 46 insertions, 28 deletions
diff --git a/tests/test_html.py b/tests/test_html.py
index 75169ba..2de6b68 100644
--- a/tests/test_html.py
+++ b/tests/test_html.py
@@ -54,6 +54,23 @@ class HtmlTestHelpers(CoverageTest):
with open(filename) as f:
return f.read()
+ def get_html_index_content(self, scrub_time_stamp=True):
+ """Return the content of index.html.
+
+ If `scrub_time_stamp` is true, then replace the timestamp with a
+ placeholder so that clocks don't matter.
+
+ """
+ with open("htmlcov/index.html") as f:
+ index = f.read()
+ if scrub_time_stamp:
+ index = re.sub(
+ r"created at \d{4}-\d{2}-\d{2} \d{2}:\d{2}",
+ r"created at YYYY-MM-DD HH:MM",
+ index,
+ )
+ return index
+
class HtmlDeltaTest(HtmlTestHelpers, CoverageTest):
"""Tests of the HTML delta speed-ups."""
@@ -87,8 +104,7 @@ class HtmlDeltaTest(HtmlTestHelpers, CoverageTest):
# In this case, helper1 changes because its source is different.
self.create_initial_files()
self.run_coverage()
- with open("htmlcov/index.html") as f:
- index1 = f.read()
+ index1 = self.get_html_index_content()
self.remove_html_files()
# Now change a file and do it again
@@ -105,8 +121,7 @@ class HtmlDeltaTest(HtmlTestHelpers, CoverageTest):
self.assert_exists("htmlcov/helper1_py.html")
self.assert_doesnt_exist("htmlcov/main_file_py.html")
self.assert_doesnt_exist("htmlcov/helper2_py.html")
- with open("htmlcov/index.html") as f:
- index2 = f.read()
+ index2 = self.get_html_index_content()
self.assertMultiLineEqual(index1, index2)
def test_html_delta_from_coverage_change(self):
@@ -137,8 +152,7 @@ class HtmlDeltaTest(HtmlTestHelpers, CoverageTest):
# changed.
self.create_initial_files()
self.run_coverage(covargs=dict(omit=[]))
- with open("htmlcov/index.html") as f:
- index1 = f.read()
+ index1 = self.get_html_index_content()
self.remove_html_files()
self.run_coverage(covargs=dict(omit=['xyzzy*']))
@@ -148,8 +162,7 @@ class HtmlDeltaTest(HtmlTestHelpers, CoverageTest):
self.assert_exists("htmlcov/helper1_py.html")
self.assert_exists("htmlcov/main_file_py.html")
self.assert_exists("htmlcov/helper2_py.html")
- with open("htmlcov/index.html") as f:
- index2 = f.read()
+ index2 = self.get_html_index_content()
self.assertMultiLineEqual(index1, index2)
def test_html_delta_from_coverage_version_change(self):
@@ -158,8 +171,7 @@ class HtmlDeltaTest(HtmlTestHelpers, CoverageTest):
# changed.
self.create_initial_files()
self.run_coverage()
- with open("htmlcov/index.html") as f:
- index1 = f.read()
+ index1 = self.get_html_index_content()
self.remove_html_files()
# "Upgrade" coverage.py!
@@ -172,8 +184,7 @@ class HtmlDeltaTest(HtmlTestHelpers, CoverageTest):
self.assert_exists("htmlcov/helper1_py.html")
self.assert_exists("htmlcov/main_file_py.html")
self.assert_exists("htmlcov/helper2_py.html")
- with open("htmlcov/index.html") as f:
- index2 = f.read()
+ index2 = self.get_html_index_content()
fixed_index2 = index2.replace("XYZZY", self.real_coverage_version)
self.assertMultiLineEqual(index1, fixed_index2)
@@ -184,8 +195,7 @@ class HtmlTitleTest(HtmlTestHelpers, CoverageTest):
def test_default_title(self):
self.create_initial_files()
self.run_coverage()
- with open("htmlcov/index.html") as f:
- index = f.read()
+ index = self.get_html_index_content()
self.assertIn("<title>Coverage report</title>", index)
self.assertIn("<h1>Coverage report:", index)
@@ -193,8 +203,7 @@ class HtmlTitleTest(HtmlTestHelpers, CoverageTest):
self.create_initial_files()
self.make_file(".coveragerc", "[html]\ntitle = Metrics & stuff!\n")
self.run_coverage()
- with open("htmlcov/index.html") as f:
- index = f.read()
+ index = self.get_html_index_content()
self.assertIn("<title>Metrics &amp; stuff!</title>", index)
self.assertIn("<h1>Metrics &amp; stuff!:", index)
@@ -204,8 +213,7 @@ class HtmlTitleTest(HtmlTestHelpers, CoverageTest):
"[html]\ntitle = «ταБЬℓσ» numbers"
)
self.run_coverage()
- with open("htmlcov/index.html") as f:
- index = f.read()
+ index = self.get_html_index_content()
self.assertIn(
"<title>&#171;&#964;&#945;&#1041;&#1068;&#8467;&#963;&#187;"
" numbers", index
@@ -219,8 +227,7 @@ class HtmlTitleTest(HtmlTestHelpers, CoverageTest):
self.create_initial_files()
self.make_file(".coveragerc", "[html]\ntitle = Good title\n")
self.run_coverage(htmlargs=dict(title="«ταБЬℓσ» & stüff!"))
- with open("htmlcov/index.html") as f:
- index = f.read()
+ index = self.get_html_index_content()
self.assertIn(
"<title>&#171;&#964;&#945;&#1041;&#1068;&#8467;&#963;&#187;"
" &amp; st&#252;ff!</title>", index
@@ -364,18 +371,29 @@ class HtmlTest(HtmlTestHelpers, CoverageTest):
self.assert_exists("htmlcov/afile.html")
self.assert_exists("htmlcov/afile_py.html")
- def test_has_date_stamp_in_index(self):
+ def test_has_date_stamp_in_files(self):
self.create_initial_files()
self.run_coverage()
- # Note: in theory this test could fail if the HTML files are created
- # at 1:23:59.999 and this timestamp is grabbed at 1:24:00.000.
- footer = "created at {time_stamp}".format(
- time_stamp=datetime.datetime.now().strftime('%Y-%m-%d %H:%M')
- )
+
with open("htmlcov/index.html") as f:
- self.assertIn(footer, f.read())
+ self.assert_correct_timestamp(f.read())
with open("htmlcov/main_file_py.html") as f:
- self.assertIn(footer, f.read())
+ self.assert_correct_timestamp(f.read())
+
+ def assert_correct_timestamp(self, html):
+ """Extract the timestamp from `html`, and assert it is recent."""
+ timestamp_pat = r"created at (\d{4})-(\d{2})-(\d{2}) (\d{2}):(\d{2})"
+ m = re.search(timestamp_pat, html)
+ self.assertTrue(m, "Didn't find a timestamp!")
+ timestamp = datetime.datetime(*map(int, m.groups()))
+ age = datetime.datetime.now() - timestamp
+ # The timestamp only records the minute, so the delta could be from
+ # 12:00 to 12:01:59, or two minutes.
+ self.assertLessEqual(
+ abs(age.total_seconds()),
+ 120,
+ "Timestamp is wrong: {}".format(timestamp)
+ )
class HtmlStaticFileTest(CoverageTest):