Skip to content

Commit

Permalink
Fix 3.5 out of four failing tests
Browse files Browse the repository at this point in the history
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.
  • Loading branch information
gvanrossum committed Apr 27, 2023
1 parent f93052d commit e37d679
Show file tree
Hide file tree
Showing 4 changed files with 15 additions and 14 deletions.
2 changes: 1 addition & 1 deletion Lib/test/test_exceptions.py
Original file line number Diff line number Diff line change
Expand Up @@ -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)
Expand Down
2 changes: 1 addition & 1 deletion Lib/test/test_fstring.py
Original file line number Diff line number Diff line change
Expand Up @@ -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):
Expand Down
20 changes: 10 additions & 10 deletions Lib/test/test_string_literals.py
Original file line number Diff line number Diff line change
Expand Up @@ -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')
Expand Down
5 changes: 3 additions & 2 deletions Lib/test/test_tokenize.py
Original file line number Diff line number Diff line change
Expand Up @@ -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'", """\
Expand Down

0 comments on commit e37d679

Please sign in to comment.