]> granicus.if.org Git - python/commitdiff
Added test for this fix to classobject.c:
authorGuido van Rossum <guido@python.org>
Tue, 29 Oct 2002 19:08:29 +0000 (19:08 +0000)
committerGuido van Rossum <guido@python.org>
Tue, 29 Oct 2002 19:08:29 +0000 (19:08 +0000)
Since properties are supported here, is possible that
instance_getattr2() raises an exception.  Fix all code that made this
assumption.

Backport candidate.

Lib/test/test_class.py

index e90a790cd4839b37523a3764ef2aef77693f7cdf..3c3ea063b10b890c515463139cb99f85c36076bc 100644 (file)
@@ -288,3 +288,30 @@ except RuntimeError:
     pass
 else:
     raise TestFailed, "how could this not have overflowed the stack?"
+
+
+# Tests for exceptions raised in instance_getattr2().
+
+def booh(self):
+    raise AttributeError, "booh"
+
+class A:
+    a = property(booh)
+try:
+    A().a # Raised AttributeError: A instance has no attribute 'a'
+except AttributeError, x:
+    if str(x) is not "booh":
+        print "attribute error for A().a got masked:", str(x)
+
+class E:
+    __eq__ = property(booh)
+E() == E() # In debug mode, caused a C-level assert() to fail
+
+class I:
+    __init__ = property(booh)
+try:
+    I() # In debug mode, printed XXX undetected error and raises AttributeError
+except AttributeError, x:
+    pass
+else:
+    print "attribute error for I.__init__ got masked"