Fix RuntimeError when trying to collect package with "__init__.py" only
Fixes https://github.com/pytest-dev/pytest/issues/4344.
This commit is contained in:
		
							parent
							
								
									1a66a503b6
								
							
						
					
					
						commit
						198fcd8a6f
					
				|  | @ -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