[py-svn] pytest commit ad3773acb10a: simplify session object and rename some more hooks, not exposed/released yet

commits-noreply at bitbucket.org commits-noreply at bitbucket.org
Mon Nov 1 00:26:27 CET 2010


# HG changeset patch -- Bitbucket.org
# Project pytest
# URL http://bitbucket.org/hpk42/pytest/overview
# User holger krekel <holger at merlinux.eu>
# Date 1288567632 -3600
# Node ID ad3773acb10a58745b9919cc37d4d720ef2ed971
# Parent  629f096561d6e38a59731a4b10eae36427f5c71d
simplify session object and rename some more hooks, not exposed/released yet

--- a/pytest/hookspec.py
+++ b/pytest/hookspec.py
@@ -37,17 +37,17 @@ def pytest_configure(config):
 def pytest_unconfigure(config):
     """ called before test process is exited.  """
 
-def pytest_runtest_mainloop(session):
+def pytest_runtestloop(session):
     """ called for performing the main runtest loop (after collection. """
-pytest_runtest_mainloop.firstresult = True
+pytest_runtestloop.firstresult = True
 
 # -------------------------------------------------------------------------
 # collection hooks
 # -------------------------------------------------------------------------
 
-def pytest_collection_perform(session):
+def pytest_collection(session):
     """ perform the collection protocol for the given session. """
-pytest_collection_perform.firstresult = True
+pytest_collection.firstresult = True
 
 def pytest_collection_modifyitems(config, items):
     """ called after collection has been performed, may filter or re-order

--- a/pytest/plugin/session.py
+++ b/pytest/plugin/session.py
@@ -8,6 +8,13 @@ import py
 import pytest
 import os, sys
 
+# exitcodes for the command line
+EXIT_OK = 0
+EXIT_TESTSFAILED = 1
+EXIT_INTERRUPTED = 2
+EXIT_INTERNALERROR = 3
+EXIT_NOHOSTS = 4
+
 def pytest_addoption(parser):
 
     group = parser.getgroup("general", "running and selection options")
@@ -44,9 +51,35 @@ def pytest_configure(config):
         config.option.maxfail = 1
 
 def pytest_cmdline_main(config):
-    return Session(config).main()
+    """ default command line protocol for initialization, collection,
+    running tests and reporting. """
+    session = Session(config)
+    session.exitstatus = EXIT_OK
+    try:
+        config.pluginmanager.do_configure(config)
+        config.hook.pytest_sessionstart(session=session)
+        config.hook.pytest_collection(session=session)
+        config.hook.pytest_runtestloop(session=session)
+    except pytest.UsageError:
+        raise
+    except KeyboardInterrupt:
+        excinfo = py.code.ExceptionInfo()
+        config.hook.pytest_keyboard_interrupt(excinfo=excinfo)
+        session.exitstatus = EXIT_INTERRUPTED
+    except:
+        excinfo = py.code.ExceptionInfo()
+        config.pluginmanager.notify_exception(excinfo)
+        session.exitstatus = EXIT_INTERNALERROR
+        if excinfo.errisinstance(SystemExit):
+            sys.stderr.write("mainloop: caught Spurious SystemExit!\n")
+    if not session.exitstatus and session._testsfailed:
+        session.exitstatus = EXIT_TESTSFAILED
+    config.hook.pytest_sessionfinish(session=session,
+        exitstatus=session.exitstatus)
+    config.pluginmanager.do_unconfigure(config)
+    return session.exitstatus
 
-def pytest_collection_perform(session):
+def pytest_collection(session):
     collection = session.collection
     assert not hasattr(collection, 'items')
     hook = session.config.hook
@@ -55,7 +88,7 @@ def pytest_collection_perform(session):
     hook.pytest_collection_finish(collection=collection)
     return True
 
-def pytest_runtest_mainloop(session):
+def pytest_runtestloop(session):
     if session.config.option.collectonly:
         return True
     for item in session.collection.items:
@@ -86,16 +119,7 @@ def pytest_collect_directory(path, paren
 def pytest_report_iteminfo(item):
     return item.reportinfo()
 
-
-# exitcodes for the command line
-EXIT_OK = 0
-EXIT_TESTSFAILED = 1
-EXIT_INTERRUPTED = 2
-EXIT_INTERNALERROR = 3
-EXIT_NOHOSTS = 4
-
 class Session(object):
-    nodeid = ""
     class Interrupted(KeyboardInterrupt):
         """ signals an interrupted test run. """
         __module__ = 'builtins' # for py3
@@ -120,37 +144,6 @@ class Session(object):
                     self._testsfailed)
     pytest_collectreport = pytest_runtest_logreport
 
-    def main(self):
-        """ main loop for running tests. """
-        self.shouldstop = False
-        self.exitstatus = EXIT_OK
-        config = self.config
-        try:
-            config.pluginmanager.do_configure(config)
-            config.hook.pytest_sessionstart(session=self)
-            config.hook.pytest_collection_perform(session=self)
-            config.hook.pytest_runtest_mainloop(session=self)
-        except pytest.UsageError:
-            raise
-        except KeyboardInterrupt:
-            excinfo = py.code.ExceptionInfo()
-            self.config.hook.pytest_keyboard_interrupt(excinfo=excinfo)
-            self.exitstatus = EXIT_INTERRUPTED
-        except:
-            excinfo = py.code.ExceptionInfo()
-            self.config.pluginmanager.notify_exception(excinfo)
-            self.exitstatus = EXIT_INTERNALERROR
-            if excinfo.errisinstance(SystemExit):
-                sys.stderr.write("mainloop: caught Spurious SystemExit!\n")
-
-        if not self.exitstatus and self._testsfailed:
-            self.exitstatus = EXIT_TESTSFAILED
-        self.config.hook.pytest_sessionfinish(
-            session=self, exitstatus=self.exitstatus,
-        )
-        config.pluginmanager.do_unconfigure(config)
-        return self.exitstatus
-
 class Collection:
     def __init__(self, config):
         self.config = config



More information about the pytest-commit mailing list