from test
import test_support
class TimeTestCase(unittest
.TestCase
):
def test_data_attributes(self
):
def test_conversions(self
):
self
.assert_(time
.ctime(self
.t
)
== time
.asctime(time
.localtime(self
.t
)))
self
.assert_(long(time
.mktime(time
.localtime(self
.t
)))
for directive
in ('a', 'A', 'b', 'B', 'c', 'd', 'H', 'I',
'U', 'w', 'W', 'x', 'X', 'y', 'Y', 'Z', '%'):
format
= ' %' + directive
time
.strftime(format
, tt
)
self
.fail('conversion specifier: %r failed.' % format
)
def test_strftime_bounds_checking(self
):
# Make sure that strftime() checks the bounds of the various parts
self
.assertRaises(ValueError, time
.strftime
, '',
(1899, 1, 1, 0, 0, 0, 0, 1, -1))
self
.assertRaises(ValueError, time
.strftime
, '',
(-1, 1, 1, 0, 0, 0, 0, 1, -1))
self
.assertRaises(ValueError, time
.strftime
, '',
(100, 1, 1, 0, 0, 0, 0, 1, -1))
self
.assertRaises(ValueError, time
.strftime
, '',
(1900, 0, 1, 0, 0, 0, 0, 1, -1))
self
.assertRaises(ValueError, time
.strftime
, '',
(1900, 13, 1, 0, 0, 0, 0, 1, -1))
self
.assertRaises(ValueError, time
.strftime
, '',
(1900, 1, 0, 0, 0, 0, 0, 1, -1))
self
.assertRaises(ValueError, time
.strftime
, '',
(1900, 1, 32, 0, 0, 0, 0, 1, -1))
self
.assertRaises(ValueError, time
.strftime
, '',
(1900, 1, 1, -1, 0, 0, 0, 1, -1))
self
.assertRaises(ValueError, time
.strftime
, '',
(1900, 1, 1, 24, 0, 0, 0, 1, -1))
self
.assertRaises(ValueError, time
.strftime
, '',
(1900, 1, 1, 0, -1, 0, 0, 1, -1))
self
.assertRaises(ValueError, time
.strftime
, '',
(1900, 1, 1, 0, 60, 0, 0, 1, -1))
self
.assertRaises(ValueError, time
.strftime
, '',
(1900, 1, 1, 0, 0, -1, 0, 1, -1))
# C99 only requires allowing for one leap second, but Python's docs say
# allow two leap seconds (0..61)
self
.assertRaises(ValueError, time
.strftime
, '',
(1900, 1, 1, 0, 0, 62, 0, 1, -1))
# No check for upper-bound day of week;
# value forced into range by a ``% 7`` calculation.
# Start check at -2 since gettmarg() increments value before taking
self
.assertRaises(ValueError, time
.strftime
, '',
(1900, 1, 1, 0, 0, 0, -2, 1, -1))
self
.assertRaises(ValueError, time
.strftime
, '',
(1900, 1, 1, 0, 0, 0, 0, 0, -1))
self
.assertRaises(ValueError, time
.strftime
, '',
(1900, 1, 1, 0, 0, 0, 0, 367, -1))
# Check daylight savings flag
self
.assertRaises(ValueError, time
.strftime
, '',
(1900, 1, 1, 0, 0, 0, 0, 1, -2))
self
.assertRaises(ValueError, time
.strftime
, '',
(1900, 1, 1, 0, 0, 0, 0, 1, 2))
for directive
in ('a', 'A', 'b', 'B', 'c', 'd', 'H', 'I',
'U', 'w', 'W', 'x', 'X', 'y', 'Y', 'Z', '%'):
format
= ' %' + directive
time
.strptime(time
.strftime(format
, tt
), format
)
self
.fail('conversion specifier: %r failed.' % format
)
time
.asctime(time
.gmtime(self
.t
))
self
.assertRaises(TypeError, time
.asctime
, 0)
if not hasattr(time
, "tzset"):
return # Can't test this; don't want the test suite to fail
# Epoch time of midnight Dec 25th 2002. Never DST in northern
# These formats are correct for 2002, and possibly future years
# This format is the 'standard' as documented at:
# http://www.opengroup.org/onlinepubs/007904975/basedefs/xbd_chap08.html
# They are also documented in the tzset(3) man page on most Unix
eastern
= 'EST+05EDT,M4.1.0,M10.5.0'
victoria
= 'AEST-10AEDT-11,M10.5.0,M3.5.0'
org_TZ
= environ
.get('TZ',None)
# Make sure we can switch to UTC time and results are correct
# Note that unknown timezones default to UTC.
# Note that altzone is undefined in UTC, as there is no DST
time
.gmtime(xmas2002
), time
.localtime(xmas2002
)
self
.failUnlessEqual(time
.daylight
, 0)
self
.failUnlessEqual(time
.timezone
, 0)
self
.failUnlessEqual(time
.localtime(xmas2002
).tm_isdst
, 0)
# Make sure we can switch to US/Eastern
self
.failIfEqual(time
.gmtime(xmas2002
), time
.localtime(xmas2002
))
self
.failUnlessEqual(time
.tzname
, ('EST', 'EDT'))
self
.failUnlessEqual(len(time
.tzname
), 2)
self
.failUnlessEqual(time
.daylight
, 1)
self
.failUnlessEqual(time
.timezone
, 18000)
self
.failUnlessEqual(time
.altzone
, 14400)
self
.failUnlessEqual(time
.localtime(xmas2002
).tm_isdst
, 0)
self
.failUnlessEqual(len(time
.tzname
), 2)
# Now go to the southern hemisphere.
self
.failIfEqual(time
.gmtime(xmas2002
), time
.localtime(xmas2002
))
self
.failUnless(time
.tzname
[0] == 'AEST', str(time
.tzname
[0]))
self
.failUnless(time
.tzname
[1] == 'AEDT', str(time
.tzname
[1]))
self
.failUnlessEqual(len(time
.tzname
), 2)
self
.failUnlessEqual(time
.daylight
, 1)
self
.failUnlessEqual(time
.timezone
, -36000)
self
.failUnlessEqual(time
.altzone
, -39600)
self
.failUnlessEqual(time
.localtime(xmas2002
).tm_isdst
, 1)
# Repair TZ environment variable in case any other tests
elif environ
.has_key('TZ'):
def test_insane_timestamps(self
):
# It's possible that some platform maps time_t to double,
# and that this test will fail there. This test should
# exempt such platforms (provided they return reasonable
for func
in time
.ctime
, time
.gmtime
, time
.localtime
:
for unreasonable
in -1e200
, 1e200
:
self
.assertRaises(ValueError, func
, unreasonable
)
def test_ctime_without_arg(self
):
# Not sure how to check the values, since the clock could tick
# at any time. Make sure these are at least accepted and
def test_gmtime_without_arg(self
):
t0
= time
.mktime(time
.gmtime())
t1
= time
.mktime(time
.gmtime(None))
self
.assert_(0 <= (t1
-t0
) < 0.2)
def test_localtime_without_arg(self
):
t0
= time
.mktime(time
.localtime())
t1
= time
.mktime(time
.localtime(None))
self
.assert_(0 <= (t1
-t0
) < 0.2)
test_support
.run_unittest(TimeTestCase
)
if __name__
== "__main__":