File tree Expand file tree Collapse file tree 2 files changed +26
-3
lines changed Expand file tree Collapse file tree 2 files changed +26
-3
lines changed Original file line number Diff line number Diff line change @@ -734,11 +734,11 @@ def get_source(
734
734
) -> List [str ]:
735
735
"""Return formatted and marked up source lines."""
736
736
lines = []
737
- if source is None or line_index >= len (source .lines ):
737
+ if source is not None and line_index < 0 :
738
+ line_index += len (source .lines )
739
+ if source is None or line_index >= len (source .lines ) or line_index < 0 :
738
740
source = Source ("???" )
739
741
line_index = 0
740
- if line_index < 0 :
741
- line_index += len (source )
742
742
space_prefix = " "
743
743
if short :
744
744
lines .append (space_prefix + source .lines [line_index ].strip ())
Original file line number Diff line number Diff line change @@ -1397,6 +1397,29 @@ def test(tmp_path):
1397
1397
result .stderr .no_fnmatch_line ("*INTERNALERROR*" )
1398
1398
1399
1399
1400
+ def test_regression_nagative_line_index (pytester : Pytester ) -> None :
1401
+ """
1402
+ With Python 3.10 alphas, there was an INTERNALERROR reported in
1403
+ https://github.com/pytest-dev/pytest/pull/8227
1404
+ This test ensures it does not regress.
1405
+ """
1406
+ pytester .makepyfile (
1407
+ """
1408
+ import ast
1409
+ import pytest
1410
+
1411
+
1412
+ def test_literal_eval():
1413
+ with pytest.raises(ValueError, match="^$"):
1414
+ ast.literal_eval("pytest")
1415
+ """
1416
+ )
1417
+ result = pytester .runpytest ()
1418
+ result .stdout .fnmatch_lines (["* 1 failed in *" ])
1419
+ result .stdout .no_fnmatch_line ("*INTERNALERROR*" )
1420
+ result .stderr .no_fnmatch_line ("*INTERNALERROR*" )
1421
+
1422
+
1400
1423
@pytest .mark .usefixtures ("limited_recursion_depth" )
1401
1424
def test_exception_repr_extraction_error_on_recursion ():
1402
1425
"""
You can’t perform that action at this time.
0 commit comments