diff options
author | Florent Xicluna <florent.xicluna@gmail.com> | 2011-11-01 13:11:34 (GMT) |
---|---|---|
committer | Florent Xicluna <florent.xicluna@gmail.com> | 2011-11-01 13:11:34 (GMT) |
commit | bceb528af5a4d0dda92ae48b0f34e6d55e29fa8d (patch) | |
tree | 00d8474c41e5e7f45eb76f58ef993b60eb5be95b /Lib/test/test_time.py | |
parent | 629a2c336e72e371f6719f9f5ebd2195ddd0c991 (diff) | |
download | cpython-bceb528af5a4d0dda92ae48b0f34e6d55e29fa8d.zip cpython-bceb528af5a4d0dda92ae48b0f34e6d55e29fa8d.tar.gz cpython-bceb528af5a4d0dda92ae48b0f34e6d55e29fa8d.tar.bz2 |
Test the year range supported by time.strftime() and time.asctime().
Diffstat (limited to 'Lib/test/test_time.py')
-rw-r--r-- | Lib/test/test_time.py | 96 |
1 files changed, 59 insertions, 37 deletions
diff --git a/Lib/test/test_time.py b/Lib/test/test_time.py index 9e2e68d..ce5b495 100644 --- a/Lib/test/test_time.py +++ b/Lib/test/test_time.py @@ -6,6 +6,12 @@ import sysconfig import sys import warnings +# Max year is only limited by the size of C int. +SIZEOF_INT = sysconfig.get_config_var('SIZEOF_INT') or 4 +TIME_MAXYEAR = (1 << 8 * SIZEOF_INT - 1) - 1 +TIME_MINYEAR = -TIME_MAXYEAR - 1 + + class TimeTestCase(unittest.TestCase): def setUp(self): @@ -91,7 +97,6 @@ class TimeTestCase(unittest.TestCase): self.assertRaises(ValueError, func, (1900, 1, 32, 0, 0, 0, 0, 1, -1)) # Check hour [0, 23] - func((1900, 1, 1, 0, 0, 0, 0, 1, -1)) func((1900, 1, 1, 23, 0, 0, 0, 1, -1)) self.assertRaises(ValueError, func, (1900, 1, 1, -1, 0, 0, 0, 1, -1)) @@ -165,11 +170,13 @@ class TimeTestCase(unittest.TestCase): time.asctime(time.gmtime(self.t)) # Max year is only limited by the size of C int. - sizeof_int = sysconfig.get_config_var('SIZEOF_INT') or 4 - bigyear = (1 << 8 * sizeof_int - 1) - 1 - asc = time.asctime((bigyear, 6, 1) + (0,)*6) - self.assertEqual(asc[-len(str(bigyear)):], str(bigyear)) - self.assertRaises(OverflowError, time.asctime, (bigyear + 1,) + (0,)*8) + for bigyear in TIME_MAXYEAR, TIME_MINYEAR: + asc = time.asctime((bigyear, 6, 1) + (0,) * 6) + self.assertEqual(asc[-len(str(bigyear)):], str(bigyear)) + self.assertRaises(OverflowError, time.asctime, + (TIME_MAXYEAR + 1,) + (0,) * 8) + self.assertRaises(OverflowError, time.asctime, + (TIME_MINYEAR - 1,) + (0,) * 8) self.assertRaises(TypeError, time.asctime, 0) self.assertRaises(TypeError, time.asctime, ()) self.assertRaises(TypeError, time.asctime, (0,) * 10) @@ -290,6 +297,24 @@ class TimeTestCase(unittest.TestCase): t1 = time.mktime(lt1) self.assertAlmostEqual(t1, t0, delta=0.2) + def test_mktime(self): + # Issue #1726687 + for t in (-2, -1, 0, 1): + try: + tt = time.localtime(t) + except (OverflowError, ValueError): + pass + else: + self.assertEqual(time.mktime(tt), t) + # It may not be possible to reliably make mktime return error + # on all platfom. This will make sure that no other exception + # than OverflowError is raised for an extreme value. + try: + time.mktime((-1, 1, 1, 0, 0, 0, -1, -1, -1)) + except OverflowError: + pass + + class TestLocale(unittest.TestCase): def setUp(self): self.oldloc = locale.setlocale(locale.LC_ALL) @@ -346,6 +371,28 @@ class _TestStrftimeYear: return time.strftime('%4Y', (y,) + (0,) * 8) self.test_year('%04d', func=year4d) + def skip_if_not_supported(y): + msg = "strftime() is limited to [1; 9999] with Visual Studio" + # Check that it doesn't crash for year > 9999 + try: + time.strftime('%Y', (y,) + (0,) * 8) + except ValueError: + cond = False + else: + cond = True + return unittest.skipUnless(cond, msg) + + @skip_if_not_supported(10000) + def test_large_year(self): + return super().test_large_year() + + @skip_if_not_supported(0) + def test_negative(self): + return super().test_negative() + + del skip_if_not_supported + + class _Test4dYear(_BaseYearTest): _format = '%d' @@ -360,44 +407,19 @@ class _Test4dYear(_BaseYearTest): self.assertEqual(func(9999), fmt % 9999) def test_large_year(self): - # Check that it doesn't crash for year > 9999 - try: - text = self.yearstr(12345) - except ValueError: - # strftime() is limited to [1; 9999] with Visual Studio - return - self.assertEqual(text, '12345') + self.assertEqual(self.yearstr(12345), '12345') self.assertEqual(self.yearstr(123456789), '123456789') + self.assertEqual(self.yearstr(TIME_MAXYEAR), str(TIME_MAXYEAR)) + self.assertRaises(OverflowError, self.yearstr, TIME_MAXYEAR + 1) def test_negative(self): - try: - text = self.yearstr(-1) - except ValueError: - # strftime() is limited to [1; 9999] with Visual Studio - return - self.assertEqual(text, self._format % -1) - + self.assertEqual(self.yearstr(-1), self._format % -1) self.assertEqual(self.yearstr(-1234), '-1234') self.assertEqual(self.yearstr(-123456), '-123456') + self.assertEqual(self.yearstr(TIME_MINYEAR), str(TIME_MINYEAR)) + self.assertRaises(OverflowError, self.yearstr, TIME_MINYEAR - 1) - def test_mktime(self): - # Issue #1726687 - for t in (-2, -1, 0, 1): - try: - tt = time.localtime(t) - except (OverflowError, ValueError): - pass - else: - self.assertEqual(time.mktime(tt), t) - # It may not be possible to reliably make mktime return error - # on all platfom. This will make sure that no other exception - # than OverflowError is raised for an extreme value. - try: - time.mktime((-1, 1, 1, 0, 0, 0, -1, -1, -1)) - except OverflowError: - pass - class TestAsctime4dyear(_TestAsctimeYear, _Test4dYear): pass |