From 2b59200786441646a99ff7dfc1a7c5251e305bdf Mon Sep 17 00:00:00 2001 From: Ronny Pfannschmidt Date: Wed, 8 Sep 2010 12:00:36 +0200 Subject: [PATCH 01/11] implement and naively test the native traceback style --HG-- branch : trunk --- py/_code/code.py | 10 +++++++++- py/_plugin/pytest_terminal.py | 2 +- testing/code/test_excinfo.py | 9 +++++++++ 3 files changed, 19 insertions(+), 2 deletions(-) diff --git a/py/_code/code.py b/py/_code/code.py index 4e8842b61..6558a8dcf 100644 --- a/py/_code/code.py +++ b/py/_code/code.py @@ -354,9 +354,17 @@ class ExceptionInfo(object): abspath=False, tbfilter=True, funcargs=False): """ return str()able representation of this exception info. showlocals: show locals per traceback entry - style: long|short|no traceback style + style: long|short|no|native traceback style tbfilter: hide entries (where __tracebackhide__ is true) """ + if style == 'native': + import traceback + return ''.join(traceback.format_exception( + self.type, + self.value, + self.traceback[0]._rawentry, + )) + fmt = FormattedExcinfo(showlocals=showlocals, style=style, abspath=abspath, tbfilter=tbfilter, funcargs=funcargs) return fmt.repr_excinfo(self) diff --git a/py/_plugin/pytest_terminal.py b/py/_plugin/pytest_terminal.py index be3d21e5f..6487c0662 100644 --- a/py/_plugin/pytest_terminal.py +++ b/py/_plugin/pytest_terminal.py @@ -22,7 +22,7 @@ def pytest_addoption(parser): help="(deprecated, use -r)") group._addoption('--tb', metavar="style", action="store", dest="tbstyle", default='long', - type="choice", choices=['long', 'short', 'no', 'line'], + type="choice", choices=['long', 'short', 'no', 'line', 'native'], help="traceback print mode (long/short/line/no).") group._addoption('--fulltrace', action="store_true", dest="fulltrace", default=False, diff --git a/testing/code/test_excinfo.py b/testing/code/test_excinfo.py index e8db92c83..a596d8dfe 100644 --- a/testing/code/test_excinfo.py +++ b/testing/code/test_excinfo.py @@ -700,3 +700,12 @@ raise ValueError() repr = excinfo.getrepr(**reproptions) repr.toterminal(tw) assert tw.stringio.getvalue() + + + def test_native_style(self): + excinfo = self.excinfo_from_exec(""" + assert 0 + """) + repr = excinfo.getrepr(style='native') + assert repr.startswith('Traceback (most recent call last):\n File') + assert repr.endswith('\n assert 0\nAssertionError: assert 0\n') From 7903fbb8ce2bd9443939ba8599054cf3b26f701a Mon Sep 17 00:00:00 2001 From: holger krekel Date: Wed, 8 Sep 2010 16:51:46 +0200 Subject: [PATCH 02/11] applied ronny's patch, fixes #116 --HG-- branch : trunk --- CHANGELOG | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG b/CHANGELOG index e39490049..7d4d66392 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -2,6 +2,7 @@ Changes between 1.3.3 and XXX ================================================== - fix issue116: --doctestmodules works in the presence of __init__.py files as well +- fix issue118: new --tb=native option for presenting cpython-standard exceptions Changes between 1.3.2 and 1.3.3 ================================================== From 6f40441ef854d0ae31f8bebff9f59898afcd282f Mon Sep 17 00:00:00 2001 From: holger krekel Date: Wed, 8 Sep 2010 18:29:26 +0200 Subject: [PATCH 03/11] fixing test for python2.4 (thanks ronny) --HG-- branch : trunk --- testing/code/test_excinfo.py | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/testing/code/test_excinfo.py b/testing/code/test_excinfo.py index a596d8dfe..e158944c9 100644 --- a/testing/code/test_excinfo.py +++ b/testing/code/test_excinfo.py @@ -708,4 +708,8 @@ raise ValueError() """) repr = excinfo.getrepr(style='native') assert repr.startswith('Traceback (most recent call last):\n File') - assert repr.endswith('\n assert 0\nAssertionError: assert 0\n') + assert repr.endswith('\nAssertionError: assert 0\n') + assert 'exec (source.compile())' in repr + # python 2.4 fails to get the source line for the assert + if py.std.sys.version_info >= (2, 5): + assert repr.count('assert 0') == 2 From af412d993c62733cb61e0ba8c91a96b19baea1ea Mon Sep 17 00:00:00 2001 From: holger krekel Date: Tue, 14 Sep 2010 15:43:00 +0200 Subject: [PATCH 04/11] simplify and fix installation instructions particularly for windows (fixes #111) and bump version to 1.3.4 --HG-- branch : trunk --- CHANGELOG | 3 +- doc/install.txt | 86 ++++++++++++++++++++++++------------------------- py/__init__.py | 2 +- setup.py | 4 +-- 4 files changed, 47 insertions(+), 48 deletions(-) diff --git a/CHANGELOG b/CHANGELOG index 7d4d66392..10ce4397f 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -1,6 +1,7 @@ -Changes between 1.3.3 and XXX +Changes between 1.3.3 and 1.3.4 ================================================== +- fix issue111: improve install documentation for windows - fix issue116: --doctestmodules works in the presence of __init__.py files as well - fix issue118: new --tb=native option for presenting cpython-standard exceptions diff --git a/doc/install.txt b/doc/install.txt index 64d9b0c6f..43d37b1bf 100644 --- a/doc/install.txt +++ b/doc/install.txt @@ -26,7 +26,47 @@ py.test/pylib installation info in a nutshell .. _`bin`: bin.html -Best practise: install tool and dependencies virtually +.. _`easy_install`: + +Installation using easy_install +=================================================== + +Both `Distribute`_ and setuptools_ provide the ``easy_install`` +installation tool with which you can type into a command line window:: + + easy_install -U py + +to install the latest release of the py lib and py.test. The ``-U`` switch +will trigger an upgrade if you already have an older version installed. +Note that setuptools works ok with Python2 interpreters while `Distribute`_ +additionally works with Python3 and also avoid some issues on Windows. + +Known issues: + +- **Windows**: If "easy_install" or "py.test" are not found + please see here for preparing your environment for running + command line tools: `Python for Windows`_. You may alternatively + use an `ActivePython install`_ which makes command line tools + automatically available under Windows. + +.. _`ActivePython install`: http://www.activestate.com/activepython/downloads + +.. _`Jython does not create command line launchers`: http://bugs.jython.org/issue1491 + +- **Jython2.5.1 on Windows XP**: `Jython does not create command line launchers`_ + so ``py.test`` will not work correctly. You may install py.test on + CPython and type ``py.test --genscript=mytest`` and then use + ``jython mytest`` to run py.test for your tests to run in Jython. + +- **On Linux**: If ``easy_install`` fails because it needs to run + as the superuser you are trying to install things globally + and need to put ``sudo`` in front of the command. + + +.. _quickstart: test/quickstart.html + + +Recommendation: install tool and dependencies virtually =========================================================== It is recommended to work with virtual environments @@ -36,34 +76,9 @@ you need to run your tests. Local virtual Python environments (as opposed to system-wide "global" environments) make for a more reproducible and reliable test environment. - .. _`virtualenv`: http://pypi.python.org/pypi/virtualenv .. _`buildout`: http://www.buildout.org/ .. _pip: http://pypi.python.org/pypi/pip -.. _`easy_install`: - -using easy_install (from setuptools or Distribute) -=================================================== - -Both `Distribute`_ and setuptools_ provide the ``easy_install`` -installation tool. While setuptools should work ok with -Python2 interpreters, `Distribute`_ also works with Python3 -and it avoids some issues on Windows. In both cases you -can open a command line window and then type:: - - easy_install -U py - -to install the latest release of the py lib and py.test. The ``-U`` switch -will trigger an upgrade if you already have an older version installed. - -If you now type:: - - py.test --version - -you should see the version number and the import location of the tool. -Maybe you want to head on with the `quickstart`_ now? - -.. _quickstart: test/quickstart.html .. _standalone: @@ -84,24 +99,7 @@ disguise. You can tell people to download and then e.g. run it like this:: and ask them to send you the resulting URL. The resulting script has all core features and runs unchanged under Python2 and Python3 interpreters. -Troubleshooting / known issues -=============================== - -.. _`Jython does not create command line launchers`: http://bugs.jython.org/issue1491 - -**Jython2.5.1 on XP**: `Jython does not create command line launchers`_ -so ``py.test`` will not work correctly. You may install py.test on -CPython and type ``py.test --genscript=mytest`` and then use -``jython mytest`` to run py.test for your tests to run in Jython. - -**On Linux**: If ``easy_install`` fails because it needs to run -as the superuser you are trying to install things globally -and need to put ``sudo`` in front of the command. - -**On Windows**: If "easy_install" or "py.test" are not found -please see here: `How do i run a Python program under Windows?`_ - -.. _`How do i run a Python program under Windows?`: http://www.python.org/doc/faq/windows/#how-do-i-run-a-python-program-under-windows +.. _`Python for Windows`: http://www.imladris.com/Scripts/PythonForWindows.html .. _mercurial: http://mercurial.selenic.com/wiki/ .. _`Distribute`: diff --git a/py/__init__.py b/py/__init__.py index 32fa85b41..dceedad4b 100644 --- a/py/__init__.py +++ b/py/__init__.py @@ -8,7 +8,7 @@ dictionary or an import path. (c) Holger Krekel and others, 2004-2010 """ -__version__ = version = "1.3.4a1" +__version__ = version = "1.3.4" import py.apipkg diff --git a/setup.py b/setup.py index cf93eeb6a..74d41fb3a 100644 --- a/setup.py +++ b/setup.py @@ -26,14 +26,14 @@ def main(): name='py', description='py.test and pylib: rapid testing and development utils.', long_description = long_description, - version= '1.3.4a1', + version= '1.3.4', url='http://pylib.org', license='MIT license', platforms=['unix', 'linux', 'osx', 'cygwin', 'win32'], author='holger krekel, Guido Wesdorp, Carl Friedrich Bolz, Armin Rigo, Maciej Fijalkowski & others', author_email='holger at merlinux.eu', entry_points= make_entry_points(), - classifiers=['Development Status :: 5 - Production/Stable', + classifiers=['Development Status :: 6 - Mature', 'Intended Audience :: Developers', 'License :: OSI Approved :: MIT License', 'Operating System :: POSIX', From 04b3b9a3dafae943c87ef450070f9bf1b97ec8c8 Mon Sep 17 00:00:00 2001 From: holger krekel Date: Tue, 14 Sep 2010 15:46:30 +0200 Subject: [PATCH 05/11] preliminary release announcement --HG-- branch : trunk --- doc/announce/release-1.3.4.txt | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) create mode 100644 doc/announce/release-1.3.4.txt diff --git a/doc/announce/release-1.3.4.txt b/doc/announce/release-1.3.4.txt new file mode 100644 index 000000000..867a412ff --- /dev/null +++ b/doc/announce/release-1.3.4.txt @@ -0,0 +1,18 @@ +py.test/pylib 1.3.4: fixes and new native traceback option +=========================================================================== + +pylib/py.test 1.3.4 is a minor bugfix release featuring small fixes. +See changelog_ for full history. + +have fun, +holger krekel + +.. _changelog: ../changelog.html + +Changes between 1.3.3 and 1.3.4 +================================================== + +- fix issue111: improve install documentation for windows +- fix issue116: --doctestmodules works in the presence of __init__.py files as well +- fix issue118: new --tb=native option for presenting cpython-standard exceptions + From b81e48507c7843551c9494dd9df1528bc09dbb08 Mon Sep 17 00:00:00 2001 From: Ronny Pfannschmidt Date: Tue, 14 Sep 2010 16:12:50 +0200 Subject: [PATCH 06/11] introduce py.builtin._sysex as alias for the special exceptions, fixes #115 --HG-- branch : trunk --- CHANGELOG | 1 + py/__init__.py | 1 + py/_builtin.py | 2 ++ py/_code/_assertionold.py | 2 +- py/_code/assertion.py | 2 +- py/_code/code.py | 2 +- py/_code/source.py | 2 +- py/_io/saferepr.py | 4 +--- py/_io/terminalwriter.py | 2 +- py/_test/collect.py | 2 +- 10 files changed, 11 insertions(+), 9 deletions(-) diff --git a/CHANGELOG b/CHANGELOG index 10ce4397f..bf20775f8 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -4,6 +4,7 @@ Changes between 1.3.3 and 1.3.4 - fix issue111: improve install documentation for windows - fix issue116: --doctestmodules works in the presence of __init__.py files as well - fix issue118: new --tb=native option for presenting cpython-standard exceptions +- fix issue115: introduce py.builtin._sysex for system level exceptions we should thread different Changes between 1.3.2 and 1.3.3 ================================================== diff --git a/py/__init__.py b/py/__init__.py index dceedad4b..c6e95d21d 100644 --- a/py/__init__.py +++ b/py/__init__.py @@ -111,6 +111,7 @@ py.apipkg.initpkg(__name__, dict( 'frozenset' : '._builtin:frozenset', 'BaseException' : '._builtin:BaseException', 'GeneratorExit' : '._builtin:GeneratorExit', + '_sysex' : '._builtin:_sysex', 'print_' : '._builtin:print_', '_reraise' : '._builtin:_reraise', '_tryimport' : '._builtin:_tryimport', diff --git a/py/_builtin.py b/py/_builtin.py index 8b7ca1421..a356db044 100644 --- a/py/_builtin.py +++ b/py/_builtin.py @@ -87,6 +87,8 @@ except NameError: pass GeneratorExit.__module__ = 'exceptions' +_sysex = (KeyboardInterrupt, SystemExit, MemoryError, GeneratorExit) + if sys.version_info >= (3, 0): exec ("print_ = print ; exec_=exec") import builtins diff --git a/py/_code/_assertionold.py b/py/_code/_assertionold.py index 6df1d55d3..4e81fb3ef 100644 --- a/py/_code/_assertionold.py +++ b/py/_code/_assertionold.py @@ -3,7 +3,7 @@ import sys, inspect from compiler import parse, ast, pycodegen from py._code.assertion import BuiltinAssertionError, _format_explanation -passthroughex = (KeyboardInterrupt, SystemExit, MemoryError) +passthroughex = py.builtin._sysex class Failure: def __init__(self, node): diff --git a/py/_code/assertion.py b/py/_code/assertion.py index 2a2da9cfb..efedec63d 100644 --- a/py/_code/assertion.py +++ b/py/_code/assertion.py @@ -44,7 +44,7 @@ class AssertionError(BuiltinAssertionError): if args: try: self.msg = str(args[0]) - except (KeyboardInterrupt, SystemExit): + except py.builtin._sysex: raise except: self.msg = "<[broken __repr__] %s at %0xd>" %( diff --git a/py/_code/code.py b/py/_code/code.py index 6558a8dcf..b40ef28c4 100644 --- a/py/_code/code.py +++ b/py/_code/code.py @@ -189,7 +189,7 @@ class TracebackEntry(object): """ try: return self.frame.eval("__tracebackhide__") - except (SystemExit, KeyboardInterrupt): + except py.builtin._sysex: raise except: return False diff --git a/py/_code/source.py b/py/_code/source.py index 52ab252a0..be2ca55d6 100644 --- a/py/_code/source.py +++ b/py/_code/source.py @@ -276,7 +276,7 @@ def getfslineno(obj): def findsource(obj): try: sourcelines, lineno = py.std.inspect.findsource(obj) - except (KeyboardInterrupt, SystemExit): + except py.builtin._sysex: raise except: return None, None diff --git a/py/_io/saferepr.py b/py/_io/saferepr.py index db52ca92b..afc968d3a 100644 --- a/py/_io/saferepr.py +++ b/py/_io/saferepr.py @@ -5,8 +5,6 @@ builtin_repr = repr reprlib = py.builtin._tryimport('repr', 'reprlib') -sysex = (KeyboardInterrupt, MemoryError, SystemExit) - class SafeRepr(reprlib.Repr): """ subclass of repr.Repr that limits the resulting size of repr() and includes information on exceptions raised during the call. @@ -21,7 +19,7 @@ class SafeRepr(reprlib.Repr): try: # Try the vanilla repr and make sure that the result is a string s = call(x, *args) - except sysex: + except py.builtin._sysex: raise except: cls, e, tb = sys.exc_info() diff --git a/py/_io/terminalwriter.py b/py/_io/terminalwriter.py index c140dbb64..982d5a661 100644 --- a/py/_io/terminalwriter.py +++ b/py/_io/terminalwriter.py @@ -26,7 +26,7 @@ def _getdimensions(): def get_terminal_width(): try: height, width = _getdimensions() - except (SystemExit, KeyboardInterrupt): + except py.builtin._sysex: raise except: # FALLBACK diff --git a/py/_test/collect.py b/py/_test/collect.py index 4e59eb59d..a18aaabdd 100644 --- a/py/_test/collect.py +++ b/py/_test/collect.py @@ -102,7 +102,7 @@ class Node(object): return getattr(self, attrname) try: res = function() - except (KeyboardInterrupt, SystemExit): + except py.builtin._sysex: raise except: failure = py.std.sys.exc_info() From 79734420df5da760a383ec80a062018cc331f3f6 Mon Sep 17 00:00:00 2001 From: holger krekel Date: Tue, 14 Sep 2010 16:18:06 +0200 Subject: [PATCH 07/11] some small doc fixes --HG-- branch : trunk --- CHANGELOG | 2 +- setup.py | 6 +++++- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/CHANGELOG b/CHANGELOG index bf20775f8..00ac14869 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -4,7 +4,7 @@ Changes between 1.3.3 and 1.3.4 - fix issue111: improve install documentation for windows - fix issue116: --doctestmodules works in the presence of __init__.py files as well - fix issue118: new --tb=native option for presenting cpython-standard exceptions -- fix issue115: introduce py.builtin._sysex for system level exceptions we should thread different +- fix issue115: introduce py.builtin._sysex for system level exceptions to let through Changes between 1.3.2 and 1.3.3 ================================================== diff --git a/setup.py b/setup.py index 74d41fb3a..0cde55ed6 100644 --- a/setup.py +++ b/setup.py @@ -12,8 +12,12 @@ py.test and pylib: rapid testing and development utils - `py.code`_: dynamic code compile and traceback printing support Platforms: Linux, Win32, OSX + Interpreters: Python versions 2.4 through to 3.2, Jython 2.5.1 and PyPy -For questions please check out http://pylib.org/contact.html + +Bugs and issues: http://bitbucket.org/hpk42/py-trunk/issues/ + +Mailing lists and more contact points: http://pylib.org/contact.html .. _`py.test`: http://pytest.org .. _`py.path`: http://pylib.org/path.html From 9ca7ed647bd9d6622813a3e933006692bb38e1ab Mon Sep 17 00:00:00 2001 From: holger krekel Date: Tue, 14 Sep 2010 16:36:34 +0200 Subject: [PATCH 08/11] finalize release announce and changelog --HG-- branch : trunk --- CHANGELOG | 7 ++++--- doc/announce/release-1.3.4.txt | 13 ++++++++----- 2 files changed, 12 insertions(+), 8 deletions(-) diff --git a/CHANGELOG b/CHANGELOG index 00ac14869..49a630fc9 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -2,9 +2,10 @@ Changes between 1.3.3 and 1.3.4 ================================================== - fix issue111: improve install documentation for windows -- fix issue116: --doctestmodules works in the presence of __init__.py files as well -- fix issue118: new --tb=native option for presenting cpython-standard exceptions -- fix issue115: introduce py.builtin._sysex for system level exceptions to let through +- fix issue119: fix custom collectability of __init__.py as a module +- fix issue116: --doctestmodules work with __init__.py files as well +- fix issue115: unify internal exception passthrough/catching/GeneratorExit +- fix issue118: new --tb=native for presenting cpython-standard exceptions Changes between 1.3.2 and 1.3.3 ================================================== diff --git a/doc/announce/release-1.3.4.txt b/doc/announce/release-1.3.4.txt index 867a412ff..8fda9d36e 100644 --- a/doc/announce/release-1.3.4.txt +++ b/doc/announce/release-1.3.4.txt @@ -1,8 +1,10 @@ py.test/pylib 1.3.4: fixes and new native traceback option =========================================================================== -pylib/py.test 1.3.4 is a minor bugfix release featuring small fixes. -See changelog_ for full history. +pylib/py.test 1.3.4 is a minor bugfix release featuring small fixes. See +below and the changelog_ for full history. + +Particular thanks to the issue reporters and Ronny Pfannschmidt for general help. have fun, holger krekel @@ -13,6 +15,7 @@ Changes between 1.3.3 and 1.3.4 ================================================== - fix issue111: improve install documentation for windows -- fix issue116: --doctestmodules works in the presence of __init__.py files as well -- fix issue118: new --tb=native option for presenting cpython-standard exceptions - +- fix issue119: fix custom collectability of __init__.py as a module +- fix issue116: --doctestmodules work with __init__.py files as well +- fix issue115: unify internal exception passthrough/catching/GeneratorExit +- fix issue118: new --tb=native for presenting cpython-standard exceptions From 489faf26f29c730019768f1512b4200eb32ddbe0 Mon Sep 17 00:00:00 2001 From: holger krekel Date: Tue, 14 Sep 2010 16:54:41 +0200 Subject: [PATCH 09/11] Added tag 1.3.4 for changeset 79ef63777051 --HG-- branch : trunk --- .hgtags | 1 + 1 file changed, 1 insertion(+) diff --git a/.hgtags b/.hgtags index 6cac1da67..ccf5d89af 100644 --- a/.hgtags +++ b/.hgtags @@ -28,3 +28,4 @@ d5eacf390af74553227122b85e20345d47b2f9e6 1.3.1 8b8e7c25a13cf863f01b2dd955978285ae9daf6a 1.3.1 3bff44b188a7ec1af328d977b9d39b6757bb38df 1.3.2 c59d3fa8681a5b5966b8375b16fccd64a3a8dbeb 1.3.3 +79ef6377705184c55633d456832eea318fedcf61 1.3.4 From bb6e9848b3a8770b199a085d3341d498bd7b50d1 Mon Sep 17 00:00:00 2001 From: holger krekel Date: Tue, 14 Sep 2010 17:35:01 +0200 Subject: [PATCH 10/11] recreated plugin docs --HG-- branch : trunk --- doc/announce/release-1.3.4.txt | 13 +- doc/test/plugin/capturelog.txt | 4 +- doc/test/plugin/cov.txt | 297 +++++++++++++++------------------ doc/test/plugin/coverage.txt | 26 ++- doc/test/plugin/figleaf.txt | 19 ++- doc/test/plugin/helpconfig.txt | 2 +- doc/test/plugin/hookspec.txt | 106 ++++++------ doc/test/plugin/links.txt | 36 ++-- doc/test/plugin/xdist.txt | 6 +- 9 files changed, 261 insertions(+), 248 deletions(-) diff --git a/doc/announce/release-1.3.4.txt b/doc/announce/release-1.3.4.txt index 8fda9d36e..c156c8bdb 100644 --- a/doc/announce/release-1.3.4.txt +++ b/doc/announce/release-1.3.4.txt @@ -1,16 +1,17 @@ py.test/pylib 1.3.4: fixes and new native traceback option =========================================================================== -pylib/py.test 1.3.4 is a minor bugfix release featuring small fixes. See -below and the changelog_ for full history. +pylib/py.test 1.3.4 is a minor maintenance release mostly containing bug fixes +and a new "--tb=native" traceback option to show "normal" Python standard +tracebacks instead of the py.test enhanced tracebacks. See below for more +change info and http://pytest.org for more general information on features +and configuration of the testing tool. -Particular thanks to the issue reporters and Ronny Pfannschmidt for general help. +Thanks to the issue reporters and generally to Ronny Pfannschmidt for help. -have fun, +cheers, holger krekel -.. _changelog: ../changelog.html - Changes between 1.3.3 and 1.3.4 ================================================== diff --git a/doc/test/plugin/capturelog.txt b/doc/test/plugin/capturelog.txt index 0725c39c2..8ca148e68 100644 --- a/doc/test/plugin/capturelog.txt +++ b/doc/test/plugin/capturelog.txt @@ -9,10 +9,10 @@ capture output of logging module. Installation ------------ -You can install the `pytest-capturelog pypi`_ package +You can install the `pytest-capturelog pypi`_ package with pip:: - pip install pytest-capturelog + pip install pytest-capturelog or with easy install:: diff --git a/doc/test/plugin/cov.txt b/doc/test/plugin/cov.txt index 4b91fdb55..3a2548b60 100644 --- a/doc/test/plugin/cov.txt +++ b/doc/test/plugin/cov.txt @@ -6,27 +6,39 @@ produce code coverage reports using the 'coverage' package, including support fo .. contents:: :local: -This plugin produces coverage reports using the coverage package. It -supports centralised testing and distributed testing in both load and -each modes. +This plugin produces coverage reports. It supports centralised testing and distributed testing in +both load and each modes. It also supports coverage of subprocesses. -All features offered by the coverage package should be available, -either through this plugin or through coverage's own config file. +All features offered by the coverage package should be available, either through pytest-cov or +through coverage's config file. Installation ------------ -The `pytest-cov pypi`_ package may be installed / uninstalled with pip:: +The `pytest-cov`_ package may be installed with pip or easy_install:: pip install pytest-cov - pip uninstall pytest-cov - -Alternatively easy_install can be used:: - easy_install pytest-cov -.. _`pytest-cov pypi`: http://pypi.python.org/pypi/pytest-cov/ +.. _`pytest-cov`: http://pypi.python.org/pypi/pytest-cov/ + + +Uninstallation +-------------- + +Uninstalling packages is supported by pip:: + + pip uninstall pytest-cov + +However easy_install does not provide an uninstall facility. + +.. IMPORTANT:: + + Ensure that you manually delete the init_cov_core.pth file in your site-packages directory. + + This file starts coverage collection of subprocesses if appropriate during site initialisation + at python startup. Usage @@ -35,6 +47,9 @@ Usage Centralised Testing ~~~~~~~~~~~~~~~~~~~ +Centralised testing will report on the combined coverage of the main process and all of it's +subprocesses. + Running centralised testing:: py.test --cov myproj tests/ @@ -42,150 +57,149 @@ Running centralised testing:: Shows a terminal report:: -------------------- coverage: platform linux2, python 2.6.4-final-0 --------------------- - Name Stmts Exec Cover Missing - -------------------------------------------------- - myproj/__init__ 2 2 100% - myproj/myproj 257 244 94% 24-26, 99, 149, 233-236, 297-298, 369-370 - myproj/feature4286 94 87 92% 183-188, 197 - -------------------------------------------------- - TOTAL 353 333 94% + Name Stmts Miss Cover + ---------------------------------------- + myproj/__init__ 2 0 100% + myproj/myproj 257 13 94% + myproj/feature4286 94 7 92% + ---------------------------------------- + TOTAL 353 20 94% -Distributed Testing -~~~~~~~~~~~~~~~~~~~ +Distributed Testing: Load +~~~~~~~~~~~~~~~~~~~~~~~~~ -Distributed testing with dist mode set to load:: +Distributed testing with dist mode set to load will report on the combined coverage of all slaves. +The slaves may be spread out over any number of hosts and each slave may be located anywhere on the +file system. Each slave will have it's subprocesses measured. + +Running distributed testing with dist mode set to load:: py.test --cov myproj -n 2 tests/ -The results from the slaves will be combined like so:: +Shows a terminal report:: -------------------- coverage: platform linux2, python 2.6.4-final-0 --------------------- - Name Stmts Exec Cover Missing - -------------------------------------------------- - myproj/__init__ 2 2 100% - myproj/myproj 257 244 94% 24-26, 99, 149, 233-236, 297-298, 369-370 - myproj/feature4286 94 87 92% 183-188, 197 - -------------------------------------------------- - TOTAL 353 333 94% + Name Stmts Miss Cover + ---------------------------------------- + myproj/__init__ 2 0 100% + myproj/myproj 257 13 94% + myproj/feature4286 94 7 92% + ---------------------------------------- + TOTAL 353 20 94% -Distributed testing in each mode:: +Again but spread over different hosts and different directories:: - py.test --cov myproj --dist=each - --tx=popen//python=/usr/local/python265/bin/python - --tx=popen//python=/usr/local/python27b1/bin/python + py.test --cov myproj --dist load + --tx ssh=memedough@host1//chdir=testenv1 + --tx ssh=memedough@host2//chdir=/tmp/testenv2//python=/tmp/env1/bin/python + --rsyncdir myproj --rsyncdir tests --rsync examples tests/ -Will produce a report for each slave:: +Shows a terminal report:: - -------------------- coverage: platform linux2, python 2.6.5-final-0 --------------------- - Name Stmts Exec Cover Missing - -------------------------------------------------- - myproj/__init__ 2 2 100% - myproj/myproj 257 244 94% 24-26, 99, 149, 233-236, 297-298, 369-370 - myproj/feature4286 94 87 92% 183-188, 197 - -------------------------------------------------- - TOTAL 353 333 94% - --------------------- coverage: platform linux2, python 2.7.0-beta-1 --------------------- - Name Stmts Exec Cover Missing - -------------------------------------------------- - myproj/__init__ 2 2 100% - myproj/myproj 257 244 94% 24-26, 99, 149, 233-236, 297-298, 369-370 - myproj/feature4286 94 87 92% 183-188, 197 - -------------------------------------------------- - TOTAL 353 333 94% + -------------------- coverage: platform linux2, python 2.6.4-final-0 --------------------- + Name Stmts Miss Cover + ---------------------------------------- + myproj/__init__ 2 0 100% + myproj/myproj 257 13 94% + myproj/feature4286 94 7 92% + ---------------------------------------- + TOTAL 353 20 94% -Distributed testing in each mode can also produce a single combined -report. This is useful to get coverage information spanning things -such as all python versions:: +Distributed Testing: Each +~~~~~~~~~~~~~~~~~~~~~~~~~ - py.test --cov myproj --cov-combine-each --dist=each - --tx=popen//python=/usr/local/python265/bin/python - --tx=popen//python=/usr/local/python27b1/bin/python +Distributed testing with dist mode set to each will report on the combined coverage of all slaves. +Since each slave is running all tests this allows generating a combined coverage report for multiple +environments. + +Running distributed testing with dist mode set to each:: + + py.test --cov myproj --dist each + --tx popen//chdir=/tmp/testenv3//python=/usr/local/python27/bin/python + --tx ssh=memedough@host2//chdir=/tmp/testenv4//python=/tmp/env2/bin/python + --rsyncdir myproj --rsyncdir tests --rsync examples tests/ -Which looks like:: +Shows a terminal report:: ---------------------------------------- coverage ---------------------------------------- platform linux2, python 2.6.5-final-0 - platform linux2, python 2.7.0-beta-1 - Name Stmts Exec Cover Missing - -------------------------------------------------- - myproj/__init__ 2 2 100% - myproj/myproj 257 244 94% 24-26, 99, 149, 233-236, 297-298, 369-370 - myproj/feature4286 94 87 92% 183-188, 197 - -------------------------------------------------- - TOTAL 353 333 94% + platform linux2, python 2.7.0-final-0 + Name Stmts Miss Cover + ---------------------------------------- + myproj/__init__ 2 0 100% + myproj/myproj 257 13 94% + myproj/feature4286 94 7 92% + ---------------------------------------- + TOTAL 353 20 94% Reporting --------- -By default a terminal report is output. This report can be disabled -if desired, such as when results are going to a continuous integration -system and the terminal output won't be seen. +It is possible to generate any combination of the reports for a single test run. -In addition and without rerunning tests it is possible to generate -annotated source code, a html report and an xml report. +The available reports are terminal (with or without missing line numbers shown), HTML, XML and +annotated source code. -The directories for annotated source code and html reports can be -specified as can the file name for the xml report. +The terminal report without line numbers (default):: -Since testing often takes a non trivial amount of time at the end of -testing any / all of the reports may be generated. + py.test --cov-report term --cov myproj tests/ + + -------------------- coverage: platform linux2, python 2.6.4-final-0 --------------------- + Name Stmts Miss Cover + ---------------------------------------- + myproj/__init__ 2 0 100% + myproj/myproj 257 13 94% + myproj/feature4286 94 7 92% + ---------------------------------------- + TOTAL 353 20 94% + + +The terminal report with line numbers:: + + py.test --cov-report term-missing --cov myproj tests/ + + -------------------- coverage: platform linux2, python 2.6.4-final-0 --------------------- + Name Stmts Miss Cover Missing + -------------------------------------------------- + myproj/__init__ 2 0 100% + myproj/myproj 257 13 94% 24-26, 99, 149, 233-236, 297-298, 369-370 + myproj/feature4286 94 7 92% 183-188, 197 + -------------------------------------------------- + TOTAL 353 20 94% + + +The remaining three reports output to files without showing anything on the terminal (useful for +when the output is going to a continuous integration server):: + + py.test --cov-report html --cov-report xml --cov-report annotate --cov myproj tests/ Coverage Data File ------------------ -During testing there may be many data files with coverage data. These -will have unique suffixes and will be combined at the end of testing. +The data file is erased at the beginning of testing to ensure clean data for each test run. -Upon completion, for --dist=load (and also for --dist=each when the ---cov-combine-each option is used) there will only be one data file. - -For --dist=each there may be many data files where each one will have -the platform / python version info appended to the name. - -These data files are left at the end of testing so that it is possible -to use normal coverage tools to examine them. - -At the beginning of testing any data files that are about to be used -will first be erased so ensure the data is clean for each test run. - -It is possible to set the name of the data file. If needed the -platform / python version will be appended automatically to this name. - - -Coverage Config File --------------------- - -Coverage by default will read its own config file. An alternative -file name may be specified or reading config can be disabled entirely. - -Care has been taken to ensure that the coverage env vars and config -file options work the same under this plugin as they do under coverage -itself. - -Since options may be specified in different ways the order of -precedence between pytest-cov and coverage from highest to lowest is: - -1. pytest command line -2. pytest env var -3. pytest conftest -4. coverage env var -5. coverage config file -6. coverage default +The data file is left at the end of testing so that it is possible to use normal coverage tools to +examine it. Limitations ----------- -For distributed testing the slaves must have the pytest-cov package -installed. This is needed since the plugin must be registered through -setuptools / distribute for pytest to start the plugin on the slave. +For distributed testing the slaves must have the pytest-cov package installed. This is needed since +the plugin must be registered through setuptools / distribute for pytest to start the plugin on the +slave. + +For subprocess measurement environment variables must make it from the main process to the +subprocess. The python used by the subprocess must have pytest-cov installed. The subprocess must +do normal site initialisation so that the environment variables can be detected and coverage +started. Acknowledgements @@ -193,14 +207,11 @@ Acknowledgements Holger Krekel for pytest with its distributed testing support. -Ned Batchelder for coverage and its ability to combine the coverage -results of parallel runs. +Ned Batchelder for coverage and its ability to combine the coverage results of parallel runs. -Whilst this plugin has been built fresh from the ground up to support -distributed testing it has been influenced by the work done on -pytest-coverage (Ross Lawley, James Mills, Holger Krekel) and -nose-cover (Jason Pellerin) which are other coverage plugins for -pytest and nose respectively. +Whilst this plugin has been built fresh from the ground up to support distributed testing it has +been influenced by the work done on pytest-coverage (Ross Lawley, James Mills, Holger Krekel) and +nose-cover (Jason Pellerin) which are other coverage plugins for pytest and nose respectively. No doubt others have contributed to these tools as well. @@ -208,43 +219,11 @@ command line options -------------------- -``--cov-on`` - enable coverage, only needed if not specifying any --cov options -``--cov=package`` - collect coverage for the specified package (multi-allowed) -``--cov-no-terminal`` - disable printing a report on the terminal -``--cov-annotate`` - generate an annotated source code report -``--cov-html`` - generate a html report -``--cov-xml`` - generate an xml report -``--cov-annotate-dir=dir`` - directory for the annotate report, default: %default -``--cov-html-dir=dir`` - directory for the html report, default: coverage_html -``--cov-xml-file=path`` - file for the xml report, default: coverage.xml -``--cov-data-file=path`` - file containing coverage data, default: .coverage -``--cov-combine-each`` - for dist=each mode produce a single combined report -``--cov-branch`` - enable branch coverage -``--cov-pylib`` - enable python library coverage -``--cov-timid`` - enable slower and simpler tracing -``--cov-no-missing-lines`` - disable showing missing lines, only relevant to the terminal report -``--cov-no-missing-files`` - disable showing message about missing source files -``--cov-omit=prefix1,prefix2,...`` - ignore files with these prefixes -``--cov-no-config`` - disable coverage reading its config file -``--cov-config-file=path`` - config file for coverage, default: %default +``--cov=path`` + measure coverage for filesystem path (multi-allowed) +``--cov-report=type`` + type of report to generate: term, term-missing, annotate, html, xml (multi-allowed) +``--cov-config=path`` + config file for coverage, default: .coveragerc .. include:: links.txt diff --git a/doc/test/plugin/coverage.txt b/doc/test/plugin/coverage.txt index e22bab43b..965b4a4ee 100644 --- a/doc/test/plugin/coverage.txt +++ b/doc/test/plugin/coverage.txt @@ -6,10 +6,27 @@ Write and report coverage data with the 'coverage' package. .. contents:: :local: -Original code by Ross Lawley. +Note: Original code by Ross Lawley. -Requires Ned Batchelder's excellent coverage: -http://nedbatchelder.com/code/coverage/ +Install +-------------- + +Use pip to (un)install:: + + pip install pytest-coverage + pip uninstall pytest-coverage + +or alternatively use easy_install to install:: + + easy_install pytest-coverage + + +Usage +------------- + +To get full test coverage reports for a particular package type:: + + py.test --cover-report=report command line options -------------------- @@ -21,8 +38,11 @@ command line options html: Directory for html output. report: Output a text report. annotate: Annotate your source code for which lines were executed and which were not. + xml: Output an xml report compatible with the cobertura plugin for hudson. ``--cover-directory=DIRECTORY`` Directory for the reports (html / annotate results) defaults to ./coverage +``--cover-xml-file=XML_FILE`` + File for the xml report defaults to ./coverage.xml ``--cover-show-missing`` Show missing files ``--cover-ignore-errors=IGNORE_ERRORS`` diff --git a/doc/test/plugin/figleaf.txt b/doc/test/plugin/figleaf.txt index c2fe6f0b3..86e0da65b 100644 --- a/doc/test/plugin/figleaf.txt +++ b/doc/test/plugin/figleaf.txt @@ -6,16 +6,29 @@ report test coverage using the 'figleaf' package. .. contents:: :local: +Install +--------------- + +To install the plugin issue:: + + easy_install pytest-figleaf # or + pip install pytest-figleaf + +and if you are using pip you can also uninstall:: + + pip uninstall pytest-figleaf + + Usage --------------- -after pip or easy_install mediated installation of ``pytest-figleaf`` you can type:: +After installation you can simply type:: py.test --figleaf [...] to enable figleaf coverage in your test run. A default ".figleaf" data file -and "html" directory will be created. You can use ``--fig-data`` -and ``fig-html`` to modify the paths. +and "html" directory will be created. You can use command line options +to control where data and html files are created. command line options -------------------- diff --git a/doc/test/plugin/helpconfig.txt b/doc/test/plugin/helpconfig.txt index 5c307a7bb..966bbc988 100644 --- a/doc/test/plugin/helpconfig.txt +++ b/doc/test/plugin/helpconfig.txt @@ -19,7 +19,7 @@ command line options ``--traceconfig`` trace considerations of conftest.py files. ``--nomagic`` - don't reinterpret asserts, no traceback cutting. + don't reinterpret asserts, no traceback cutting. ``--debug`` generate and show internal debugging information. ``--help-config`` diff --git a/doc/test/plugin/hookspec.txt b/doc/test/plugin/hookspec.txt index d56501d54..3f52d9bb4 100644 --- a/doc/test/plugin/hookspec.txt +++ b/doc/test/plugin/hookspec.txt @@ -7,67 +7,67 @@ hook specification sourcecode """ hook specifications for py.test plugins """ - + # ------------------------------------------------------------------------- # Command line and configuration # ------------------------------------------------------------------------- - + def pytest_namespace(): "return dict of name->object which will get stored at py.test. namespace" - + def pytest_addoption(parser): "add optparse-style options via parser.addoption." - + def pytest_addhooks(pluginmanager): "add hooks via pluginmanager.registerhooks(module)" - + def pytest_configure(config): """ called after command line options have been parsed. and all plugins and initial conftest files been loaded. """ - + def pytest_unconfigure(config): """ called before test process is exited. """ - + # ------------------------------------------------------------------------- # collection hooks # ------------------------------------------------------------------------- - + def pytest_ignore_collect(path, config): """ return true value to prevent considering this path for collection. This hook is consulted for all files and directories prior to considering collection hooks. """ pytest_ignore_collect.firstresult = True - + def pytest_collect_directory(path, parent): """ return Collection node or None for the given path. """ pytest_collect_directory.firstresult = True - + def pytest_collect_file(path, parent): """ return Collection node or None for the given path. """ - + def pytest_collectstart(collector): """ collector starts collecting. """ - + def pytest_collectreport(report): """ collector finished collecting. """ - + def pytest_deselected(items): """ called for test items deselected by keyword. """ - + def pytest_make_collect_report(collector): """ perform a collection and return a collection. """ pytest_make_collect_report.firstresult = True - + # XXX rename to item_collected()? meaning in distribution context? def pytest_itemstart(item, node=None): """ test item gets collected. """ - + # ------------------------------------------------------------------------- # Python test function related hooks # ------------------------------------------------------------------------- - + def pytest_pycollect_makemodule(path, parent): """ return a Module collector or None for the given path. This hook will be called for each matching test module path. @@ -75,105 +75,105 @@ hook specification sourcecode create test modules for files that do not match as a test module. """ pytest_pycollect_makemodule.firstresult = True - + def pytest_pycollect_makeitem(collector, name, obj): """ return custom item/collector for a python object in a module, or None. """ pytest_pycollect_makeitem.firstresult = True - + def pytest_pyfunc_call(pyfuncitem): """ call underlying test function. """ pytest_pyfunc_call.firstresult = True - + def pytest_generate_tests(metafunc): """ generate (multiple) parametrized calls to a test function.""" - + # ------------------------------------------------------------------------- # generic runtest related hooks # ------------------------------------------------------------------------- - + def pytest_runtest_protocol(item): """ implement fixture, run and report about the given test item. """ pytest_runtest_protocol.firstresult = True - + def pytest_runtest_setup(item): """ called before pytest_runtest_call(). """ - + def pytest_runtest_call(item): """ execute test item. """ - + def pytest_runtest_teardown(item): """ called after pytest_runtest_call(). """ - + def pytest_runtest_makereport(item, call): """ make a test report for the given item and call outcome. """ pytest_runtest_makereport.firstresult = True - + def pytest_runtest_logreport(report): """ process item test report. """ - + # special handling for final teardown - somewhat internal for now def pytest__teardown_final(session): """ called before test session finishes. """ pytest__teardown_final.firstresult = True - + def pytest__teardown_final_logerror(report): """ called if runtest_teardown_final failed. """ - + # ------------------------------------------------------------------------- # test session related hooks # ------------------------------------------------------------------------- - + def pytest_sessionstart(session): """ before session.main() is called. """ - + def pytest_sessionfinish(session, exitstatus): """ whole test run finishes. """ - + # ------------------------------------------------------------------------- # hooks for influencing reporting (invoked from pytest_terminal) # ------------------------------------------------------------------------- - + def pytest_report_header(config): """ return a string to be displayed as header info for terminal reporting.""" - + def pytest_report_teststatus(report): """ return result-category, shortletter and verbose word for reporting.""" pytest_report_teststatus.firstresult = True - + def pytest_terminal_summary(terminalreporter): """ add additional section in terminal summary reporting. """ - + def pytest_report_iteminfo(item): """ return (fspath, lineno, name) for the item. the information is used for result display and to sort tests """ pytest_report_iteminfo.firstresult = True - + # ------------------------------------------------------------------------- # doctest hooks # ------------------------------------------------------------------------- - + def pytest_doctest_prepare_content(content): """ return processed content for a given doctest""" pytest_doctest_prepare_content.firstresult = True - - + + # ------------------------------------------------------------------------- # error handling and internal debugging hooks # ------------------------------------------------------------------------- - + def pytest_plugin_registered(plugin, manager): """ a new py lib plugin got registered. """ - + def pytest_plugin_unregistered(plugin): """ a py lib plugin got unregistered. """ - + def pytest_internalerror(excrepr): """ called for internal errors. """ - + def pytest_keyboard_interrupt(excinfo): """ called for keyboard interrupt. """ - + def pytest_trace(category, msg): """ called for debug info. """ @@ -182,25 +182,25 @@ hook specification sourcecode .. sourcecode:: python - + def pytest_gwmanage_newgateway(gateway, platinfo): """ called on new raw gateway creation. """ - + def pytest_gwmanage_rsyncstart(source, gateways): """ called before rsyncing a directory to remote gateways takes place. """ - + def pytest_gwmanage_rsyncfinish(source, gateways): """ called after rsyncing a directory to remote gateways takes place. """ - + def pytest_configure_node(node): """ configure node information before it gets instantiated. """ - + def pytest_testnodeready(node): """ Test Node is ready to operate. """ - + def pytest_testnodedown(node, error): """ Test Node is down. """ - + def pytest_rescheduleitems(items): """ reschedule Items from a node that went down. """ diff --git a/doc/test/plugin/links.txt b/doc/test/plugin/links.txt index 568c74f29..b7d427856 100644 --- a/doc/test/plugin/links.txt +++ b/doc/test/plugin/links.txt @@ -1,47 +1,47 @@ .. _`helpconfig`: helpconfig.html -.. _`pytest_recwarn.py`: http://bitbucket.org/hpk42/py-trunk/raw/1.3.2/py/_plugin/pytest_recwarn.py +.. _`pytest_recwarn.py`: http://bitbucket.org/hpk42/py-trunk/raw/1.3.4/py/_plugin/pytest_recwarn.py .. _`unittest`: unittest.html -.. _`pytest_monkeypatch.py`: http://bitbucket.org/hpk42/py-trunk/raw/1.3.2/py/_plugin/pytest_monkeypatch.py -.. _`pytest_genscript.py`: http://bitbucket.org/hpk42/py-trunk/raw/1.3.2/py/_plugin/pytest_genscript.py +.. _`pytest_monkeypatch.py`: http://bitbucket.org/hpk42/py-trunk/raw/1.3.4/py/_plugin/pytest_monkeypatch.py +.. _`pytest_genscript.py`: http://bitbucket.org/hpk42/py-trunk/raw/1.3.4/py/_plugin/pytest_genscript.py .. _`pastebin`: pastebin.html .. _`skipping`: skipping.html .. _`genscript`: genscript.html .. _`plugins`: index.html .. _`mark`: mark.html .. _`tmpdir`: tmpdir.html -.. _`pytest_doctest.py`: http://bitbucket.org/hpk42/py-trunk/raw/1.3.2/py/_plugin/pytest_doctest.py +.. _`pytest_doctest.py`: http://bitbucket.org/hpk42/py-trunk/raw/1.3.4/py/_plugin/pytest_doctest.py .. _`capture`: capture.html -.. _`pytest_nose.py`: http://bitbucket.org/hpk42/py-trunk/raw/1.3.2/py/_plugin/pytest_nose.py -.. _`pytest_restdoc.py`: http://bitbucket.org/hpk42/py-trunk/raw/1.3.2/py/_plugin/pytest_restdoc.py +.. _`pytest_nose.py`: http://bitbucket.org/hpk42/py-trunk/raw/1.3.4/py/_plugin/pytest_nose.py +.. _`pytest_restdoc.py`: http://bitbucket.org/hpk42/py-trunk/raw/1.3.4/py/_plugin/pytest_restdoc.py .. _`restdoc`: restdoc.html .. _`xdist`: xdist.html -.. _`pytest_pastebin.py`: http://bitbucket.org/hpk42/py-trunk/raw/1.3.2/py/_plugin/pytest_pastebin.py -.. _`pytest_tmpdir.py`: http://bitbucket.org/hpk42/py-trunk/raw/1.3.2/py/_plugin/pytest_tmpdir.py +.. _`pytest_pastebin.py`: http://bitbucket.org/hpk42/py-trunk/raw/1.3.4/py/_plugin/pytest_pastebin.py +.. _`pytest_tmpdir.py`: http://bitbucket.org/hpk42/py-trunk/raw/1.3.4/py/_plugin/pytest_tmpdir.py .. _`terminal`: terminal.html -.. _`pytest_hooklog.py`: http://bitbucket.org/hpk42/py-trunk/raw/1.3.2/py/_plugin/pytest_hooklog.py +.. _`pytest_hooklog.py`: http://bitbucket.org/hpk42/py-trunk/raw/1.3.4/py/_plugin/pytest_hooklog.py .. _`capturelog`: capturelog.html .. _`junitxml`: junitxml.html -.. _`pytest_skipping.py`: http://bitbucket.org/hpk42/py-trunk/raw/1.3.2/py/_plugin/pytest_skipping.py +.. _`pytest_skipping.py`: http://bitbucket.org/hpk42/py-trunk/raw/1.3.4/py/_plugin/pytest_skipping.py .. _`checkout the py.test development version`: ../../install.html#checkout -.. _`pytest_helpconfig.py`: http://bitbucket.org/hpk42/py-trunk/raw/1.3.2/py/_plugin/pytest_helpconfig.py +.. _`pytest_helpconfig.py`: http://bitbucket.org/hpk42/py-trunk/raw/1.3.4/py/_plugin/pytest_helpconfig.py .. _`oejskit`: oejskit.html .. _`doctest`: doctest.html -.. _`pytest_mark.py`: http://bitbucket.org/hpk42/py-trunk/raw/1.3.2/py/_plugin/pytest_mark.py +.. _`pytest_mark.py`: http://bitbucket.org/hpk42/py-trunk/raw/1.3.4/py/_plugin/pytest_mark.py .. _`get in contact`: ../../contact.html -.. _`pytest_capture.py`: http://bitbucket.org/hpk42/py-trunk/raw/1.3.2/py/_plugin/pytest_capture.py +.. _`pytest_capture.py`: http://bitbucket.org/hpk42/py-trunk/raw/1.3.4/py/_plugin/pytest_capture.py .. _`figleaf`: figleaf.html .. _`customize`: ../customize.html .. _`hooklog`: hooklog.html -.. _`pytest_terminal.py`: http://bitbucket.org/hpk42/py-trunk/raw/1.3.2/py/_plugin/pytest_terminal.py +.. _`pytest_terminal.py`: http://bitbucket.org/hpk42/py-trunk/raw/1.3.4/py/_plugin/pytest_terminal.py .. _`recwarn`: recwarn.html -.. _`pytest_pdb.py`: http://bitbucket.org/hpk42/py-trunk/raw/1.3.2/py/_plugin/pytest_pdb.py +.. _`pytest_pdb.py`: http://bitbucket.org/hpk42/py-trunk/raw/1.3.4/py/_plugin/pytest_pdb.py .. _`monkeypatch`: monkeypatch.html .. _`coverage`: coverage.html .. _`resultlog`: resultlog.html .. _`cov`: cov.html -.. _`pytest_junitxml.py`: http://bitbucket.org/hpk42/py-trunk/raw/1.3.2/py/_plugin/pytest_junitxml.py +.. _`pytest_junitxml.py`: http://bitbucket.org/hpk42/py-trunk/raw/1.3.4/py/_plugin/pytest_junitxml.py .. _`django`: django.html -.. _`pytest_unittest.py`: http://bitbucket.org/hpk42/py-trunk/raw/1.3.2/py/_plugin/pytest_unittest.py +.. _`pytest_unittest.py`: http://bitbucket.org/hpk42/py-trunk/raw/1.3.4/py/_plugin/pytest_unittest.py .. _`nose`: nose.html -.. _`pytest_resultlog.py`: http://bitbucket.org/hpk42/py-trunk/raw/1.3.2/py/_plugin/pytest_resultlog.py +.. _`pytest_resultlog.py`: http://bitbucket.org/hpk42/py-trunk/raw/1.3.4/py/_plugin/pytest_resultlog.py .. _`pdb`: pdb.html diff --git a/doc/test/plugin/xdist.txt b/doc/test/plugin/xdist.txt index 5d05ccc91..4dbcc78c7 100644 --- a/doc/test/plugin/xdist.txt +++ b/doc/test/plugin/xdist.txt @@ -156,11 +156,11 @@ command line options box each test run in a separate process (unix) ``--dist=distmode`` set mode for distributing tests to exec environments. - + each: send each test to each available environment. - + load: send each test to available environment. - + (default) no: run tests inprocess, don't distribute. ``--tx=xspec`` add a test execution environment. some examples: --tx popen//python=python2.5 --tx socket=192.168.1.102:8888 --tx ssh=user@codespeak.net//chdir=testcache From 350ebbd9ad5b1f01363abc84fb7dd8c70417dc86 Mon Sep 17 00:00:00 2001 From: holger krekel Date: Tue, 14 Sep 2010 17:35:17 +0200 Subject: [PATCH 11/11] Added tag 1.3.4 for changeset 90fffd35373e --HG-- branch : trunk --- .hgtags | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.hgtags b/.hgtags index ccf5d89af..eadb1993b 100644 --- a/.hgtags +++ b/.hgtags @@ -29,3 +29,5 @@ d5eacf390af74553227122b85e20345d47b2f9e6 1.3.1 3bff44b188a7ec1af328d977b9d39b6757bb38df 1.3.2 c59d3fa8681a5b5966b8375b16fccd64a3a8dbeb 1.3.3 79ef6377705184c55633d456832eea318fedcf61 1.3.4 +79ef6377705184c55633d456832eea318fedcf61 1.3.4 +90fffd35373e9f125af233f78b19416f0938d841 1.3.4