dt2 = dt - delta
self.assertEqual(dt2, dt - days)
+class SubclassDate(date):
+ sub_var = 1
+
class TestDate(HarmlessMixedComparison):
# Tests here should pass for both dates and datetimes, except for a
# few tests that TestDateTime overrides.
self.assertEqual(dt1.toordinal(), dt2.toordinal())
self.assertEqual(dt2.newmeth(-7), dt1.year + dt1.month - 7)
+ def test_pickling_subclass_date(self):
+
+ args = 6, 7, 23
+ orig = SubclassDate(*args)
+ for pickler, unpickler, proto in pickle_choices:
+ green = pickler.dumps(orig, proto)
+ derived = unpickler.loads(green)
+ self.assertEqual(orig, derived)
+
def test_backdoor_resistance(self):
# For fast unpickling, the constructor accepts a pickle string.
# This is a low-overhead backdoor. A user can (by intent or
#############################################################################
# datetime tests
+class SubclassDatetime(datetime):
+ sub_var = 1
+
class TestDateTime(TestDate):
theclass = datetime
self.assertEqual(b.month, 2)
self.assertEqual(b.day, 7)
+ def test_pickling_subclass_datetime(self):
+ args = 6, 7, 23, 20, 59, 1, 64**2
+ orig = SubclassDatetime(*args)
+ for pickler, unpickler, proto in pickle_choices:
+ green = pickler.dumps(orig, proto)
+ derived = unpickler.loads(green)
+ self.assertEqual(orig, derived)
+
def test_more_compare(self):
# The test_compare() inherited from TestDate covers the error cases.
# We just want to test lexicographic ordering on the members datetime
self.assertEqual(dt2.newmeth(-7), dt1.year + dt1.month +
dt1.second - 7)
+class SubclassTime(time):
+ sub_var = 1
+
class TestTime(HarmlessMixedComparison):
theclass = time
derived = unpickler.loads(green)
self.assertEqual(orig, derived)
+ def test_pickling_subclass_time(self):
+ args = 20, 59, 16, 64**2
+ orig = SubclassTime(*args)
+ for pickler, unpickler, proto in pickle_choices:
+ green = pickler.dumps(orig, proto)
+ derived = unpickler.loads(green)
+ self.assertEqual(orig, derived)
+
def test_bool(self):
cls = self.theclass
self.failUnless(cls(1))
{
PyDateTime_Date *me;
- me = PyObject_New(PyDateTime_Date, type);
+ me = (PyDateTime_Date *) (type->tp_alloc(type, 0));
if (me != NULL) {
char *pdata = PyString_AS_STRING(state);
memcpy(me->data, pdata, _PyDateTime_DATE_DATASIZE);
}
}
aware = (char)(tzinfo != Py_None);
- me = (PyDateTime_Time *) time_alloc(&PyDateTime_TimeType,
- aware);
+ me = (PyDateTime_Time *) (type->tp_alloc(type, aware));
if (me != NULL) {
char *pdata = PyString_AS_STRING(state);
}
}
aware = (char)(tzinfo != Py_None);
- me = (PyDateTime_DateTime *) datetime_alloc(
- &PyDateTime_DateTimeType,
- aware);
+ me = (PyDateTime_DateTime *) (type->tp_alloc(type , aware));
if (me != NULL) {
char *pdata = PyString_AS_STRING(state);