Fail gracefully when line number is out-of-bounds and negative

This commit is contained in:
Jake VanderPlas 2023-04-04 16:58:56 -07:00
parent 31d0b51039
commit f9e3442560
3 changed files with 20 additions and 1 deletions

View File

@ -163,6 +163,7 @@ Ionuț Turturică
Itxaso Aizpurua
Iwan Briquemont
Jaap Broekhuizen
Jake VanderPlas
Jakob van Santen
Jakub Mitoraj
James Bourbeau

View File

@ -743,7 +743,7 @@ class FormattedExcinfo:
) -> List[str]:
"""Return formatted and marked up source lines."""
lines = []
if source is None or line_index >= len(source.lines):
if source is None or line_index >= len(source.lines) or line_index < -len(source.lines):
source = Source("???")
line_index = 0
if line_index < 0:

View File

@ -461,6 +461,24 @@ class TestFormattedExcinfo:
assert lines[0] == "| def f(x):"
assert lines[1] == " pass"
def test_repr_source_out_of_bounds(self):
pr = FormattedExcinfo()
source = _pytest._code.Source(
"""\
def f(x):
pass
"""
).strip()
pr.flow_marker = "|" # type: ignore[misc]
lines = pr.get_source(source, 100)
assert len(lines) == 1
assert lines[0] == "| ???"
lines = pr.get_source(source, -100)
assert len(lines) == 1
assert lines[0] == "| ???"
def test_repr_source_excinfo(self) -> None:
"""Check if indentation is right."""
try: