| from test import test_support |
| import time |
| import unittest |
| |
| |
| class TimeTestCase(unittest.TestCase): |
| |
| def setUp(self): |
| self.t = time.time() |
| |
| def test_data_attributes(self): |
| time.altzone |
| time.daylight |
| time.timezone |
| time.tzname |
| |
| def test_clock(self): |
| time.clock() |
| |
| 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))) |
| == long(self.t)) |
| |
| def test_sleep(self): |
| time.sleep(1.2) |
| |
| def test_strftime(self): |
| tt = time.gmtime(self.t) |
| for directive in ('a', 'A', 'b', 'B', 'c', 'd', 'H', 'I', |
| 'j', 'm', 'M', 'p', 'S', |
| 'U', 'w', 'W', 'x', 'X', 'y', 'Y', 'Z', '%'): |
| format = ' %' + directive |
| try: |
| time.strftime(format, tt) |
| except ValueError: |
| self.fail('conversion specifier: %r failed.' % format) |
| |
| def test_strptime(self): |
| tt = time.gmtime(self.t) |
| for directive in ('a', 'A', 'b', 'B', 'c', 'd', 'H', 'I', |
| 'j', 'm', 'M', 'p', 'S', |
| 'U', 'w', 'W', 'x', 'X', 'y', 'Y', 'Z', '%'): |
| format = ' %' + directive |
| try: |
| time.strptime(time.strftime(format, tt), format) |
| except ValueError: |
| self.fail('conversion specifier: %r failed.' % format) |
| |
| def test_asctime(self): |
| time.asctime(time.gmtime(self.t)) |
| self.assertRaises(TypeError, time.asctime, 0) |
| |
| def test_tzset(self): |
| if not hasattr(time, "tzset"): |
| return # Can't test this; don't want the test suite to fail |
| |
| from os import environ |
| |
| # Epoch time of midnight Dec 25th 2002. Never DST in northern |
| # hemisphere. |
| xmas2002 = 1040774400.0 |
| |
| org_TZ = environ.get('TZ',None) |
| try: |
| |
| # Make sure we can switch to UTC time and results are correct |
| # Note that unknown timezones default to UTC. |
| for tz in ('UTC','GMT','Luna/Tycho'): |
| environ['TZ'] = 'US/Eastern' |
| time.tzset() |
| environ['TZ'] = tz |
| time.tzset() |
| self.failUnlessEqual( |
| time.gmtime(xmas2002),time.localtime(xmas2002) |
| ) |
| self.failUnlessEqual(time.timezone,time.altzone) |
| self.failUnlessEqual(time.daylight,0) |
| self.failUnlessEqual(time.timezone,0) |
| self.failUnlessEqual(time.altzone,0) |
| self.failUnlessEqual(time.localtime(xmas2002).tm_isdst,0) |
| |
| # Make sure we can switch to US/Eastern |
| environ['TZ'] = 'US/Eastern' |
| time.tzset() |
| 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. We want somewhere all OS's |
| # know about that has DST. |
| environ['TZ'] = 'Australia/Melbourne' |
| time.tzset() |
| self.failIfEqual(time.gmtime(xmas2002),time.localtime(xmas2002)) |
| self.failUnless(time.tzname[0] in ('EST','AEST')) |
| self.failUnless(time.tzname[1] in ('EST','EDT','AEDT')) |
| 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) |
| |
| # Get some times from a timezone that isn't wallclock timezone |
| del environ['TZ'] |
| time.tzset() |
| if time.timezone == 0: |
| environ['TZ'] = 'US/Eastern' |
| else: |
| environ['TZ'] = 'UTC' |
| time.tzset() |
| nonlocal = time.localtime(xmas2002) |
| |
| # Then the same time in wallclock timezone |
| del environ['TZ'] |
| time.tzset() |
| local = time.localtime(xmas2002) |
| |
| # And make sure they arn't the same |
| self.failIfEqual(local,nonlocal) |
| |
| # Do some basic sanity checking after wallclock time set |
| self.failUnlessEqual(len(time.tzname),2) |
| time.daylight |
| time.timezone |
| time.altzone |
| finally: |
| # Repair TZ environment variable in case any other tests |
| # rely on it. |
| if org_TZ is not None: |
| environ['TZ'] = org_TZ |
| elif environ.has_key('TZ'): |
| del environ['TZ'] |
| |
| |
| def test_main(): |
| test_support.run_unittest(TimeTestCase) |
| |
| |
| if __name__ == "__main__": |
| test_main() |