test_subclass_date(): Beefed this up, to check that new instance

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).
This commit is contained in:
Tim Peters 2003-05-17 02:25:20 +00:00
parent 1ba24b4fbb
commit eb1a496039
1 changed files with 28 additions and 2 deletions

View 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