Beefed up the timezone conversion test by adding a phony UTC zone that's

west of the US zones getting converted, and also by using Eastern "as if"
it were UTC (wrt Pacific), and vice versa.
This commit is contained in:
Tim Peters 2002-12-30 17:09:40 +00:00
parent 5c8fef903d
commit 1024bf8364

View file

@ -2571,16 +2571,17 @@ class USTimeZone(tzinfo):
Eastern = USTimeZone(-5, "Eastern", "EST", "EDT")
Pacific = USTimeZone(-8, "Pacific", "PST", "PDT")
UTC = FixedOffset(0, "UTC", 0)
utc_real = FixedOffset(0, "UTC", 0)
# For better test coverage, we want another flavor of UTC that's west of
# the Eastern and Pacific timezones.
utc_fake = FixedOffset(-12, "UTCfake", 0)
class TestTimezoneConversions(unittest.TestCase):
# The DST switch times for 2002, in local time.
dston = datetimetz(2002, 4, 7, 2)
dstoff = datetimetz(2002, 10, 27, 2)
def test_easy(self):
# Despite the name of this test, the endcases are excruciating.
for tz in Eastern, Pacific:
def convert_between_tz_and_utc(self, tz, utc):
dston = self.dston.replace(tzinfo=tz)
dstoff = self.dstoff.replace(tzinfo=tz)
for delta in (timedelta(weeks=13),
@ -2588,9 +2589,10 @@ class TestTimezoneConversions(unittest.TestCase):
HOUR,
timedelta(minutes=1),
timedelta(microseconds=1)):
for during in dston, dston + delta, dstoff - delta:
self.assertEqual(during.dst(), HOUR)
asutc = during.astimezone(UTC)
asutc = during.astimezone(utc)
there_and_back = asutc.astimezone(tz)
# Conversion to UTC and back isn't always an identity here,
@ -2609,8 +2611,8 @@ class TestTimezoneConversions(unittest.TestCase):
# time, there_and_back is not.
self.assertEqual(there_and_back.dst(), ZERO)
# They're the same times in UTC.
self.assertEqual(there_and_back.astimezone(UTC),
during.astimezone(UTC))
self.assertEqual(there_and_back.astimezone(utc),
during.astimezone(utc))
else:
# We're not in the redundant hour.
self.assertEqual(during, there_and_back)
@ -2644,9 +2646,21 @@ class TestTimezoneConversions(unittest.TestCase):
for outside in dston - delta, dstoff, dstoff + delta:
self.assertEqual(outside.dst(), ZERO)
there_and_back = outside.astimezone(UTC).astimezone(tz)
there_and_back = outside.astimezone(utc).astimezone(tz)
self.assertEqual(outside, there_and_back)
def test_easy(self):
# Despite the name of this test, the endcases are excruciating.
self.convert_between_tz_and_utc(Eastern, utc_real)
self.convert_between_tz_and_utc(Pacific, utc_real)
self.convert_between_tz_and_utc(Eastern, utc_fake)
self.convert_between_tz_and_utc(Pacific, utc_fake)
# The next is really dancing near the edge. It works because
# Pacific and Eastern are far enough apart that their "problem
# hours" don't overlap.
self.convert_between_tz_and_utc(Eastern, Pacific)
self.convert_between_tz_and_utc(Pacific, Eastern)
def test_suite():
allsuites = [unittest.makeSuite(klass, 'test')