Merge remote-tracking branch 'upstream/master' into features
This commit is contained in:
commit
d9aaab7ab2
|
@ -129,7 +129,7 @@ if _PY3:
|
||||||
STRING_TYPES = bytes, str
|
STRING_TYPES = bytes, str
|
||||||
UNICODE_TYPES = str,
|
UNICODE_TYPES = str,
|
||||||
|
|
||||||
def _escape_strings(val):
|
def _ascii_escaped(val):
|
||||||
"""If val is pure ascii, returns it as a str(). Otherwise, escapes
|
"""If val is pure ascii, returns it as a str(). Otherwise, escapes
|
||||||
bytes objects into a sequence of escaped bytes:
|
bytes objects into a sequence of escaped bytes:
|
||||||
|
|
||||||
|
@ -163,7 +163,7 @@ else:
|
||||||
|
|
||||||
from itertools import imap, izip # NOQA
|
from itertools import imap, izip # NOQA
|
||||||
|
|
||||||
def _escape_strings(val):
|
def _ascii_escaped(val):
|
||||||
"""In py2 bytes and str are the same type, so return if it's a bytes
|
"""In py2 bytes and str are the same type, so return if it's a bytes
|
||||||
object, return it unchanged if it is a full ascii string,
|
object, return it unchanged if it is a full ascii string,
|
||||||
otherwise escape it into its binary form.
|
otherwise escape it into its binary form.
|
||||||
|
|
|
@ -60,9 +60,17 @@ def pytest_addoption(parser):
|
||||||
|
|
||||||
@hookspec(historic=True)
|
@hookspec(historic=True)
|
||||||
def pytest_configure(config):
|
def pytest_configure(config):
|
||||||
""" called after command line options have been parsed
|
"""
|
||||||
and all plugins and initial conftest files been loaded.
|
Allows plugins and conftest files to perform initial configuration.
|
||||||
This hook is called for every plugin.
|
|
||||||
|
This hook is called for every plugin and initial conftest file
|
||||||
|
after command line options have been parsed.
|
||||||
|
|
||||||
|
After that, the hook is called for other conftest files as they are
|
||||||
|
imported.
|
||||||
|
|
||||||
|
:arg config: pytest config object
|
||||||
|
:type config: _pytest.config.Config
|
||||||
"""
|
"""
|
||||||
|
|
||||||
# -------------------------------------------------------------------------
|
# -------------------------------------------------------------------------
|
||||||
|
|
|
@ -45,7 +45,7 @@ def pytest_addoption(parser):
|
||||||
action="store", type=int, dest="maxfail", default=0,
|
action="store", type=int, dest="maxfail", default=0,
|
||||||
help="exit after first num failures or errors.")
|
help="exit after first num failures or errors.")
|
||||||
group._addoption('--strict', action="store_true",
|
group._addoption('--strict', action="store_true",
|
||||||
help="run pytest in strict mode, warnings become errors.")
|
help="marks not registered in configuration file raise errors.")
|
||||||
group._addoption("-c", metavar="file", type=str, dest="inifilename",
|
group._addoption("-c", metavar="file", type=str, dest="inifilename",
|
||||||
help="load configuration from `file` instead of trying to locate one of the implicit configuration files.")
|
help="load configuration from `file` instead of trying to locate one of the implicit configuration files.")
|
||||||
group._addoption("--continue-on-collection-errors", action="store_true",
|
group._addoption("--continue-on-collection-errors", action="store_true",
|
||||||
|
|
|
@ -17,7 +17,7 @@ import _pytest._pluggy as pluggy
|
||||||
from _pytest import fixtures
|
from _pytest import fixtures
|
||||||
from _pytest import main
|
from _pytest import main
|
||||||
from _pytest.compat import (
|
from _pytest.compat import (
|
||||||
isclass, isfunction, is_generator, _escape_strings,
|
isclass, isfunction, is_generator, _ascii_escaped,
|
||||||
REGEX_TYPE, STRING_TYPES, NoneType, NOTSET,
|
REGEX_TYPE, STRING_TYPES, NoneType, NOTSET,
|
||||||
get_real_func, getfslineno, safe_getattr,
|
get_real_func, getfslineno, safe_getattr,
|
||||||
safe_str, getlocation, enum,
|
safe_str, getlocation, enum,
|
||||||
|
@ -909,7 +909,7 @@ def _idval(val, argname, idx, idfn, config=None):
|
||||||
msg += '\nUpdate your code as this will raise an error in pytest-4.0.'
|
msg += '\nUpdate your code as this will raise an error in pytest-4.0.'
|
||||||
warnings.warn(msg, DeprecationWarning)
|
warnings.warn(msg, DeprecationWarning)
|
||||||
if s:
|
if s:
|
||||||
return _escape_strings(s)
|
return _ascii_escaped(s)
|
||||||
|
|
||||||
if config:
|
if config:
|
||||||
hook_id = config.hook.pytest_make_parametrize_id(
|
hook_id = config.hook.pytest_make_parametrize_id(
|
||||||
|
@ -918,11 +918,11 @@ def _idval(val, argname, idx, idfn, config=None):
|
||||||
return hook_id
|
return hook_id
|
||||||
|
|
||||||
if isinstance(val, STRING_TYPES):
|
if isinstance(val, STRING_TYPES):
|
||||||
return _escape_strings(val)
|
return _ascii_escaped(val)
|
||||||
elif isinstance(val, (float, int, bool, NoneType)):
|
elif isinstance(val, (float, int, bool, NoneType)):
|
||||||
return str(val)
|
return str(val)
|
||||||
elif isinstance(val, REGEX_TYPE):
|
elif isinstance(val, REGEX_TYPE):
|
||||||
return _escape_strings(val.pattern)
|
return _ascii_escaped(val.pattern)
|
||||||
elif enum is not None and isinstance(val, enum.Enum):
|
elif enum is not None and isinstance(val, enum.Enum):
|
||||||
return str(val)
|
return str(val)
|
||||||
elif isclass(val) and hasattr(val, '__name__'):
|
elif isclass(val) and hasattr(val, '__name__'):
|
||||||
|
@ -938,7 +938,7 @@ def _idvalset(idx, parameterset, argnames, idfn, ids, config=None):
|
||||||
for val, argname in zip(parameterset.values, argnames)]
|
for val, argname in zip(parameterset.values, argnames)]
|
||||||
return "-".join(this_id)
|
return "-".join(this_id)
|
||||||
else:
|
else:
|
||||||
return _escape_strings(ids[idx])
|
return _ascii_escaped(ids[idx])
|
||||||
|
|
||||||
|
|
||||||
def idmaker(argnames, parametersets, idfn=None, ids=None, config=None):
|
def idmaker(argnames, parametersets, idfn=None, ids=None, config=None):
|
||||||
|
|
|
@ -0,0 +1 @@
|
||||||
|
Update help message for ``--strict`` to make it clear it only deals with unregistered markers, not warnings.
|
|
@ -0,0 +1 @@
|
||||||
|
Renamed the utility function `_pytest.compat._escape_strings` to `_ascii_escaped` to better communicate the function's purpose.
|
|
@ -0,0 +1 @@
|
||||||
|
Clarify ``pytest_configure`` hook call order.
|
|
@ -223,13 +223,12 @@ For an example on how to add and work with markers from a plugin, see
|
||||||
|
|
||||||
It is recommended to explicitly register markers so that:
|
It is recommended to explicitly register markers so that:
|
||||||
|
|
||||||
* there is one place in your test suite defining your markers
|
* There is one place in your test suite defining your markers
|
||||||
|
|
||||||
* asking for existing markers via ``pytest --markers`` gives good output
|
* Asking for existing markers via ``pytest --markers`` gives good output
|
||||||
|
|
||||||
* typos in function markers are treated as an error if you use
|
* Typos in function markers are treated as an error if you use
|
||||||
the ``--strict`` option. Future versions of ``pytest`` are probably
|
the ``--strict`` option.
|
||||||
going to start treating non-registered markers as errors at some point.
|
|
||||||
|
|
||||||
.. _`scoped-marking`:
|
.. _`scoped-marking`:
|
||||||
|
|
||||||
|
|
|
@ -576,7 +576,7 @@ class TestSkip(object):
|
||||||
def test_hello():
|
def test_hello():
|
||||||
pass
|
pass
|
||||||
""")
|
""")
|
||||||
result = testdir.runpytest("-rs --strict")
|
result = testdir.runpytest("-rs")
|
||||||
result.stdout.fnmatch_lines([
|
result.stdout.fnmatch_lines([
|
||||||
"*unconditional skip*",
|
"*unconditional skip*",
|
||||||
"*1 skipped*",
|
"*1 skipped*",
|
||||||
|
|
Loading…
Reference in New Issue