Merge pull request #2834 from aysonje/ignore-setup

ignore valid setup.py during --doctest-modules
This commit is contained in:
Ronny Pfannschmidt 2017-10-17 07:19:09 +02:00 committed by GitHub
commit 71c76d96d3
4 changed files with 38 additions and 1 deletions

View File

@ -82,6 +82,7 @@ Jason R. Coombs
Javier Domingo Cansino Javier Domingo Cansino
Javier Romero Javier Romero
Jeff Widman Jeff Widman
John Eddie Ayson
John Towler John Towler
Jon Sonesen Jon Sonesen
Jonas Obrist Jonas Obrist

View File

@ -50,12 +50,19 @@ def pytest_addoption(parser):
def pytest_collect_file(path, parent): def pytest_collect_file(path, parent):
config = parent.config config = parent.config
if path.ext == ".py": if path.ext == ".py":
if config.option.doctestmodules: if config.option.doctestmodules and not _is_setup_py(config, path, parent):
return DoctestModule(path, parent) return DoctestModule(path, parent)
elif _is_doctest(config, path, parent): elif _is_doctest(config, path, parent):
return DoctestTextfile(path, parent) return DoctestTextfile(path, parent)
def _is_setup_py(config, path, parent):
if path.basename != "setup.py":
return False
contents = path.read()
return 'setuptools' in contents or 'distutils' in contents
def _is_doctest(config, path, parent): def _is_doctest(config, path, parent):
if path.ext in ('.txt', '.rst') and parent.session.isinitpath(path): if path.ext in ('.txt', '.rst') and parent.session.isinitpath(path):
return True return True

1
changelog/502.feature Normal file
View File

@ -0,0 +1 @@
Implement feature to skip ``setup.py`` files when ran with ``--doctest-modules``.

View File

@ -561,6 +561,34 @@ class TestDoctests(object):
reportinfo = items[0].reportinfo() reportinfo = items[0].reportinfo()
assert reportinfo[1] == 1 assert reportinfo[1] == 1
def test_valid_setup_py(self, testdir):
'''
Test to make sure that pytest ignores valid setup.py files when ran
with --doctest-modules
'''
p = testdir.makepyfile(setup="""
from setuptools import setup, find_packages
setup(name='sample',
version='0.0',
description='description',
packages=find_packages()
)
""")
result = testdir.runpytest(p, '--doctest-modules')
result.stdout.fnmatch_lines(['*collected 0 items*'])
def test_invalid_setup_py(self, testdir):
'''
Test to make sure that pytest reads setup.py files that are not used
for python packages when ran with --doctest-modules
'''
p = testdir.makepyfile(setup="""
def test_foo():
return 'bar'
""")
result = testdir.runpytest(p, '--doctest-modules')
result.stdout.fnmatch_lines(['*collected 1 item*'])
class TestLiterals(object): class TestLiterals(object):