Fix --help crash on add_ini(.., help='') and improve message on help=None (#7427)
This commit is contained in:
parent
88cc636c18
commit
27a4c6cd6d
|
@ -0,0 +1,2 @@
|
|||
Passing an empty ``help`` value to ``Parser.add_option`` is now accepted instead of crashing when running ``pytest --help``.
|
||||
Passing ``None`` raises a more informative ``TypeError``.
|
|
@ -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)
|
||||
|
@ -191,9 +193,10 @@ 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 wrapped:
|
||||
tw.line(wrapped[0])
|
||||
for line in wrapped[1:]:
|
||||
tw.line(indent + line)
|
||||
|
||||
tw.line()
|
||||
tw.line("environment variables:")
|
||||
|
|
|
@ -38,6 +38,41 @@ 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
|
||||
lines = [
|
||||
" required_plugins (args):",
|
||||
" plugins that must be present for pytest to run*",
|
||||
" test_ini (bool):*",
|
||||
"environment variables:",
|
||||
]
|
||||
result.stdout.fnmatch_lines(lines, consecutive=True)
|
||||
|
||||
|
||||
def test_hookvalidation_unknown(testdir):
|
||||
testdir.makeconftest(
|
||||
"""
|
||||
|
|
Loading…
Reference in New Issue