[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():