[py-svn] r31593 - in py/branch/distributed/py/test/rsession: . testing

fijal at codespeak.net fijal at codespeak.net
Thu Aug 24 13:05:11 CEST 2006


Author: fijal
Date: Thu Aug 24 13:05:09 2006
New Revision: 31593

Modified:
   py/branch/distributed/py/test/rsession/outcome.py
   py/branch/distributed/py/test/rsession/testing/test_master.py
   py/branch/distributed/py/test/rsession/testing/test_outcome.py
Log:
(hpk, fijal) - Added simple traceback representation for remote tracebacks.


Modified: py/branch/distributed/py/test/rsession/outcome.py
==============================================================================
--- py/branch/distributed/py/test/rsession/outcome.py	(original)
+++ py/branch/distributed/py/test/rsession/outcome.py	Thu Aug 24 13:05:09 2006
@@ -16,14 +16,36 @@
         self.is_critical = is_critical
         assert bool(self.passed) + bool(excinfo) + bool(skipped) == 1
     
+    def make_excinfo_repr(self):
+        if self.excinfo is None:
+            return None
+        excinfo = self.excinfo
+        tb_info = [str(x) for x in excinfo.traceback]
+        return (excinfo.type.__name__, str(excinfo.value), tb_info)
+    
     def make_repr(self):
-        return (self.passed, self.setupfailure, str(self.excinfo), 
+        return (self.passed, self.setupfailure, 
+                self.make_excinfo_repr(), 
                 self.skipped, self.is_critical)
 
+class ExcInfoRepr(object):
+    def __init__(self, excinfo):
+        self.typename, self.value, self.traceback = excinfo
+    
+    def __repr__(self):
+        l = ["%s=%s" %(x, getattr(self, x))
+                for x in "typename value traceback".split()]
+        return "<ExcInfoRepr %s>" %(" ".join(l),)
+
+
 class ReprOutcome(object):
     def __init__(self, repr_tuple):
-        (self.passed, self.setupfailure, self.excinfo, self.skipped,
+        (self.passed, self.setupfailure, excinfo, self.skipped,
             self.is_critical) = repr_tuple
+        if excinfo is None:
+            self.excinfo = None
+        else:
+            self.excinfo = ExcInfoRepr(excinfo)
 
     def __repr__(self):
         l = ["%s=%s" %(x, getattr(self, x))

Modified: py/branch/distributed/py/test/rsession/testing/test_master.py
==============================================================================
--- py/branch/distributed/py/test/rsession/testing/test_master.py	(original)
+++ py/branch/distributed/py/test/rsession/testing/test_master.py	Thu Aug 24 13:05:09 2006
@@ -25,13 +25,18 @@
         self.sent.append(item)
 
 def test_masternode():
+    try:
+        raise ValueError()
+    except ValueError:
+        excinfo = py.code.ExceptionInfo()
+    
     ch = DummyChannel()
     reportlist = []
     mnode = MasterNode(ch, reportlist.append)
     mnode.send(py.test.Item("ok"))
     mnode.send(py.test.Item("notok"))
     ch.callback(Outcome().make_repr())
-    ch.callback(Outcome(excinfo=42).make_repr())
+    ch.callback(Outcome(excinfo=excinfo).make_repr())
     assert len(reportlist) == 4
     received = [i for i in reportlist 
         if isinstance(i, report.ReceivedItemOutcome)]

Modified: py/branch/distributed/py/test/rsession/testing/test_outcome.py
==============================================================================
--- py/branch/distributed/py/test/rsession/testing/test_outcome.py	(original)
+++ py/branch/distributed/py/test/rsession/testing/test_outcome.py	Thu Aug 24 13:05:09 2006
@@ -1,9 +1,33 @@
 
-from py.__.test.rsession.outcome import Outcome, ReprOutcome 
+import py
+from py.__.test.rsession.outcome import Outcome, ReprOutcome, ExcInfoRepr
+
+import marshal
 
 def test_critical_debugging_flag():
     outcome = Outcome(is_critical=True)
     r = ReprOutcome(outcome.make_repr())
     assert r.is_critical 
     
+def f1():
+    raise ValueError(42)
+
+def f2():
+    f1()
+
+def f3():
+    f2()
+    
+def test_exception_info_repr():
+    try:
+        f3()
+    except:
+        outcome = Outcome(excinfo=py.code.ExceptionInfo())
+        
+    repr = outcome.make_excinfo_repr()
+    assert marshal.dumps(repr)
+    excinfo = ExcInfoRepr(repr)
     
+    assert str(excinfo.typename) == "ValueError"
+    assert str(excinfo.value) == "42"
+    assert len(excinfo.traceback) == 4



More information about the pytest-commit mailing list