]> granicus.if.org Git - python/commitdiff
test_subclass_date(): Beefed this up, to check that new instance
authorTim Peters <tim.peters@gmail.com>
Sat, 17 May 2003 02:25:20 +0000 (02:25 +0000)
committerTim Peters <tim.peters@gmail.com>
Sat, 17 May 2003 02:25:20 +0000 (02:25 +0000)
attributes and methods work, that new arguments can be passed to the
constructor, and that inherited methods and attrs still work.  Added
XXX comments about what to do when datetime becomes usably subclassable
too (it's not yet).

Lib/test/test_datetime.py

index b86286bbff839e20e7b450720a208694e3ee40cd..51b5f4fce3baa56f9c708878c6ab16d84a681a63 100644 (file)
@@ -480,10 +480,35 @@ class TestDateOnly(unittest.TestCase):
         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
-        dt = C(2003, 4, 14)
-        self.assertEqual(dt.__class__, C)
+
+            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
@@ -977,6 +1002,7 @@ class TestDate(HarmlessMixedComparison):
         base = cls(2000, 2, 29)
         self.assertRaises(ValueError, base.replace, year=2001)
 
+
 #############################################################################
 # datetime tests