parent
68bed00d5b
commit
0e2ebc96ff
|
@ -16,8 +16,22 @@
|
||||||
|
|
||||||
*
|
*
|
||||||
|
|
||||||
|
**Incompatible changes**
|
||||||
|
|
||||||
|
* Removing the following deprecated commandline options
|
||||||
|
|
||||||
|
* genscript
|
||||||
|
* no-assert
|
||||||
|
* nomagic
|
||||||
|
* report
|
||||||
|
|
||||||
|
Thanks to `@RedBeardCode`_ for the PR(`#1664`_)
|
||||||
|
|
||||||
|
|
||||||
.. _#607: https://github.com/pytest-dev/pytest/issues/607
|
.. _#607: https://github.com/pytest-dev/pytest/issues/607
|
||||||
.. _#1519: https://github.com/pytest-dev/pytest/pull/1519
|
.. _#1519: https://github.com/pytest-dev/pytest/pull/1519
|
||||||
|
.. _#1664: https://github.com/pytest-dev/pytest/pull/1664
|
||||||
|
|
||||||
|
|
||||||
2.10.0.dev1
|
2.10.0.dev1
|
||||||
===========
|
===========
|
||||||
|
@ -146,7 +160,6 @@
|
||||||
* Add proposal to docs for a new feature that enables users to combine multiple
|
* Add proposal to docs for a new feature that enables users to combine multiple
|
||||||
fixtures into one. Thanks to `@hpk42`_ and `@hackebrot`_.
|
fixtures into one. Thanks to `@hpk42`_ and `@hackebrot`_.
|
||||||
|
|
||||||
*
|
|
||||||
|
|
||||||
.. _#1580: https://github.com/pytest-dev/pytest/pull/1580
|
.. _#1580: https://github.com/pytest-dev/pytest/pull/1580
|
||||||
.. _#1605: https://github.com/pytest-dev/pytest/issues/1605
|
.. _#1605: https://github.com/pytest-dev/pytest/issues/1605
|
||||||
|
|
|
@ -25,15 +25,6 @@ def pytest_addoption(parser):
|
||||||
'rewrite' (the default) rewrites assert
|
'rewrite' (the default) rewrites assert
|
||||||
statements in test modules on import to
|
statements in test modules on import to
|
||||||
provide assert expression information. """)
|
provide assert expression information. """)
|
||||||
group.addoption('--no-assert',
|
|
||||||
action="store_true",
|
|
||||||
default=False,
|
|
||||||
dest="noassert",
|
|
||||||
help="DEPRECATED equivalent to --assert=plain")
|
|
||||||
group.addoption('--nomagic', '--no-magic',
|
|
||||||
action="store_true",
|
|
||||||
default=False,
|
|
||||||
help="DEPRECATED equivalent to --assert=plain")
|
|
||||||
|
|
||||||
|
|
||||||
class AssertionState:
|
class AssertionState:
|
||||||
|
@ -48,10 +39,6 @@ class AssertionState:
|
||||||
def pytest_load_initial_conftests(early_config, parser, args):
|
def pytest_load_initial_conftests(early_config, parser, args):
|
||||||
ns, ns_unknown_args = parser.parse_known_and_unknown_args(args)
|
ns, ns_unknown_args = parser.parse_known_and_unknown_args(args)
|
||||||
mode = ns.assertmode
|
mode = ns.assertmode
|
||||||
no_assert = ns.noassert
|
|
||||||
no_magic = ns.nomagic
|
|
||||||
if no_assert or no_magic:
|
|
||||||
mode = "plain"
|
|
||||||
if mode == "rewrite":
|
if mode == "rewrite":
|
||||||
try:
|
try:
|
||||||
import ast # noqa
|
import ast # noqa
|
||||||
|
|
|
@ -64,7 +64,7 @@ _preinit = []
|
||||||
|
|
||||||
default_plugins = (
|
default_plugins = (
|
||||||
"mark main terminal runner python pdb unittest capture skipping "
|
"mark main terminal runner python pdb unittest capture skipping "
|
||||||
"tmpdir monkeypatch recwarn pastebin helpconfig nose assertion genscript "
|
"tmpdir monkeypatch recwarn pastebin helpconfig nose assertion "
|
||||||
"junitxml resultlog doctest cacheprovider setuponly setupplan").split()
|
"junitxml resultlog doctest cacheprovider setuponly setupplan").split()
|
||||||
|
|
||||||
builtin_plugins = set(default_plugins)
|
builtin_plugins = set(default_plugins)
|
||||||
|
|
|
@ -1,132 +0,0 @@
|
||||||
""" (deprecated) generate a single-file self-contained version of pytest """
|
|
||||||
import os
|
|
||||||
import sys
|
|
||||||
import pkgutil
|
|
||||||
|
|
||||||
import py
|
|
||||||
import _pytest
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
def find_toplevel(name):
|
|
||||||
for syspath in sys.path:
|
|
||||||
base = py.path.local(syspath)
|
|
||||||
lib = base/name
|
|
||||||
if lib.check(dir=1):
|
|
||||||
return lib
|
|
||||||
mod = base.join("%s.py" % name)
|
|
||||||
if mod.check(file=1):
|
|
||||||
return mod
|
|
||||||
raise LookupError(name)
|
|
||||||
|
|
||||||
def pkgname(toplevel, rootpath, path):
|
|
||||||
parts = path.parts()[len(rootpath.parts()):]
|
|
||||||
return '.'.join([toplevel] + [x.purebasename for x in parts])
|
|
||||||
|
|
||||||
def pkg_to_mapping(name):
|
|
||||||
toplevel = find_toplevel(name)
|
|
||||||
name2src = {}
|
|
||||||
if toplevel.check(file=1): # module
|
|
||||||
name2src[toplevel.purebasename] = toplevel.read()
|
|
||||||
else: # package
|
|
||||||
for pyfile in toplevel.visit('*.py'):
|
|
||||||
pkg = pkgname(name, toplevel, pyfile)
|
|
||||||
name2src[pkg] = pyfile.read()
|
|
||||||
# with wheels py source code might be not be installed
|
|
||||||
# and the resulting genscript is useless, just bail out.
|
|
||||||
assert name2src, "no source code found for %r at %r" %(name, toplevel)
|
|
||||||
return name2src
|
|
||||||
|
|
||||||
def compress_mapping(mapping):
|
|
||||||
import base64, pickle, zlib
|
|
||||||
data = pickle.dumps(mapping, 2)
|
|
||||||
data = zlib.compress(data, 9)
|
|
||||||
data = base64.encodestring(data)
|
|
||||||
data = data.decode('ascii')
|
|
||||||
return data
|
|
||||||
|
|
||||||
|
|
||||||
def compress_packages(names):
|
|
||||||
mapping = {}
|
|
||||||
for name in names:
|
|
||||||
mapping.update(pkg_to_mapping(name))
|
|
||||||
return compress_mapping(mapping)
|
|
||||||
|
|
||||||
def generate_script(entry, packages):
|
|
||||||
data = compress_packages(packages)
|
|
||||||
tmpl = py.path.local(__file__).dirpath().join('standalonetemplate.py')
|
|
||||||
exe = tmpl.read()
|
|
||||||
exe = exe.replace('@SOURCES@', data)
|
|
||||||
exe = exe.replace('@ENTRY@', entry)
|
|
||||||
return exe
|
|
||||||
|
|
||||||
|
|
||||||
def pytest_addoption(parser):
|
|
||||||
group = parser.getgroup("debugconfig")
|
|
||||||
group.addoption("--genscript", action="store", default=None,
|
|
||||||
dest="genscript", metavar="path",
|
|
||||||
help="create standalone pytest script at given target path.")
|
|
||||||
|
|
||||||
def pytest_cmdline_main(config):
|
|
||||||
import _pytest.config
|
|
||||||
genscript = config.getvalue("genscript")
|
|
||||||
if genscript:
|
|
||||||
tw = _pytest.config.create_terminal_writer(config)
|
|
||||||
tw.line("WARNING: usage of genscript is deprecated.",
|
|
||||||
red=True)
|
|
||||||
deps = ['py', '_pytest', 'pytest'] # pluggy is vendored
|
|
||||||
if sys.version_info < (2,7):
|
|
||||||
deps.append("argparse")
|
|
||||||
tw.line("generated script will run on python2.6-python3.3++")
|
|
||||||
else:
|
|
||||||
tw.line("WARNING: generated script will not run on python2.6 "
|
|
||||||
"due to 'argparse' dependency. Use python2.6 "
|
|
||||||
"to generate a python2.6 compatible script", red=True)
|
|
||||||
script = generate_script(
|
|
||||||
'import pytest; raise SystemExit(pytest.cmdline.main())',
|
|
||||||
deps,
|
|
||||||
)
|
|
||||||
genscript = py.path.local(genscript)
|
|
||||||
genscript.write(script)
|
|
||||||
tw.line("generated pytest standalone script: %s" % genscript,
|
|
||||||
bold=True)
|
|
||||||
return 0
|
|
||||||
|
|
||||||
|
|
||||||
def pytest_namespace():
|
|
||||||
return {'freeze_includes': freeze_includes}
|
|
||||||
|
|
||||||
|
|
||||||
def freeze_includes():
|
|
||||||
"""
|
|
||||||
Returns a list of module names used by pytest that should be
|
|
||||||
included by cx_freeze.
|
|
||||||
"""
|
|
||||||
result = list(_iter_all_modules(py))
|
|
||||||
result += list(_iter_all_modules(_pytest))
|
|
||||||
return result
|
|
||||||
|
|
||||||
|
|
||||||
def _iter_all_modules(package, prefix=''):
|
|
||||||
"""
|
|
||||||
Iterates over the names of all modules that can be found in the given
|
|
||||||
package, recursively.
|
|
||||||
|
|
||||||
Example:
|
|
||||||
_iter_all_modules(_pytest) ->
|
|
||||||
['_pytest.assertion.newinterpret',
|
|
||||||
'_pytest.capture',
|
|
||||||
'_pytest.core',
|
|
||||||
...
|
|
||||||
]
|
|
||||||
"""
|
|
||||||
if type(package) is not str:
|
|
||||||
path, prefix = package.__path__[0], package.__name__ + '.'
|
|
||||||
else:
|
|
||||||
path = package
|
|
||||||
for _, name, is_package in pkgutil.iter_modules([path]):
|
|
||||||
if is_package:
|
|
||||||
for m in _iter_all_modules(os.path.join(path, name), prefix=name + '.'):
|
|
||||||
yield prefix + m
|
|
||||||
else:
|
|
||||||
yield prefix + name
|
|
|
@ -1,89 +0,0 @@
|
||||||
#! /usr/bin/env python
|
|
||||||
|
|
||||||
# Hi There!
|
|
||||||
# You may be wondering what this giant blob of binary data here is, you might
|
|
||||||
# even be worried that we're up to something nefarious (good for you for being
|
|
||||||
# paranoid!). This is a base64 encoding of a zip file, this zip file contains
|
|
||||||
# a fully functional basic pytest script.
|
|
||||||
#
|
|
||||||
# Pytest is a thing that tests packages, pytest itself is a package that some-
|
|
||||||
# one might want to install, especially if they're looking to run tests inside
|
|
||||||
# some package they want to install. Pytest has a lot of code to collect and
|
|
||||||
# execute tests, and other such sort of "tribal knowledge" that has been en-
|
|
||||||
# coded in its code base. Because of this we basically include a basic copy
|
|
||||||
# of pytest inside this blob. We do this because it let's you as a maintainer
|
|
||||||
# or application developer who wants people who don't deal with python much to
|
|
||||||
# easily run tests without installing the complete pytest package.
|
|
||||||
#
|
|
||||||
# If you're wondering how this is created: you can create it yourself if you
|
|
||||||
# have a complete pytest installation by using this command on the command-
|
|
||||||
# line: ``pytest --genscript=runtests.py``.
|
|
||||||
|
|
||||||
sources = """
|
|
||||||
@SOURCES@"""
|
|
||||||
|
|
||||||
import sys
|
|
||||||
import base64
|
|
||||||
import zlib
|
|
||||||
|
|
||||||
class DictImporter(object):
|
|
||||||
def __init__(self, sources):
|
|
||||||
self.sources = sources
|
|
||||||
|
|
||||||
def find_module(self, fullname, path=None):
|
|
||||||
if fullname == "argparse" and sys.version_info >= (2,7):
|
|
||||||
# we were generated with <python2.7 (which pulls in argparse)
|
|
||||||
# but we are running now on a stdlib which has it, so use that.
|
|
||||||
return None
|
|
||||||
if fullname in self.sources:
|
|
||||||
return self
|
|
||||||
if fullname + '.__init__' in self.sources:
|
|
||||||
return self
|
|
||||||
return None
|
|
||||||
|
|
||||||
def load_module(self, fullname):
|
|
||||||
# print "load_module:", fullname
|
|
||||||
from types import ModuleType
|
|
||||||
try:
|
|
||||||
s = self.sources[fullname]
|
|
||||||
is_pkg = False
|
|
||||||
except KeyError:
|
|
||||||
s = self.sources[fullname + '.__init__']
|
|
||||||
is_pkg = True
|
|
||||||
|
|
||||||
co = compile(s, fullname, 'exec')
|
|
||||||
module = sys.modules.setdefault(fullname, ModuleType(fullname))
|
|
||||||
module.__file__ = "%s/%s" % (__file__, fullname)
|
|
||||||
module.__loader__ = self
|
|
||||||
if is_pkg:
|
|
||||||
module.__path__ = [fullname]
|
|
||||||
|
|
||||||
do_exec(co, module.__dict__) # noqa
|
|
||||||
return sys.modules[fullname]
|
|
||||||
|
|
||||||
def get_source(self, name):
|
|
||||||
res = self.sources.get(name)
|
|
||||||
if res is None:
|
|
||||||
res = self.sources.get(name + '.__init__')
|
|
||||||
return res
|
|
||||||
|
|
||||||
if __name__ == "__main__":
|
|
||||||
try:
|
|
||||||
import pkg_resources # noqa
|
|
||||||
except ImportError:
|
|
||||||
sys.stderr.write("ERROR: setuptools not installed\n")
|
|
||||||
sys.exit(2)
|
|
||||||
if sys.version_info >= (3, 0):
|
|
||||||
exec("def do_exec(co, loc): exec(co, loc)\n")
|
|
||||||
import pickle
|
|
||||||
sources = sources.encode("ascii") # ensure bytes
|
|
||||||
sources = pickle.loads(zlib.decompress(base64.decodebytes(sources)))
|
|
||||||
else:
|
|
||||||
import cPickle as pickle
|
|
||||||
exec("def do_exec(co, loc): exec co in loc\n")
|
|
||||||
sources = pickle.loads(zlib.decompress(base64.decodestring(sources)))
|
|
||||||
|
|
||||||
importer = DictImporter(sources)
|
|
||||||
sys.meta_path.insert(0, importer)
|
|
||||||
entry = "@ENTRY@"
|
|
||||||
do_exec(entry, locals()) # noqa
|
|
|
@ -27,9 +27,6 @@ def pytest_addoption(parser):
|
||||||
group._addoption('-l', '--showlocals',
|
group._addoption('-l', '--showlocals',
|
||||||
action="store_true", dest="showlocals", default=False,
|
action="store_true", dest="showlocals", default=False,
|
||||||
help="show locals in tracebacks (disabled by default).")
|
help="show locals in tracebacks (disabled by default).")
|
||||||
group._addoption('--report',
|
|
||||||
action="store", dest="report", default=None, metavar="opts",
|
|
||||||
help="(deprecated, use -r)")
|
|
||||||
group._addoption('--tb', metavar="style",
|
group._addoption('--tb', metavar="style",
|
||||||
action="store", dest="tbstyle", default='auto',
|
action="store", dest="tbstyle", default='auto',
|
||||||
choices=['auto', 'long', 'short', 'no', 'line', 'native'],
|
choices=['auto', 'long', 'short', 'no', 'line', 'native'],
|
||||||
|
@ -54,17 +51,6 @@ def pytest_configure(config):
|
||||||
|
|
||||||
def getreportopt(config):
|
def getreportopt(config):
|
||||||
reportopts = ""
|
reportopts = ""
|
||||||
optvalue = config.option.report
|
|
||||||
if optvalue:
|
|
||||||
py.builtin.print_("DEPRECATED: use -r instead of --report option.",
|
|
||||||
file=sys.stderr)
|
|
||||||
if optvalue:
|
|
||||||
for setting in optvalue.split(","):
|
|
||||||
setting = setting.strip()
|
|
||||||
if setting == "skipped":
|
|
||||||
reportopts += "s"
|
|
||||||
elif setting == "xfailed":
|
|
||||||
reportopts += "x"
|
|
||||||
reportchars = config.option.reportchars
|
reportchars = config.option.reportchars
|
||||||
if reportchars:
|
if reportchars:
|
||||||
for char in reportchars:
|
for char in reportchars:
|
||||||
|
|
|
@ -314,3 +314,6 @@ For further information, Benjamin Peterson wrote up `Behind the scenes of pytest
|
||||||
.. versionchanged:: 2.1
|
.. versionchanged:: 2.1
|
||||||
Introduce the ``--assert`` option. Deprecate ``--no-assert`` and
|
Introduce the ``--assert`` option. Deprecate ``--no-assert`` and
|
||||||
``--nomagic``.
|
``--nomagic``.
|
||||||
|
|
||||||
|
.. versionchanged:: 3.0
|
||||||
|
Removes the ``--no-assert`` and``--nomagic`` options.
|
||||||
|
|
|
@ -193,45 +193,9 @@ Where to go next
|
||||||
Here are a few suggestions where to go next:
|
Here are a few suggestions where to go next:
|
||||||
|
|
||||||
* :ref:`cmdline` for command line invocation examples
|
* :ref:`cmdline` for command line invocation examples
|
||||||
* :ref:`good practices <goodpractices>` for virtualenv, test layout, genscript support
|
* :ref:`good practices <goodpractices>` for virtualenv, test layout
|
||||||
* :ref:`fixtures` for providing a functional baseline to your tests
|
* :ref:`fixtures` for providing a functional baseline to your tests
|
||||||
* :ref:`apiref` for documentation and examples on using ``pytest``
|
* :ref:`apiref` for documentation and examples on using ``pytest``
|
||||||
* :ref:`plugins` managing and writing plugins
|
* :ref:`plugins` managing and writing plugins
|
||||||
|
|
||||||
.. _`installation issues`:
|
|
||||||
|
|
||||||
Known Installation issues
|
|
||||||
------------------------------
|
|
||||||
|
|
||||||
easy_install or pip not found?
|
|
||||||
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
|
|
||||||
|
|
||||||
.. _`install pip`: http://www.pip-installer.org/en/latest/index.html
|
|
||||||
|
|
||||||
`Install pip`_ for a state of the art python package installer.
|
|
||||||
|
|
||||||
Install `setuptools`_ to get ``easy_install`` which allows to install
|
|
||||||
``.egg`` binary format packages in addition to source-based ones.
|
|
||||||
|
|
||||||
pytest not found on Windows despite installation?
|
|
||||||
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
|
|
||||||
|
|
||||||
.. _`Python for Windows`: http://www.imladris.com/Scripts/PythonForWindows.html
|
|
||||||
|
|
||||||
- **Windows**: If "easy_install" or "pytest" are not found
|
|
||||||
you need to add the Python script path to your ``PATH``, see here:
|
|
||||||
`Python for Windows`_. You may alternatively use an `ActivePython install`_
|
|
||||||
which does this for you automatically.
|
|
||||||
|
|
||||||
.. _`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 ``pytest`` will not work correctly. You may install pytest on
|
|
||||||
CPython and type ``pytest --genscript=mytest`` and then use
|
|
||||||
``jython mytest`` to run your tests with Jython using ``pytest``.
|
|
||||||
|
|
||||||
:ref:`examples` for more complex examples
|
|
||||||
|
|
||||||
.. include:: links.inc
|
.. include:: links.inc
|
||||||
|
|
|
@ -243,38 +243,4 @@ using the ``--pytest-args`` or ``-a`` command-line option. For example::
|
||||||
is equivalent to running ``pytest --durations=5``.
|
is equivalent to running ``pytest --durations=5``.
|
||||||
|
|
||||||
|
|
||||||
.. _standalone:
|
|
||||||
.. _`genscript method`:
|
|
||||||
|
|
||||||
(deprecated) Create a pytest standalone script
|
|
||||||
-----------------------------------------------
|
|
||||||
|
|
||||||
.. deprecated:: 2.8
|
|
||||||
|
|
||||||
.. note::
|
|
||||||
|
|
||||||
``genscript`` has been deprecated because:
|
|
||||||
|
|
||||||
* It cannot support plugins, rendering its usefulness extremely limited;
|
|
||||||
* Tooling has become much better since ``genscript`` was introduced;
|
|
||||||
* It is possible to build a zipped ``pytest`` application without the
|
|
||||||
shortcomings above.
|
|
||||||
|
|
||||||
There's no planned version in which this command will be removed
|
|
||||||
at the moment of this writing, but its use is discouraged for new
|
|
||||||
applications.
|
|
||||||
|
|
||||||
If you are a maintainer or application developer and want people
|
|
||||||
who don't deal with python much to easily run tests you may generate
|
|
||||||
a standalone ``pytest`` script::
|
|
||||||
|
|
||||||
pytest --genscript=runtests.py
|
|
||||||
|
|
||||||
This generates a ``runtests.py`` script which is a fully functional basic
|
|
||||||
``pytest`` script, running unchanged under Python2 and Python3.
|
|
||||||
You can tell people to download the script and then e.g. run it like this::
|
|
||||||
|
|
||||||
python runtests.py
|
|
||||||
|
|
||||||
|
|
||||||
.. include:: links.inc
|
.. include:: links.inc
|
||||||
|
|
|
@ -138,7 +138,6 @@ in the `pytest repository <https://github.com/pytest-dev/pytest>`_.
|
||||||
_pytest.capture
|
_pytest.capture
|
||||||
_pytest.config
|
_pytest.config
|
||||||
_pytest.doctest
|
_pytest.doctest
|
||||||
_pytest.genscript
|
|
||||||
_pytest.helpconfig
|
_pytest.helpconfig
|
||||||
_pytest.junitxml
|
_pytest.junitxml
|
||||||
_pytest.mark
|
_pytest.mark
|
||||||
|
|
|
@ -1,28 +0,0 @@
|
||||||
|
|
||||||
(deprecated) generate standalone test script to be distributed along with an application.
|
|
||||||
============================================================================
|
|
||||||
|
|
||||||
|
|
||||||
.. contents::
|
|
||||||
:local:
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
command line options
|
|
||||||
--------------------
|
|
||||||
|
|
||||||
|
|
||||||
``--genscript=path``
|
|
||||||
create standalone ``pytest`` script at given target path.
|
|
||||||
|
|
||||||
Start improving this plugin in 30 seconds
|
|
||||||
=========================================
|
|
||||||
|
|
||||||
|
|
||||||
1. Download `pytest_genscript.py`_ plugin source code
|
|
||||||
2. put it somewhere as ``pytest_genscript.py`` into your import path
|
|
||||||
3. a subsequent ``pytest`` run will use your local version
|
|
||||||
|
|
||||||
Checkout customize_, other plugins_ or `get in contact`_.
|
|
||||||
|
|
||||||
.. include:: links.txt
|
|
|
@ -18,8 +18,6 @@ command line options
|
||||||
early-load given plugin (multi-allowed).
|
early-load given plugin (multi-allowed).
|
||||||
``--trace-config``
|
``--trace-config``
|
||||||
trace considerations of conftest.py files.
|
trace considerations of conftest.py files.
|
||||||
``--nomagic``
|
|
||||||
don't reinterpret asserts, no traceback cutting.
|
|
||||||
``--debug``
|
``--debug``
|
||||||
generate and show internal debugging information.
|
generate and show internal debugging information.
|
||||||
``--help-config``
|
``--help-config``
|
||||||
|
|
|
@ -2,10 +2,8 @@
|
||||||
.. _`pytest_recwarn.py`: http://bitbucket.org/hpk42/py-trunk/raw/1.3.4/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
|
.. _`unittest`: unittest.html
|
||||||
.. _`pytest_monkeypatch.py`: http://bitbucket.org/hpk42/py-trunk/raw/1.3.4/py/_plugin/pytest_monkeypatch.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
|
.. _`pastebin`: pastebin.html
|
||||||
.. _`skipping`: skipping.html
|
.. _`skipping`: skipping.html
|
||||||
.. _`genscript`: genscript.html
|
|
||||||
.. _`plugins`: index.html
|
.. _`plugins`: index.html
|
||||||
.. _`mark`: mark.html
|
.. _`mark`: mark.html
|
||||||
.. _`tmpdir`: tmpdir.html
|
.. _`tmpdir`: tmpdir.html
|
||||||
|
|
|
@ -18,8 +18,6 @@ command line options
|
||||||
show extra test summary info as specified by chars (f)ailed, (s)skipped, (x)failed, (X)passed.
|
show extra test summary info as specified by chars (f)ailed, (s)skipped, (x)failed, (X)passed.
|
||||||
``-l, --showlocals``
|
``-l, --showlocals``
|
||||||
show locals in tracebacks (disabled by default).
|
show locals in tracebacks (disabled by default).
|
||||||
``--report=opts``
|
|
||||||
(deprecated, use -r)
|
|
||||||
``--tb=style``
|
``--tb=style``
|
||||||
traceback print mode (long/short/line/no).
|
traceback print mode (long/short/line/no).
|
||||||
``--full-trace``
|
``--full-trace``
|
||||||
|
|
|
@ -474,15 +474,7 @@ def test_assertion_options(testdir):
|
||||||
""")
|
""")
|
||||||
result = testdir.runpytest()
|
result = testdir.runpytest()
|
||||||
assert "3 == 4" in result.stdout.str()
|
assert "3 == 4" in result.stdout.str()
|
||||||
off_options = (("--no-assert",),
|
result = testdir.runpytest_subprocess("--assert=plain")
|
||||||
("--nomagic",),
|
|
||||||
("--no-assert", "--nomagic"),
|
|
||||||
("--assert=plain",),
|
|
||||||
("--assert=plain", "--no-assert"),
|
|
||||||
("--assert=plain", "--nomagic"),
|
|
||||||
("--assert=plain", "--no-assert", "--nomagic"))
|
|
||||||
for opt in off_options:
|
|
||||||
result = testdir.runpytest_subprocess(*opt)
|
|
||||||
assert "3 == 4" not in result.stdout.str()
|
assert "3 == 4" not in result.stdout.str()
|
||||||
|
|
||||||
def test_old_assert_mode(testdir):
|
def test_old_assert_mode(testdir):
|
||||||
|
@ -559,7 +551,7 @@ def test_warn_missing(testdir):
|
||||||
result.stderr.fnmatch_lines([
|
result.stderr.fnmatch_lines([
|
||||||
"*WARNING*assert statements are not executed*",
|
"*WARNING*assert statements are not executed*",
|
||||||
])
|
])
|
||||||
result = testdir.run(sys.executable, "-OO", "-m", "pytest", "--no-assert")
|
result = testdir.run(sys.executable, "-OO", "-m", "pytest")
|
||||||
result.stderr.fnmatch_lines([
|
result.stderr.fnmatch_lines([
|
||||||
"*WARNING*assert statements are not executed*",
|
"*WARNING*assert statements are not executed*",
|
||||||
])
|
])
|
||||||
|
|
|
@ -365,7 +365,7 @@ def test_options_on_small_file_do_not_blow_up(testdir):
|
||||||
""")
|
""")
|
||||||
|
|
||||||
for opts in ([], ['-l'], ['-s'], ['--tb=no'], ['--tb=short'],
|
for opts in ([], ['-l'], ['-s'], ['--tb=no'], ['--tb=short'],
|
||||||
['--tb=long'], ['--fulltrace'], ['--nomagic'],
|
['--tb=long'], ['--fulltrace'],
|
||||||
['--traceconfig'], ['-v'], ['-v', '-v']):
|
['--traceconfig'], ['-v'], ['-v', '-v']):
|
||||||
runfiletest(opts + [path])
|
runfiletest(opts + [path])
|
||||||
|
|
||||||
|
|
|
@ -1,51 +0,0 @@
|
||||||
import pytest
|
|
||||||
import sys
|
|
||||||
|
|
||||||
|
|
||||||
@pytest.fixture(scope="module")
|
|
||||||
def standalone(request):
|
|
||||||
return Standalone(request)
|
|
||||||
|
|
||||||
class Standalone:
|
|
||||||
def __init__(self, request):
|
|
||||||
self.testdir = request.getfuncargvalue("testdir")
|
|
||||||
script = "mypytest"
|
|
||||||
result = self.testdir.runpytest("--genscript=%s" % script)
|
|
||||||
assert result.ret == 0
|
|
||||||
self.script = self.testdir.tmpdir.join(script)
|
|
||||||
assert self.script.check()
|
|
||||||
|
|
||||||
def run(self, anypython, testdir, *args):
|
|
||||||
return testdir._run(anypython, self.script, *args)
|
|
||||||
|
|
||||||
def test_gen(testdir, anypython, standalone):
|
|
||||||
if sys.version_info >= (2,7):
|
|
||||||
result = testdir._run(anypython, "-c",
|
|
||||||
"import sys;print (sys.version_info >=(2,7))")
|
|
||||||
assert result.ret == 0
|
|
||||||
if result.stdout.str() == "False":
|
|
||||||
pytest.skip("genscript called from python2.7 cannot work "
|
|
||||||
"earlier python versions")
|
|
||||||
result = standalone.run(anypython, testdir, '--version')
|
|
||||||
if result.ret == 2:
|
|
||||||
result.stderr.fnmatch_lines(["*ERROR: setuptools not installed*"])
|
|
||||||
elif result.ret == 0:
|
|
||||||
result.stderr.fnmatch_lines([
|
|
||||||
"*imported from*mypytest*"
|
|
||||||
])
|
|
||||||
p = testdir.makepyfile("def test_func(): assert 0")
|
|
||||||
result = standalone.run(anypython, testdir, p)
|
|
||||||
assert result.ret != 0
|
|
||||||
else:
|
|
||||||
pytest.fail("Unexpected return code")
|
|
||||||
|
|
||||||
|
|
||||||
def test_freeze_includes():
|
|
||||||
"""
|
|
||||||
Smoke test for freeze_includes(), to ensure that it works across all
|
|
||||||
supported python versions.
|
|
||||||
"""
|
|
||||||
includes = pytest.freeze_includes()
|
|
||||||
assert len(includes) > 1
|
|
||||||
assert '_pytest.genscript' in includes
|
|
||||||
|
|
|
@ -209,7 +209,7 @@ class TestXFail:
|
||||||
def test_this_false():
|
def test_this_false():
|
||||||
assert 1
|
assert 1
|
||||||
""")
|
""")
|
||||||
result = testdir.runpytest(p, '--report=xfailed', )
|
result = testdir.runpytest(p, '-rx', )
|
||||||
result.stdout.fnmatch_lines([
|
result.stdout.fnmatch_lines([
|
||||||
"*test_one*test_this*",
|
"*test_one*test_this*",
|
||||||
"*NOTRUN*noway",
|
"*NOTRUN*noway",
|
||||||
|
@ -227,7 +227,7 @@ class TestXFail:
|
||||||
def setup_module(mod):
|
def setup_module(mod):
|
||||||
raise ValueError(42)
|
raise ValueError(42)
|
||||||
""")
|
""")
|
||||||
result = testdir.runpytest(p, '--report=xfailed', )
|
result = testdir.runpytest(p, '-rx', )
|
||||||
result.stdout.fnmatch_lines([
|
result.stdout.fnmatch_lines([
|
||||||
"*test_one*test_this*",
|
"*test_one*test_this*",
|
||||||
"*NOTRUN*hello",
|
"*NOTRUN*hello",
|
||||||
|
@ -688,7 +688,7 @@ def test_skipped_reasons_functional(testdir):
|
||||||
pytest.skip('test')
|
pytest.skip('test')
|
||||||
"""
|
"""
|
||||||
)
|
)
|
||||||
result = testdir.runpytest('--report=skipped')
|
result = testdir.runpytest('-rs')
|
||||||
result.stdout.fnmatch_lines([
|
result.stdout.fnmatch_lines([
|
||||||
"*SKIP*2*conftest.py:3: test",
|
"*SKIP*2*conftest.py:3: test",
|
||||||
])
|
])
|
||||||
|
|
|
@ -590,16 +590,7 @@ def test_getreportopt():
|
||||||
class config:
|
class config:
|
||||||
class option:
|
class option:
|
||||||
reportchars = ""
|
reportchars = ""
|
||||||
config.option.report = "xfailed"
|
|
||||||
assert getreportopt(config) == "x"
|
|
||||||
|
|
||||||
config.option.report = "xfailed,skipped"
|
|
||||||
assert getreportopt(config) == "xs"
|
|
||||||
|
|
||||||
config.option.report = "skipped,xfailed"
|
|
||||||
assert getreportopt(config) == "sx"
|
|
||||||
|
|
||||||
config.option.report = "skipped"
|
|
||||||
config.option.reportchars = "sf"
|
config.option.reportchars = "sf"
|
||||||
assert getreportopt(config) == "sf"
|
assert getreportopt(config) == "sf"
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue