summaryrefslogtreecommitdiff
path: root/Lib/test/test_datetime.py
diff options
context:
space:
mode:
Diffstat (limited to 'Lib/test/test_datetime.py')
-rw-r--r--Lib/test/test_datetime.py86
1 files changed, 68 insertions, 18 deletions
diff --git a/Lib/test/test_datetime.py b/Lib/test/test_datetime.py
index 6acf0731bf..8d6fe19810 100644
--- a/Lib/test/test_datetime.py
+++ b/Lib/test/test_datetime.py
@@ -134,9 +134,51 @@ class TestTZInfo(unittest.TestCase):
self.assertEqual(derived.tzname(None), 'cookie')
#############################################################################
+# Base clase for testing a particular aspect of timedelta, time, date and
+# datetime comparisons.
+
+class HarmlessMixedComparison(unittest.TestCase):
+ # Test that __eq__ and __ne__ don't complain for mixed-type comparisons.
+
+ # Subclasses must define 'theclass', and theclass(1, 1, 1) must be a
+ # legit constructor.
+
+ def test_harmless_mixed_comparison(self):
+ me = self.theclass(1, 1, 1)
+
+ self.failIf(me == ())
+ self.failUnless(me != ())
+ self.failIf(() == me)
+ self.failUnless(() != me)
+
+ self.failUnless(me in [1, 20L, [], me])
+ self.failIf(me not in [1, 20L, [], me])
+
+ self.failUnless([] in [me, 1, 20L, []])
+ self.failIf([] not in [me, 1, 20L, []])
+
+ def test_harmful_mixed_comparison(self):
+ me = self.theclass(1, 1, 1)
+
+ self.assertRaises(TypeError, lambda: me < ())
+ self.assertRaises(TypeError, lambda: me <= ())
+ self.assertRaises(TypeError, lambda: me > ())
+ self.assertRaises(TypeError, lambda: me >= ())
+
+ self.assertRaises(TypeError, lambda: () < me)
+ self.assertRaises(TypeError, lambda: () <= me)
+ self.assertRaises(TypeError, lambda: () > me)
+ self.assertRaises(TypeError, lambda: () >= me)
+
+ self.assertRaises(TypeError, cmp, (), me)
+ self.assertRaises(TypeError, cmp, me, ())
+
+#############################################################################
# timedelta tests
-class TestTimeDelta(unittest.TestCase):
+class TestTimeDelta(HarmlessMixedComparison):
+
+ theclass = timedelta
def test_constructor(self):
eq = self.assertEqual
@@ -301,15 +343,18 @@ class TestTimeDelta(unittest.TestCase):
self.assertEqual(cmp(t1, t2), -1)
self.assertEqual(cmp(t2, t1), 1)
- for badarg in 10, 10L, 34.5, "abc", {}, [], ():
- self.assertRaises(TypeError, lambda: t1 == badarg)
- self.assertRaises(TypeError, lambda: t1 != badarg)
+ badargs = 10, 10L, 34.5, "abc", {}, [], ()
+ for badarg in badargs:
+ self.assertEqual(t1 == badarg, False)
+ self.assertEqual(t1 != badarg, True)
+ self.assertEqual(badarg == t1, False)
+ self.assertEqual(badarg != t1, True)
+
+ for badarg in badargs:
self.assertRaises(TypeError, lambda: t1 <= badarg)
self.assertRaises(TypeError, lambda: t1 < badarg)
self.assertRaises(TypeError, lambda: t1 > badarg)
self.assertRaises(TypeError, lambda: t1 >= badarg)
- self.assertRaises(TypeError, lambda: badarg == t1)
- self.assertRaises(TypeError, lambda: badarg != t1)
self.assertRaises(TypeError, lambda: badarg <= t1)
self.assertRaises(TypeError, lambda: badarg < t1)
self.assertRaises(TypeError, lambda: badarg > t1)
@@ -446,7 +491,7 @@ class TestDateOnly(unittest.TestCase):
dt2 = dt - delta
self.assertEqual(dt2, dt - days)
-class TestDate(unittest.TestCase):
+class TestDate(HarmlessMixedComparison):
# Tests here should pass for both dates and datetimes, except for a
# few tests that TestDateTime overrides.
@@ -853,15 +898,17 @@ class TestDate(unittest.TestCase):
self.assertEqual(cmp(t1, t2), -1)
self.assertEqual(cmp(t2, t1), 1)
- for badarg in 10, 10L, 34.5, "abc", {}, [], ():
- self.assertRaises(TypeError, lambda: t1 == badarg)
- self.assertRaises(TypeError, lambda: t1 != badarg)
- self.assertRaises(TypeError, lambda: t1 <= badarg)
+ badargs = 10, 10L, 34.5, "abc", {}, [], ()
+ for badarg in badargs:
+ self.assertEqual(t1 == badarg, False)
+ self.assertEqual(t1 != badarg, True)
+ self.assertEqual(badarg == t1, False)
+ self.assertEqual(badarg != t1, True)
+
+ for badarg in badargs:
self.assertRaises(TypeError, lambda: t1 < badarg)
self.assertRaises(TypeError, lambda: t1 > badarg)
self.assertRaises(TypeError, lambda: t1 >= badarg)
- self.assertRaises(TypeError, lambda: badarg == t1)
- self.assertRaises(TypeError, lambda: badarg != t1)
self.assertRaises(TypeError, lambda: badarg <= t1)
self.assertRaises(TypeError, lambda: badarg < t1)
self.assertRaises(TypeError, lambda: badarg > t1)
@@ -1361,7 +1408,7 @@ class TestDateTime(TestDate):
alsobog = AlsoBogus()
self.assertRaises(ValueError, dt.astimezone, alsobog) # also naive
-class TestTime(unittest.TestCase):
+class TestTime(HarmlessMixedComparison):
theclass = time
@@ -1431,15 +1478,18 @@ class TestTime(unittest.TestCase):
badargs = (10, 10L, 34.5, "abc", {}, [], ())
if CMP_BUG_FIXED:
badargs += (date(1, 1, 1), datetime(1, 1, 1, 1, 1), timedelta(9))
+
+ for badarg in badargs:
+ self.assertEqual(t1 == badarg, False)
+ self.assertEqual(t1 != badarg, True)
+ self.assertEqual(badarg == t1, False)
+ self.assertEqual(badarg != t1, True)
+
for badarg in badargs:
- self.assertRaises(TypeError, lambda: t1 == badarg)
- self.assertRaises(TypeError, lambda: t1 != badarg)
self.assertRaises(TypeError, lambda: t1 <= badarg)
self.assertRaises(TypeError, lambda: t1 < badarg)
self.assertRaises(TypeError, lambda: t1 > badarg)
self.assertRaises(TypeError, lambda: t1 >= badarg)
- self.assertRaises(TypeError, lambda: badarg == t1)
- self.assertRaises(TypeError, lambda: badarg != t1)
self.assertRaises(TypeError, lambda: badarg <= t1)
self.assertRaises(TypeError, lambda: badarg < t1)
self.assertRaises(TypeError, lambda: badarg > t1)