1# -*- coding: utf-8 -*- 2from _pytest._io.saferepr import saferepr 3 4 5def test_simple_repr(): 6 assert saferepr(1) == "1" 7 assert saferepr(None) == "None" 8 9 10def test_maxsize(): 11 s = saferepr("x" * 50, maxsize=25) 12 assert len(s) == 25 13 expected = repr("x" * 10 + "..." + "x" * 10) 14 assert s == expected 15 16 17def test_maxsize_error_on_instance(): 18 class A: 19 def __repr__(): 20 raise ValueError("...") 21 22 s = saferepr(("*" * 50, A()), maxsize=25) 23 assert len(s) == 25 24 assert s[0] == "(" and s[-1] == ")" 25 26 27def test_exceptions(): 28 class BrokenRepr: 29 def __init__(self, ex): 30 self.ex = ex 31 32 def __repr__(self): 33 raise self.ex 34 35 class BrokenReprException(Exception): 36 __str__ = None 37 __repr__ = None 38 39 assert "Exception" in saferepr(BrokenRepr(Exception("broken"))) 40 s = saferepr(BrokenReprException("really broken")) 41 assert "TypeError" in s 42 assert "TypeError" in saferepr(BrokenRepr("string")) 43 44 s2 = saferepr(BrokenRepr(BrokenReprException("omg even worse"))) 45 assert "NameError" not in s2 46 assert "unknown" in s2 47 48 49def test_big_repr(): 50 from _pytest._io.saferepr import SafeRepr 51 52 assert len(saferepr(range(1000))) <= len("[" + SafeRepr().maxlist * "1000" + "]") 53 54 55def test_repr_on_newstyle(): 56 class Function(object): 57 def __repr__(self): 58 return "<%s>" % (self.name) 59 60 assert saferepr(Function()) 61 62 63def test_unicode(): 64 val = u"£€" 65 reprval = u"'£€'" 66 assert saferepr(val) == reprval 67