Merge cleaning of sys.modules after pytester.inline_run()
Merged in schettino72/pytest/pytester-inline-run-clean-sys-modules (pull request #278).
This commit is contained in:
commit
240cd1f28d
1
AUTHORS
1
AUTHORS
|
@ -48,3 +48,4 @@ Nicolas Delaby
|
|||
Tom Viner
|
||||
Dave Hunt
|
||||
Charles Cloud
|
||||
Eduardo Schettino
|
||||
|
|
|
@ -14,6 +14,9 @@
|
|||
of pkg_under_test whereas before they would always pick
|
||||
up the local version. Thanks Holger Krekel.
|
||||
|
||||
- pytester: add method ``TmpTestdir.delete_loaded_modules()``, and call it
|
||||
from ``inline_run()`` to allow temporary modules to be reloaded.
|
||||
Thanks Eduardo Schettino.
|
||||
|
||||
2.7.1.dev (compared to 2.7.0)
|
||||
-----------------------------
|
||||
|
|
|
@ -266,14 +266,22 @@ class TmpTestdir:
|
|||
|
||||
Some methods modify the global interpreter state and this
|
||||
tries to clean this up. It does not remove the temporary
|
||||
directlry however so it can be looked at after the test run
|
||||
directory however so it can be looked at after the test run
|
||||
has finished.
|
||||
|
||||
"""
|
||||
sys.path[:] = self._savesyspath
|
||||
if hasattr(self, '_olddir'):
|
||||
self._olddir.chdir()
|
||||
# delete modules that have been loaded from tmpdir
|
||||
self.delete_loaded_modules()
|
||||
|
||||
def delete_loaded_modules(self):
|
||||
"""Delete modules that have been loaded from tmpdir.
|
||||
|
||||
This allows the interpreter to catch module changes in case
|
||||
the module is re-imported.
|
||||
|
||||
"""
|
||||
for name, mod in list(sys.modules.items()):
|
||||
if mod:
|
||||
fn = getattr(mod, '__file__', None)
|
||||
|
@ -537,6 +545,7 @@ class TmpTestdir:
|
|||
assert len(rec) == 1
|
||||
reprec = rec[0]
|
||||
reprec.ret = ret
|
||||
self.delete_loaded_modules()
|
||||
return reprec
|
||||
|
||||
def parseconfig(self, *args):
|
||||
|
|
|
@ -1,2 +1,2 @@
|
|||
sphinx==1.2.3
|
||||
hg+ssh://hg@bitbucket.org/RonnyPfannschmidt/regendoc#egg=regendoc
|
||||
hg+ssh://hg@bitbucket.org/pytest-dev/regendoc#egg=regendoc
|
||||
|
|
|
@ -2,6 +2,8 @@ import pytest
|
|||
import os
|
||||
from _pytest.pytester import HookRecorder
|
||||
from _pytest.core import PluginManager
|
||||
from _pytest.main import EXIT_OK, EXIT_TESTSFAILED
|
||||
|
||||
|
||||
def test_make_hook_recorder(testdir):
|
||||
item = testdir.getitem("def test_func(): pass")
|
||||
|
@ -121,3 +123,12 @@ def test_inprocess_plugins(testdir):
|
|||
testdir.inprocess_run([], [plugin])
|
||||
|
||||
assert plugin.configured
|
||||
|
||||
def test_inline_run_clean_modules(testdir):
|
||||
test_mod = testdir.makepyfile("def test_foo(): assert True")
|
||||
result = testdir.inline_run(str(test_mod))
|
||||
assert result.ret == EXIT_OK
|
||||
# rewrite module, now test should fail if module was re-imported
|
||||
test_mod.write("def test_foo(): assert False")
|
||||
result2 = testdir.inline_run(str(test_mod))
|
||||
assert result2.ret == EXIT_TESTSFAILED
|
||||
|
|
Loading…
Reference in New Issue