diff options
Diffstat (limited to 'tests/test_html.py')
-rw-r--r-- | tests/test_html.py | 74 |
1 files changed, 46 insertions, 28 deletions
diff --git a/tests/test_html.py b/tests/test_html.py index 75169bad..2de6b68e 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 & stuff!</title>", index) self.assertIn("<h1>Metrics & 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>«ταБЬℓσ»" " 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>«ταБЬℓσ»" " & stü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): |