add monkeypatch.chdir method

This commit is contained in:
Ralf Schmitt 2012-01-04 12:43:19 +01:00
parent fb7706d4c7
commit 93424b0f9c
2 changed files with 34 additions and 0 deletions

View File

@ -30,6 +30,7 @@ class monkeypatch:
def __init__(self): def __init__(self):
self._setattr = [] self._setattr = []
self._setitem = [] self._setitem = []
self._cwd = None
def setattr(self, obj, name, value, raising=True): def setattr(self, obj, name, value, raising=True):
""" set attribute ``name`` on ``obj`` to ``value``, by default """ set attribute ``name`` on ``obj`` to ``value``, by default
@ -83,6 +84,14 @@ class monkeypatch:
self._savesyspath = sys.path[:] self._savesyspath = sys.path[:]
sys.path.insert(0, str(path)) sys.path.insert(0, str(path))
def chdir(self, path):
if self._cwd is None:
self._cwd = os.getcwd()
if hasattr(path, "chdir"):
path.chdir()
else:
os.chdir(path)
def undo(self): def undo(self):
""" undo previous changes. This call consumes the """ undo previous changes. This call consumes the
undo stack. Calling it a second time has no effect unless undo stack. Calling it a second time has no effect unless
@ -105,3 +114,7 @@ class monkeypatch:
if hasattr(self, '_savesyspath'): if hasattr(self, '_savesyspath'):
sys.path[:] = self._savesyspath sys.path[:] = self._savesyspath
del self._savesyspath del self._savesyspath
if self._cwd is not None:
os.chdir(self._cwd)
self._cwd = None

View File

@ -172,3 +172,24 @@ def test_syspath_prepend_double_undo(mp):
sys.path.append('more hello world') sys.path.append('more hello world')
mp.undo() mp.undo()
assert sys.path[-1] == 'more hello world' assert sys.path[-1] == 'more hello world'
def test_chdir_with_path_local(mp, tmpdir):
mp.chdir(tmpdir)
assert os.getcwd() == tmpdir.strpath
def test_chdir_with_str(mp, tmpdir):
mp.chdir(tmpdir.strpath)
assert os.getcwd() == tmpdir.strpath
def test_chdir_undo(mp, tmpdir):
cwd = os.getcwd()
mp.chdir(tmpdir)
mp.undo()
assert os.getcwd() == cwd
def test_chdir_double_undo(mp, tmpdir):
mp.chdir(tmpdir.strpath)
mp.undo()
tmpdir.chdir()
mp.undo()
assert os.getcwd() == tmpdir.strpath