##// END OF EJS Templates
test really bad repr
MinRK -
Show More
@@ -170,13 +170,13 b' def _safe_repr(obj):'
170 return _failed_repr(obj, e)
170 return _failed_repr(obj, e)
171
171
172 def _safe_getattr(obj, attr, default=None):
172 def _safe_getattr(obj, attr, default=None):
173 """never-raise version of getattr
173 """Safe version of getattr.
174
174
175 catches errors other than AttributeError,
175 Same as getattr, but will return ``default`` on any Exception,
176 unlike vanilla getattr
176 rather than raising.
177 """
177 """
178 try:
178 try:
179 return getattr(obj, attr)
179 return getattr(obj, attr, default)
180 except Exception:
180 except Exception:
181 return default
181 return default
182
182
@@ -160,3 +160,25 b' def test_bad_repr():'
160 """Don't raise, even when repr fails"""
160 """Don't raise, even when repr fails"""
161 output = pretty.pretty(BadRepr())
161 output = pretty.pretty(BadRepr())
162 nt.assert_in("failed", output)
162 nt.assert_in("failed", output)
163 nt.assert_in("at 0x", output)
164 nt.assert_in("test_pretty", output)
165
166 class BadException(Exception):
167 def __str__(self):
168 return -1
169
170 class ReallyBadRepr(object):
171 __module__ = 1
172 @property
173 def __class__(self):
174 raise ValueError("I am horrible")
175
176 def __repr__(self):
177 raise BadException()
178
179 def test_really_bad_repr():
180 output = pretty.pretty(ReallyBadRepr())
181 nt.assert_in("failed", output)
182 nt.assert_in("BadException: unknown", output)
183 nt.assert_in("unknown type", output)
184 No newline at end of file
General Comments 0
You need to be logged in to leave comments. Login now