Merge pull request #2487 from nicoddemus/recursion-error-2486
Fix internal error when trying to detect the start of a recursive traceback
This commit is contained in:
		
						commit
						5e832017d5
					
				|  | @ -640,8 +640,11 @@ class FormattedExcinfo(object): | |||
|             ).format(exc_type=type(e).__name__, exc_msg=safe_str(e), max_frames=max_frames, total=len(traceback)) | ||||
|             traceback = traceback[:max_frames] + traceback[-max_frames:] | ||||
|         else: | ||||
|             extraline = "!!! Recursion detected (same locals & position)" | ||||
|             traceback = traceback[:recursionindex + 1] | ||||
|             if recursionindex is not None: | ||||
|                 extraline = "!!! Recursion detected (same locals & position)" | ||||
|                 traceback = traceback[:recursionindex + 1] | ||||
|             else: | ||||
|                 extraline = None | ||||
|              | ||||
|         return traceback, extraline | ||||
| 
 | ||||
|  |  | |||
|  | @ -0,0 +1 @@ | |||
| Fix internal error when trying to detect the start of a recursive traceback. | ||||
|  | @ -1,6 +1,7 @@ | |||
| # -*- coding: utf-8 -*- | ||||
| from __future__ import absolute_import, division, print_function | ||||
| 
 | ||||
| import sys | ||||
| import operator | ||||
| import _pytest | ||||
| import py | ||||
|  | @ -1173,3 +1174,25 @@ def test_exception_repr_extraction_error_on_recursion(): | |||
|             '*The following exception happened*', | ||||
|             '*ValueError: The truth value of an array*', | ||||
|         ]) | ||||
| 
 | ||||
| 
 | ||||
| def test_no_recursion_index_on_recursion_error(): | ||||
|     """ | ||||
|     Ensure that we don't break in case we can't find the recursion index | ||||
|     during a recursion error (#2486). | ||||
|     """ | ||||
|     try: | ||||
|         class RecursionDepthError(object): | ||||
|             def __getattr__(self, attr): | ||||
|                 return getattr(self, '_' + attr) | ||||
| 
 | ||||
|         RecursionDepthError().trigger | ||||
|     except: | ||||
|         from _pytest._code.code import ExceptionInfo | ||||
|         exc_info = ExceptionInfo() | ||||
|         if sys.version_info[:2] == (2, 6): | ||||
|             assert "'RecursionDepthError' object has no attribute '___" in str(exc_info.getrepr()) | ||||
|         else: | ||||
|             assert 'maximum recursion' in str(exc_info.getrepr()) | ||||
|     else: | ||||
|         assert 0 | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue