]> granicus.if.org Git - python/commitdiff
Missed test for rev. 46933; infinite recursion from __coerce__() returning its argume...
authorBrett Cannon <bcannon@gmail.com>
Tue, 13 Jun 2006 22:26:13 +0000 (22:26 +0000)
committerBrett Cannon <bcannon@gmail.com>
Tue, 13 Jun 2006 22:26:13 +0000 (22:26 +0000)
Lib/test/test_coercion.py

index 43568173026888da1127cb6d45420cc7b8ff3cf0..d704e4b73451d5fa979314f914076da8104ca393 100644 (file)
@@ -2,7 +2,7 @@ import copy
 import sys
 import warnings
 import unittest
-from test.test_support import run_unittest
+from test.test_support import run_unittest, TestFailed
 
 # Fake a number that implements numeric methods through __coerce__
 class CoerceNumber:
@@ -318,6 +318,24 @@ class CoercionTest(unittest.TestCase):
                 return 0
         self.assertEquals(cmp(ClassicWackyComparer(), evil_coercer), 0)
 
+    def test_infinite_rec_classic_classes(self):
+        # if __coerce__() returns its arguments reversed it causes an infinite
+        # recursion for classic classes.
+        class Tester:
+            def __coerce__(self, other):
+                return other, self
+
+        exc = TestFailed("__coerce__() returning its arguments reverse "
+                                "should raise RuntimeError")
+        try:
+            Tester() + 1
+        except (RuntimeError, TypeError):
+            return
+        except:
+            raise exc
+        else:
+            raise exc
+
 def test_main():
     warnings.filterwarnings("ignore",
                             r'complex divmod\(\), // and % are deprecated',