From fa6d5bd15bdc2da99c067168f3b256a52e7e08ab Mon Sep 17 00:00:00 2001 From: holger krekel Date: Wed, 28 Dec 2011 15:49:13 +0000 Subject: [PATCH] work around an apparent python2.4/python2.5 bug with subprocess.Popen, causing jenkins failures. Apparently "os.environ.popitem(name, None)" is not the same as:: try: del os.environ[name] except KeyError: pass --- _pytest/monkeypatch.py | 5 ++++- testing/test_monkeypatch.py | 16 ++++++++++++---- testing/test_runner.py | 3 +-- 3 files changed, 17 insertions(+), 7 deletions(-) diff --git a/_pytest/monkeypatch.py b/_pytest/monkeypatch.py index 4107782e5..84cace731 100644 --- a/_pytest/monkeypatch.py +++ b/_pytest/monkeypatch.py @@ -95,7 +95,10 @@ class monkeypatch: self._setattr[:] = [] for dictionary, name, value in self._setitem: if value is notset: - dictionary.pop(name, None) + try: + del dictionary[name] + except KeyError: + pass # was already deleted, so we have the desired state else: dictionary[name] = value self._setitem[:] = [] diff --git a/testing/test_monkeypatch.py b/testing/test_monkeypatch.py index 54c588331..c1abe0743 100644 --- a/testing/test_monkeypatch.py +++ b/testing/test_monkeypatch.py @@ -67,12 +67,20 @@ def test_setitem_deleted_meanwhile(): monkeypatch.undo() assert not d -def test_setenv_deleted_meanwhile(): +@pytest.mark.parametrize("before", [True, False]) +def test_setenv_deleted_meanwhile(before): + key = "qwpeoip123" + if before: + os.environ[key] = "world" monkeypatch = MonkeyPatch() - monkeypatch.setenv('XYZ123', 'hello') - del os.environ['XYZ123'] + monkeypatch.setenv(key, 'hello') + del os.environ[key] monkeypatch.undo() - assert 'XYZ123' not in os.environ + if before: + assert os.environ[key] == "world" + del os.environ[key] + else: + assert key not in os.environ def test_delitem(): d = {'x': 1} diff --git a/testing/test_runner.py b/testing/test_runner.py index 3b64d1975..aa543299f 100644 --- a/testing/test_runner.py +++ b/testing/test_runner.py @@ -436,8 +436,7 @@ def test_pytest_cmdline_main(testdir): py.test.cmdline.main([__file__]) """) import subprocess - popen = subprocess.Popen([sys.executable, str(p)], - stdout=subprocess.PIPE, env={}) + popen = subprocess.Popen([sys.executable, str(p)], stdout=subprocess.PIPE) s = popen.stdout.read() ret = popen.wait() assert ret == 0