83 lines
3.1 KiB
Python
83 lines
3.1 KiB
Python
""" default hooks and general py.test options. """
|
|
|
|
import sys
|
|
import py
|
|
|
|
def pytest_cmdline_main(config):
|
|
from py._test.session import Session
|
|
return Session(config).main()
|
|
|
|
def pytest_perform_collection(session):
|
|
collection = session.collection
|
|
assert not hasattr(collection, 'items')
|
|
hook = session.config.hook
|
|
collection.items = items = collection.perform_collect()
|
|
hook.pytest_collection_modifyitems(config=session.config, items=items)
|
|
hook.pytest_log_finishcollection(collection=collection)
|
|
return True
|
|
|
|
def pytest_runtest_mainloop(session):
|
|
if session.config.option.collectonly:
|
|
return True
|
|
for item in session.collection.items:
|
|
item.config.hook.pytest_runtest_protocol(item=item)
|
|
if session.shouldstop:
|
|
raise session.Interrupted(session.shouldstop)
|
|
return True
|
|
|
|
def pytest_ignore_collect(path, config):
|
|
ignore_paths = config.getconftest_pathlist("collect_ignore", path=path)
|
|
ignore_paths = ignore_paths or []
|
|
excludeopt = config.getvalue("ignore")
|
|
if excludeopt:
|
|
ignore_paths.extend([py.path.local(x) for x in excludeopt])
|
|
return path in ignore_paths
|
|
|
|
def pytest_collect_directory(path, parent):
|
|
# XXX reconsider the following comment
|
|
# not use parent.Directory here as we generally
|
|
# want dir/conftest.py to be able to
|
|
# define Directory(dir) already
|
|
if not parent.recfilter(path): # by default special ".cvs", ...
|
|
# check if cmdline specified this dir or a subdir directly
|
|
for arg in parent.collection._argfspaths:
|
|
if path == arg or arg.relto(path):
|
|
break
|
|
else:
|
|
return
|
|
Directory = parent.config._getcollectclass('Directory', path)
|
|
return Directory(path, parent=parent)
|
|
|
|
def pytest_report_iteminfo(item):
|
|
return item.reportinfo()
|
|
|
|
def pytest_addoption(parser):
|
|
group = parser.getgroup("general", "running and selection options")
|
|
group._addoption('-x', '--exitfirst', action="store_true", default=False,
|
|
dest="exitfirst",
|
|
help="exit instantly on first error or failed test."),
|
|
group._addoption('--maxfail', metavar="num",
|
|
action="store", type="int", dest="maxfail", default=0,
|
|
help="exit after first num failures or errors.")
|
|
|
|
group = parser.getgroup("collect", "collection")
|
|
group.addoption('--collectonly',
|
|
action="store_true", dest="collectonly",
|
|
help="only collect tests, don't execute them."),
|
|
group.addoption("--ignore", action="append", metavar="path",
|
|
help="ignore path during collection (multi-allowed).")
|
|
group.addoption('--confcutdir', dest="confcutdir", default=None,
|
|
metavar="dir",
|
|
help="only load conftest.py's relative to specified dir.")
|
|
|
|
group = parser.getgroup("debugconfig",
|
|
"test process debugging and configuration")
|
|
group.addoption('--basetemp', dest="basetemp", default=None, metavar="dir",
|
|
help="base temporary directory for this test run.")
|
|
|
|
def pytest_configure(config):
|
|
# compat
|
|
if config.getvalue("exitfirst"):
|
|
config.option.maxfail = 1
|
|
|