[py-svn] r61357 - in py/branch/pytestplugin/py/test: plugin testing

hpk at codespeak.net hpk at codespeak.net
Mon Jan 26 16:36:00 CET 2009


Author: hpk
Date: Mon Jan 26 16:35:59 2009
New Revision: 61357

Modified:
   py/branch/pytestplugin/py/test/plugin/pytest_terminal.py
   py/branch/pytestplugin/py/test/plugin/pytest_xfail.py
   py/branch/pytestplugin/py/test/testing/acceptance_test.py
Log:
using a dict for handling test result in the test reporter 



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	Mon Jan 26 16:35:59 2009
@@ -33,10 +33,7 @@
         self._reset()
 
     def _reset(self):
-        self._passed = []
-        self._skipped = []
-        self._failed = []
-        self._deselected = []
+        self.status2event = {}
 
     def processevent(self, ev):
         evname = ev.__class__.__name__ 
@@ -50,30 +47,26 @@
         pass
 
     def rep_ItemTestReport(self, ev):
-        if ev.skipped:
-            self._skipped.append(ev)
-        elif ev.failed:
-            self._failed.append(ev)
-        elif ev.passed:
-            self._passed.append(ev)
+        for name in 'skipped failed passed'.split():
+            if getattr(ev, name):
+                self.status2event.setdefault(name, []).append(ev)
+                return 
 
     def rep_CollectionReport(self, ev):
-        if ev.skipped:
-            self._skipped.append(ev)
-        elif ev.failed:
-            self._failed.append(ev)
-        else:
-            pass # don't record passed collections 
+        for name in 'skipped failed'.split():
+            if getattr(ev, name):
+                self.status2event.setdefault(name, []).append(ev)
+                return 
 
     def rep_TestrunStart(self, ev):
         self._reset()
 
     def rep_Deselected(self, ev):
-        self._deselected.extend(ev.items)
+        self.status2event.setdefault('deselected', []).extend(ev.items)
 
     def _folded_skips(self):
         d = {}
-        for event in self._skipped:
+        for event in self.status2event.get("skipped", []):
             entry = event.longrepr.reprcrash 
             key = entry.path, entry.lineno, entry.message
             d.setdefault(key, []).append(event)
@@ -202,12 +195,9 @@
         if not ev.passed:
             if ev.failed:
                 msg = ev.longrepr.reprcrash.message 
+                self.write_fspath_result(ev.colitem.fspath, "F")
             elif ev.skipped:
-                msg = "Skipped:" + ev.reason 
-            else:
-                msg = None
-            if msg is not None:
-                self.write_fspath_result(ev.colitem.fspath, "- " + msg)
+                self.write_fspath_result(ev.colitem.fspath, "S")
 
     def rep_TestrunStart(self, ev):
         super(TerminalReporter, self).rep_TestrunStart(ev)
@@ -257,34 +247,33 @@
     #
 
     def summary_failures(self):
-        if self._failed and self.config.option.tbstyle != "no":
+        if "failed" in self.status2event and self.config.option.tbstyle != "no":
             self.write_sep("=", "FAILURES")
-            for ev in self._failed:
+            for ev in self.status2event['failed']:
                 self.write_sep("_")
                 ev.toterminal(self._tw)
 
     def summary_stats(self):
         session_duration = py.std.time.time() - self._sessionstarttime
-        numfailed = len(self._failed)
-        numskipped = len(self._skipped)
-        numpassed = len(self._passed)
-        sum = numfailed + numpassed
-        self.write_sep("=", "%d/%d passed + %d skips in %.2f seconds" %
-                      (numpassed, sum, numskipped, session_duration), bold=True)
-        if numfailed == 0:
-            self.write_sep("=", "failures: no failures :)", green=True)
-        else:
-            self.write_sep("=", "failures: %d" %(numfailed), red=True)
+
+        keys = "failed passed skipped deselected".split()
+        parts = []
+        for key in keys:
+            if key in self.status2event:
+                parts.append("%d %s" %(len(self.status2event[key]), key))
+        line = ", ".join(parts)
+        # XXX coloring
+        self.write_sep("=", "%s in %.2f seconds" %(line, session_duration))
 
     def summary_deselected(self):
-        if not self._deselected:
-            return
-        self.write_sep("=", "%d tests deselected by %r" %(
-            len(self._deselected), self.config.option.keyword), bold=True)
+        l = self.status2event.get("deselected", None)
+        if l:
+            self.write_sep("=", "%d tests deselected by %r" %(
+                len(l), self.config.option.keyword), bold=True)
                                                 
 
     def summary_skips(self):
-        if not self._failed or self.config.option.showskipsummary:
+        if "failed" not in self.status2event or self.config.option.showskipsummary:
             folded_skips = self._folded_skips()
             if folded_skips:
                 self.write_sep("_", "skipped test summary")
@@ -448,7 +437,7 @@
         assert len(l) == 0
         s = popvalue(stringio) 
         print s
-        assert s.find("test_collect_fail.py - ImportError: No module named") != -1
+        assert s.find("test_collect_fail.py F") != -1
         rep.processevent(event.TestrunFinish())
         assert_stringio_contains_lines(stringio, [
             ">   import xyz",
@@ -671,7 +660,7 @@
             ev = event.ItemTestReport(None)
             setattr(ev, outcome, True)
             rep.processevent(ev)
-            assert getattr(rep, '_' + outcome) == [ev]
+            assert rep.status2event[outcome]
 
     def test_CollectionReport_events_are_counted(self):
         for outcome in 'skipped failed'.split():
@@ -679,7 +668,7 @@
             ev = event.CollectionReport(None, None)
             setattr(ev, outcome, True)
             rep.processevent(ev)
-            assert getattr(rep, '_' + outcome) == [ev]
+            assert rep.status2event[outcome]
 
     def test_skip_reasons_folding(self):
         rep = BaseReporter()
@@ -698,7 +687,7 @@
         ev2.skipped = True
         rep.processevent(ev1)
         rep.processevent(ev2)
-        assert len(rep._skipped) == 2
+        assert len(rep.status2event['skipped']) == 2
         l = rep._folded_skips()
         assert len(l) == 1
         num, fspath, lineno, reason = l[0]

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	Mon Jan 26 16:35:59 2009
@@ -9,12 +9,12 @@
 
 class Xfail(object):
     def pytest_report_teststatus(self, event):
-        """ return category/verbose and shortletter. """
-        if 'xfail' in resultevent.keywords: #the 
+        """ return shortletter and verbose word. """
+        if 'xfail' in resultevent.keywords: 
             if resultevent.failed:
-                return "x", "xfailed"
+                return "passed", "x", "xfail"
             else:
-                return "P", "passed_xfailed"
+                return "failed", "P", "xpass" 
 
     #def pytest_terminal_summary_category_sort(self, name1, name2):
     #    ... 

Modified: py/branch/pytestplugin/py/test/testing/acceptance_test.py
==============================================================================
--- py/branch/pytestplugin/py/test/testing/acceptance_test.py	(original)
+++ py/branch/pytestplugin/py/test/testing/acceptance_test.py	Mon Jan 26 16:35:59 2009
@@ -128,7 +128,7 @@
         result = self.runpytest() 
         extra = assert_lines_contain_lines(result.outlines, [
             "*test_one.py ss",
-            "*test_two.py - Skipped*", 
+            "*test_two.py S",
             "___* skipped test summary *_", 
             "*conftest.py:3: *3* Skipped: 'test'", 
         ])
@@ -180,7 +180,7 @@
             old.chdir()
         extra = assert_lines_contain_lines(result.outlines, [
             "test_one.py ..", 
-            "* failures: no failures*", 
+            "* 2 pass*",
         ])
         assert result.ret == 0
 
@@ -196,8 +196,7 @@
             "*localhost* %s %s - Python %s*" %(
                     py.std.sys.platform, py.std.sys.executable, verinfo),
             "*test_one.py .",
-            "=* 1/1 passed + 0 skips in *.[0-9][0-9] seconds *=", 
-            "=* no failures :)*=",
+            "=* 1 passed in *.[0-9][0-9] seconds *=", 
         ])
 
     def test_traceback_failure(self):
@@ -305,8 +304,7 @@
             "HOSTUP: localhost*Python*",
             #"HOSTUP: localhost*Python*",
             #"HOSTUP: localhost*Python*",
-            "*1/3 passed + 1 skip*",
-            "*failures: 2*",
+            "*2 failed, 1 passed, 1 skipped*",
         ])
         assert result.ret == 1
 
@@ -341,8 +339,7 @@
             "*localhost*Python*",
             "*localhost*Python*",
             "HostDown*localhost*TERMINATED*",
-            "*1/4 passed + 1 skip*",
-            "*failures: 3*",
+            "*3 failed, 1 passed, 1 skipped*"
         ])
         assert result.ret == 1
 
@@ -358,7 +355,7 @@
         assert_lines_contain_lines(result.outlines, [
             #"*test_inter() INTERRUPTED",
             "*KEYBOARD INTERRUPT*",
-            "*0/1 passed*",
+            "*1 failed*", 
         ])
 
     def test_verbose_reporting(self):
@@ -414,7 +411,7 @@
         child.expect(".*hello.*")
         child.expect("(Pdb)")
         child.sendeof()
-        child.expect("failures: 1")
+        child.expect("1 failed")
         if child.isalive(): 
             child.wait()
 
@@ -430,13 +427,13 @@
         child.timeout = EXPECTTIMEOUT
         child.expect("assert 1 == 0")
         child.expect("test_one.py:")
-        child.expect("failures: 1")
+        child.expect("1 failed")
         child.expect("waiting for changes")
         test_one.write(py.code.Source("""
             def test_1():
                 assert 1 == 1
         """))
         child.expect("MODIFIED.*test_one.py", timeout=4.0)
-        child.expect("failures: no failures", timeout=5.0)
+        child.expect("1 passed", timeout=5.0)
         child.kill(15)
  



More information about the pytest-commit mailing list