##// END OF EJS Templates
Fix and test for "async with does not allow new lines"....
Matthias Bussonnier -
Show More
@@ -508,8 +508,11 b' def make_tokens_by_line(lines:List[str]):'
508 508 # reexported from token on 3.7+
509 509 NEWLINE, NL = tokenize.NEWLINE, tokenize.NL # type: ignore
510 510 tokens_by_line:List[List[Any]] = [[]]
511 if len(lines) > 1 and not lines[0].endswith(('\n', '\r', '\r\n', '\x0b', '\x0c')):
512 warnings.warn("`make_tokens_by_line` received a list of lines which do not have lineending markers ('\\n', '\\r', '\\r\\n', '\\x0b', '\\x0c'), behavior will be unspecified")
511 if len(lines) > 1 and not lines[0].endswith(("\n", "\r", "\r\n", "\x0b", "\x0c")):
512 warnings.warn(
513 "`make_tokens_by_line` received a list of lines which do not have lineending markers ('\\n', '\\r', '\\r\\n', '\\x0b', '\\x0c'), behavior will be unspecified",
514 stacklevel=2,
515 )
513 516 parenlev = 0
514 517 try:
515 518 for token in tokenize.generate_tokens(iter(lines).__next__):
@@ -782,9 +785,6 b' class MaybeAsyncCompile(Compile):'
782 785 super().__init__()
783 786 self.flags |= extra_flags
784 787
785 def __call__(self, *args, **kwds):
786 return compile(*args, **kwds)
787
788 788
789 789 class MaybeAsyncCommandCompiler(CommandCompiler):
790 790 def __init__(self, extra_flags=0):
@@ -4,6 +4,7 b' Line-based transformers are the simpler ones; token-based transformers are'
4 4 more complex. See test_inputtransformer2_line for tests for line-based
5 5 transformations.
6 6 """
7 import platform
7 8 import string
8 9 import sys
9 10 from textwrap import dedent
@@ -319,7 +320,16 b' def test_check_complete():'
319 320 assert cc("def f():\n x=0\n \\\n ") == ("incomplete", 2)
320 321
321 322
322 def test_check_complete_II():
323 @pytest.mark.skipif(platform.python_implementation() == "PyPy", reason="fail on pypy")
324 @pytest.mark.parametrize(
325 "value, expected",
326 [
327 ('''def foo():\n """''', ("incomplete", 4)),
328 ("""async with example:\n pass""", ("incomplete", 4)),
329 ("""async with example:\n pass\n """, ("complete", None)),
330 ],
331 )
332 def test_check_complete_II(value, expected):
323 333 """
324 334 Test that multiple line strings are properly handled.
325 335
@@ -327,25 +337,31 b' def test_check_complete_II():'
327 337
328 338 """
329 339 cc = ipt2.TransformerManager().check_complete
330 assert cc('''def foo():\n """''') == ("incomplete", 4)
331
332
333 def test_check_complete_invalidates_sunken_brackets():
340 assert cc(value) == expected
341
342
343 @pytest.mark.parametrize(
344 "value, expected",
345 [
346 (")", ("invalid", None)),
347 ("]", ("invalid", None)),
348 ("}", ("invalid", None)),
349 (")(", ("invalid", None)),
350 ("][", ("invalid", None)),
351 ("}{", ("invalid", None)),
352 ("]()(", ("invalid", None)),
353 ("())(", ("invalid", None)),
354 (")[](", ("invalid", None)),
355 ("()](", ("invalid", None)),
356 ],
357 )
358 def test_check_complete_invalidates_sunken_brackets(value, expected):
334 359 """
335 360 Test that a single line with more closing brackets than the opening ones is
336 361 interpreted as invalid
337 362 """
338 363 cc = ipt2.TransformerManager().check_complete
339 assert cc(")") == ("invalid", None)
340 assert cc("]") == ("invalid", None)
341 assert cc("}") == ("invalid", None)
342 assert cc(")(") == ("invalid", None)
343 assert cc("][") == ("invalid", None)
344 assert cc("}{") == ("invalid", None)
345 assert cc("]()(") == ("invalid", None)
346 assert cc("())(") == ("invalid", None)
347 assert cc(")[](") == ("invalid", None)
348 assert cc("()](") == ("invalid", None)
364 assert cc(value) == expected
349 365
350 366
351 367 def test_null_cleanup_transformer():
General Comments 0
You need to be logged in to leave comments. Login now