[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