[Python-checkins] python/nondist/sandbox/datetime datetime.py,1.148,1.149 test_datetime.py,1.100,1.101
tim_one@users.sourceforge.net
tim_one@users.sourceforge.net
Wed, 22 Jan 2003 12:22:27 -0800
Update of /cvsroot/python/python/nondist/sandbox/datetime
In directory sc8-pr-cvs1:/tmp/cvs-serv12630
Modified Files:
datetime.py test_datetime.py
Log Message:
Added new test for fromutc(), and repaired a type-checking hole this
uncovered.
Index: datetime.py
===================================================================
RCS file: /cvsroot/python/python/nondist/sandbox/datetime/datetime.py,v
retrieving revision 1.148
retrieving revision 1.149
diff -C2 -d -r1.148 -r1.149
*** datetime.py 21 Jan 2003 21:46:13 -0000 1.148
--- datetime.py 22 Jan 2003 20:22:23 -0000 1.149
***************
*** 881,884 ****
--- 881,886 ----
"datetime in UTC -> datetime in local time."
+ if not isinstance(dt, datetime):
+ raise TypeError("fromutc() requires a datetime argument")
if dt.tzinfo is not self:
raise ValueError("dt.tzinfo is not self")
***************
*** 893,897 ****
dtdst = dt.dst()
if dtdst is None:
! raise ValueError("fromutc() requires a non_none dst() result")
delta = dtoff - dtdst
if delta:
--- 895,899 ----
dtdst = dt.dst()
if dtdst is None:
! raise ValueError("fromutc() requires a non-None dst() result")
delta = dtoff - dtdst
if delta:
Index: test_datetime.py
===================================================================
RCS file: /cvsroot/python/python/nondist/sandbox/datetime/test_datetime.py,v
retrieving revision 1.100
retrieving revision 1.101
diff -C2 -d -r1.100 -r1.101
*** test_datetime.py 21 Jan 2003 21:19:46 -0000 1.100
--- test_datetime.py 22 Jan 2003 20:22:24 -0000 1.101
***************
*** 2799,2802 ****
--- 2799,2853 ----
self.assertRaises(ValueError, now.astimezone, notok())
+ def test_fromutc(self):
+ self.assertRaises(TypeError, Eastern.fromutc) # not enough args
+ now = datetime.utcnow().replace(tzinfo=utc_real)
+ self.assertRaises(ValueError, Eastern.fromutc, now) # wrong tzinfo
+ now = now.replace(tzinfo=Eastern) # insert correct tzinfo
+ enow = Eastern.fromutc(now) # doesn't blow up
+ self.assertEqual(enow.tzinfo, Eastern) # has right tzinfo member
+ self.assertRaises(TypeError, Eastern.fromutc, now, now) # too many args
+ self.assertRaises(TypeError, Eastern.fromutc, date.today()) # wrong type
+
+ # Always converts UTC to standard time.
+ class FauxUSTimeZone(USTimeZone):
+ def fromutc(self, dt):
+ return dt + self.stdoffset
+ FEastern = FauxUSTimeZone(-5, "FEastern", "FEST", "FEDT")
+
+ # UTC 4:MM 5:MM 6:MM 7:MM 8:MM 9:MM
+ # EST 23:MM 0:MM 1:MM 2:MM 3:MM 4:MM
+ # EDT 0:MM 1:MM 2:MM 3:MM 4:MM 5:MM
+
+ # Check around DST start.
+ start = self.dston.replace(hour=4, tzinfo=Eastern)
+ fstart = start.replace(tzinfo=FEastern)
+ for wall in 23, 0, 1, 3, 4, 5:
+ expected = start.replace(hour=wall)
+ if wall == 23:
+ expected -= timedelta(days=1)
+ got = Eastern.fromutc(start)
+ self.assertEqual(expected, got)
+
+ expected = fstart + FEastern.stdoffset
+ got = FEastern.fromutc(fstart)
+ self.assertEqual(expected, got)
+
+ start += HOUR
+ fstart += HOUR
+
+ # Check around DST end.
+ start = self.dstoff.replace(hour=4, tzinfo=Eastern)
+ fstart = start.replace(tzinfo=FEastern)
+ for wall in 0, 1, 1, 2, 3, 4:
+ expected = start.replace(hour=wall)
+ got = Eastern.fromutc(start)
+ self.assertEqual(expected, got)
+
+ expected = fstart + FEastern.stdoffset
+ got = FEastern.fromutc(fstart)
+ self.assertEqual(expected, got)
+
+ start += HOUR
+ fstart += HOUR
def test_suite():