@@ -78,9 +78,9 @@ def to_tuple(t):
7878 # Pass,
7979 "pass" ,
8080 # Break
81- "break" ,
81+ "for v in v: break" ,
8282 # Continue
83- "continue" ,
83+ "for v in v: continue" ,
8484 # for statements with naked tuples (see http://bugs.python.org/issue6704)
8585 "for a,b in c: pass" ,
8686 "[(a,b) for a,b in c]" ,
@@ -112,6 +112,9 @@ def to_tuple(t):
112112 "async def f():\n async for e in i: 1\n else: 2" ,
113113 # AsyncWith
114114 "async def f():\n async with a as b: 1" ,
115+ # PEP 448: Additional Unpacking Generalizations
116+ "{**{1:2}, 2:3}" ,
117+ "{*{1, 2}, 3}" ,
115118]
116119
117120# These are compiled through "single"
@@ -231,9 +234,12 @@ def test_snippets(self):
231234 (single_tests , single_results , "single" ),
232235 (eval_tests , eval_results , "eval" )):
233236 for i , o in zip (input , output ):
234- ast_tree = compile (i , "?" , kind , ast .PyCF_ONLY_AST )
235- self .assertEqual (to_tuple (ast_tree ), o )
236- self ._assertTrueorder (ast_tree , (0 , 0 ))
237+ with self .subTest (action = "parsing" , input = i ):
238+ ast_tree = compile (i , "?" , kind , ast .PyCF_ONLY_AST )
239+ self .assertEqual (to_tuple (ast_tree ), o )
240+ self ._assertTrueorder (ast_tree , (0 , 0 ))
241+ with self .subTest (action = "compiling" , input = i ):
242+ compile (ast_tree , "?" , kind )
237243
238244 def test_slice (self ):
239245 slc = ast .parse ("x[::]" ).body [0 ].value .slice
@@ -780,8 +786,6 @@ def test_ifexp(self):
780786 def test_dict (self ):
781787 d = ast .Dict ([], [ast .Name ("x" , ast .Load ())])
782788 self .expr (d , "same number of keys as values" )
783- d = ast .Dict ([None ], [ast .Name ("x" , ast .Load ())])
784- self .expr (d , "None disallowed" )
785789 d = ast .Dict ([ast .Name ("x" , ast .Load ())], [None ])
786790 self .expr (d , "None disallowed" )
787791
@@ -972,8 +976,8 @@ def main():
972976('Module' , [('Global' , (1 , 0 ), ['v' ])]),
973977('Module' , [('Expr' , (1 , 0 ), ('Num' , (1 , 0 ), 1 ))]),
974978('Module' , [('Pass' , (1 , 0 ))]),
975- ('Module' , [('Break ' , (1 , 0 ))]),
976- ('Module' , [('Continue ' , (1 , 0 ))]),
979+ ('Module' , [('For ' , (1 , 0 ), ( 'Name' , ( 1 , 4 ), 'v' , ( 'Store' ,)), ( 'Name' , ( 1 , 9 ), 'v' , ( 'Load' ,)), [( 'Break' , ( 1 , 11 ))], [] )]),
980+ ('Module' , [('For ' , (1 , 0 ), ( 'Name' , ( 1 , 4 ), 'v' , ( 'Store' ,)), ( 'Name' , ( 1 , 9 ), 'v' , ( 'Load' ,)), [( 'Continue' , ( 1 , 11 ))], [] )]),
977981('Module' , [('For' , (1 , 0 ), ('Tuple' , (1 , 4 ), [('Name' , (1 , 4 ), 'a' , ('Store' ,)), ('Name' , (1 , 6 ), 'b' , ('Store' ,))], ('Store' ,)), ('Name' , (1 , 11 ), 'c' , ('Load' ,)), [('Pass' , (1 , 14 ))], [])]),
978982('Module' , [('Expr' , (1 , 0 ), ('ListComp' , (1 , 1 ), ('Tuple' , (1 , 2 ), [('Name' , (1 , 2 ), 'a' , ('Load' ,)), ('Name' , (1 , 4 ), 'b' , ('Load' ,))], ('Load' ,)), [('comprehension' , ('Tuple' , (1 , 11 ), [('Name' , (1 , 11 ), 'a' , ('Store' ,)), ('Name' , (1 , 13 ), 'b' , ('Store' ,))], ('Store' ,)), ('Name' , (1 , 18 ), 'c' , ('Load' ,)), [])]))]),
979983('Module' , [('Expr' , (1 , 0 ), ('GeneratorExp' , (1 , 1 ), ('Tuple' , (1 , 2 ), [('Name' , (1 , 2 ), 'a' , ('Load' ,)), ('Name' , (1 , 4 ), 'b' , ('Load' ,))], ('Load' ,)), [('comprehension' , ('Tuple' , (1 , 11 ), [('Name' , (1 , 11 ), 'a' , ('Store' ,)), ('Name' , (1 , 13 ), 'b' , ('Store' ,))], ('Store' ,)), ('Name' , (1 , 18 ), 'c' , ('Load' ,)), [])]))]),
@@ -986,6 +990,8 @@ def main():
986990('Module' , [('AsyncFunctionDef' , (1 , 6 ), 'f' , ('arguments' , [], None , [], [], None , []), [('Expr' , (2 , 1 ), ('Await' , (2 , 1 ), ('Call' , (2 , 7 ), ('Name' , (2 , 7 ), 'something' , ('Load' ,)), [], [])))], [], None )]),
987991('Module' , [('AsyncFunctionDef' , (1 , 6 ), 'f' , ('arguments' , [], None , [], [], None , []), [('AsyncFor' , (2 , 7 ), ('Name' , (2 , 11 ), 'e' , ('Store' ,)), ('Name' , (2 , 16 ), 'i' , ('Load' ,)), [('Expr' , (2 , 19 ), ('Num' , (2 , 19 ), 1 ))], [('Expr' , (3 , 7 ), ('Num' , (3 , 7 ), 2 ))])], [], None )]),
988992('Module' , [('AsyncFunctionDef' , (1 , 6 ), 'f' , ('arguments' , [], None , [], [], None , []), [('AsyncWith' , (2 , 7 ), [('withitem' , ('Name' , (2 , 12 ), 'a' , ('Load' ,)), ('Name' , (2 , 17 ), 'b' , ('Store' ,)))], [('Expr' , (2 , 20 ), ('Num' , (2 , 20 ), 1 ))])], [], None )]),
993+ ('Module' , [('Expr' , (1 , 0 ), ('Dict' , (1 , 1 ), [None , ('Num' , (1 , 10 ), 2 )], [('Dict' , (1 , 4 ), [('Num' , (1 , 4 ), 1 )], [('Num' , (1 , 6 ), 2 )]), ('Num' , (1 , 12 ), 3 )]))]),
994+ ('Module' , [('Expr' , (1 , 0 ), ('Set' , (1 , 1 ), [('Starred' , (1 , 1 ), ('Set' , (1 , 3 ), [('Num' , (1 , 3 ), 1 ), ('Num' , (1 , 6 ), 2 )]), ('Load' ,)), ('Num' , (1 , 10 ), 3 )]))]),
989995]
990996single_results = [
991997('Interactive' , [('Expr' , (1 , 0 ), ('BinOp' , (1 , 0 ), ('Num' , (1 , 0 ), 1 ), ('Add' ,), ('Num' , (1 , 2 ), 2 )))]),
0 commit comments