(self)
| 6084 | class Oddballs(unittest.TestCase): |
| 6085 | |
| 6086 | def test_date_datetime_comparison(self): |
| 6087 | # bpo-1028306, bpo-5516 (gh-49766) |
| 6088 | # Trying to compare a date to a datetime should act like a mixed- |
| 6089 | # type comparison, despite that datetime is a subclass of date. |
| 6090 | as_date = date.today() |
| 6091 | as_datetime = datetime.combine(as_date, time()) |
| 6092 | date_sc = SubclassDate(as_date.year, as_date.month, as_date.day) |
| 6093 | datetime_sc = SubclassDatetime(as_date.year, as_date.month, |
| 6094 | as_date.day, 0, 0, 0) |
| 6095 | for d in (as_date, date_sc): |
| 6096 | for dt in (as_datetime, datetime_sc): |
| 6097 | for x, y in (d, dt), (dt, d): |
| 6098 | self.assertTrue(x != y) |
| 6099 | self.assertFalse(x == y) |
| 6100 | self.assertRaises(TypeError, lambda: x < y) |
| 6101 | self.assertRaises(TypeError, lambda: x <= y) |
| 6102 | self.assertRaises(TypeError, lambda: x > y) |
| 6103 | self.assertRaises(TypeError, lambda: x >= y) |
| 6104 | |
| 6105 | # And date should compare with other subclasses of date. If a |
| 6106 | # subclass wants to stop this, it's up to the subclass to do so. |
| 6107 | # Ditto for datetimes. |
| 6108 | for x, y in ((as_date, date_sc), |
| 6109 | (date_sc, as_date), |
| 6110 | (as_datetime, datetime_sc), |
| 6111 | (datetime_sc, as_datetime)): |
| 6112 | self.assertTrue(x == y) |
| 6113 | self.assertFalse(x != y) |
| 6114 | self.assertFalse(x < y) |
| 6115 | self.assertFalse(x > y) |
| 6116 | self.assertTrue(x <= y) |
| 6117 | self.assertTrue(x >= y) |
| 6118 | |
| 6119 | # Nevertheless, comparison should work if other object is an instance |
| 6120 | # of date or datetime class with overridden comparison operators. |
| 6121 | # So special methods should return NotImplemented, as if |
| 6122 | # date and datetime were independent classes. |
| 6123 | for x, y in (as_date, as_datetime), (as_datetime, as_date): |
| 6124 | self.assertEqual(x.__eq__(y), NotImplemented) |
| 6125 | self.assertEqual(x.__ne__(y), NotImplemented) |
| 6126 | self.assertEqual(x.__lt__(y), NotImplemented) |
| 6127 | self.assertEqual(x.__gt__(y), NotImplemented) |
| 6128 | self.assertEqual(x.__gt__(y), NotImplemented) |
| 6129 | self.assertEqual(x.__ge__(y), NotImplemented) |
| 6130 | |
| 6131 | def test_extra_attributes(self): |
| 6132 | with self.assertWarns(DeprecationWarning): |
nothing calls this directly
no test coverage detected