summaryrefslogtreecommitdiffstats
path: root/Lib/lib2to3/tests/test_parser.py
diff options
context:
space:
mode:
authorMiss Islington (bot) <31488909+miss-islington@users.noreply.github.com>2022-01-31 20:03:44 (GMT)
committerGitHub <noreply@github.com>2022-01-31 20:03:44 (GMT)
commit30463860796790d3be97b76744290e4c364ad765 (patch)
tree55c7ec5e1f5eee24c6ab51f6a28bb160fcbb55f5 /Lib/lib2to3/tests/test_parser.py
parentad9cf2fdd39968b07e04136c8b50f65a4596c087 (diff)
downloadcpython-30463860796790d3be97b76744290e4c364ad765.zip
cpython-30463860796790d3be97b76744290e4c364ad765.tar.gz
cpython-30463860796790d3be97b76744290e4c364ad765.tar.bz2
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> (cherry picked from commit ee0ac328d38a86f7907598c94cb88a97635b32f8) Co-authored-by: Victor Stinner <vstinner@python.org>
Diffstat (limited to 'Lib/lib2to3/tests/test_parser.py')
-rw-r--r--Lib/lib2to3/tests/test_parser.py41
1 files changed, 24 insertions, 17 deletions
diff --git a/Lib/lib2to3/tests/test_parser.py b/Lib/lib2to3/tests/test_parser.py
index 034b503..3884872 100644
--- a/Lib/lib2to3/tests/test_parser.py
+++ b/Lib/lib2to3/tests/test_parser.py
@@ -20,6 +20,7 @@ import shutil
import subprocess
import sys
import tempfile
+import test.support
import unittest
# Local imports
@@ -582,25 +583,31 @@ class TestParserIdempotency(support.TestCase):
"""A cut-down version of pytree_idempotency.py."""
+ def parse_file(self, filepath):
+ if test.support.verbose:
+ print(f"Parse file: {filepath}")
+ with open(filepath, "rb") as fp:
+ encoding = tokenize.detect_encoding(fp.readline)[0]
+ self.assertIsNotNone(encoding,
+ "can't detect encoding for %s" % filepath)
+ with open(filepath, "r", encoding=encoding) as fp:
+ source = fp.read()
+ try:
+ tree = driver.parse_string(source)
+ except ParseError:
+ try:
+ tree = driver_no_print_statement.parse_string(source)
+ except ParseError as err:
+ self.fail('ParseError on file %s (%s)' % (filepath, err))
+ new = str(tree)
+ if new != source:
+ print(diff_texts(source, new, filepath))
+ self.fail("Idempotency failed: %s" % filepath)
+
def test_all_project_files(self):
for filepath in support.all_project_files():
- with open(filepath, "rb") as fp:
- encoding = tokenize.detect_encoding(fp.readline)[0]
- self.assertIsNotNone(encoding,
- "can't detect encoding for %s" % filepath)
- with open(filepath, "r", encoding=encoding) as fp:
- source = fp.read()
- try:
- tree = driver.parse_string(source)
- except ParseError:
- try:
- tree = driver_no_print_statement.parse_string(source)
- except ParseError as err:
- self.fail('ParseError on file %s (%s)' % (filepath, err))
- new = str(tree)
- if new != source:
- print(diff_texts(source, new, filepath))
- self.fail("Idempotency failed: %s" % filepath)
+ with self.subTest(filepath=filepath):
+ self.parse_file(filepath)
def test_extended_unpacking(self):
driver.parse_string("a, *b, c = x\n")