From commits-noreply at bitbucket.org Sat Sep 4 09:24:08 2010 From: commits-noreply at bitbucket.org (commits-noreply at bitbucket.org) Date: Sat, 4 Sep 2010 02:24:08 -0500 (CDT) Subject: [py-svn] py-trunk commit d30992862e8c: fix issue116 : --doctestmodules also works in the presence of __init__.py files, done by fixing the underlyingly used path.pyimport() Message-ID: <20100904072408.82897241288@bitbucket01.managed.contegix.com> # HG changeset patch -- Bitbucket.org # Project py-trunk # URL http://bitbucket.org/hpk42/py-trunk/overview # User holger krekel # Date 1283584895 -7200 # Node ID d30992862e8c305d7b4545a69917fab32e82f1e7 # Parent 971cc7cb03bb49131642fb6ab06a7ca38a2f5094 fix issue116 : --doctestmodules also works in the presence of __init__.py files, done by fixing the underlyingly used path.pyimport() --- a/py/_path/local.py +++ b/py/_path/local.py @@ -519,6 +519,8 @@ class LocalPath(FSBase): pkg = __import__(pkgpath.basename, None, None, []) names = self.new(ext='').relto(pkgpath.dirpath()) names = names.split(self.sep) + if names and names[-1] == "__init__": + names.pop() modname = ".".join(names) else: # no package scope, still make it possible @@ -532,7 +534,8 @@ class LocalPath(FSBase): elif modfile.endswith('$py.class'): modfile = modfile[:-9] + '.py' if modfile.endswith("__init__.py"): - modfile = modfile[:-12] + if self.basename != "__init__.py": + modfile = modfile[:-12] if not self.samefile(modfile): raise self.ImportMismatchError(modname, modfile, self) return mod --- a/testing/path/test_local.py +++ b/testing/path/test_local.py @@ -306,9 +306,11 @@ class TestImport: def test_pyimport_dir(self, tmpdir): p = tmpdir.join("hello_123") - p.ensure("__init__.py") + p_init = p.ensure("__init__.py") m = p.pyimport() assert m.__name__ == "hello_123" + m = p_init.pyimport() + assert m.__name__ == "hello_123" def test_pyimport_execfile_different_name(self, path1): obj = path1.join('execfile.py').pyimport(modname="0x.y.z") --- a/testing/plugin/test_pytest_doctest.py +++ b/testing/plugin/test_pytest_doctest.py @@ -1,4 +1,5 @@ from py._plugin.pytest_doctest import DoctestModule, DoctestTextfile +import py pytest_plugins = ["pytest_doctest"] @@ -73,16 +74,16 @@ class TestDoctests: reprec = testdir.inline_run(p, "--doctest-modules") reprec.assertoutcome(failed=1) - def test_doctestmodule_external(self, testdir): - p = testdir.makepyfile(""" - # + def test_doctestmodule_external_and_issue116(self, testdir): + p = testdir.mkpydir("hello") + p.join("__init__.py").write(py.code.Source(""" def somefunc(): ''' >>> i = 0 >>> i + 1 2 ''' - """) + """)) result = testdir.runpytest(p, "--doctest-modules") result.stdout.fnmatch_lines([ '004 *>>> i = 0', --- a/CHANGELOG +++ b/CHANGELOG @@ -1,3 +1,8 @@ +Changes between 1.3.3 and XXX +================================================== + +- fix issue116: --doctestmodules works in the presence of __init__.py files as well + Changes between 1.3.2 and 1.3.3 ================================================== From commits-noreply at bitbucket.org Tue Sep 7 10:06:36 2010 From: commits-noreply at bitbucket.org (commits-noreply at bitbucket.org) Date: Tue, 7 Sep 2010 03:06:36 -0500 (CDT) Subject: [py-svn] py-trunk commit 04b17770932e: patch from flub to allow callable objects as hook implementations Message-ID: <20100907080636.1BA591E1056@bitbucket02.managed.contegix.com> # HG changeset patch -- Bitbucket.org # Project py-trunk # URL http://bitbucket.org/hpk42/py-trunk/overview # User holger krekel # Date 1283846591 -7200 # Node ID 04b17770932e208406d8bf0d4ba890c6a61da614 # Parent d30992862e8c305d7b4545a69917fab32e82f1e7 patch from flub to allow callable objects as hook implementations --- a/py/_test/pluginmanager.py +++ b/py/_test/pluginmanager.py @@ -259,6 +259,8 @@ class MultiCall: return kwargs def varnames(func): + if not inspect.isfunction(func) and not inspect.ismethod(func): + func = getattr(func, '__call__', func) ismethod = inspect.ismethod(func) rawcode = py.code.getrawcode(func) try: --- a/testing/test_pluginmanager.py +++ b/testing/test_pluginmanager.py @@ -340,8 +340,12 @@ def test_varnames(): class A: def f(self, y): pass + class B(object): + def __call__(self, z): + pass assert varnames(f) == ("x",) assert varnames(A().f) == ('y',) + assert varnames(B()) == ('z',) class TestMultiCall: def test_uses_copy_of_methods(self): From mailer at bitbucket.org Wed Sep 8 16:55:37 2010 From: mailer at bitbucket.org (mailer at bitbucket.org) Date: Wed, 8 Sep 2010 14:55:37 +0000 (UTC) Subject: [py-svn] py-trunk commit 91d8df794e91: applied ronny's patch, fixes #116 Message-ID: <20100908145537.0C9C347811@bitbucket.org> # HG changeset patch -- Bitbucket.org # Project py-trunk # URL http://bitbucket.org/hpk42/py-trunk/overview # User holger krekel # Date 1283957506 -7200 # Node ID 91d8df794e911a3ab44c0f125857537dbc698af6 # Parent e4584264f64870c3fe36a83f401a6a8bb2bd7e13 applied ronny's patch, fixes #116 --- 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 mailer at bitbucket.org Wed Sep 8 16:55:36 2010 From: mailer at bitbucket.org (mailer at bitbucket.org) Date: Wed, 8 Sep 2010 14:55:36 +0000 (UTC) Subject: [py-svn] py-trunk commit e4584264f648: implement and naively test the native traceback style Message-ID: <20100908145536.E9E4F47810@bitbucket.org> # HG changeset patch -- Bitbucket.org # Project py-trunk # URL http://bitbucket.org/hpk42/py-trunk/overview # User Ronny Pfannschmidt # Date 1283940036 -7200 # Node ID e4584264f64870c3fe36a83f401a6a8bb2bd7e13 # Parent 04b17770932e208406d8bf0d4ba890c6a61da614 implement and naively test the native traceback style --- 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') --- 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) --- 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, From commits-noreply at bitbucket.org Wed Sep 8 18:33:09 2010 From: commits-noreply at bitbucket.org (commits-noreply at bitbucket.org) Date: Wed, 8 Sep 2010 11:33:09 -0500 (CDT) Subject: [py-svn] py-trunk commit 9684ef61e64e: fixing test for python2.4 (thanks ronny) Message-ID: <20100908163309.6D7836C1251@bitbucket03.managed.contegix.com> # HG changeset patch -- Bitbucket.org # Project py-trunk # URL http://bitbucket.org/hpk42/py-trunk/overview # User holger krekel # Date 1283963366 -7200 # Node ID 9684ef61e64e3e4828bf043448a0cd0363fab321 # Parent 91d8df794e911a3ab44c0f125857537dbc698af6 fixing test for python2.4 (thanks ronny) --- 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 py-svn at codespeak.net Sun Sep 12 22:42:54 2010 From: py-svn at codespeak.net (Approved by Pfizer) Date: Sun, 12 Sep 2010 17:42:54 -0300 Subject: [py-svn] Hi py-svn, all on 80% off! Dictatorship Message-ID: <20100912204253.CC617282B90@codespeak.net> An HTML attachment was scrubbed... URL: From commits-noreply at bitbucket.org Tue Sep 14 15:47:00 2010 From: commits-noreply at bitbucket.org (commits-noreply at bitbucket.org) Date: Tue, 14 Sep 2010 08:47:00 -0500 (CDT) Subject: [py-svn] py-trunk commit 5ec349dff3b7: preliminary release announcement Message-ID: <20100914134700.EBEAD6C103E@bitbucket03.managed.contegix.com> # HG changeset patch -- Bitbucket.org # Project py-trunk # URL http://bitbucket.org/hpk42/py-trunk/overview # User holger krekel # Date 1284471990 -7200 # Node ID 5ec349dff3b7ff77e842ce377e206799132697e1 # Parent a2fdaf73b6be96cad2c05fe6545d4dbe6ec6b73b preliminary release announcement --- /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 mailer at bitbucket.org Tue Sep 14 15:43:48 2010 From: mailer at bitbucket.org (mailer at bitbucket.org) Date: Tue, 14 Sep 2010 13:43:48 +0000 (UTC) Subject: [py-svn] py-trunk commit a2fdaf73b6be: simplify and fix installation instructions particularly for windows (fixes #111) Message-ID: <20100914134348.01D1C47811@bitbucket.org> # HG changeset patch -- Bitbucket.org # Project py-trunk # URL http://bitbucket.org/hpk42/py-trunk/overview # User holger krekel # Date 1284471780 -7200 # Node ID a2fdaf73b6be96cad2c05fe6545d4dbe6ec6b73b # Parent 9684ef61e64e3e4828bf043448a0cd0363fab321 simplify and fix installation instructions particularly for windows (fixes #111) and bump version to 1.3.4 --- 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 --- 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', --- a/doc/install.txt +++ b/doc/install.txt @@ -26,7 +26,47 @@ py.test/pylib installation info in a nut .. _`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 virtu (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 downlo 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`: --- 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 From commits-noreply at bitbucket.org Tue Sep 14 16:18:56 2010 From: commits-noreply at bitbucket.org (commits-noreply at bitbucket.org) Date: Tue, 14 Sep 2010 09:18:56 -0500 (CDT) Subject: [py-svn] py-trunk commit 44656a668257: some small doc fixes Message-ID: <20100914141856.9942E1E1071@bitbucket02.managed.contegix.com> # HG changeset patch -- Bitbucket.org # Project py-trunk # URL http://bitbucket.org/hpk42/py-trunk/overview # User holger krekel # Date 1284473886 -7200 # Node ID 44656a668257838185c8772b8c184cb00c57b4ca # Parent fe8516e8582a56daaefb50022b3c71d1ecc0ef86 some small doc fixes --- a/setup.py +++ b/setup.py @@ -12,8 +12,12 @@ py.test and pylib: rapid testing and dev - `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 --- 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 ================================================== From commits-noreply at bitbucket.org Tue Sep 14 16:18:56 2010 From: commits-noreply at bitbucket.org (commits-noreply at bitbucket.org) Date: Tue, 14 Sep 2010 09:18:56 -0500 (CDT) Subject: [py-svn] py-trunk commit fe8516e8582a: introduce py.builtin._sysex as alias for the special exceptions, fixes #115 Message-ID: <20100914141856.7618E1E1070@bitbucket02.managed.contegix.com> # HG changeset patch -- Bitbucket.org # Project py-trunk # URL http://bitbucket.org/hpk42/py-trunk/overview # User Ronny Pfannschmidt # Date 1284473570 -7200 # Node ID fe8516e8582a56daaefb50022b3c71d1ecc0ef86 # Parent 5ec349dff3b7ff77e842ce377e206799132697e1 introduce py.builtin._sysex as alias for the special exceptions, fixes #115 --- 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): --- 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', --- 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 --- 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 --- 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 ================================================== --- 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 --- 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() --- 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() --- a/py/_code/assertion.py +++ b/py/_code/assertion.py @@ -44,7 +44,7 @@ class AssertionError(BuiltinAssertionErr if args: try: self.msg = str(args[0]) - except (KeyboardInterrupt, SystemExit): + except py.builtin._sysex: raise except: self.msg = "<[broken __repr__] %s at %0xd>" %( --- 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 From commits-noreply at bitbucket.org Tue Sep 14 17:20:43 2010 From: commits-noreply at bitbucket.org (commits-noreply at bitbucket.org) Date: Tue, 14 Sep 2010 10:20:43 -0500 (CDT) Subject: [py-svn] py-trunk commit ba19deecc7c9: Added tag 1.3.4 for changeset 79ef63777051 Message-ID: <20100914152043.41F1C6C1319@bitbucket03.managed.contegix.com> # HG changeset patch -- Bitbucket.org # Project py-trunk # URL http://bitbucket.org/hpk42/py-trunk/overview # User holger krekel # Date 1284476081 -7200 # Node ID ba19deecc7c980c56e8c93b9af8f8c407fa64de6 # Parent 79ef6377705184c55633d456832eea318fedcf61 Added tag 1.3.4 for changeset 79ef63777051 --- a/.hgtags +++ b/.hgtags @@ -28,3 +28,4 @@ d5eacf390af74553227122b85e20345d47b2f9e6 8b8e7c25a13cf863f01b2dd955978285ae9daf6a 1.3.1 3bff44b188a7ec1af328d977b9d39b6757bb38df 1.3.2 c59d3fa8681a5b5966b8375b16fccd64a3a8dbeb 1.3.3 +79ef6377705184c55633d456832eea318fedcf61 1.3.4 From commits-noreply at bitbucket.org Tue Sep 14 17:20:43 2010 From: commits-noreply at bitbucket.org (commits-noreply at bitbucket.org) Date: Tue, 14 Sep 2010 10:20:43 -0500 (CDT) Subject: [py-svn] py-trunk commit 79ef63777051: finalize release announce and changelog Message-ID: <20100914152043.04A516C12F2@bitbucket03.managed.contegix.com> # HG changeset patch -- Bitbucket.org # Project py-trunk # URL http://bitbucket.org/hpk42/py-trunk/overview # User holger krekel # Date 1284474994 -7200 # Node ID 79ef6377705184c55633d456832eea318fedcf61 # Parent 44656a668257838185c8772b8c184cb00c57b4ca finalize release announce and changelog --- 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 --- 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 ================================================== From commits-noreply at bitbucket.org Tue Sep 14 17:38:56 2010 From: commits-noreply at bitbucket.org (commits-noreply at bitbucket.org) Date: Tue, 14 Sep 2010 10:38:56 -0500 (CDT) Subject: [py-svn] py-trunk commit 1d08ed01a85f: Added tag 1.3.4 for changeset 90fffd35373e Message-ID: <20100914153856.7D5836C12F2@bitbucket03.managed.contegix.com> # HG changeset patch -- Bitbucket.org # Project py-trunk # URL http://bitbucket.org/hpk42/py-trunk/overview # User holger krekel # Date 1284478517 -7200 # Node ID 1d08ed01a85f680d4e03920fdd3ef309c4f335c0 # Parent 90fffd35373e9f125af233f78b19416f0938d841 Added tag 1.3.4 for changeset 90fffd35373e --- a/.hgtags +++ b/.hgtags @@ -29,3 +29,5 @@ 8b8e7c25a13cf863f01b2dd955978285ae9daf6a 3bff44b188a7ec1af328d977b9d39b6757bb38df 1.3.2 c59d3fa8681a5b5966b8375b16fccd64a3a8dbeb 1.3.3 79ef6377705184c55633d456832eea318fedcf61 1.3.4 +79ef6377705184c55633d456832eea318fedcf61 1.3.4 +90fffd35373e9f125af233f78b19416f0938d841 1.3.4 From commits-noreply at bitbucket.org Tue Sep 14 17:38:56 2010 From: commits-noreply at bitbucket.org (commits-noreply at bitbucket.org) Date: Tue, 14 Sep 2010 10:38:56 -0500 (CDT) Subject: [py-svn] py-trunk commit 90fffd35373e: recreated plugin docs Message-ID: <20100914153856.B726F6C1319@bitbucket03.managed.contegix.com> # HG changeset patch -- Bitbucket.org # Project py-trunk # URL http://bitbucket.org/hpk42/py-trunk/overview # User holger krekel # Date 1284478501 -7200 # Node ID 90fffd35373e9f125af233f78b19416f0938d841 # Parent ba19deecc7c980c56e8c93b9af8f8c407fa64de6 recreated plugin docs --- a/doc/test/plugin/cov.txt +++ b/doc/test/plugin/cov.txt @@ -6,27 +6,39 @@ produce code coverage reports using the .. 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 + easy_install pytest-cov + +.. _`pytest-cov`: http://pypi.python.org/pypi/pytest-cov/ + + +Uninstallation +-------------- + +Uninstalling packages is supported by pip:: + pip uninstall pytest-cov -Alternatively easy_install can be used:: +However easy_install does not provide an uninstall facility. - easy_install pytest-cov +.. IMPORTANT:: -.. _`pytest-cov pypi`: http://pypi.python.org/pypi/pytest-cov/ + 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 at host1//chdir=testenv1 + --tx ssh=memedough at 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 at 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 --- a/doc/test/plugin/figleaf.txt +++ b/doc/test/plugin/figleaf.txt @@ -6,16 +6,29 @@ report test coverage using the 'figleaf' .. 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 -------------------- --- 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 at codespeak.net//chdir=testcache --- 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 ================================================== --- 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 --- 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. """ --- a/doc/test/plugin/coverage.txt +++ b/doc/test/plugin/coverage.txt @@ -6,10 +6,27 @@ Write and report coverage data with the .. 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`` --- 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`` --- 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::