Update version number and release date.
[python/dscho.git] / Lib / test / test_time.py
blob4b9ed99a5f4f0d119907e019ec856ca9a4ba9356
1 from test import test_support
2 import time
3 import unittest
6 class TimeTestCase(unittest.TestCase):
8 def setUp(self):
9 self.t = time.time()
11 def test_data_attributes(self):
12 time.altzone
13 time.daylight
14 time.timezone
15 time.tzname
17 def test_clock(self):
18 time.clock()
20 def test_conversions(self):
21 self.assert_(time.ctime(self.t)
22 == time.asctime(time.localtime(self.t)))
23 self.assert_(long(time.mktime(time.localtime(self.t)))
24 == long(self.t))
26 def test_sleep(self):
27 time.sleep(1.2)
29 def test_strftime(self):
30 tt = time.gmtime(self.t)
31 for directive in ('a', 'A', 'b', 'B', 'c', 'd', 'H', 'I',
32 'j', 'm', 'M', 'p', 'S',
33 'U', 'w', 'W', 'x', 'X', 'y', 'Y', 'Z', '%'):
34 format = ' %' + directive
35 try:
36 time.strftime(format, tt)
37 except ValueError:
38 self.fail('conversion specifier: %r failed.' % format)
40 def test_strptime(self):
41 tt = time.gmtime(self.t)
42 for directive in ('a', 'A', 'b', 'B', 'c', 'd', 'H', 'I',
43 'j', 'm', 'M', 'p', 'S',
44 'U', 'w', 'W', 'x', 'X', 'y', 'Y', 'Z', '%'):
45 format = ' %' + directive
46 try:
47 time.strptime(time.strftime(format, tt), format)
48 except ValueError:
49 self.fail('conversion specifier: %r failed.' % format)
51 def test_asctime(self):
52 time.asctime(time.gmtime(self.t))
53 self.assertRaises(TypeError, time.asctime, 0)
55 def test_tzset(self):
56 if not hasattr(time, "tzset"):
57 return # Can't test this; don't want the test suite to fail
59 from os import environ
61 # Epoch time of midnight Dec 25th 2002. Never DST in northern
62 # hemisphere.
63 xmas2002 = 1040774400.0
65 # These formats are correct for 2002, and possibly future years
66 # This format is the 'standard' as documented at:
67 # http://www.opengroup.org/onlinepubs/007904975/basedefs/xbd_chap08.html
68 # They are also documented in the tzset(3) man page on most Unix
69 # systems.
70 eastern = 'EST+05EDT,M4.1.0,M10.5.0'
71 victoria = 'AEST-10AEDT-11,M10.5.0,M3.5.0'
72 utc='UTC+0'
74 org_TZ = environ.get('TZ',None)
75 try:
76 # Make sure we can switch to UTC time and results are correct
77 # Note that unknown timezones default to UTC.
78 # Note that altzone is undefined in UTC, as there is no DST
79 environ['TZ'] = eastern
80 time.tzset()
81 environ['TZ'] = utc
82 time.tzset()
83 self.failUnlessEqual(
84 time.gmtime(xmas2002), time.localtime(xmas2002)
86 self.failUnlessEqual(time.daylight, 0)
87 self.failUnlessEqual(time.timezone, 0)
88 self.failUnlessEqual(time.localtime(xmas2002).tm_isdst, 0)
90 # Make sure we can switch to US/Eastern
91 environ['TZ'] = eastern
92 time.tzset()
93 self.failIfEqual(time.gmtime(xmas2002), time.localtime(xmas2002))
94 self.failUnlessEqual(time.tzname, ('EST', 'EDT'))
95 self.failUnlessEqual(len(time.tzname), 2)
96 self.failUnlessEqual(time.daylight, 1)
97 self.failUnlessEqual(time.timezone, 18000)
98 self.failUnlessEqual(time.altzone, 14400)
99 self.failUnlessEqual(time.localtime(xmas2002).tm_isdst, 0)
100 self.failUnlessEqual(len(time.tzname), 2)
102 # Now go to the southern hemisphere.
103 environ['TZ'] = victoria
104 time.tzset()
105 self.failIfEqual(time.gmtime(xmas2002), time.localtime(xmas2002))
106 self.failUnless(time.tzname[0] == 'AEST', str(time.tzname[0]))
107 self.failUnless(time.tzname[1] == 'AEDT', str(time.tzname[1]))
108 self.failUnlessEqual(len(time.tzname), 2)
109 self.failUnlessEqual(time.daylight, 1)
110 self.failUnlessEqual(time.timezone, -36000)
111 self.failUnlessEqual(time.altzone, -39600)
112 self.failUnlessEqual(time.localtime(xmas2002).tm_isdst, 1)
114 finally:
115 # Repair TZ environment variable in case any other tests
116 # rely on it.
117 if org_TZ is not None:
118 environ['TZ'] = org_TZ
119 elif environ.has_key('TZ'):
120 del environ['TZ']
121 time.tzset()
124 def test_main():
125 test_support.run_unittest(TimeTestCase)
128 if __name__ == "__main__":
129 test_main()