Source code for zope.testrunner
##############################################################################
#
# Copyright (c) 2004-2013 Zope Foundation and Contributors.
# All Rights Reserved.
#
# This software is subject to the provisions of the Zope Public License,
# Version 2.1 (ZPL). A copy of the ZPL should accompany this distribution.
# THIS SOFTWARE IS PROVIDED "AS IS" AND ANY AND ALL EXPRESS OR IMPLIED
# WARRANTIES ARE DISCLAIMED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
# WARRANTIES OF TITLE, MERCHANTABILITY, AGAINST INFRINGEMENT, AND FITNESS
# FOR A PARTICULAR PURPOSE.
#
##############################################################################
"""Test runner
"""
import os
import sys
[docs]def run(defaults=None, args=None, script_parts=None, cwd=None, warnings=None):
"""Main runner function which can be and is being used from main programs.
Will execute the tests and exit the process according to the test result.
.. versionchanged:: 4.8.0
Add the *warnings* keyword argument.
See :class:`zope.testrunner.runner.Runner`
"""
failed = run_internal(defaults, args, script_parts=script_parts, cwd=cwd,
warnings=warnings)
sys.exit(int(failed))
[docs]def run_internal(defaults=None, args=None, script_parts=None, cwd=None,
warnings=None):
"""Execute tests.
Returns whether errors or failures occured during testing.
.. versionchanged:: 4.8.0
Add the *warnings* keyword argument.
See :class:`zope.testrunner.runner.Runner`
"""
if script_parts is None:
script_parts = _script_parts(args)
if cwd is None:
cwd = os.getcwd()
# XXX Bah. Lazy import to avoid circular/early import problems
from zope.testrunner.runner import Runner
runner = Runner(
defaults, args, script_parts=script_parts, cwd=cwd, warnings=warnings)
runner.run()
return runner.failed
def _script_parts(args=None):
script_parts = (args or sys.argv)[0:1]
# If we are running via setup.py, then we'll have to run the
# sub-process differently.
if script_parts[0] == 'setup.py':
script_parts = ['-c', 'from zope.testrunner import run; run()']
else:
# make sure we remember the absolute path early -- the tests might
# do an os.chdir()
script_parts[0] = os.path.abspath(script_parts[0])
if not os.path.exists(script_parts[0]):
# uhh, no wrapper script? this happens on Windows sometimes,
# where there are like three wrapper scripts with various suffixes,
# and I don't want to go looking up what they might be.
script_parts = ['-m', 'zope.testrunner']
return script_parts
if __name__ == '__main__':
# this used to allow people to try out the test runner with
# python -m zope.testrunner --test-path .
# on Python 2.5. This broke on 2.6, and 2.7 and newer use __main__.py
# for that. But there are some users out there who actually use
# python -e zope.testrunner.__init__ --test-path .
# so let's keep this for BBB
run()