Fix monkeypatch.setenv with string and raising=False.

Fixes #746.
This commit is contained in:
Florian Bruhin 2015-05-19 22:59:49 +02:00
parent 3401049dea
commit ff8d787cd5
2 changed files with 10 additions and 4 deletions

View File

@ -27,7 +27,7 @@ def pytest_funcarg__monkeypatch(request):
def derive_importpath(import_path):
def derive_importpath(import_path, raising):
import pytest
if not isinstance(import_path, _basestring) or "." not in import_path:
raise TypeError("must be absolute import path string, not %r" %
@ -51,7 +51,8 @@ def derive_importpath(import_path):
attr = rest.pop()
obj = getattr(obj, attr)
attr = rest[0]
getattr(obj, attr)
if raising:
getattr(obj, attr)
except AttributeError:
__tracebackhide__ = True
pytest.fail("object %r has no attribute %r" % (obj, attr))
@ -95,7 +96,7 @@ class monkeypatch:
"setattr(target, value) with target being a dotted "
"import string")
value = name
name, target = derive_importpath(target)
name, target = derive_importpath(target, raising)
oldval = getattr(target, name, notset)
if raising and oldval is notset:
@ -124,7 +125,7 @@ class monkeypatch:
raise TypeError("use delattr(target, name) or "
"delattr(target) with target being a dotted "
"import string")
name, target = derive_importpath(target)
name, target = derive_importpath(target, raising)
if not hasattr(target, name):
if raising:

View File

@ -62,6 +62,11 @@ class TestSetattrWithImportPath:
pytest.raises(pytest.fail.Exception,
lambda: monkeypatch.setattr("os.path.qweqwe", None))
def test_unknown_attr_non_raising(self, monkeypatch):
# https://bitbucket.org/pytest-dev/pytest/issue/746/
monkeypatch.setattr('os.path.qweqwe', 42, raising=False)
assert os.path.qweqwe == 42
def test_delattr(self, monkeypatch):
monkeypatch.delattr("os.path.abspath")
assert not hasattr(os.path, "abspath")