[py-svn] commit/pytest: 5 new changesets

Bitbucket commits-noreply at bitbucket.org
Fri Jan 6 21:37:37 CET 2012


5 new commits in pytest:


https://bitbucket.org/hpk42/pytest/changeset/cdf022434243/
changeset:   cdf022434243
user:        schmir
date:        2012-01-04 12:40:57
summary:     test that a second undo doesn't change sys.path

also use a 'mp' funcarg that restores sys.path and the current working
directory in preparation for the monkeypatch.chdir method.
affected #:  1 file

diff -r e3065c26d6f5757e9516f8fcd69bb07844612c56 -r cdf02243424336364da819db2a2239f373be1ca9 testing/test_monkeypatch.py
--- a/testing/test_monkeypatch.py
+++ b/testing/test_monkeypatch.py
@@ -2,6 +2,17 @@
 import pytest
 from _pytest.monkeypatch import monkeypatch as MonkeyPatch
 
+def pytest_funcarg__mp(request):
+    cwd = os.getcwd()
+    sys_path = list(sys.path)
+
+    def cleanup():
+        sys.path[:] = sys_path
+        os.chdir(cwd)
+
+    request.addfinalizer(cleanup)
+    return MonkeyPatch()
+
 def test_setattr():
     class A:
         x = 1
@@ -144,19 +155,20 @@
     res = reprec.countoutcomes()
     assert tuple(res) == (1, 0, 0), res
 
-def test_syspath_prepend():
+def test_syspath_prepend(mp):
     old = list(sys.path)
-    try:
-        monkeypatch = MonkeyPatch()
-        monkeypatch.syspath_prepend('world')
-        monkeypatch.syspath_prepend('hello')
-        assert sys.path[0] == "hello"
-        assert sys.path[1] == "world"
-        monkeypatch.undo()
-        assert sys.path == old
-        monkeypatch.undo()
-        assert sys.path == old
-    finally:
-        sys.path[:] = old
+    mp.syspath_prepend('world')
+    mp.syspath_prepend('hello')
+    assert sys.path[0] == "hello"
+    assert sys.path[1] == "world"
+    mp.undo()
+    assert sys.path == old
+    mp.undo()
+    assert sys.path == old
 
-
+def test_syspath_prepend_double_undo(mp):
+    mp.syspath_prepend('hello world')
+    mp.undo()
+    sys.path.append('more hello world')
+    mp.undo()
+    assert sys.path[-1] == 'more hello world'



https://bitbucket.org/hpk42/pytest/changeset/2e1969572830/
changeset:   2e1969572830
user:        schmir
date:        2012-01-04 12:42:23
summary:     make sure calling undo a second time doesn't change sys.path
affected #:  1 file

diff -r cdf02243424336364da819db2a2239f373be1ca9 -r 2e1969572830eefd87c486a6a6a7b91702aa6bfa _pytest/monkeypatch.py
--- a/_pytest/monkeypatch.py
+++ b/_pytest/monkeypatch.py
@@ -104,3 +104,4 @@
         self._setitem[:] = []
         if hasattr(self, '_savesyspath'):
             sys.path[:] = self._savesyspath
+            del self._savesyspath



https://bitbucket.org/hpk42/pytest/changeset/03972d3a10e6/
changeset:   03972d3a10e6
user:        schmir
date:        2012-01-04 12:43:19
summary:     add monkeypatch.chdir method
affected #:  2 files

diff -r 2e1969572830eefd87c486a6a6a7b91702aa6bfa -r 03972d3a10e6234ac72823fbe1a3b1c8240ca769 _pytest/monkeypatch.py
--- a/_pytest/monkeypatch.py
+++ b/_pytest/monkeypatch.py
@@ -30,6 +30,7 @@
     def __init__(self):
         self._setattr = []
         self._setitem = []
+        self._cwd = None
 
     def setattr(self, obj, name, value, raising=True):
         """ set attribute ``name`` on ``obj`` to ``value``, by default
@@ -83,6 +84,14 @@
             self._savesyspath = sys.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):
         """ undo previous changes.  This call consumes the
         undo stack.  Calling it a second time has no effect unless
@@ -105,3 +114,7 @@
         if hasattr(self, '_savesyspath'):
             sys.path[:] = self._savesyspath
             del self._savesyspath
+
+        if self._cwd is not None:
+            os.chdir(self._cwd)
+            self._cwd = None


diff -r 2e1969572830eefd87c486a6a6a7b91702aa6bfa -r 03972d3a10e6234ac72823fbe1a3b1c8240ca769 testing/test_monkeypatch.py
--- a/testing/test_monkeypatch.py
+++ b/testing/test_monkeypatch.py
@@ -172,3 +172,24 @@
     sys.path.append('more hello world')
     mp.undo()
     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



https://bitbucket.org/hpk42/pytest/changeset/a6fd5823d699/
changeset:   a6fd5823d699
user:        schmir
date:        2012-01-06 15:25:57
summary:     update documentation for the new monkeypatch.chdir method
affected #:  2 files

diff -r 03972d3a10e6234ac72823fbe1a3b1c8240ca769 -r a6fd5823d699b65eb75db11f69ca47cdac0fff3f CHANGELOG
--- a/CHANGELOG
+++ b/CHANGELOG
@@ -9,6 +9,7 @@
   test directory was renamed and some pyc/__pycache__ remain
 - fix issue106: allow parametrize to be applied multiple times
   e.g. from module, class and at function level.
+- add chdir method to monkeypatch funcarg
 
 Changes between 2.2.0 and 2.2.1
 ----------------------------------------


diff -r 03972d3a10e6234ac72823fbe1a3b1c8240ca769 -r a6fd5823d699b65eb75db11f69ca47cdac0fff3f _pytest/monkeypatch.py
--- a/_pytest/monkeypatch.py
+++ b/_pytest/monkeypatch.py
@@ -13,6 +13,7 @@
         monkeypatch.setenv(name, value, prepend=False)
         monkeypatch.delenv(name, value, raising=True)
         monkeypatch.syspath_prepend(path)
+        monkeypatch.chdir(path)
 
     All modifications will be undone after the requesting
     test function has finished. The ``raising``
@@ -85,6 +86,9 @@
         sys.path.insert(0, str(path))
 
     def chdir(self, path):
+        """ change the current working directory to the specified path
+        path can be a string or a py.path.local object
+        """
         if self._cwd is None:
             self._cwd = os.getcwd()
         if hasattr(path, "chdir"):



https://bitbucket.org/hpk42/pytest/changeset/bbf6380d2776/
changeset:   bbf6380d2776
user:        hpk42
date:        2012-01-06 21:37:18
summary:     bump version, mention "mp" also in the docs and changelog
affected #:  4 files

diff -r a6fd5823d699b65eb75db11f69ca47cdac0fff3f -r bbf6380d27762cbaaf38f09d41ac214686c1a606 CHANGELOG
--- a/CHANGELOG
+++ b/CHANGELOG
@@ -10,6 +10,8 @@
 - fix issue106: allow parametrize to be applied multiple times
   e.g. from module, class and at function level.
 - add chdir method to monkeypatch funcarg
+- add "mp" funcargs as a shortcut for "monkeypatch"
+- fix crash resulting from calling monkeypatch undo a second time
 
 Changes between 2.2.0 and 2.2.1
 ----------------------------------------


diff -r a6fd5823d699b65eb75db11f69ca47cdac0fff3f -r bbf6380d27762cbaaf38f09d41ac214686c1a606 _pytest/__init__.py
--- a/_pytest/__init__.py
+++ b/_pytest/__init__.py
@@ -1,2 +1,2 @@
 #
-__version__ = '2.2.2.dev5'
+__version__ = '2.2.2.dev6'


diff -r a6fd5823d699b65eb75db11f69ca47cdac0fff3f -r bbf6380d27762cbaaf38f09d41ac214686c1a606 doc/monkeypatch.txt
--- a/doc/monkeypatch.txt
+++ b/doc/monkeypatch.txt
@@ -14,14 +14,14 @@
 
 .. _`monkeypatch blog post`: http://tetamap.wordpress.com/2009/03/03/monkeypatching-in-unit-tests-done-right/
 
-
-Simple example: patching ``os.path.expanduser``
+Simple example: monkeypatching functions
 ---------------------------------------------------
 
-If, for instance, you want to pretend that ``os.expanduser`` returns a certain
+If you want to pretend that ``os.expanduser`` returns a certain
 directory, you can use the :py:meth:`monkeypatch.setattr` method to
 patch this function before calling into a function which uses it::
 
+    # content of test_module.py
     import os.path
     def getssh(): # pseudo application code
         return os.path.join(os.path.expanduser("~admin"), '.ssh')
@@ -33,22 +33,20 @@
         x = getssh()
         assert x == '/abc/.ssh'
 
-After the test function finishes the ``os.path.expanduser`` modification
-will be undone.
+Here our test function monkeypatches ``os.path.expanduser`` and
+then calls into an function that calls it.  After the test function 
+finishes the ``os.path.expanduser`` modification will be undone.
 
-.. background check:
-   $ py.test
-   =========================== test session starts ============================
-   platform darwin -- Python 2.7.1 -- pytest-2.2.1
-   collecting ... collected 0 items
-   
-   =============================  in 0.00 seconds =============================
+.. note::
+
+    As with version 2.2.2 there is a ``mp`` function argument
+    which is a shortcut for "monkeypatch". 
 
 Method reference of the monkeypatch function argument
 -----------------------------------------------------
 
 .. autoclass:: monkeypatch
-    :members: setattr, delattr, setitem, delitem, setenv, delenv, syspath_prepend, undo
+    :members: setattr, delattr, setitem, delitem, setenv, delenv, syspath_prepend, chdir, undo
 
 ``monkeypatch.setattr/delattr/delitem/delenv()`` all
 by default raise an Exception if the target does not exist.


diff -r a6fd5823d699b65eb75db11f69ca47cdac0fff3f -r bbf6380d27762cbaaf38f09d41ac214686c1a606 setup.py
--- a/setup.py
+++ b/setup.py
@@ -24,7 +24,7 @@
         name='pytest',
         description='py.test: simple powerful testing with Python',
         long_description = long_description,
-        version='2.2.2.dev5',
+        version='2.2.2.dev6',
         url='http://pytest.org',
         license='MIT license',
         platforms=['unix', 'linux', 'osx', 'cygwin', 'win32'],

Repository URL: https://bitbucket.org/hpk42/pytest/

--

This is a commit notification from bitbucket.org. You are receiving
this because you have the service enabled, addressing the recipient of
this email.



More information about the pytest-commit mailing list