fix issue 109 - sibling conftest.py files shall not be loaded.
also simplify / refine tests a bit. --HG-- branch : trunk
This commit is contained in:
parent
4eb45dab08
commit
29051458fc
|
@ -2,6 +2,9 @@
|
|||
Changes between 1.3.4 and 1.4.0.dev0
|
||||
==================================================
|
||||
|
||||
- fix issue109 - sibling conftest.py files will not be loaded.
|
||||
(and Directory collectors cannot be customized anymore from a Directory's
|
||||
conftest.py - this needs to happen at least one level up).
|
||||
- introduce (customizable) assertion failure representations (Floris Bruynooghe)
|
||||
- nose-plugin: pass through type-signature failures in setup/teardown
|
||||
functions instead of not calling them (Ed Singleton)
|
||||
|
|
|
@ -26,7 +26,8 @@ def pytest_runtest_mainloop(session):
|
|||
return True
|
||||
|
||||
def pytest_ignore_collect(path, config):
|
||||
ignore_paths = config.getconftest_pathlist("collect_ignore", path=path)
|
||||
p = path.dirpath()
|
||||
ignore_paths = config.getconftest_pathlist("collect_ignore", path=p)
|
||||
ignore_paths = ignore_paths or []
|
||||
excludeopt = config.getvalue("ignore")
|
||||
if excludeopt:
|
||||
|
@ -34,10 +35,6 @@ def pytest_ignore_collect(path, config):
|
|||
return path in ignore_paths
|
||||
|
||||
def pytest_collect_directory(path, parent):
|
||||
# XXX reconsider the following comment
|
||||
# not use parent.Directory here as we generally
|
||||
# want dir/conftest.py to be able to
|
||||
# define Directory(dir) already
|
||||
if not parent.recfilter(path): # by default special ".cvs", ...
|
||||
# check if cmdline specified this dir or a subdir directly
|
||||
for arg in parent.collection._argfspaths:
|
||||
|
@ -45,8 +42,7 @@ def pytest_collect_directory(path, parent):
|
|||
break
|
||||
else:
|
||||
return
|
||||
Directory = parent.config._getcollectclass('Directory', path)
|
||||
return Directory(path, parent=parent)
|
||||
return parent.Directory(path, parent=parent)
|
||||
|
||||
def pytest_report_iteminfo(item):
|
||||
return item.reportinfo()
|
||||
|
|
|
@ -44,8 +44,9 @@ class Conftest(object):
|
|||
self._path2confmods[None] = self.getconftestmodules(anchor)
|
||||
# let's also consider test* dirs
|
||||
if anchor.check(dir=1):
|
||||
for x in anchor.listdir(lambda x: x.check(dir=1, dotfile=0)):
|
||||
self.getconftestmodules(x)
|
||||
for x in anchor.listdir("test*"):
|
||||
if x.check(dir=1):
|
||||
self.getconftestmodules(x)
|
||||
break
|
||||
else:
|
||||
assert 0, "no root of filesystem?"
|
||||
|
|
|
@ -163,34 +163,31 @@ class TestGeneralUsage:
|
|||
result = testdir.runpython(p, prepend=False)
|
||||
assert not result.ret
|
||||
|
||||
@py.test.mark.xfail(reason="http://bitbucket.org/hpk42/py-trunk/issue/109")
|
||||
def test_sibling_conftest_issue109(self, testdir):
|
||||
"""
|
||||
This test is to make sure that the conftest.py of sibling directories is not loaded
|
||||
if py.test is run for/in one of the siblings directory and those sibling directories
|
||||
are not packaged together with an __init__.py. See bitbucket issue #109.
|
||||
"""
|
||||
for dirname in ['a', 'b']:
|
||||
testdir.tmpdir.ensure(dirname, dir=True)
|
||||
testdir.tmpdir.ensure(dirname, '__init__.py')
|
||||
def test_issue109_sibling_conftests_not_loaded(self, testdir):
|
||||
sub1 = testdir.tmpdir.mkdir("sub1")
|
||||
sub2 = testdir.tmpdir.mkdir("sub2")
|
||||
sub1.join("conftest.py").write("assert 0")
|
||||
result = testdir.runpytest(sub2)
|
||||
assert result.ret == 0
|
||||
sub2.ensure("__init__.py")
|
||||
p = sub2.ensure("test_hello.py")
|
||||
result = testdir.runpytest(p)
|
||||
assert result.ret == 0
|
||||
result = testdir.runpytest(sub1)
|
||||
assert result.ret != 0
|
||||
|
||||
# To create the conftest.py I would like to use testdir.make*-methods
|
||||
# but as far as I have seen they can only create files in testdir.tempdir
|
||||
# Maybe there is a way to explicitly specifiy the directory on which those
|
||||
# methods work or a completely better way to do that?
|
||||
backupTmpDir = testdir.tmpdir
|
||||
testdir.tmpdir = testdir.tmpdir.join(dirname)
|
||||
testdir.makeconftest("""
|
||||
_DIR_NAME = '%s'
|
||||
def pytest_configure(config):
|
||||
if config.args and config.args[0] != _DIR_NAME:
|
||||
raise Exception("py.test run for '" + config.args[0] + "', but '" + _DIR_NAME + "/conftest.py' loaded.")
|
||||
""" % dirname)
|
||||
testdir.tmpdir = backupTmpDir
|
||||
|
||||
for dirname, other_dirname in [('a', 'b'), ('b', 'a')]:
|
||||
result = testdir.runpytest(dirname)
|
||||
assert result.ret == 0, "test_sibling_conftest: py.test run for '%s', but '%s/conftest.py' loaded." % (dirname, other_dirname)
|
||||
def test_directory_skipped(self, testdir):
|
||||
testdir.makeconftest("""
|
||||
import py
|
||||
def pytest_ignore_collect():
|
||||
py.test.skip("intentional")
|
||||
""")
|
||||
testdir.makepyfile("def test_hello(): pass")
|
||||
result = testdir.runpytest()
|
||||
assert result.ret == 0
|
||||
result.stdout.fnmatch_lines([
|
||||
"*1 skipped*"
|
||||
])
|
||||
|
||||
def test_multiple_items_per_collector_byid(self, testdir):
|
||||
c = testdir.makeconftest("""
|
||||
|
|
|
@ -33,7 +33,7 @@ class TestConftestValueAccessGlobal:
|
|||
conftest = Conftest(onimport=l.append)
|
||||
conftest.setinitial([basedir.join("adir"),
|
||||
'--confcutdir=%s' % basedir])
|
||||
assert len(l) == 2
|
||||
assert len(l) == 1
|
||||
assert conftest.rget("a") == 1
|
||||
assert conftest.rget("b", basedir.join("adir", "b")) == 2
|
||||
assert len(l) == 2
|
||||
|
@ -170,7 +170,7 @@ def test_setinitial_conftest_subdirs(testdir, name):
|
|||
subconftest = sub.ensure("conftest.py")
|
||||
conftest = Conftest()
|
||||
conftest.setinitial([sub.dirpath(), '--confcutdir=%s' % testdir.tmpdir])
|
||||
if name != ".dotdir":
|
||||
if name not in ('whatever', '.dotdir'):
|
||||
assert subconftest in conftest._conftestpath2mod
|
||||
assert len(conftest._conftestpath2mod) == 1
|
||||
else:
|
||||
|
|
Loading…
Reference in New Issue