From e37d679a7970573052c468931c7e4ea96159b5d2 Mon Sep 17 00:00:00 2001 From: Guido van Rossum Date: Wed, 26 Apr 2023 18:26:59 -0700 Subject: [PATCH] Fix 3.5 out of four failing tests There are still errors in test_fstring.py, but these are not so easy to track down. It seems that if there is a syntax error involving mismatched braces in an f-string interpolation, the parser backtracks and the tokenizer produces TAGSTRING_START instead of FSTRING_START, and other state is not initialized properly. I'll have to involve Pablo in debugging that. --- Lib/test/test_exceptions.py | 2 +- Lib/test/test_fstring.py | 2 +- Lib/test/test_string_literals.py | 20 ++++++++++---------- Lib/test/test_tokenize.py | 5 +++-- 4 files changed, 15 insertions(+), 14 deletions(-) diff --git a/Lib/test/test_exceptions.py b/Lib/test/test_exceptions.py index 4ef7decfbc263e..1b02c94efb561b 100644 --- a/Lib/test/test_exceptions.py +++ b/Lib/test/test_exceptions.py @@ -272,7 +272,7 @@ def bar(): def baz(): '''quux''' - """, 9, 24) + """, 9, 20) check("pass\npass\npass\n(1+)\npass\npass\npass", 4, 4) check("(1+)", 1, 4) check("[interesting\nfoo()\n", 1, 1) diff --git a/Lib/test/test_fstring.py b/Lib/test/test_fstring.py index 9d5e16628f04b6..058a3aac6d895f 100644 --- a/Lib/test/test_fstring.py +++ b/Lib/test/test_fstring.py @@ -1141,7 +1141,7 @@ def test_invalid_string_prefixes(self): "Bf''", "BF''",] double_quote_cases = [case.replace("'", '"') for case in single_quote_cases] - self.assertAllRaise(SyntaxError, 'invalid syntax', + self.assertAllRaise(NameError, 'is not defined', single_quote_cases + double_quote_cases) def test_leading_trailing_spaces(self): diff --git a/Lib/test/test_string_literals.py b/Lib/test/test_string_literals.py index 9b663c00223d1b..d03e913294ecc2 100644 --- a/Lib/test/test_string_literals.py +++ b/Lib/test/test_string_literals.py @@ -250,21 +250,21 @@ def test_eval_bytes_raw(self): self.assertEqual(eval(r""" rb'\U0001d120' """), b"\\" + b"U0001d120") self.assertRaises(SyntaxError, eval, """ br'\U0001d120' """) self.assertRaises(SyntaxError, eval, """ rb'\U0001d120' """) - self.assertRaises(SyntaxError, eval, """ bb'' """) - self.assertRaises(SyntaxError, eval, """ rr'' """) - self.assertRaises(SyntaxError, eval, """ brr'' """) - self.assertRaises(SyntaxError, eval, """ bbr'' """) - self.assertRaises(SyntaxError, eval, """ rrb'' """) - self.assertRaises(SyntaxError, eval, """ rbb'' """) + self.assertRaises(NameError, eval, """ bb'' """) + self.assertRaises(NameError, eval, """ rr'' """) + self.assertRaises(NameError, eval, """ brr'' """) + self.assertRaises(NameError, eval, """ bbr'' """) + self.assertRaises(NameError, eval, """ rrb'' """) + self.assertRaises(NameError, eval, """ rbb'' """) def test_eval_str_u(self): self.assertEqual(eval(""" u'x' """), 'x') self.assertEqual(eval(""" U'\u00e4' """), 'ä') self.assertEqual(eval(""" u'\N{LATIN SMALL LETTER A WITH DIAERESIS}' """), 'ä') - self.assertRaises(SyntaxError, eval, """ ur'' """) - self.assertRaises(SyntaxError, eval, """ ru'' """) - self.assertRaises(SyntaxError, eval, """ bu'' """) - self.assertRaises(SyntaxError, eval, """ ub'' """) + self.assertRaises(NameError, eval, """ ur'' """) + self.assertRaises(NameError, eval, """ ru'' """) + self.assertRaises(NameError, eval, """ bu'' """) + self.assertRaises(NameError, eval, """ ub'' """) def test_uppercase_prefixes(self): self.assertEqual(eval(""" B'x' """), b'x') diff --git a/Lib/test/test_tokenize.py b/Lib/test/test_tokenize.py index 283a7c23609e67..e60563de11b558 100644 --- a/Lib/test/test_tokenize.py +++ b/Lib/test/test_tokenize.py @@ -1806,8 +1806,9 @@ def test_string(self): NAME 'x' (1, 0) (1, 1) EQUAL '=' (1, 2) (1, 3) STRING '"doesn\\'t "' (1, 4) (1, 14) - NAME 'shrink' (1, 14) (1, 20) - STRING '", does it"' (1, 20) (1, 31) + TAGSTRING_START \'shrink"\' (1, 14) (1, 21) + FSTRING_MIDDLE ', does it' (1, 21) (1, 30) + FSTRING_END \'"\' (1, 30) (1, 31) """) self.check_tokenize("x = 'abc' + 'ABC'", """\