diff options
author | Ned Batchelder <ned@nedbatchelder.com> | 2015-04-25 09:31:06 -0400 |
---|---|---|
committer | Ned Batchelder <ned@nedbatchelder.com> | 2015-04-25 09:31:06 -0400 |
commit | 9cb10daca96cd61bb4c7afdd4affb6c878e22245 (patch) | |
tree | 51f1bbc65c91c961763b4d2fc88480003bcb5b9b | |
parent | 087da3175829f5fdb0db0c372872b905304cda55 (diff) | |
download | python-coveragepy-git-9cb10daca96cd61bb4c7afdd4affb6c878e22245.tar.gz |
Refactor datetime recency testing into a tested test helper
-rw-r--r-- | tests/coveragetest.py | 9 | ||||
-rw-r--r-- | tests/test_html.py | 13 | ||||
-rw-r--r-- | tests/test_testing.py | 22 |
3 files changed, 36 insertions, 8 deletions
diff --git a/tests/coveragetest.py b/tests/coveragetest.py index 0e80f4a9..1623ef99 100644 --- a/tests/coveragetest.py +++ b/tests/coveragetest.py @@ -1,5 +1,6 @@ """Base test case class for coverage testing.""" +import datetime import glob import os import random @@ -278,6 +279,14 @@ class CoverageTest( if not s.startswith(prefix): self.fail(msg or ("%r doesn't start with %r" % (s, prefix))) + def assert_recent_datetime(self, dt, seconds=10, msg=None): + """Assert that `dt` marks a time at most `seconds` seconds ago.""" + age = datetime.datetime.now() - dt + # Python2.6 doesn't have total_seconds :( + self.assertEqual(age.days, 0, msg) + self.assertGreaterEqual(age.seconds, 0, msg) + self.assertLessEqual(age.seconds, seconds, msg) + def command_line(self, args, ret=OK, _covpkg=None): """Run `args` through the command line. diff --git a/tests/test_html.py b/tests/test_html.py index 6f0b294a..6f6f42e4 100644 --- a/tests/test_html.py +++ b/tests/test_html.py @@ -386,16 +386,13 @@ class HtmlTest(HtmlTestHelpers, CoverageTest): 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 - # Python2.6 doesn't have total_seconds :( - self.assertEqual(age.days, 0) # 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.seconds), - 120, - "Timestamp is wrong: {0}".format(timestamp) - ) + self.assert_recent_datetime( + timestamp, + seconds=120, + msg="Timestamp is wrong: {0}".format(timestamp), + ) class HtmlStaticFileTest(CoverageTest): diff --git a/tests/test_testing.py b/tests/test_testing.py index 75db7e50..08ff257d 100644 --- a/tests/test_testing.py +++ b/tests/test_testing.py @@ -1,6 +1,7 @@ # -*- coding: utf-8 -*- """Tests that our test infrastructure is really working!""" +import datetime import os import sys @@ -80,6 +81,27 @@ class CoverageTestTest(CoverageTest): with self.assertRaises(AssertionError): self.assert_starts_with("xyz\nabc", "a") + def test_assert_recent_datetime(self): + def now_delta(seconds): + """Make a datetime `seconds` seconds from now.""" + return datetime.datetime.now() + datetime.timedelta(seconds=seconds) + + # Default delta is 10 seconds. + self.assert_recent_datetime(now_delta(0)) + self.assert_recent_datetime(now_delta(-9)) + with self.assertRaises(AssertionError): + self.assert_recent_datetime(now_delta(-11)) + with self.assertRaises(AssertionError): + self.assert_recent_datetime(now_delta(1)) + + # Delta is settable. + self.assert_recent_datetime(now_delta(0), seconds=120) + self.assert_recent_datetime(now_delta(-100), seconds=120) + with self.assertRaises(AssertionError): + self.assert_recent_datetime(now_delta(-1000), seconds=120) + with self.assertRaises(AssertionError): + self.assert_recent_datetime(now_delta(1), seconds=120) + def test_sub_python_is_this_python(self): # Try it with a Python command. os.environ['COV_FOOBAR'] = 'XYZZY' |