Skip to content

Commit 506c9c9

Browse files
Merge pull request #3025 from anntzer/dont-rewrite-plugin
Respect PYTEST_DONT_REWRITE for plugins too. closes #2995
2 parents 38f34e2 + 45e7734 commit 506c9c9

File tree

4 files changed

+21
-7
lines changed

4 files changed

+21
-7
lines changed

_pytest/assertion/rewrite.py

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -179,11 +179,13 @@ def mark_rewrite(self, *names):
179179
The named module or package as well as any nested modules will
180180
be rewritten on import.
181181
"""
182-
already_imported = set(names).intersection(set(sys.modules))
183-
if already_imported:
184-
for name in already_imported:
185-
if name not in self._rewritten_names:
186-
self._warn_already_imported(name)
182+
already_imported = (set(names)
183+
.intersection(sys.modules)
184+
.difference(self._rewritten_names))
185+
for name in already_imported:
186+
if not AssertionRewriter.is_rewrite_disabled(
187+
sys.modules[name].__doc__ or ""):
188+
self._warn_already_imported(name)
187189
self._must_rewrite.update(names)
188190

189191
def _warn_already_imported(self, name):
@@ -635,7 +637,8 @@ def run(self, mod):
635637
not isinstance(field, ast.expr)):
636638
nodes.append(field)
637639

638-
def is_rewrite_disabled(self, docstring):
640+
@staticmethod
641+
def is_rewrite_disabled(docstring):
639642
return "PYTEST_DONT_REWRITE" in docstring
640643

641644
def variable(self):

_pytest/pytester.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -347,7 +347,7 @@ class RunResult:
347347
:stdout: :py:class:`LineMatcher` of stdout, use ``stdout.str()`` to
348348
reconstruct stdout or the commonly used ``stdout.fnmatch_lines()``
349349
method
350-
:stderrr: :py:class:`LineMatcher` of stderr
350+
:stderr: :py:class:`LineMatcher` of stderr
351351
:duration: duration in seconds
352352
353353
"""

changelog/2995.bugfix

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
``PYTEST_DONT_REWRITE`` is now checked for plugins too rather than only for test modules.

testing/test_assertrewrite.py

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -128,6 +128,16 @@ def test_dont_rewrite(self):
128128
assert len(m.body) == 1
129129
assert m.body[0].msg is None
130130

131+
def test_dont_rewrite_plugin(self, testdir):
132+
contents = {
133+
"conftest.py": "pytest_plugins = 'plugin'; import plugin",
134+
"plugin.py": "'PYTEST_DONT_REWRITE'",
135+
"test_foo.py": "def test_foo(): pass",
136+
}
137+
testdir.makepyfile(**contents)
138+
result = testdir.runpytest_subprocess()
139+
assert "warnings" not in "".join(result.outlines)
140+
131141
def test_name(self):
132142
def f():
133143
assert False

0 commit comments

Comments
 (0)