From f9d1bf2de07131a8d80bc1e4914ee534bc5effa4 Mon Sep 17 00:00:00 2001 From: Pablo Galindo Date: Sat, 20 Feb 2021 01:36:15 +0000 Subject: [3.9] bpo-43272: Fix old parser test failures for backported grammar constructs (GH-24591) --- Lib/test/test_fstring.py | 8 +++---- Lib/test/test_named_expressions.py | 3 +++ Lib/test/test_unpack_ex.py | 45 ++++++++++++++++++++++---------------- 3 files changed, 33 insertions(+), 23 deletions(-) diff --git a/Lib/test/test_fstring.py b/Lib/test/test_fstring.py index 2f08d35..05e7102 100644 --- a/Lib/test/test_fstring.py +++ b/Lib/test/test_fstring.py @@ -374,10 +374,10 @@ x = ( # check the call call = middle.value self.assertEqual(type(call), ast.Call) - self.assertEqual(call.lineno, 5) - self.assertEqual(call.end_lineno, 5) - self.assertEqual(call.col_offset, 27) - self.assertEqual(call.end_col_offset, 31) + self.assertEqual(call.lineno, 4 if use_old_parser() else 5) + self.assertEqual(call.end_lineno, 4 if use_old_parser() else 5) + self.assertEqual(call.col_offset, 13 if use_old_parser() else 27) + self.assertEqual(call.end_col_offset, 17 if use_old_parser() else 31) # check the second wat self.assertEqual(type(wat2), ast.Constant) self.assertEqual(wat2.lineno, 4) diff --git a/Lib/test/test_named_expressions.py b/Lib/test/test_named_expressions.py index 2adcd4b..55c0038 100644 --- a/Lib/test/test_named_expressions.py +++ b/Lib/test/test_named_expressions.py @@ -1,4 +1,5 @@ import unittest +from test.support import use_old_parser GLOBAL_VAR = None @@ -167,6 +168,7 @@ class NamedExpressionInvalidTest(unittest.TestCase): with self.assertRaisesRegex(SyntaxError, msg): exec(f"lambda: {code}", {}) # Function scope + @unittest.skipIf(use_old_parser(), "Old parser does not support walruses in set comprehensions") def test_named_expression_invalid_rebinding_set_comprehension_iteration_variable(self): cases = [ ("Local reuse", 'i', "{i := 0 for i in range(5)}"), @@ -199,6 +201,7 @@ class NamedExpressionInvalidTest(unittest.TestCase): with self.assertRaisesRegex(SyntaxError, msg): exec(f"lambda: {code}", {}) # Function scope + @unittest.skipIf(use_old_parser(), "Old parser does not support walruses in set comprehensions") def test_named_expression_invalid_set_comprehension_iterable_expression(self): cases = [ ("Top level", "{i for i in (i := range(5))}"), diff --git a/Lib/test/test_unpack_ex.py b/Lib/test/test_unpack_ex.py index 049e48b..2dff57c 100644 --- a/Lib/test/test_unpack_ex.py +++ b/Lib/test/test_unpack_ex.py @@ -1,5 +1,7 @@ # Tests for extended unpacking, starred expressions. +from test.support import use_old_parser + doctests = """ Unpack tuple @@ -346,6 +348,26 @@ Now some general starred expressions (all fail). ... SyntaxError: can't use starred expression here +Some size constraints (all fail.) + + >>> s = ", ".join("a%d" % i for i in range(1<<8)) + ", *rest = range(1<<8 + 1)" + >>> compile(s, 'test', 'exec') # doctest:+ELLIPSIS + Traceback (most recent call last): + ... + SyntaxError: too many expressions in star-unpacking assignment + + >>> s = ", ".join("a%d" % i for i in range(1<<8 + 1)) + ", *rest = range(1<<8 + 2)" + >>> compile(s, 'test', 'exec') # doctest:+ELLIPSIS + Traceback (most recent call last): + ... + SyntaxError: too many expressions in star-unpacking assignment + +(there is an additional limit, on the number of expressions after the +'*rest', but it's 1<<24 and testing it takes too much memory.) + +""" + +new_parser_doctests = """\ >>> (*x),y = 1, 2 # doctest:+ELLIPSIS Traceback (most recent call last): ... @@ -370,27 +392,12 @@ Now some general starred expressions (all fail). Traceback (most recent call last): ... SyntaxError: can't use starred expression here - -Some size constraints (all fail.) - - >>> s = ", ".join("a%d" % i for i in range(1<<8)) + ", *rest = range(1<<8 + 1)" - >>> compile(s, 'test', 'exec') # doctest:+ELLIPSIS - Traceback (most recent call last): - ... - SyntaxError: too many expressions in star-unpacking assignment - - >>> s = ", ".join("a%d" % i for i in range(1<<8 + 1)) + ", *rest = range(1<<8 + 2)" - >>> compile(s, 'test', 'exec') # doctest:+ELLIPSIS - Traceback (most recent call last): - ... - SyntaxError: too many expressions in star-unpacking assignment - -(there is an additional limit, on the number of expressions after the -'*rest', but it's 1<<24 and testing it takes too much memory.) - """ -__test__ = {'doctests' : doctests} +if use_old_parser(): + __test__ = {'doctests' : doctests} +else: + __test__ = {'doctests' : doctests + new_parser_doctests} def test_main(verbose=False): from test import support -- cgit v0.12