(self)
| 5897 | class Oddballs(unittest.TestCase): |
| 5898 | |
| 5899 | def test_date_datetime_comparison(self): |
| 5900 | # bpo-1028306, bpo-5516 (gh-49766) |
| 5901 | # Trying to compare a date to a datetime should act like a mixed- |
| 5902 | # type comparison, despite that datetime is a subclass of date. |
| 5903 | as_date = date.today() |
| 5904 | as_datetime = datetime.combine(as_date, time()) |
| 5905 | date_sc = SubclassDate(as_date.year, as_date.month, as_date.day) |
| 5906 | datetime_sc = SubclassDatetime(as_date.year, as_date.month, |
| 5907 | as_date.day, 0, 0, 0) |
| 5908 | for d in (as_date, date_sc): |
| 5909 | for dt in (as_datetime, datetime_sc): |
| 5910 | for x, y in (d, dt), (dt, d): |
| 5911 | self.assertTrue(x != y) |
| 5912 | self.assertFalse(x == y) |
| 5913 | self.assertRaises(TypeError, lambda: x < y) |
| 5914 | self.assertRaises(TypeError, lambda: x <= y) |
| 5915 | self.assertRaises(TypeError, lambda: x > y) |
| 5916 | self.assertRaises(TypeError, lambda: x >= y) |
| 5917 | |
| 5918 | # And date should compare with other subclasses of date. If a |
| 5919 | # subclass wants to stop this, it's up to the subclass to do so. |
| 5920 | # Ditto for datetimes. |
| 5921 | for x, y in ((as_date, date_sc), |
| 5922 | (date_sc, as_date), |
| 5923 | (as_datetime, datetime_sc), |
| 5924 | (datetime_sc, as_datetime)): |
| 5925 | self.assertTrue(x == y) |
| 5926 | self.assertFalse(x != y) |
| 5927 | self.assertFalse(x < y) |
| 5928 | self.assertFalse(x > y) |
| 5929 | self.assertTrue(x <= y) |
| 5930 | self.assertTrue(x >= y) |
| 5931 | |
| 5932 | # Nevertheless, comparison should work if other object is an instance |
| 5933 | # of date or datetime class with overridden comparison operators. |
| 5934 | # So special methods should return NotImplemented, as if |
| 5935 | # date and datetime were independent classes. |
| 5936 | for x, y in (as_date, as_datetime), (as_datetime, as_date): |
| 5937 | self.assertEqual(x.__eq__(y), NotImplemented) |
| 5938 | self.assertEqual(x.__ne__(y), NotImplemented) |
| 5939 | self.assertEqual(x.__lt__(y), NotImplemented) |
| 5940 | self.assertEqual(x.__gt__(y), NotImplemented) |
| 5941 | self.assertEqual(x.__gt__(y), NotImplemented) |
| 5942 | self.assertEqual(x.__ge__(y), NotImplemented) |
| 5943 | |
| 5944 | def test_extra_attributes(self): |
| 5945 | with self.assertWarns(DeprecationWarning): |
nothing calls this directly
no test coverage detected