cpython/Lib/lib2to3/tests/test_all_fixers.py
Victor Stinner ee0ac328d3
bpo-46542: test_lib2to3 uses support.infinite_recursion() (GH-31035)
* bpo-46542: test_lib2to3 uses support.infinite_recursion()

Fix a Python crash in test_lib2to3 when using Python built in debug
mode: limit the recursion limit.

The test_all_project_files() test of test_lib2to3 now uses the
test.support.infinite_recursion() context manager when processing the
infinite_recursion.py file to prevent a crash when Python is built in
debug mode.

The two test_all_project_files() tests now use subTest() and log the
refactored/parsed filename (if test_lib2to3 is run in verbose mode).

* Update Lib/lib2to3/tests/data/infinite_recursion.py

Co-authored-by: Jelle Zijlstra <jelle.zijlstra@gmail.com>

Co-authored-by: Łukasz Langa <lukasz@langa.pl>
Co-authored-by: Jelle Zijlstra <jelle.zijlstra@gmail.com>
2022-01-31 18:46:09 +01:00

42 lines
1.2 KiB
Python

"""Tests that run all fixer modules over an input stream.
This has been broken out into its own test module because of its
running time.
"""
# Author: Collin Winter
# Python imports
import os.path
import sys
import test.support
import unittest
# Local imports
from . import support
@test.support.requires_resource('cpu')
class Test_all(support.TestCase):
def setUp(self):
self.refactor = support.get_refactorer()
def refactor_file(self, filepath):
if test.support.verbose:
print(f"Refactor file: {filepath}")
if os.path.basename(filepath) == 'infinite_recursion.py':
# bpo-46542: Processing infinite_recursion.py can crash Python
# if Python is built in debug mode: lower the recursion limit
# to prevent a crash.
with test.support.infinite_recursion(150):
self.refactor.refactor_file(filepath)
else:
self.refactor.refactor_file(filepath)
def test_all_project_files(self):
for filepath in support.all_project_files():
with self.subTest(filepath=filepath):
self.refactor_file(filepath)
if __name__ == '__main__':
unittest.main()