cleo icon indicating copy to clipboard operation
cleo copied to clipboard

PyPy3.10: tests/ui/test_exception_trace.py::test_render_debug_better_error_message_recursion_error fails

Open mgorny opened this issue 2 years ago • 1 comments

When running the test suite on PyPy3.10 7.3.13, I'm getting the following test failure:

$ poetry run pytest
............................................................................................................................... [ 49%]
................................................................F.....................................s........................ [ 98%]
.....                                                                                                                           [100%]
============================================================== FAILURES ===============================================================
_______________________________________ test_render_debug_better_error_message_recursion_error ________________________________________

    def test_render_debug_better_error_message_recursion_error() -> None:
        io = BufferedIO()
        io.set_verbosity(Verbosity.DEBUG)
    
        try:
            recursion.recursion_error()
        except RecursionError as e:
            trace = ExceptionTrace(e)
    
        lineno = 83
        trace.render(io)
    
        expected = rf"""^
      Stack trace:
    
      \d+  {re.escape(trace._get_relative_file_path(__file__))}:{lineno} in test_render_debug_better_error_message_recursion_error
             {lineno - 2}\│
             {lineno - 1}\│     try:
          →  {lineno + 0}\│         recursion.recursion_error\(\)
             {lineno + 1}\│     except RecursionError as e:
             {lineno + 2}\│         trace = ExceptionTrace\(e\)
    
      ...  Previous frame repeated \d+ times
    
      \s*\d+  {re.escape(trace._get_relative_file_path(recursion.__file__))}:2 in recursion_error
              1\│ def recursion_error\(\) -> None:
          →   2\│     recursion_error\(\)
              3\│
    
      RecursionError
    
      maximum recursion depth exceeded
    
      at {re.escape(trace._get_relative_file_path(recursion.__file__))}:2 in recursion_error
            1\│ def recursion_error\(\) -> None:
        →   2\│     recursion_error\(\)
            3\│
    """
    
>       assert re.match(expected, io.fetch_output()) is not None
E       AssertionError: assert None is not None
E        +  where None = <function match at 0x00007fb6301bfd80>('^\n  Stack trace:\n\n  \\d+  tests/ui/test_exception_trace\\.py:83 in test_render_debug_better_error_message_recursio...ursion_error\n        1\\│ def recursion_error\\(\\) -> None:\n    →   2\\│     recursion_error\\(\\)\n        3\\│ \n', '\n  Stack trace:\n\n  1660  tests/ui/test_exception_trace.py:83 in test_render_debug_better_error_message_recursion_e...on.py:2 in recursion_error\n        1│ def recursion_error() -> None:\n    →   2│     recursion_error()\n        3│ \n')
E        +    where <function match at 0x00007fb6301bfd80> = re.match
E        +    and   '\n  Stack trace:\n\n  1660  tests/ui/test_exception_trace.py:83 in test_render_debug_better_error_message_recursion_e...on.py:2 in recursion_error\n        1│ def recursion_error() -> None:\n    →   2│     recursion_error()\n        3│ \n' = <bound method BufferedIO.fetch_output of <cleo.io.buffered_io.BufferedIO object at 0x00007fb62a384608>>()
E        +      where <bound method BufferedIO.fetch_output of <cleo.io.buffered_io.BufferedIO object at 0x00007fb62a384608>> = <cleo.io.buffered_io.BufferedIO object at 0x00007fb62a384608>.fetch_output

tests/ui/test_exception_trace.py:117: AssertionError
======================================================= short test summary info =======================================================
FAILED tests/ui/test_exception_trace.py::test_render_debug_better_error_message_recursion_error - AssertionError: assert None is not None
1 failed, 257 passed, 1 skipped in 1.78s

Apparently the actual output is:


  Stack trace:

  1660  tests/ui/test_exception_trace.py:83 in test_render_debug_better_error_message_recursion_error
          81│ 
          82│     try:
       →  83│         recursion.recursion_error()
          84│     except RecursionError as e:
          85│         trace = ExceptionTrace(e)

   ...  Previous frame repeated 1658 times

     1  tests/fixtures/exceptions/recursion.py:2 in recursion_error
           1│ def recursion_error() -> None:
       →   2│     recursion_error()
           3│ 

  RecursionError

  maximum recursion depth exceeded

  at tests/fixtures/exceptions/recursion.py:2 in recursion_error
        1│ def recursion_error() -> None:
    →   2│     recursion_error()
        3│ 

mgorny avatar Nov 20 '23 16:11 mgorny

We don't test against PyPy, I guess there are some differences in how CPython and PyPy handle recursion. Feel free to submit a PR to fix this. I won't prioritize this now, since there are other, more important, things to take care of.

Secrus avatar Nov 27 '23 15:11 Secrus