[py-svn] r61992 - py/branch/pytestplugin/py/test/plugin

hpk at codespeak.net hpk at codespeak.net
Wed Feb 18 09:59:07 CET 2009


Author: hpk
Date: Wed Feb 18 09:59:04 2009
New Revision: 61992

Modified:
   py/branch/pytestplugin/py/test/plugin/pytest_pocoo.py
   py/branch/pytestplugin/py/test/plugin/pytest_terminal.py
   py/branch/pytestplugin/py/test/plugin/pytest_xfail.py
Log:
strike unneccessary stats class and event sink


Modified: py/branch/pytestplugin/py/test/plugin/pytest_pocoo.py
==============================================================================
--- py/branch/pytestplugin/py/test/plugin/pytest_pocoo.py	(original)
+++ py/branch/pytestplugin/py/test/plugin/pytest_pocoo.py	Wed Feb 18 09:59:04 2009
@@ -21,11 +21,11 @@
     def pytest_terminal_summary(self, terminalreporter):
         if terminalreporter.config.option.pocoo_sendfailures:
             tr = terminalreporter
-            if tr.stats.failed and tr.config.option.tbstyle != "no":
+            if 'failed' in tr.stats and tr.config.option.tbstyle != "no":
                 terminalreporter.write_sep("=", "Sending failures to %s" %(url.base,))
                 terminalreporter.write_line("xmlrpcurl: %s" %(url.xmlrpc,))
                 serverproxy = self.getproxy()
-                for ev in terminalreporter.stats.failed:
+                for ev in terminalreporter.stats.get('failed'):
                     tw = py.io.TerminalWriter(stringio=True)
                     ev.toterminal(tw)
                     s = tw.stringio.getvalue()

Modified: py/branch/pytestplugin/py/test/plugin/pytest_terminal.py
==============================================================================
--- py/branch/pytestplugin/py/test/plugin/pytest_terminal.py	(original)
+++ py/branch/pytestplugin/py/test/plugin/pytest_terminal.py	Wed Feb 18 09:59:04 2009
@@ -31,77 +31,6 @@
             #print "calling", repmethod, event
             repmethod(event)
 
-class OutcomeStats:
-    def __init__(self, bus):
-        self._reset()
-        bus.subscribe_methods(self)
-
-    def _reset(self):
-        self.skipped = []
-        self.passed = []
-        self.failed = []
-        self.deselected = []
-
-    def pyevent_itemtestreport(self, ev):
-        for name in 'skipped failed passed'.split():
-            if getattr(ev, name):
-                l = getattr(self, name)
-                l.append(ev)
-
-    def pyevent_collectionreport(self, ev):
-        if ev.skipped:
-            self.skipped.append(ev)
-        if ev.failed:
-            self.failed.append(ev)
-
-    def pyevent_deselected(self, ev):
-        self.deselected.extend(ev.items)
-
-    def pyevent_testrunstart(self, ev):
-        self._reset()
-
-class TestOutcomeStats:
-    def test_outcomestats(self):
-        names = 'passed skipped deselected failed'.split()
-        #for name in names:
-        #    stats = OutcomeStats()
-        #    assert getattr(stats, name) == []
-        #    bus = py.test._EventBus()
-        #    bus.subscribe_methods(stats)
-        #    rep = event.ItemTestReport(None)
-        #    setattr(rep, name, True)
-        #    bus.notify(itemtestreport=rep)
-        #    assert getattr(stats, name) == [rep]
-
-        bus = py.test._EventBus()
-        stats = OutcomeStats(bus)
-        class P:
-            passed = True
-            failed = skipped = False
-        bus.notify(itemtestreport=P)
-        assert stats.passed
-        assert stats.passed == [P]
-        bus.notify(itemtestreport=P)
-        assert stats.passed == [P, P]
-
-        class F:
-            skipped = passed = False 
-            failed = True
-        bus.notify(itemtestreport=F)
-        assert stats.failed == [F]
-        bus.notify(collectionreport=F)
-        assert stats.failed == [F, F]
-        class S:
-            skipped = True
-            passed = failed = False 
-        bus.notify(itemtestreport=S)
-        assert stats.skipped == [S]
-           
-        class D:
-            items = [42]
-        bus.notify(deselected=D)
-        assert stats.deselected == [42]
-
 def folded_skips(skipped):
     d = {}
     for event in skipped:
@@ -113,11 +42,10 @@
         l.append((len(events),) + key)
     return l 
 
-
 class TerminalReporter:
     def __init__(self, config, file=None):
         self.config = config 
-        self.stats = OutcomeStats(config.bus)
+        self.stats = {}       
         self.curdir = py.path.local()
         if file is None:
             file = py.std.sys.stdout
@@ -219,13 +147,14 @@
     def rep_RescheduleItems(self, ev):
         if self.config.option.debug:
             self.write_sep("!", "RESCHEDULING %s " %(ev.items,))
+
+    def rep_Deselected(self, ev):
+        self.stats.setdefault('deselected', []).append(ev)
     
     def rep_ItemTestReport(self, ev):
         fspath = ev.colitem.fspath 
         cat, letter, word = self.getcategoryletterword(ev)
-        l = self.stats.__dict__.setdefault(cat, [])
-        if ev not in l:
-            l.append(ev)
+        self.stats.setdefault(cat, []).append(ev)
         if not self.config.option.verbose:
             self.write_fspath_result(fspath, letter)
         else:
@@ -235,10 +164,14 @@
 
     def rep_CollectionReport(self, ev):
         if not ev.passed:
+            #XXX allow plugins to override collection failures? 
+            # cat, letter, word = self.getcategoryletterword(ev)
             if ev.failed:
+                self.stats.setdefault("failed", []).append(ev)
                 msg = ev.longrepr.reprcrash.message 
                 self.write_fspath_result(ev.colitem.fspath, "F")
             elif ev.skipped:
+                self.stats.setdefault("skipped", []).append(ev)
                 self.write_fspath_result(ev.colitem.fspath, "S")
 
     def rep_TestrunStart(self, ev):
@@ -295,9 +228,9 @@
     #
 
     def summary_failures(self):
-        if self.stats.failed and self.config.option.tbstyle != "no":
+        if 'failed' in self.stats and self.config.option.tbstyle != "no":
             self.write_sep("=", "FAILURES")
-            for ev in self.stats.failed:
+            for ev in self.stats['failed']:
                 self.write_sep("_")
                 ev.toterminal(self._tw)
 
@@ -307,7 +240,7 @@
         keys = "failed passed skipped deselected".split()
         parts = []
         for key in keys:
-            val = getattr(self.stats, key)
+            val = self.stats.get(key, None)
             if val:
                 parts.append("%d %s" %(len(val), key))
         line = ", ".join(parts)
@@ -315,17 +248,18 @@
         self.write_sep("=", "%s in %.2f seconds" %(line, session_duration))
 
     def summary_deselected(self):
-        if self.stats.deselected:
+        if 'deselected' in self.stats:
             self.write_sep("=", "%d tests deselected by %r" %(
-                len(self.stats.deselected), self.config.option.keyword), bold=True)
+                len(self.stats['deselected']), self.config.option.keyword), bold=True)
 
     def summary_skips(self):
-        if not self.stats.failed or self.config.option.showskipsummary:
-            fskips = folded_skips(self.stats.skipped)
-            if fskips:
-                self.write_sep("_", "skipped test summary")
-                for num, fspath, lineno, reason in fskips:
-                    self._tw.line("%s:%d: [%d] %s" %(fspath, lineno, num, reason))
+        if 'skipped' in self.stats:
+            if 'failed' not in self.stats or self.config.option.showskipsummary:
+                fskips = folded_skips(self.stats['skipped'])
+                if fskips:
+                    self.write_sep("_", "skipped test summary")
+                    for num, fspath, lineno, reason in fskips:
+                        self._tw.line("%s:%d: [%d] %s" %(fspath, lineno, num, reason))
 
     def summary_final_exc(self, excrepr):
         self.write_sep("!")

Modified: py/branch/pytestplugin/py/test/plugin/pytest_xfail.py
==============================================================================
--- py/branch/pytestplugin/py/test/plugin/pytest_xfail.py	(original)
+++ py/branch/pytestplugin/py/test/plugin/pytest_xfail.py	Wed Feb 18 09:59:04 2009
@@ -19,7 +19,7 @@
     # a hook implemented called by the terminalreporter instance/plugin
     def pytest_terminal_summary(self, terminalreporter):
         tr = terminalreporter
-        xfailed = tr.stats.__dict__.get("xfailed")
+        xfailed = tr.stats.get("xfailed")
         if xfailed:
             tr.write_sep("_", "EXPECTED XFAILURES")
             for event in xfailed:
@@ -29,7 +29,7 @@
                 modpath = event.colitem.getmodpath(stopatmodule=False)
                 tr._tw.line("%s %s:%d: %s" %(modpath, entry.path, entry.lineno, entry.message))
 
-        xpassed = terminalreporter.stats.__dict__.get("xpassed")
+        xpassed = terminalreporter.stats.get("xpassed")
         if xpassed:
             tr.write_sep("_", "UNEXPECTEDLY PASSING")
             for event in xpassed:



More information about the pytest-commit mailing list