Merge remote-tracking branch 'upstream/master' into features

This commit is contained in:
Bruno Oliveira 2017-07-10 17:51:59 -03:00
commit d9aaab7ab2
9 changed files with 27 additions and 17 deletions

View File

@ -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.

View File

@ -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
""" """
# ------------------------------------------------------------------------- # -------------------------------------------------------------------------

View File

@ -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",

View File

@ -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):

1
changelog/2444.trivial Normal file
View File

@ -0,0 +1 @@
Update help message for ``--strict`` to make it clear it only deals with unregistered markers, not warnings.

1
changelog/2533.trivial Normal file
View File

@ -0,0 +1 @@
Renamed the utility function `_pytest.compat._escape_strings` to `_ascii_escaped` to better communicate the function's purpose.

1
changelog/2539.doc Normal file
View File

@ -0,0 +1 @@
Clarify ``pytest_configure`` hook call order.

View File

@ -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`:

View File

@ -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*",