14adfde8bc82dd39f59e0445588c3e599ada477dJosh Gaoimport sys, itertools, unittest 24adfde8bc82dd39f59e0445588c3e599ada477dJosh Gaofrom test import test_support 34adfde8bc82dd39f59e0445588c3e599ada477dJosh Gaoimport ast 44adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 54adfde8bc82dd39f59e0445588c3e599ada477dJosh Gaodef to_tuple(t): 64adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao if t is None or isinstance(t, (basestring, int, long, complex)): 74adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao return t 84adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao elif isinstance(t, list): 94adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao return [to_tuple(e) for e in t] 104adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao result = [t.__class__.__name__] 114adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao if hasattr(t, 'lineno') and hasattr(t, 'col_offset'): 124adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao result.append((t.lineno, t.col_offset)) 134adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao if t._fields is None: 144adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao return tuple(result) 154adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao for f in t._fields: 164adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao result.append(to_tuple(getattr(t, f))) 174adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao return tuple(result) 184adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 194adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 204adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao# These tests are compiled through "exec" 214adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao# There should be atleast one test per statement 224adfde8bc82dd39f59e0445588c3e599ada477dJosh Gaoexec_tests = [ 234adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao # None 244adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao "None", 254adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao # FunctionDef 264adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao "def f(): pass", 274adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao # FunctionDef with arg 284adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao "def f(a): pass", 294adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao # FunctionDef with arg and default value 304adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao "def f(a=0): pass", 314adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao # FunctionDef with varargs 324adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao "def f(*args): pass", 334adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao # FunctionDef with kwargs 344adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao "def f(**kwargs): pass", 354adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao # FunctionDef with all kind of args 364adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao "def f(a, b=1, c=None, d=[], e={}, *args, **kwargs): pass", 374adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao # ClassDef 384adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao "class C:pass", 394adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao # ClassDef, new style class 404adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao "class C(object): pass", 414adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao # Return 424adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao "def f():return 1", 434adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao # Delete 444adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao "del v", 454adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao # Assign 464adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao "v = 1", 474adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao # AugAssign 484adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao "v += 1", 494adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao # Print 504adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao "print >>f, 1, ", 514adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao # For 524adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao "for v in v:pass", 534adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao # While 544adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao "while v:pass", 554adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao # If 564adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao "if v:pass", 574adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao # Raise 584adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao "raise Exception, 'string'", 594adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao # TryExcept 604adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao "try:\n pass\nexcept Exception:\n pass", 614adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao # TryFinally 624adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao "try:\n pass\nfinally:\n pass", 634adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao # Assert 644adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao "assert v", 654adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao # Import 664adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao "import sys", 674adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao # ImportFrom 684adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao "from sys import v", 694adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao # Exec 704adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao "exec 'v'", 714adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao # Global 724adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao "global v", 734adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao # Expr 744adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao "1", 754adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao # Pass, 764adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao "pass", 774adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao # Break 784adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao "break", 794adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao # Continue 804adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao "continue", 814adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao # for statements with naked tuples (see http://bugs.python.org/issue6704) 824adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao "for a,b in c: pass", 834adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao "[(a,b) for a,b in c]", 844adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao "((a,b) for a,b in c)", 854adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao "((a,b) for (a,b) in c)", 864adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao # Multiline generator expression (test for .lineno & .col_offset) 874adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao """( 884adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ( 894adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao Aa 904adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao , 914adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao Bb 924adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ) 934adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao for 944adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao Aa 954adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao , 964adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao Bb in Cc 974adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao )""", 984adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao # dictcomp 994adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao "{a : b for w in x for m in p if g}", 1004adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao # dictcomp with naked tuple 1014adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao "{a : b for v,w in x}", 1024adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao # setcomp 1034adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao "{r for l in x if g}", 1044adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao # setcomp with naked tuple 1054adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao "{r for l,m in x}", 1064adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao] 1074adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 1084adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao# These are compiled through "single" 1094adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao# because of overlap with "eval", it just tests what 1104adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao# can't be tested with "eval" 1114adfde8bc82dd39f59e0445588c3e599ada477dJosh Gaosingle_tests = [ 1124adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao "1+2" 1134adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao] 1144adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 1154adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao# These are compiled through "eval" 1164adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao# It should test all expressions 1174adfde8bc82dd39f59e0445588c3e599ada477dJosh Gaoeval_tests = [ 1184adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao # None 1194adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao "None", 1204adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao # BoolOp 1214adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao "a and b", 1224adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao # BinOp 1234adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao "a + b", 1244adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao # UnaryOp 1254adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao "not v", 1264adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao # Lambda 1274adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao "lambda:None", 1284adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao # Dict 1294adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao "{ 1:2 }", 1304adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao # Empty dict 1314adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao "{}", 1324adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao # Set 1334adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao "{None,}", 1344adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao # Multiline dict (test for .lineno & .col_offset) 1354adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao """{ 1364adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 1 1374adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao : 1384adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 2 1394adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao }""", 1404adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao # ListComp 1414adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao "[a for b in c if d]", 1424adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao # GeneratorExp 1434adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao "(a for b in c if d)", 1444adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao # Yield - yield expressions can't work outside a function 1454adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao # 1464adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao # Compare 1474adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao "1 < 2 < 3", 1484adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao # Call 1494adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao "f(1,2,c=3,*d,**e)", 1504adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao # Repr 1514adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao "`v`", 1524adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao # Num 1534adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao "10L", 1544adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao # Str 1554adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao "'string'", 1564adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao # Attribute 1574adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao "a.b", 1584adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao # Subscript 1594adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao "a[b:c]", 1604adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao # Name 1614adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao "v", 1624adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao # List 1634adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao "[1,2,3]", 1644adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao # Empty list 1654adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao "[]", 1664adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao # Tuple 1674adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao "1,2,3", 1684adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao # Tuple 1694adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao "(1,2,3)", 1704adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao # Empty tuple 1714adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao "()", 1724adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao # Combination 1734adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao "a.b.c.d(a.b[1:2])", 1744adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 1754adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao] 1764adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 1774adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao# TODO: expr_context, slice, boolop, operator, unaryop, cmpop, comprehension 1784adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao# excepthandler, arguments, keywords, alias 1794adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 1804adfde8bc82dd39f59e0445588c3e599ada477dJosh Gaoclass AST_Tests(unittest.TestCase): 1814adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 1824adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def _assertTrueorder(self, ast_node, parent_pos): 1834adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao if not isinstance(ast_node, ast.AST) or ast_node._fields is None: 1844adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao return 1854adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao if isinstance(ast_node, (ast.expr, ast.stmt, ast.excepthandler)): 1864adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao node_pos = (ast_node.lineno, ast_node.col_offset) 1874adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertTrue(node_pos >= parent_pos) 1884adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao parent_pos = (ast_node.lineno, ast_node.col_offset) 1894adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao for name in ast_node._fields: 1904adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao value = getattr(ast_node, name) 1914adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao if isinstance(value, list): 1924adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao for child in value: 1934adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self._assertTrueorder(child, parent_pos) 1944adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao elif value is not None: 1954adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self._assertTrueorder(value, parent_pos) 1964adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 1974adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def test_AST_objects(self): 1984adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao x = ast.AST() 1994adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(x._fields, ()) 2004adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 2014adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao with self.assertRaises(AttributeError): 2024adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao x.vararg 2034adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 2044adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao with self.assertRaises(AttributeError): 2054adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao x.foobar = 21 2064adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 2074adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao with self.assertRaises(AttributeError): 2084adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ast.AST(lineno=2) 2094adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 2104adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao with self.assertRaises(TypeError): 2114adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao # "_ast.AST constructor takes 0 positional arguments" 2124adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ast.AST(2) 2134adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 2144adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def test_snippets(self): 2154adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao for input, output, kind in ((exec_tests, exec_results, "exec"), 2164adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao (single_tests, single_results, "single"), 2174adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao (eval_tests, eval_results, "eval")): 2184adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao for i, o in itertools.izip(input, output): 2194adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ast_tree = compile(i, "?", kind, ast.PyCF_ONLY_AST) 2204adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(to_tuple(ast_tree), o) 2214adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self._assertTrueorder(ast_tree, (0, 0)) 2224adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 2234adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def test_slice(self): 2244adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao slc = ast.parse("x[::]").body[0].value.slice 2254adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertIsNone(slc.upper) 2264adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertIsNone(slc.lower) 2274adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertIsInstance(slc.step, ast.Name) 2284adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(slc.step.id, "None") 2294adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 2304adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def test_from_import(self): 2314adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao im = ast.parse("from . import y").body[0] 2324adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertIsNone(im.module) 2334adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 2344adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def test_non_interned_future_from_ast(self): 2354adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao mod = ast.parse("from __future__ import division") 2364adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertIsInstance(mod.body[0], ast.ImportFrom) 2374adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao mod.body[0].module = " __future__ ".strip() 2384adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao compile(mod, "<test>", "exec") 2394adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 2404adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def test_base_classes(self): 2414adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertTrue(issubclass(ast.For, ast.stmt)) 2424adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertTrue(issubclass(ast.Name, ast.expr)) 2434adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertTrue(issubclass(ast.stmt, ast.AST)) 2444adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertTrue(issubclass(ast.expr, ast.AST)) 2454adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertTrue(issubclass(ast.comprehension, ast.AST)) 2464adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertTrue(issubclass(ast.Gt, ast.AST)) 2474adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 2484adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def test_field_attr_existence(self): 2494adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao for name, item in ast.__dict__.iteritems(): 2504adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao if isinstance(item, type) and name != 'AST' and name[0].isupper(): 2514adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao x = item() 2524adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao if isinstance(x, ast.AST): 2534adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(type(x._fields), tuple) 2544adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 2554adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def test_arguments(self): 2564adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao x = ast.arguments() 2574adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(x._fields, ('args', 'vararg', 'kwarg', 'defaults')) 2584adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 2594adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao with self.assertRaises(AttributeError): 2604adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao x.vararg 2614adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 2624adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao x = ast.arguments(1, 2, 3, 4) 2634adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(x.vararg, 2) 2644adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 2654adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def test_field_attr_writable(self): 2664adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao x = ast.Num() 2674adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao # We can assign to _fields 2684adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao x._fields = 666 2694adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(x._fields, 666) 2704adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 2714adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def test_classattrs(self): 2724adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao x = ast.Num() 2734adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(x._fields, ('n',)) 2744adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 2754adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao with self.assertRaises(AttributeError): 2764adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao x.n 2774adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 2784adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao x = ast.Num(42) 2794adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(x.n, 42) 2804adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 2814adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao with self.assertRaises(AttributeError): 2824adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao x.lineno 2834adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 2844adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao with self.assertRaises(AttributeError): 2854adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao x.foobar 2864adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 2874adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao x = ast.Num(lineno=2) 2884adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(x.lineno, 2) 2894adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 2904adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao x = ast.Num(42, lineno=0) 2914adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(x.lineno, 0) 2924adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(x._fields, ('n',)) 2934adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(x.n, 42) 2944adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 2954adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertRaises(TypeError, ast.Num, 1, 2) 2964adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertRaises(TypeError, ast.Num, 1, 2, lineno=0) 2974adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 2984adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def test_module(self): 2994adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao body = [ast.Num(42)] 3004adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao x = ast.Module(body) 3014adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(x.body, body) 3024adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 3034adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def test_nodeclasses(self): 3044adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao # Zero arguments constructor explicitely allowed 3054adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao x = ast.BinOp() 3064adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(x._fields, ('left', 'op', 'right')) 3074adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 3084adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao # Random attribute allowed too 3094adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao x.foobarbaz = 5 3104adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(x.foobarbaz, 5) 3114adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 3124adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao n1 = ast.Num(1) 3134adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao n3 = ast.Num(3) 3144adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao addop = ast.Add() 3154adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao x = ast.BinOp(n1, addop, n3) 3164adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(x.left, n1) 3174adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(x.op, addop) 3184adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(x.right, n3) 3194adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 3204adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao x = ast.BinOp(1, 2, 3) 3214adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(x.left, 1) 3224adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(x.op, 2) 3234adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(x.right, 3) 3244adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 3254adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao x = ast.BinOp(1, 2, 3, lineno=0) 3264adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(x.left, 1) 3274adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(x.op, 2) 3284adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(x.right, 3) 3294adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(x.lineno, 0) 3304adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 3314adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao # node raises exception when not given enough arguments 3324adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertRaises(TypeError, ast.BinOp, 1, 2) 3334adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao # node raises exception when given too many arguments 3344adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertRaises(TypeError, ast.BinOp, 1, 2, 3, 4) 3354adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao # node raises exception when not given enough arguments 3364adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertRaises(TypeError, ast.BinOp, 1, 2, lineno=0) 3374adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao # node raises exception when given too many arguments 3384adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertRaises(TypeError, ast.BinOp, 1, 2, 3, 4, lineno=0) 3394adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 3404adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao # can set attributes through kwargs too 3414adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao x = ast.BinOp(left=1, op=2, right=3, lineno=0) 3424adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(x.left, 1) 3434adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(x.op, 2) 3444adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(x.right, 3) 3454adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(x.lineno, 0) 3464adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 3474adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao # Random kwargs also allowed 3484adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao x = ast.BinOp(1, 2, 3, foobarbaz=42) 3494adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(x.foobarbaz, 42) 3504adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 3514adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def test_no_fields(self): 3524adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao # this used to fail because Sub._fields was None 3534adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao x = ast.Sub() 3544adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(x._fields, ()) 3554adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 3564adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def test_pickling(self): 3574adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao import pickle 3584adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao mods = [pickle] 3594adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao try: 3604adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao import cPickle 3614adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao mods.append(cPickle) 3624adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao except ImportError: 3634adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao pass 3644adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao protocols = [0, 1, 2] 3654adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao for mod in mods: 3664adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao for protocol in protocols: 3674adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao for ast in (compile(i, "?", "exec", 0x400) for i in exec_tests): 3684adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ast2 = mod.loads(mod.dumps(ast, protocol)) 3694adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(to_tuple(ast2), to_tuple(ast)) 3704adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 3714adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def test_invalid_identitifer(self): 3724adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao m = ast.Module([ast.Expr(ast.Name(u"x", ast.Load()))]) 3734adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ast.fix_missing_locations(m) 3744adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao with self.assertRaises(TypeError) as cm: 3754adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao compile(m, "<test>", "exec") 3764adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertIn("identifier must be of type str", str(cm.exception)) 3774adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 3784adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def test_invalid_string(self): 3794adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao m = ast.Module([ast.Expr(ast.Str(43))]) 3804adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ast.fix_missing_locations(m) 3814adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao with self.assertRaises(TypeError) as cm: 3824adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao compile(m, "<test>", "exec") 3834adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertIn("string must be of type str or uni", str(cm.exception)) 3844adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 3854adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 3864adfde8bc82dd39f59e0445588c3e599ada477dJosh Gaoclass ASTHelpers_Test(unittest.TestCase): 3874adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 3884adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def test_parse(self): 3894adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao a = ast.parse('foo(1 + 1)') 3904adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao b = compile('foo(1 + 1)', '<unknown>', 'exec', ast.PyCF_ONLY_AST) 3914adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(ast.dump(a), ast.dump(b)) 3924adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 3934adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def test_dump(self): 3944adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao node = ast.parse('spam(eggs, "and cheese")') 3954adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(ast.dump(node), 3964adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao "Module(body=[Expr(value=Call(func=Name(id='spam', ctx=Load()), " 3974adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao "args=[Name(id='eggs', ctx=Load()), Str(s='and cheese')], " 3984adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao "keywords=[], starargs=None, kwargs=None))])" 3994adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ) 4004adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(ast.dump(node, annotate_fields=False), 4014adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao "Module([Expr(Call(Name('spam', Load()), [Name('eggs', Load()), " 4024adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao "Str('and cheese')], [], None, None))])" 4034adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ) 4044adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(ast.dump(node, include_attributes=True), 4054adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao "Module(body=[Expr(value=Call(func=Name(id='spam', ctx=Load(), " 4064adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao "lineno=1, col_offset=0), args=[Name(id='eggs', ctx=Load(), " 4074adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao "lineno=1, col_offset=5), Str(s='and cheese', lineno=1, " 4084adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao "col_offset=11)], keywords=[], starargs=None, kwargs=None, " 4094adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao "lineno=1, col_offset=0), lineno=1, col_offset=0)])" 4104adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ) 4114adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 4124adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def test_copy_location(self): 4134adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao src = ast.parse('1 + 1', mode='eval') 4144adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao src.body.right = ast.copy_location(ast.Num(2), src.body.right) 4154adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(ast.dump(src, include_attributes=True), 4164adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 'Expression(body=BinOp(left=Num(n=1, lineno=1, col_offset=0), ' 4174adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 'op=Add(), right=Num(n=2, lineno=1, col_offset=4), lineno=1, ' 4184adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 'col_offset=0))' 4194adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ) 4204adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 4214adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def test_fix_missing_locations(self): 4224adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao src = ast.parse('write("spam")') 4234adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao src.body.append(ast.Expr(ast.Call(ast.Name('spam', ast.Load()), 4244adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao [ast.Str('eggs')], [], None, None))) 4254adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(src, ast.fix_missing_locations(src)) 4264adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(ast.dump(src, include_attributes=True), 4274adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao "Module(body=[Expr(value=Call(func=Name(id='write', ctx=Load(), " 4284adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao "lineno=1, col_offset=0), args=[Str(s='spam', lineno=1, " 4294adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao "col_offset=6)], keywords=[], starargs=None, kwargs=None, " 4304adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao "lineno=1, col_offset=0), lineno=1, col_offset=0), " 4314adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao "Expr(value=Call(func=Name(id='spam', ctx=Load(), lineno=1, " 4324adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao "col_offset=0), args=[Str(s='eggs', lineno=1, col_offset=0)], " 4334adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao "keywords=[], starargs=None, kwargs=None, lineno=1, " 4344adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao "col_offset=0), lineno=1, col_offset=0)])" 4354adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ) 4364adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 4374adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def test_increment_lineno(self): 4384adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao src = ast.parse('1 + 1', mode='eval') 4394adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(ast.increment_lineno(src, n=3), src) 4404adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(ast.dump(src, include_attributes=True), 4414adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 'Expression(body=BinOp(left=Num(n=1, lineno=4, col_offset=0), ' 4424adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 'op=Add(), right=Num(n=1, lineno=4, col_offset=4), lineno=4, ' 4434adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 'col_offset=0))' 4444adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ) 4454adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao # issue10869: do not increment lineno of root twice 4464adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao src = ast.parse('1 + 1', mode='eval') 4474adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(ast.increment_lineno(src.body, n=3), src.body) 4484adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(ast.dump(src, include_attributes=True), 4494adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 'Expression(body=BinOp(left=Num(n=1, lineno=4, col_offset=0), ' 4504adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 'op=Add(), right=Num(n=1, lineno=4, col_offset=4), lineno=4, ' 4514adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 'col_offset=0))' 4524adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ) 4534adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 4544adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def test_iter_fields(self): 4554adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao node = ast.parse('foo()', mode='eval') 4564adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao d = dict(ast.iter_fields(node.body)) 4574adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(d.pop('func').id, 'foo') 4584adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(d, {'keywords': [], 'kwargs': None, 4594adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 'args': [], 'starargs': None}) 4604adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 4614adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def test_iter_child_nodes(self): 4624adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao node = ast.parse("spam(23, 42, eggs='leek')", mode='eval') 4634adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(len(list(ast.iter_child_nodes(node.body))), 4) 4644adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao iterator = ast.iter_child_nodes(node.body) 4654adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(next(iterator).id, 'spam') 4664adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(next(iterator).n, 23) 4674adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(next(iterator).n, 42) 4684adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(ast.dump(next(iterator)), 4694adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao "keyword(arg='eggs', value=Str(s='leek'))" 4704adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ) 4714adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 4724adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def test_get_docstring(self): 4734adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao node = ast.parse('def foo():\n """line one\n line two"""') 4744adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(ast.get_docstring(node.body[0]), 4754adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 'line one\nline two') 4764adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 4774adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def test_literal_eval(self): 4784adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(ast.literal_eval('[1, 2, 3]'), [1, 2, 3]) 4794adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(ast.literal_eval('{"foo": 42}'), {"foo": 42}) 4804adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(ast.literal_eval('(True, False, None)'), (True, False, None)) 4814adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertRaises(ValueError, ast.literal_eval, 'foo()') 4824adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 4834adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def test_literal_eval_issue4907(self): 4844adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(ast.literal_eval('2j'), 2j) 4854adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(ast.literal_eval('10 + 2j'), 10 + 2j) 4864adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(ast.literal_eval('1.5 - 2j'), 1.5 - 2j) 4874adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertRaises(ValueError, ast.literal_eval, '2 + (3 + 4j)') 4884adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 4894adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 4904adfde8bc82dd39f59e0445588c3e599ada477dJosh Gaodef test_main(): 4914adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao with test_support.check_py3k_warnings(("backquote not supported", 4924adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao SyntaxWarning)): 4934adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao test_support.run_unittest(AST_Tests, ASTHelpers_Test) 4944adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 4954adfde8bc82dd39f59e0445588c3e599ada477dJosh Gaodef main(): 4964adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao if __name__ != '__main__': 4974adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao return 4984adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao if sys.argv[1:] == ['-g']: 4994adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao for statements, kind in ((exec_tests, "exec"), (single_tests, "single"), 5004adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao (eval_tests, "eval")): 5014adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao print kind+"_results = [" 5024adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao for s in statements: 5034adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao print repr(to_tuple(compile(s, "?", kind, 0x400)))+"," 5044adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao print "]" 5054adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao print "main()" 5064adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao raise SystemExit 5074adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao test_main() 5084adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 5094adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao#### EVERYTHING BELOW IS GENERATED ##### 5104adfde8bc82dd39f59e0445588c3e599ada477dJosh Gaoexec_results = [ 5114adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao('Module', [('Expr', (1, 0), ('Name', (1, 0), 'None', ('Load',)))]), 5124adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao('Module', [('FunctionDef', (1, 0), 'f', ('arguments', [], None, None, []), [('Pass', (1, 9))], [])]), 5134adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao('Module', [('FunctionDef', (1, 0), 'f', ('arguments', [('Name', (1, 6), 'a', ('Param',))], None, None, []), [('Pass', (1, 10))], [])]), 5144adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao('Module', [('FunctionDef', (1, 0), 'f', ('arguments', [('Name', (1, 6), 'a', ('Param',))], None, None, [('Num', (1, 8), 0)]), [('Pass', (1, 12))], [])]), 5154adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao('Module', [('FunctionDef', (1, 0), 'f', ('arguments', [], 'args', None, []), [('Pass', (1, 14))], [])]), 5164adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao('Module', [('FunctionDef', (1, 0), 'f', ('arguments', [], None, 'kwargs', []), [('Pass', (1, 17))], [])]), 5174adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao('Module', [('FunctionDef', (1, 0), 'f', ('arguments', [('Name', (1, 6), 'a', ('Param',)), ('Name', (1, 9), 'b', ('Param',)), ('Name', (1, 14), 'c', ('Param',)), ('Name', (1, 22), 'd', ('Param',)), ('Name', (1, 28), 'e', ('Param',))], 'args', 'kwargs', [('Num', (1, 11), 1), ('Name', (1, 16), 'None', ('Load',)), ('List', (1, 24), [], ('Load',)), ('Dict', (1, 30), [], [])]), [('Pass', (1, 52))], [])]), 5184adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao('Module', [('ClassDef', (1, 0), 'C', [], [('Pass', (1, 8))], [])]), 5194adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao('Module', [('ClassDef', (1, 0), 'C', [('Name', (1, 8), 'object', ('Load',))], [('Pass', (1, 17))], [])]), 5204adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao('Module', [('FunctionDef', (1, 0), 'f', ('arguments', [], None, None, []), [('Return', (1, 8), ('Num', (1, 15), 1))], [])]), 5214adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao('Module', [('Delete', (1, 0), [('Name', (1, 4), 'v', ('Del',))])]), 5224adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao('Module', [('Assign', (1, 0), [('Name', (1, 0), 'v', ('Store',))], ('Num', (1, 4), 1))]), 5234adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao('Module', [('AugAssign', (1, 0), ('Name', (1, 0), 'v', ('Store',)), ('Add',), ('Num', (1, 5), 1))]), 5244adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao('Module', [('Print', (1, 0), ('Name', (1, 8), 'f', ('Load',)), [('Num', (1, 11), 1)], False)]), 5254adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao('Module', [('For', (1, 0), ('Name', (1, 4), 'v', ('Store',)), ('Name', (1, 9), 'v', ('Load',)), [('Pass', (1, 11))], [])]), 5264adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao('Module', [('While', (1, 0), ('Name', (1, 6), 'v', ('Load',)), [('Pass', (1, 8))], [])]), 5274adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao('Module', [('If', (1, 0), ('Name', (1, 3), 'v', ('Load',)), [('Pass', (1, 5))], [])]), 5284adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao('Module', [('Raise', (1, 0), ('Name', (1, 6), 'Exception', ('Load',)), ('Str', (1, 17), 'string'), None)]), 5294adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao('Module', [('TryExcept', (1, 0), [('Pass', (2, 2))], [('ExceptHandler', (3, 0), ('Name', (3, 7), 'Exception', ('Load',)), None, [('Pass', (4, 2))])], [])]), 5304adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao('Module', [('TryFinally', (1, 0), [('Pass', (2, 2))], [('Pass', (4, 2))])]), 5314adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao('Module', [('Assert', (1, 0), ('Name', (1, 7), 'v', ('Load',)), None)]), 5324adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao('Module', [('Import', (1, 0), [('alias', 'sys', None)])]), 5334adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao('Module', [('ImportFrom', (1, 0), 'sys', [('alias', 'v', None)], 0)]), 5344adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao('Module', [('Exec', (1, 0), ('Str', (1, 5), 'v'), None, None)]), 5354adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao('Module', [('Global', (1, 0), ['v'])]), 5364adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao('Module', [('Expr', (1, 0), ('Num', (1, 0), 1))]), 5374adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao('Module', [('Pass', (1, 0))]), 5384adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao('Module', [('Break', (1, 0))]), 5394adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao('Module', [('Continue', (1, 0))]), 5404adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao('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))], [])]), 5414adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao('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',)), [])]))]), 5424adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao('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',)), [])]))]), 5434adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao('Module', [('Expr', (1, 0), ('GeneratorExp', (1, 1), ('Tuple', (1, 2), [('Name', (1, 2), 'a', ('Load',)), ('Name', (1, 4), 'b', ('Load',))], ('Load',)), [('comprehension', ('Tuple', (1, 12), [('Name', (1, 12), 'a', ('Store',)), ('Name', (1, 14), 'b', ('Store',))], ('Store',)), ('Name', (1, 20), 'c', ('Load',)), [])]))]), 5444adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao('Module', [('Expr', (1, 0), ('GeneratorExp', (2, 4), ('Tuple', (3, 4), [('Name', (3, 4), 'Aa', ('Load',)), ('Name', (5, 7), 'Bb', ('Load',))], ('Load',)), [('comprehension', ('Tuple', (8, 4), [('Name', (8, 4), 'Aa', ('Store',)), ('Name', (10, 4), 'Bb', ('Store',))], ('Store',)), ('Name', (10, 10), 'Cc', ('Load',)), [])]))]), 5454adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao('Module', [('Expr', (1, 0), ('DictComp', (1, 1), ('Name', (1, 1), 'a', ('Load',)), ('Name', (1, 5), 'b', ('Load',)), [('comprehension', ('Name', (1, 11), 'w', ('Store',)), ('Name', (1, 16), 'x', ('Load',)), []), ('comprehension', ('Name', (1, 22), 'm', ('Store',)), ('Name', (1, 27), 'p', ('Load',)), [('Name', (1, 32), 'g', ('Load',))])]))]), 5464adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao('Module', [('Expr', (1, 0), ('DictComp', (1, 1), ('Name', (1, 1), 'a', ('Load',)), ('Name', (1, 5), 'b', ('Load',)), [('comprehension', ('Tuple', (1, 11), [('Name', (1, 11), 'v', ('Store',)), ('Name', (1, 13), 'w', ('Store',))], ('Store',)), ('Name', (1, 18), 'x', ('Load',)), [])]))]), 5474adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao('Module', [('Expr', (1, 0), ('SetComp', (1, 1), ('Name', (1, 1), 'r', ('Load',)), [('comprehension', ('Name', (1, 7), 'l', ('Store',)), ('Name', (1, 12), 'x', ('Load',)), [('Name', (1, 17), 'g', ('Load',))])]))]), 5484adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao('Module', [('Expr', (1, 0), ('SetComp', (1, 1), ('Name', (1, 1), 'r', ('Load',)), [('comprehension', ('Tuple', (1, 7), [('Name', (1, 7), 'l', ('Store',)), ('Name', (1, 9), 'm', ('Store',))], ('Store',)), ('Name', (1, 14), 'x', ('Load',)), [])]))]), 5494adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao] 5504adfde8bc82dd39f59e0445588c3e599ada477dJosh Gaosingle_results = [ 5514adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao('Interactive', [('Expr', (1, 0), ('BinOp', (1, 0), ('Num', (1, 0), 1), ('Add',), ('Num', (1, 2), 2)))]), 5524adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao] 5534adfde8bc82dd39f59e0445588c3e599ada477dJosh Gaoeval_results = [ 5544adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao('Expression', ('Name', (1, 0), 'None', ('Load',))), 5554adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao('Expression', ('BoolOp', (1, 0), ('And',), [('Name', (1, 0), 'a', ('Load',)), ('Name', (1, 6), 'b', ('Load',))])), 5564adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao('Expression', ('BinOp', (1, 0), ('Name', (1, 0), 'a', ('Load',)), ('Add',), ('Name', (1, 4), 'b', ('Load',)))), 5574adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao('Expression', ('UnaryOp', (1, 0), ('Not',), ('Name', (1, 4), 'v', ('Load',)))), 5584adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao('Expression', ('Lambda', (1, 0), ('arguments', [], None, None, []), ('Name', (1, 7), 'None', ('Load',)))), 5594adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao('Expression', ('Dict', (1, 0), [('Num', (1, 2), 1)], [('Num', (1, 4), 2)])), 5604adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao('Expression', ('Dict', (1, 0), [], [])), 5614adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao('Expression', ('Set', (1, 0), [('Name', (1, 1), 'None', ('Load',))])), 5624adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao('Expression', ('Dict', (1, 0), [('Num', (2, 6), 1)], [('Num', (4, 10), 2)])), 5634adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao('Expression', ('ListComp', (1, 1), ('Name', (1, 1), 'a', ('Load',)), [('comprehension', ('Name', (1, 7), 'b', ('Store',)), ('Name', (1, 12), 'c', ('Load',)), [('Name', (1, 17), 'd', ('Load',))])])), 5644adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao('Expression', ('GeneratorExp', (1, 1), ('Name', (1, 1), 'a', ('Load',)), [('comprehension', ('Name', (1, 7), 'b', ('Store',)), ('Name', (1, 12), 'c', ('Load',)), [('Name', (1, 17), 'd', ('Load',))])])), 5654adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao('Expression', ('Compare', (1, 0), ('Num', (1, 0), 1), [('Lt',), ('Lt',)], [('Num', (1, 4), 2), ('Num', (1, 8), 3)])), 5664adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao('Expression', ('Call', (1, 0), ('Name', (1, 0), 'f', ('Load',)), [('Num', (1, 2), 1), ('Num', (1, 4), 2)], [('keyword', 'c', ('Num', (1, 8), 3))], ('Name', (1, 11), 'd', ('Load',)), ('Name', (1, 15), 'e', ('Load',)))), 5674adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao('Expression', ('Repr', (1, 0), ('Name', (1, 1), 'v', ('Load',)))), 5684adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao('Expression', ('Num', (1, 0), 10L)), 5694adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao('Expression', ('Str', (1, 0), 'string')), 5704adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao('Expression', ('Attribute', (1, 0), ('Name', (1, 0), 'a', ('Load',)), 'b', ('Load',))), 5714adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao('Expression', ('Subscript', (1, 0), ('Name', (1, 0), 'a', ('Load',)), ('Slice', ('Name', (1, 2), 'b', ('Load',)), ('Name', (1, 4), 'c', ('Load',)), None), ('Load',))), 5724adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao('Expression', ('Name', (1, 0), 'v', ('Load',))), 5734adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao('Expression', ('List', (1, 0), [('Num', (1, 1), 1), ('Num', (1, 3), 2), ('Num', (1, 5), 3)], ('Load',))), 5744adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao('Expression', ('List', (1, 0), [], ('Load',))), 5754adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao('Expression', ('Tuple', (1, 0), [('Num', (1, 0), 1), ('Num', (1, 2), 2), ('Num', (1, 4), 3)], ('Load',))), 5764adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao('Expression', ('Tuple', (1, 1), [('Num', (1, 1), 1), ('Num', (1, 3), 2), ('Num', (1, 5), 3)], ('Load',))), 5774adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao('Expression', ('Tuple', (1, 0), [], ('Load',))), 5784adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao('Expression', ('Call', (1, 0), ('Attribute', (1, 0), ('Attribute', (1, 0), ('Attribute', (1, 0), ('Name', (1, 0), 'a', ('Load',)), 'b', ('Load',)), 'c', ('Load',)), 'd', ('Load',)), [('Subscript', (1, 8), ('Attribute', (1, 8), ('Name', (1, 8), 'a', ('Load',)), 'b', ('Load',)), ('Slice', ('Num', (1, 12), 1), ('Num', (1, 14), 2), None), ('Load',))], [], None, None)), 5794adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao] 5804adfde8bc82dd39f59e0445588c3e599ada477dJosh Gaomain() 581