Fix assertion rewrite to match module names correctly

Fix #2939
This commit is contained in:
Bruno Oliveira 2017-11-21 22:49:46 -02:00
parent 77bd0aa02f
commit c8d52b633b
3 changed files with 20 additions and 1 deletions

View File

@ -168,7 +168,7 @@ class AssertionRewritingHook(object):
return True
for marked in self._must_rewrite:
if name.startswith(marked):
if name == marked or name.startswith(marked + '.'):
state.trace("matched marked file %r (from %r)" % (name, marked))
return True

1
changelog/2939.bugfix Normal file
View File

@ -0,0 +1 @@
Fix issue in assertion rewriting which could lead it to rewrite modules which should not be rewritten.

View File

@ -129,6 +129,24 @@ class TestImportHookInstallation(object):
result = testdir.runpytest_subprocess('--assert=rewrite')
assert result.ret == 0
def test_pytest_plugins_rewrite_module_names_correctly(self, testdir):
"""Test that we match files correctly when they are marked for rewriting (#2939)."""
contents = {
'conftest.py': """
pytest_plugins = "ham"
""",
'ham.py': "",
'hamster.py': "",
'test_foo.py': """
def test_foo(pytestconfig):
assert pytestconfig.pluginmanager.rewrite_hook.find_module('ham') is not None
assert pytestconfig.pluginmanager.rewrite_hook.find_module('hamster') is None
""",
}
testdir.makepyfile(**contents)
result = testdir.runpytest_subprocess('--assert=rewrite')
assert result.ret == 0
@pytest.mark.parametrize('mode', ['plain', 'rewrite'])
@pytest.mark.parametrize('plugin_state', ['development', 'installed'])
def test_installed_plugin_rewrite(self, testdir, mode, plugin_state):