[Python-checkins] python/dist/src/Lib/test test_datetime.py,1.42,1.43

tim_one@users.sourceforge.net tim_one@users.sourceforge.net
Fri, 16 May 2003 22:55:50 -0700


Update of /cvsroot/python/python/dist/src/Lib/test
In directory sc8-pr-cvs1:/tmp/cvs-serv27411/python/Lib/test

Modified Files:
	test_datetime.py 
Log Message:
datetime.datetime and datetime.time can now be subclassed in Python.  Brr.


Index: test_datetime.py
===================================================================
RCS file: /cvsroot/python/python/dist/src/Lib/test/test_datetime.py,v
retrieving revision 1.42
retrieving revision 1.43
diff -C2 -d -r1.42 -r1.43
*** test_datetime.py	17 May 2003 02:25:20 -0000	1.42
--- test_datetime.py	17 May 2003 05:55:17 -0000	1.43
***************
*** 480,514 ****
          self.assertEqual(dt2, dt - days)
  
-     def test_subclass_date(self):
- 
-         # XXX When datetime becomes usably subclassable, uncomment the
-         # XXX "self.theclass" lines and move this into TestDate.
-         # class C(self.theclass):
-         class C(date):
-             theAnswer = 42
- 
-             def __new__(cls, *args, **kws):
-                 temp = kws.copy()
-                 extra = temp.pop('extra')
-                 # result = self.theclass.__new__(cls, *args, **temp)
-                 result = date.__new__(cls, *args, **temp)
-                 result.extra = extra
-                 return result
- 
-             def newmeth(self, start):
-                 return start + self.year + self.month
- 
-         args = 2003, 4, 14
- 
-         # dt1 = self.theclass(*args)
-         dt1 = date(*args)
-         dt2 = C(*args, **{'extra': 7})
- 
-         self.assertEqual(dt2.__class__, C)
-         self.assertEqual(dt2.theAnswer, 42)
-         self.assertEqual(dt2.extra, 7)
-         self.assertEqual(dt1.toordinal(), dt2.toordinal())
-         self.assertEqual(dt2.newmeth(-7), dt1.year + dt1.month - 7)
- 
  class TestDate(HarmlessMixedComparison):
      # Tests here should pass for both dates and datetimes, except for a
--- 480,483 ----
***************
*** 1003,1006 ****
--- 972,1001 ----
          self.assertRaises(ValueError, base.replace, year=2001)
  
+     def test_subclass_date(self):
+ 
+         class C(self.theclass):
+             theAnswer = 42
+ 
+             def __new__(cls, *args, **kws):
+                 temp = kws.copy()
+                 extra = temp.pop('extra')
+                 result = self.theclass.__new__(cls, *args, **temp)
+                 result.extra = extra
+                 return result
+ 
+             def newmeth(self, start):
+                 return start + self.year + self.month
+ 
+         args = 2003, 4, 14
+ 
+         dt1 = self.theclass(*args)
+         dt2 = C(*args, **{'extra': 7})
+ 
+         self.assertEqual(dt2.__class__, C)
+         self.assertEqual(dt2.theAnswer, 42)
+         self.assertEqual(dt2.extra, 7)
+         self.assertEqual(dt1.toordinal(), dt2.toordinal())
+         self.assertEqual(dt2.newmeth(-7), dt1.year + dt1.month - 7)
+ 
  
  #############################################################################
***************
*** 1427,1430 ****
--- 1422,1452 ----
          self.assertRaises(ValueError, dt.astimezone, alsobog) # also naive
  
+     def test_subclass_datetime(self):
+ 
+         class C(self.theclass):
+             theAnswer = 42
+ 
+             def __new__(cls, *args, **kws):
+                 temp = kws.copy()
+                 extra = temp.pop('extra')
+                 result = self.theclass.__new__(cls, *args, **temp)
+                 result.extra = extra
+                 return result
+ 
+             def newmeth(self, start):
+                 return start + self.year + self.month + self.second
+ 
+         args = 2003, 4, 14, 12, 13, 41
+ 
+         dt1 = self.theclass(*args)
+         dt2 = C(*args, **{'extra': 7})
+ 
+         self.assertEqual(dt2.__class__, C)
+         self.assertEqual(dt2.theAnswer, 42)
+         self.assertEqual(dt2.extra, 7)
+         self.assertEqual(dt1.toordinal(), dt2.toordinal())
+         self.assertEqual(dt2.newmeth(-7), dt1.year + dt1.month +
+                                           dt1.second - 7)
+ 
  class TestTime(HarmlessMixedComparison):
  
***************
*** 1661,1664 ****
--- 1683,1712 ----
          self.assertRaises(ValueError, base.replace, microsecond=1000000)
  
+     def test_subclass_time(self):
+ 
+         class C(self.theclass):
+             theAnswer = 42
+ 
+             def __new__(cls, *args, **kws):
+                 temp = kws.copy()
+                 extra = temp.pop('extra')
+                 result = self.theclass.__new__(cls, *args, **temp)
+                 result.extra = extra
+                 return result
+ 
+             def newmeth(self, start):
+                 return start + self.hour + self.second
+ 
+         args = 4, 5, 6
+ 
+         dt1 = self.theclass(*args)
+         dt2 = C(*args, **{'extra': 7})
+ 
+         self.assertEqual(dt2.__class__, C)
+         self.assertEqual(dt2.theAnswer, 42)
+         self.assertEqual(dt2.extra, 7)
+         self.assertEqual(dt1.isoformat(), dt2.isoformat())
+         self.assertEqual(dt2.newmeth(-7), dt1.hour + dt1.second - 7)
+ 
  # A mixin for classes with a tzinfo= argument.  Subclasses must define
  # theclass as a class atribute, and theclass(1, 1, 1, tzinfo=whatever)
***************
*** 2043,2046 ****
--- 2091,2120 ----
          self.failUnless(t1 < t2)  # t1's offset counter still going up
  
+     def test_subclass_timetz(self):
+ 
+         class C(self.theclass):
+             theAnswer = 42
+ 
+             def __new__(cls, *args, **kws):
+                 temp = kws.copy()
+                 extra = temp.pop('extra')
+                 result = self.theclass.__new__(cls, *args, **temp)
+                 result.extra = extra
+                 return result
+ 
+             def newmeth(self, start):
+                 return start + self.hour + self.second
+ 
+         args = 4, 5, 6, 500, FixedOffset(-300, "EST", 1)
+ 
+         dt1 = self.theclass(*args)
+         dt2 = C(*args, **{'extra': 7})
+ 
+         self.assertEqual(dt2.__class__, C)
+         self.assertEqual(dt2.theAnswer, 42)
+         self.assertEqual(dt2.extra, 7)
+         self.assertEqual(dt1.utcoffset(), dt2.utcoffset())
+         self.assertEqual(dt2.newmeth(-7), dt1.hour + dt1.second - 7)
+ 
  
  # Testing datetime objects with a non-None tzinfo.
***************
*** 2625,2628 ****
--- 2699,2728 ----
          t2 = t2.replace(tzinfo=Varies())
          self.failUnless(t1 < t2)  # t1's offset counter still going up
+ 
+     def test_subclass_datetimetz(self):
+ 
+         class C(self.theclass):
+             theAnswer = 42
+ 
+             def __new__(cls, *args, **kws):
+                 temp = kws.copy()
+                 extra = temp.pop('extra')
+                 result = self.theclass.__new__(cls, *args, **temp)
+                 result.extra = extra
+                 return result
+ 
+             def newmeth(self, start):
+                 return start + self.hour + self.year
+ 
+         args = 2002, 12, 31, 4, 5, 6, 500, FixedOffset(-300, "EST", 1)
+ 
+         dt1 = self.theclass(*args)
+         dt2 = C(*args, **{'extra': 7})
+ 
+         self.assertEqual(dt2.__class__, C)
+         self.assertEqual(dt2.theAnswer, 42)
+         self.assertEqual(dt2.extra, 7)
+         self.assertEqual(dt1.utcoffset(), dt2.utcoffset())
+         self.assertEqual(dt2.newmeth(-7), dt1.hour + dt1.year - 7)
  
  # Pain to set up DST-aware tzinfo classes.