Merge pull request #2011 from nicoddemus/false-rewrite-warnings
Fix false-positive warnings from assertion rewrite hook
This commit is contained in:
commit
35d154f580
|
@ -12,6 +12,15 @@
|
||||||
* When loading plugins, import errors which contain non-ascii messages are now properly handled in Python 2 (`#1998`_).
|
* When loading plugins, import errors which contain non-ascii messages are now properly handled in Python 2 (`#1998`_).
|
||||||
Thanks `@nicoddemus`_ for the PR.
|
Thanks `@nicoddemus`_ for the PR.
|
||||||
|
|
||||||
|
* Fixed false-positives warnings from assertion rewrite hook for modules that were rewritten but
|
||||||
|
were later marked explicitly by ``pytest.register_assert_rewrite``
|
||||||
|
or implicitly as a plugin (`#2005`_).
|
||||||
|
Thanks `@RonnyPfannschmidt`_ for the report and `@nicoddemus`_ for the PR.
|
||||||
|
|
||||||
|
*
|
||||||
|
|
||||||
|
*
|
||||||
|
|
||||||
*
|
*
|
||||||
|
|
||||||
|
|
||||||
|
@ -21,7 +30,7 @@
|
||||||
.. _#1976: https://github.com/pytest-dev/pytest/issues/1976
|
.. _#1976: https://github.com/pytest-dev/pytest/issues/1976
|
||||||
.. _#1998: https://github.com/pytest-dev/pytest/issues/1998
|
.. _#1998: https://github.com/pytest-dev/pytest/issues/1998
|
||||||
.. _#2004: https://github.com/pytest-dev/pytest/issues/2004
|
.. _#2004: https://github.com/pytest-dev/pytest/issues/2004
|
||||||
|
.. _#2005: https://github.com/pytest-dev/pytest/issues/2005
|
||||||
|
|
||||||
|
|
||||||
3.0.3
|
3.0.3
|
||||||
|
|
|
@ -51,6 +51,7 @@ class AssertionRewritingHook(object):
|
||||||
self.fnpats = config.getini("python_files")
|
self.fnpats = config.getini("python_files")
|
||||||
self.session = None
|
self.session = None
|
||||||
self.modules = {}
|
self.modules = {}
|
||||||
|
self._rewritten_names = set()
|
||||||
self._register_with_pkg_resources()
|
self._register_with_pkg_resources()
|
||||||
self._must_rewrite = set()
|
self._must_rewrite = set()
|
||||||
|
|
||||||
|
@ -92,6 +93,8 @@ class AssertionRewritingHook(object):
|
||||||
if not self._should_rewrite(name, fn_pypath, state):
|
if not self._should_rewrite(name, fn_pypath, state):
|
||||||
return None
|
return None
|
||||||
|
|
||||||
|
self._rewritten_names.add(name)
|
||||||
|
|
||||||
# The requested module looks like a test file, so rewrite it. This is
|
# The requested module looks like a test file, so rewrite it. This is
|
||||||
# the most magical part of the process: load the source, rewrite the
|
# the most magical part of the process: load the source, rewrite the
|
||||||
# asserts, and load the rewritten source. We also cache the rewritten
|
# asserts, and load the rewritten source. We also cache the rewritten
|
||||||
|
@ -178,7 +181,9 @@ class AssertionRewritingHook(object):
|
||||||
"""
|
"""
|
||||||
already_imported = set(names).intersection(set(sys.modules))
|
already_imported = set(names).intersection(set(sys.modules))
|
||||||
if already_imported:
|
if already_imported:
|
||||||
self._warn_already_imported(already_imported)
|
for name in names:
|
||||||
|
if name not in self._rewritten_names:
|
||||||
|
self._warn_already_imported(already_imported)
|
||||||
self._must_rewrite.update(names)
|
self._must_rewrite.update(names)
|
||||||
|
|
||||||
def _warn_already_imported(self, names):
|
def _warn_already_imported(self, names):
|
||||||
|
|
|
@ -543,6 +543,22 @@ def test_rewritten():
|
||||||
''')
|
''')
|
||||||
assert testdir.runpytest_subprocess().ret == 0
|
assert testdir.runpytest_subprocess().ret == 0
|
||||||
|
|
||||||
|
def test_remember_rewritten_modules(self, pytestconfig, testdir, monkeypatch):
|
||||||
|
"""
|
||||||
|
AssertionRewriteHook should remember rewritten modules so it
|
||||||
|
doesn't give false positives (#2005).
|
||||||
|
"""
|
||||||
|
monkeypatch.syspath_prepend(testdir.tmpdir)
|
||||||
|
testdir.makepyfile(test_remember_rewritten_modules='')
|
||||||
|
warnings = []
|
||||||
|
hook = AssertionRewritingHook(pytestconfig)
|
||||||
|
monkeypatch.setattr(hook.config, 'warn', lambda code, msg: warnings.append(msg))
|
||||||
|
hook.find_module('test_remember_rewritten_modules')
|
||||||
|
hook.load_module('test_remember_rewritten_modules')
|
||||||
|
hook.mark_rewrite('test_remember_rewritten_modules')
|
||||||
|
hook.mark_rewrite('test_remember_rewritten_modules')
|
||||||
|
assert warnings == []
|
||||||
|
|
||||||
|
|
||||||
class TestAssertionRewriteHookDetails(object):
|
class TestAssertionRewriteHookDetails(object):
|
||||||
def test_loader_is_package_false_for_module(self, testdir):
|
def test_loader_is_package_false_for_module(self, testdir):
|
||||||
|
|
Loading…
Reference in New Issue