Skip to content

Display empty or None help parameter for parser option as empty string #7427

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 10 commits into from
Jul 29, 2020
1 change: 1 addition & 0 deletions changelog/7394.bugfix.rst
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
Fixed an empty/None help param on parser options from throwing an unexpected error when executing ``pytest --help``.
11 changes: 8 additions & 3 deletions src/_pytest/helpconfig.py
Original file line number Diff line number Diff line change
Expand Up @@ -170,6 +170,8 @@ def showhelp(config: Config) -> None:
help, type, default = config._parser._inidict[name]
if type is None:
type = "string"
if help is None:
raise TypeError("help argument cannot be None for {}".format(name))
spec = "{} ({}):".format(name, type)
tw.write(" %s" % spec)
spec_len = len(spec)
Expand All @@ -191,9 +193,12 @@ def showhelp(config: Config) -> None:
tw.write(" " * (indent_len - spec_len - 2))
wrapped = textwrap.wrap(help, columns - indent_len, break_on_hyphens=False)

tw.line(wrapped[0])
for line in wrapped[1:]:
tw.line(indent + line)
if not wrapped:
tw.write(" " * (indent_len - spec_len - 2))
else:
tw.line(wrapped[0])
for line in wrapped[1:]:
tw.line(indent + line)

tw.line()
tw.line("environment variables:")
Expand Down
29 changes: 29 additions & 0 deletions testing/test_helpconfig.py
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,35 @@ def test_help(testdir):
)


def test_none_help_param_raises_exception(testdir):
"""Tests a None help param raises a TypeError.
"""
testdir.makeconftest(
"""
def pytest_addoption(parser):
parser.addini("test_ini", None, default=True, type="bool")
"""
)
result = testdir.runpytest("--help")
result.stderr.fnmatch_lines(
["*TypeError: help argument cannot be None for test_ini*"]
)


def test_empty_help_param(testdir):
"""Tests an empty help param is displayed correctly.
"""
testdir.makeconftest(
"""
def pytest_addoption(parser):
parser.addini("test_ini", "", default=True, type="bool")
"""
)
result = testdir.runpytest("--help")
assert result.ret == 0
result.stdout.fnmatch_lines(["*test_ini*(bool):*"])


def test_hookvalidation_unknown(testdir):
testdir.makeconftest(
"""
Expand Down