Merge pull request #5697 from blueyed/fix-collect-pkg-init
Fix RuntimeError when trying to collect package with "__init__.py" only
This commit is contained in:
commit
bf3aa72a29
|
@ -0,0 +1 @@
|
||||||
|
Fix RuntimeError/StopIteration when trying to collect package with "__init__.py" only.
|
|
@ -584,7 +584,13 @@ class Session(nodes.FSCollector):
|
||||||
# Module itself, so just use that. If this special case isn't taken, then all
|
# Module itself, so just use that. If this special case isn't taken, then all
|
||||||
# the files in the package will be yielded.
|
# the files in the package will be yielded.
|
||||||
if argpath.basename == "__init__.py":
|
if argpath.basename == "__init__.py":
|
||||||
|
try:
|
||||||
yield next(m[0].collect())
|
yield next(m[0].collect())
|
||||||
|
except StopIteration:
|
||||||
|
# The package collects nothing with only an __init__.py
|
||||||
|
# file in it, which gets ignored by the default
|
||||||
|
# "python_files" option.
|
||||||
|
pass
|
||||||
return
|
return
|
||||||
yield from m
|
yield from m
|
||||||
|
|
||||||
|
|
|
@ -1203,6 +1203,18 @@ def test_collect_pkg_init_and_file_in_args(testdir):
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
|
def test_collect_pkg_init_only(testdir):
|
||||||
|
subdir = testdir.mkdir("sub")
|
||||||
|
init = subdir.ensure("__init__.py")
|
||||||
|
init.write("def test_init(): pass")
|
||||||
|
|
||||||
|
result = testdir.runpytest(str(init))
|
||||||
|
result.stdout.fnmatch_lines(["*no tests ran in*"])
|
||||||
|
|
||||||
|
result = testdir.runpytest("-v", "-o", "python_files=*.py", str(init))
|
||||||
|
result.stdout.fnmatch_lines(["sub/__init__.py::test_init PASSED*", "*1 passed in*"])
|
||||||
|
|
||||||
|
|
||||||
@pytest.mark.skipif(
|
@pytest.mark.skipif(
|
||||||
not hasattr(py.path.local, "mksymlinkto"),
|
not hasattr(py.path.local, "mksymlinkto"),
|
||||||
reason="symlink not available on this platform",
|
reason="symlink not available on this platform",
|
||||||
|
|
Loading…
Reference in New Issue