1edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoepimport sys, itertools, unittest
2edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoepfrom test import test_support
3edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoepimport ast
4edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep
5edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoepdef to_tuple(t):
6edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep    if t is None or isinstance(t, (basestring, int, long, complex)):
7edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep        return t
8edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep    elif isinstance(t, list):
9edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep        return [to_tuple(e) for e in t]
10edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep    result = [t.__class__.__name__]
11edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep    if hasattr(t, 'lineno') and hasattr(t, 'col_offset'):
12edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep        result.append((t.lineno, t.col_offset))
13edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep    if t._fields is None:
14edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep        return tuple(result)
15edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep    for f in t._fields:
16edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep        result.append(to_tuple(getattr(t, f)))
17edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep    return tuple(result)
18edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep
19edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep
20edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep# These tests are compiled through "exec"
21edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep# There should be atleast one test per statement
22edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoepexec_tests = [
23edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep    # None
24edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep    "None",
25edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep    # FunctionDef
26edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep    "def f(): pass",
27edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep    # FunctionDef with arg
28edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep    "def f(a): pass",
29edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep    # FunctionDef with arg and default value
30edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep    "def f(a=0): pass",
31edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep    # FunctionDef with varargs
32edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep    "def f(*args): pass",
33edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep    # FunctionDef with kwargs
34edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep    "def f(**kwargs): pass",
35edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep    # FunctionDef with all kind of args
36edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep    "def f(a, b=1, c=None, d=[], e={}, *args, **kwargs): pass",
37edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep    # ClassDef
38edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep    "class C:pass",
39edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep    # ClassDef, new style class
40edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep    "class C(object): pass",
41edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep    # Return
42edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep    "def f():return 1",
43edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep    # Delete
44edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep    "del v",
45edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep    # Assign
46edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep    "v = 1",
47edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep    # AugAssign
48edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep    "v += 1",
49edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep    # Print
50edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep    "print >>f, 1, ",
51edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep    # For
52edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep    "for v in v:pass",
53edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep    # While
54edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep    "while v:pass",
55edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep    # If
56edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep    "if v:pass",
57edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep    # Raise
58edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep    "raise Exception, 'string'",
59edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep    # TryExcept
60edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep    "try:\n  pass\nexcept Exception:\n  pass",
61edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep    # TryFinally
62edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep    "try:\n  pass\nfinally:\n  pass",
63edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep    # Assert
64edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep    "assert v",
65edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep    # Import
66edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep    "import sys",
67edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep    # ImportFrom
68edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep    "from sys import v",
69edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep    # Exec
70edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep    "exec 'v'",
71edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep    # Global
72edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep    "global v",
73edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep    # Expr
74edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep    "1",
75edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep    # Pass,
76edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep    "pass",
77edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep    # Break
78edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep    "break",
79edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep    # Continue
80edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep    "continue",
81edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep    # for statements with naked tuples (see http://bugs.python.org/issue6704)
82edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep    "for a,b in c: pass",
83edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep    "[(a,b) for a,b in c]",
84edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep    "((a,b) for a,b in c)",
85edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep    "((a,b) for (a,b) in c)",
86edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep    # Multiline generator expression (test for .lineno & .col_offset)
87edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep    """(
88edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep    (
89edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep    Aa
90edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep    ,
91edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep       Bb
92edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep    )
93edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep    for
94edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep    Aa
95edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep    ,
96edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep    Bb in Cc
97edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep    )""",
98edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep    # dictcomp
99edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep    "{a : b for w in x for m in p if g}",
100edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep    # dictcomp with naked tuple
101edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep    "{a : b for v,w in x}",
102edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep    # setcomp
103edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep    "{r for l in x if g}",
104edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep    # setcomp with naked tuple
105edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep    "{r for l,m in x}",
106edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep]
107edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep
108edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep# These are compiled through "single"
109edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep# because of overlap with "eval", it just tests what
110edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep# can't be tested with "eval"
111edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoepsingle_tests = [
112edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep    "1+2"
113edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep]
114edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep
115edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep# These are compiled through "eval"
116edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep# It should test all expressions
117edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoepeval_tests = [
118edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep  # None
119edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep  "None",
120edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep  # BoolOp
121edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep  "a and b",
122edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep  # BinOp
123edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep  "a + b",
124edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep  # UnaryOp
125edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep  "not v",
126edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep  # Lambda
127edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep  "lambda:None",
128edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep  # Dict
129edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep  "{ 1:2 }",
130edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep  # Empty dict
131edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep  "{}",
132edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep  # Set
133edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep  "{None,}",
134edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep  # Multiline dict (test for .lineno & .col_offset)
135edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep  """{
136edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep      1
137edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep        :
138edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep          2
139edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep     }""",
140edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep  # ListComp
141edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep  "[a for b in c if d]",
142edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep  # GeneratorExp
143edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep  "(a for b in c if d)",
144edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep  # Yield - yield expressions can't work outside a function
145edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep  #
146edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep  # Compare
147edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep  "1 < 2 < 3",
148edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep  # Call
149edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep  "f(1,2,c=3,*d,**e)",
150edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep  # Repr
151edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep  "`v`",
152edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep  # Num
153edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep  "10L",
154edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep  # Str
155edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep  "'string'",
156edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep  # Attribute
157edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep  "a.b",
158edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep  # Subscript
159edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep  "a[b:c]",
160edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep  # Name
161edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep  "v",
162edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep  # List
163edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep  "[1,2,3]",
164edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep  # Empty list
165edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep  "[]",
166edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep  # Tuple
167edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep  "1,2,3",
168edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep  # Tuple
169edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep  "(1,2,3)",
170edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep  # Empty tuple
171edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep  "()",
172edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep  # Combination
173edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep  "a.b.c.d(a.b[1:2])",
174edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep
175edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep]
176edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep
177edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep# TODO: expr_context, slice, boolop, operator, unaryop, cmpop, comprehension
178edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep# excepthandler, arguments, keywords, alias
179edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep
180edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoepclass AST_Tests(unittest.TestCase):
181edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep
182edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep    def _assertTrueorder(self, ast_node, parent_pos):
183edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep        if not isinstance(ast_node, ast.AST) or ast_node._fields is None:
184edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep            return
185edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep        if isinstance(ast_node, (ast.expr, ast.stmt, ast.excepthandler)):
186edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep            node_pos = (ast_node.lineno, ast_node.col_offset)
187edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep            self.assertTrue(node_pos >= parent_pos)
188edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep            parent_pos = (ast_node.lineno, ast_node.col_offset)
189edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep        for name in ast_node._fields:
190edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep            value = getattr(ast_node, name)
191edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep            if isinstance(value, list):
192edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep                for child in value:
193edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep                    self._assertTrueorder(child, parent_pos)
194edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep            elif value is not None:
195edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep                self._assertTrueorder(value, parent_pos)
196edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep
197edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep    def test_AST_objects(self):
198edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep        x = ast.AST()
199edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep        self.assertEqual(x._fields, ())
200edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep
201edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep        with self.assertRaises(AttributeError):
202edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep            x.vararg
203edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep
204edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep        with self.assertRaises(AttributeError):
205edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep            x.foobar = 21
206edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep
207edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep        with self.assertRaises(AttributeError):
208edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep            ast.AST(lineno=2)
209edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep
210edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep        with self.assertRaises(TypeError):
211edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep            # "_ast.AST constructor takes 0 positional arguments"
212edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep            ast.AST(2)
213edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep
214edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep    def test_snippets(self):
215edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep        for input, output, kind in ((exec_tests, exec_results, "exec"),
216edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep                                    (single_tests, single_results, "single"),
217edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep                                    (eval_tests, eval_results, "eval")):
218edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep            for i, o in itertools.izip(input, output):
219edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep                ast_tree = compile(i, "?", kind, ast.PyCF_ONLY_AST)
220edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep                self.assertEqual(to_tuple(ast_tree), o)
221edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep                self._assertTrueorder(ast_tree, (0, 0))
222edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep
223edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep    def test_slice(self):
224edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep        slc = ast.parse("x[::]").body[0].value.slice
225edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep        self.assertIsNone(slc.upper)
226edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep        self.assertIsNone(slc.lower)
227edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep        self.assertIsInstance(slc.step, ast.Name)
228edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep        self.assertEqual(slc.step.id, "None")
229edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep
230edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep    def test_from_import(self):
231edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep        im = ast.parse("from . import y").body[0]
232edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep        self.assertIsNone(im.module)
233edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep
234edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep    def test_non_interned_future_from_ast(self):
235edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep        mod = ast.parse("from __future__ import division")
236edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep        self.assertIsInstance(mod.body[0], ast.ImportFrom)
237edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep        mod.body[0].module = " __future__ ".strip()
238edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep        compile(mod, "<test>", "exec")
239edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep
240edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep    def test_base_classes(self):
241edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep        self.assertTrue(issubclass(ast.For, ast.stmt))
242edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep        self.assertTrue(issubclass(ast.Name, ast.expr))
243edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep        self.assertTrue(issubclass(ast.stmt, ast.AST))
244edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep        self.assertTrue(issubclass(ast.expr, ast.AST))
245edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep        self.assertTrue(issubclass(ast.comprehension, ast.AST))
246edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep        self.assertTrue(issubclass(ast.Gt, ast.AST))
247edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep
248edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep    def test_field_attr_existence(self):
249edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep        for name, item in ast.__dict__.iteritems():
250edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep            if isinstance(item, type) and name != 'AST' and name[0].isupper():
251edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep                x = item()
252edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep                if isinstance(x, ast.AST):
253edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep                    self.assertEqual(type(x._fields), tuple)
254edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep
255edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep    def test_arguments(self):
256edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep        x = ast.arguments()
257edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep        self.assertEqual(x._fields, ('args', 'vararg', 'kwarg', 'defaults'))
258edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep
259edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep        with self.assertRaises(AttributeError):
260edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep            x.vararg
261edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep
262edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep        x = ast.arguments(1, 2, 3, 4)
263edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep        self.assertEqual(x.vararg, 2)
264edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep
265edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep    def test_field_attr_writable(self):
266edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep        x = ast.Num()
267edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep        # We can assign to _fields
268edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep        x._fields = 666
269edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep        self.assertEqual(x._fields, 666)
270edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep
271edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep    def test_classattrs(self):
272edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep        x = ast.Num()
273edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep        self.assertEqual(x._fields, ('n',))
274edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep
275edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep        with self.assertRaises(AttributeError):
276edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep            x.n
277edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep
278edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep        x = ast.Num(42)
279edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep        self.assertEqual(x.n, 42)
280edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep
281edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep        with self.assertRaises(AttributeError):
282edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep            x.lineno
283edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep
284edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep        with self.assertRaises(AttributeError):
285edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep            x.foobar
286edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep
287edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep        x = ast.Num(lineno=2)
288edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep        self.assertEqual(x.lineno, 2)
289edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep
290edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep        x = ast.Num(42, lineno=0)
291edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep        self.assertEqual(x.lineno, 0)
292edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep        self.assertEqual(x._fields, ('n',))
293edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep        self.assertEqual(x.n, 42)
294edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep
295edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep        self.assertRaises(TypeError, ast.Num, 1, 2)
296edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep        self.assertRaises(TypeError, ast.Num, 1, 2, lineno=0)
297edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep
298edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep    def test_module(self):
299edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep        body = [ast.Num(42)]
300edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep        x = ast.Module(body)
301edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep        self.assertEqual(x.body, body)
302edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep
303edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep    def test_nodeclasses(self):
304edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep        # Zero arguments constructor explicitely allowed
305edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep        x = ast.BinOp()
306edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep        self.assertEqual(x._fields, ('left', 'op', 'right'))
307edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep
308edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep        # Random attribute allowed too
309edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep        x.foobarbaz = 5
310edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep        self.assertEqual(x.foobarbaz, 5)
311edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep
312edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep        n1 = ast.Num(1)
313edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep        n3 = ast.Num(3)
314edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep        addop = ast.Add()
315edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep        x = ast.BinOp(n1, addop, n3)
316edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep        self.assertEqual(x.left, n1)
317edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep        self.assertEqual(x.op, addop)
318edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep        self.assertEqual(x.right, n3)
319edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep
320edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep        x = ast.BinOp(1, 2, 3)
321edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep        self.assertEqual(x.left, 1)
322edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep        self.assertEqual(x.op, 2)
323edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep        self.assertEqual(x.right, 3)
324edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep
325edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep        x = ast.BinOp(1, 2, 3, lineno=0)
326edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep        self.assertEqual(x.left, 1)
327edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep        self.assertEqual(x.op, 2)
328edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep        self.assertEqual(x.right, 3)
329edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep        self.assertEqual(x.lineno, 0)
330edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep
331edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep        # node raises exception when not given enough arguments
332edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep        self.assertRaises(TypeError, ast.BinOp, 1, 2)
333edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep        # node raises exception when given too many arguments
334edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep        self.assertRaises(TypeError, ast.BinOp, 1, 2, 3, 4)
335edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep        # node raises exception when not given enough arguments
336edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep        self.assertRaises(TypeError, ast.BinOp, 1, 2, lineno=0)
337edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep        # node raises exception when given too many arguments
338edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep        self.assertRaises(TypeError, ast.BinOp, 1, 2, 3, 4, lineno=0)
339edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep
340edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep        # can set attributes through kwargs too
341edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep        x = ast.BinOp(left=1, op=2, right=3, lineno=0)
342edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep        self.assertEqual(x.left, 1)
343edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep        self.assertEqual(x.op, 2)
344edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep        self.assertEqual(x.right, 3)
345edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep        self.assertEqual(x.lineno, 0)
346edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep
347edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep        # Random kwargs also allowed
348edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep        x = ast.BinOp(1, 2, 3, foobarbaz=42)
349edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep        self.assertEqual(x.foobarbaz, 42)
350edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep
351edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep    def test_no_fields(self):
352edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep        # this used to fail because Sub._fields was None
353edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep        x = ast.Sub()
354edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep        self.assertEqual(x._fields, ())
355edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep
356edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep    def test_pickling(self):
357edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep        import pickle
358edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep        mods = [pickle]
359edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep        try:
360edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep            import cPickle
361edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep            mods.append(cPickle)
362edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep        except ImportError:
363edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep            pass
364edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep        protocols = [0, 1, 2]
365edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep        for mod in mods:
366edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep            for protocol in protocols:
367edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep                for ast in (compile(i, "?", "exec", 0x400) for i in exec_tests):
368edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep                    ast2 = mod.loads(mod.dumps(ast, protocol))
369edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep                    self.assertEqual(to_tuple(ast2), to_tuple(ast))
370edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep
371edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep    def test_invalid_identitifer(self):
372edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep        m = ast.Module([ast.Expr(ast.Name(u"x", ast.Load()))])
373edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep        ast.fix_missing_locations(m)
374edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep        with self.assertRaises(TypeError) as cm:
375edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep            compile(m, "<test>", "exec")
376edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep        self.assertIn("identifier must be of type str", str(cm.exception))
377edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep
378edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep    def test_invalid_string(self):
379edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep        m = ast.Module([ast.Expr(ast.Str(43))])
380edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep        ast.fix_missing_locations(m)
381edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep        with self.assertRaises(TypeError) as cm:
382edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep            compile(m, "<test>", "exec")
383edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep        self.assertIn("string must be of type str or uni", str(cm.exception))
384edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep
385edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep
386edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoepclass ASTHelpers_Test(unittest.TestCase):
387edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep
388edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep    def test_parse(self):
389edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep        a = ast.parse('foo(1 + 1)')
390edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep        b = compile('foo(1 + 1)', '<unknown>', 'exec', ast.PyCF_ONLY_AST)
391edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep        self.assertEqual(ast.dump(a), ast.dump(b))
392edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep
393edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep    def test_dump(self):
394edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep        node = ast.parse('spam(eggs, "and cheese")')
395edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep        self.assertEqual(ast.dump(node),
396edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep            "Module(body=[Expr(value=Call(func=Name(id='spam', ctx=Load()), "
397edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep            "args=[Name(id='eggs', ctx=Load()), Str(s='and cheese')], "
398edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep            "keywords=[], starargs=None, kwargs=None))])"
399edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep        )
400edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep        self.assertEqual(ast.dump(node, annotate_fields=False),
401edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep            "Module([Expr(Call(Name('spam', Load()), [Name('eggs', Load()), "
402edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep            "Str('and cheese')], [], None, None))])"
403edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep        )
404edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep        self.assertEqual(ast.dump(node, include_attributes=True),
405edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep            "Module(body=[Expr(value=Call(func=Name(id='spam', ctx=Load(), "
406edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep            "lineno=1, col_offset=0), args=[Name(id='eggs', ctx=Load(), "
407edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep            "lineno=1, col_offset=5), Str(s='and cheese', lineno=1, "
408edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep            "col_offset=11)], keywords=[], starargs=None, kwargs=None, "
409edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep            "lineno=1, col_offset=0), lineno=1, col_offset=0)])"
410edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep        )
411edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep
412edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep    def test_copy_location(self):
413edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep        src = ast.parse('1 + 1', mode='eval')
414edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep        src.body.right = ast.copy_location(ast.Num(2), src.body.right)
415edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep        self.assertEqual(ast.dump(src, include_attributes=True),
416edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep            'Expression(body=BinOp(left=Num(n=1, lineno=1, col_offset=0), '
417edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep            'op=Add(), right=Num(n=2, lineno=1, col_offset=4), lineno=1, '
418edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep            'col_offset=0))'
419edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep        )
420edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep
421edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep    def test_fix_missing_locations(self):
422edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep        src = ast.parse('write("spam")')
423edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep        src.body.append(ast.Expr(ast.Call(ast.Name('spam', ast.Load()),
424edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep                                          [ast.Str('eggs')], [], None, None)))
425edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep        self.assertEqual(src, ast.fix_missing_locations(src))
426edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep        self.assertEqual(ast.dump(src, include_attributes=True),
427edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep            "Module(body=[Expr(value=Call(func=Name(id='write', ctx=Load(), "
428edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep            "lineno=1, col_offset=0), args=[Str(s='spam', lineno=1, "
429edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep            "col_offset=6)], keywords=[], starargs=None, kwargs=None, "
430edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep            "lineno=1, col_offset=0), lineno=1, col_offset=0), "
431edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep            "Expr(value=Call(func=Name(id='spam', ctx=Load(), lineno=1, "
432edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep            "col_offset=0), args=[Str(s='eggs', lineno=1, col_offset=0)], "
433edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep            "keywords=[], starargs=None, kwargs=None, lineno=1, "
434edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep            "col_offset=0), lineno=1, col_offset=0)])"
435edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep        )
436edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep
437edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep    def test_increment_lineno(self):
438edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep        src = ast.parse('1 + 1', mode='eval')
439edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep        self.assertEqual(ast.increment_lineno(src, n=3), src)
440edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep        self.assertEqual(ast.dump(src, include_attributes=True),
441edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep            'Expression(body=BinOp(left=Num(n=1, lineno=4, col_offset=0), '
442edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep            'op=Add(), right=Num(n=1, lineno=4, col_offset=4), lineno=4, '
443edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep            'col_offset=0))'
444edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep        )
445edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep        # issue10869: do not increment lineno of root twice
446edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep        src = ast.parse('1 + 1', mode='eval')
447edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep        self.assertEqual(ast.increment_lineno(src.body, n=3), src.body)
448edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep        self.assertEqual(ast.dump(src, include_attributes=True),
449edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep            'Expression(body=BinOp(left=Num(n=1, lineno=4, col_offset=0), '
450edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep            'op=Add(), right=Num(n=1, lineno=4, col_offset=4), lineno=4, '
451edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep            'col_offset=0))'
452edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep        )
453edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep
454edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep    def test_iter_fields(self):
455edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep        node = ast.parse('foo()', mode='eval')
456edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep        d = dict(ast.iter_fields(node.body))
457edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep        self.assertEqual(d.pop('func').id, 'foo')
458edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep        self.assertEqual(d, {'keywords': [], 'kwargs': None,
459edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep                             'args': [], 'starargs': None})
460edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep
461edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep    def test_iter_child_nodes(self):
462edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep        node = ast.parse("spam(23, 42, eggs='leek')", mode='eval')
463edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep        self.assertEqual(len(list(ast.iter_child_nodes(node.body))), 4)
464edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep        iterator = ast.iter_child_nodes(node.body)
465edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep        self.assertEqual(next(iterator).id, 'spam')
466edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep        self.assertEqual(next(iterator).n, 23)
467edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep        self.assertEqual(next(iterator).n, 42)
468edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep        self.assertEqual(ast.dump(next(iterator)),
469edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep            "keyword(arg='eggs', value=Str(s='leek'))"
470edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep        )
471edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep
472edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep    def test_get_docstring(self):
473edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep        node = ast.parse('def foo():\n  """line one\n  line two"""')
474edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep        self.assertEqual(ast.get_docstring(node.body[0]),
475edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep                         'line one\nline two')
476edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep
477edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep    def test_literal_eval(self):
478edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep        self.assertEqual(ast.literal_eval('[1, 2, 3]'), [1, 2, 3])
479edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep        self.assertEqual(ast.literal_eval('{"foo": 42}'), {"foo": 42})
480edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep        self.assertEqual(ast.literal_eval('(True, False, None)'), (True, False, None))
481edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep        self.assertRaises(ValueError, ast.literal_eval, 'foo()')
482edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep
483edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep    def test_literal_eval_issue4907(self):
484edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep        self.assertEqual(ast.literal_eval('2j'), 2j)
485edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep        self.assertEqual(ast.literal_eval('10 + 2j'), 10 + 2j)
486edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep        self.assertEqual(ast.literal_eval('1.5 - 2j'), 1.5 - 2j)
487edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep        self.assertRaises(ValueError, ast.literal_eval, '2 + (3 + 4j)')
488edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep
489edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep
490edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoepdef test_main():
491edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep    with test_support.check_py3k_warnings(("backquote not supported",
492edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep                                             SyntaxWarning)):
493edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep        test_support.run_unittest(AST_Tests, ASTHelpers_Test)
494edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep
495edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoepdef main():
496edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep    if __name__ != '__main__':
497edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep        return
498edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep    if sys.argv[1:] == ['-g']:
499edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep        for statements, kind in ((exec_tests, "exec"), (single_tests, "single"),
500edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep                                 (eval_tests, "eval")):
501edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep            print kind+"_results = ["
502edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep            for s in statements:
503edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep                print repr(to_tuple(compile(s, "?", kind, 0x400)))+","
504edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep            print "]"
505edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep        print "main()"
506edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep        raise SystemExit
507edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep    test_main()
508edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep
509edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep#### EVERYTHING BELOW IS GENERATED #####
510edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoepexec_results = [
511edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep('Module', [('Expr', (1, 0), ('Name', (1, 0), 'None', ('Load',)))]),
512edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep('Module', [('FunctionDef', (1, 0), 'f', ('arguments', [], None, None, []), [('Pass', (1, 9))], [])]),
513edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep('Module', [('FunctionDef', (1, 0), 'f', ('arguments', [('Name', (1, 6), 'a', ('Param',))], None, None, []), [('Pass', (1, 10))], [])]),
514edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep('Module', [('FunctionDef', (1, 0), 'f', ('arguments', [('Name', (1, 6), 'a', ('Param',))], None, None, [('Num', (1, 8), 0)]), [('Pass', (1, 12))], [])]),
515edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep('Module', [('FunctionDef', (1, 0), 'f', ('arguments', [], 'args', None, []), [('Pass', (1, 14))], [])]),
516edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep('Module', [('FunctionDef', (1, 0), 'f', ('arguments', [], None, 'kwargs', []), [('Pass', (1, 17))], [])]),
517edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep('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))], [])]),
518edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep('Module', [('ClassDef', (1, 0), 'C', [], [('Pass', (1, 8))], [])]),
519edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep('Module', [('ClassDef', (1, 0), 'C', [('Name', (1, 8), 'object', ('Load',))], [('Pass', (1, 17))], [])]),
520edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep('Module', [('FunctionDef', (1, 0), 'f', ('arguments', [], None, None, []), [('Return', (1, 8), ('Num', (1, 15), 1))], [])]),
521edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep('Module', [('Delete', (1, 0), [('Name', (1, 4), 'v', ('Del',))])]),
522edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep('Module', [('Assign', (1, 0), [('Name', (1, 0), 'v', ('Store',))], ('Num', (1, 4), 1))]),
523edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep('Module', [('AugAssign', (1, 0), ('Name', (1, 0), 'v', ('Store',)), ('Add',), ('Num', (1, 5), 1))]),
524edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep('Module', [('Print', (1, 0), ('Name', (1, 8), 'f', ('Load',)), [('Num', (1, 11), 1)], False)]),
525edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep('Module', [('For', (1, 0), ('Name', (1, 4), 'v', ('Store',)), ('Name', (1, 9), 'v', ('Load',)), [('Pass', (1, 11))], [])]),
526edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep('Module', [('While', (1, 0), ('Name', (1, 6), 'v', ('Load',)), [('Pass', (1, 8))], [])]),
527edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep('Module', [('If', (1, 0), ('Name', (1, 3), 'v', ('Load',)), [('Pass', (1, 5))], [])]),
528edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep('Module', [('Raise', (1, 0), ('Name', (1, 6), 'Exception', ('Load',)), ('Str', (1, 17), 'string'), None)]),
529edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep('Module', [('TryExcept', (1, 0), [('Pass', (2, 2))], [('ExceptHandler', (3, 0), ('Name', (3, 7), 'Exception', ('Load',)), None, [('Pass', (4, 2))])], [])]),
530edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep('Module', [('TryFinally', (1, 0), [('Pass', (2, 2))], [('Pass', (4, 2))])]),
531edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep('Module', [('Assert', (1, 0), ('Name', (1, 7), 'v', ('Load',)), None)]),
532edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep('Module', [('Import', (1, 0), [('alias', 'sys', None)])]),
533edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep('Module', [('ImportFrom', (1, 0), 'sys', [('alias', 'v', None)], 0)]),
534edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep('Module', [('Exec', (1, 0), ('Str', (1, 5), 'v'), None, None)]),
535edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep('Module', [('Global', (1, 0), ['v'])]),
536edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep('Module', [('Expr', (1, 0), ('Num', (1, 0), 1))]),
537edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep('Module', [('Pass', (1, 0))]),
538edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep('Module', [('Break', (1, 0))]),
539edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep('Module', [('Continue', (1, 0))]),
540edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep('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))], [])]),
541edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep('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',)), [])]))]),
542edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep('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',)), [])]))]),
543edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep('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',)), [])]))]),
544edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep('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',)), [])]))]),
545edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep('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',))])]))]),
546edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep('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',)), [])]))]),
547edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep('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',))])]))]),
548edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep('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',)), [])]))]),
549edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep]
550edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoepsingle_results = [
551edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep('Interactive', [('Expr', (1, 0), ('BinOp', (1, 0), ('Num', (1, 0), 1), ('Add',), ('Num', (1, 2), 2)))]),
552edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep]
553edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoepeval_results = [
554edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep('Expression', ('Name', (1, 0), 'None', ('Load',))),
555edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep('Expression', ('BoolOp', (1, 0), ('And',), [('Name', (1, 0), 'a', ('Load',)), ('Name', (1, 6), 'b', ('Load',))])),
556edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep('Expression', ('BinOp', (1, 0), ('Name', (1, 0), 'a', ('Load',)), ('Add',), ('Name', (1, 4), 'b', ('Load',)))),
557edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep('Expression', ('UnaryOp', (1, 0), ('Not',), ('Name', (1, 4), 'v', ('Load',)))),
558edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep('Expression', ('Lambda', (1, 0), ('arguments', [], None, None, []), ('Name', (1, 7), 'None', ('Load',)))),
559edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep('Expression', ('Dict', (1, 0), [('Num', (1, 2), 1)], [('Num', (1, 4), 2)])),
560edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep('Expression', ('Dict', (1, 0), [], [])),
561edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep('Expression', ('Set', (1, 0), [('Name', (1, 1), 'None', ('Load',))])),
562edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep('Expression', ('Dict', (1, 0), [('Num', (2, 6), 1)], [('Num', (4, 10), 2)])),
563edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep('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',))])])),
564edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep('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',))])])),
565edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep('Expression', ('Compare', (1, 0), ('Num', (1, 0), 1), [('Lt',), ('Lt',)], [('Num', (1, 4), 2), ('Num', (1, 8), 3)])),
566edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep('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',)))),
567edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep('Expression', ('Repr', (1, 0), ('Name', (1, 1), 'v', ('Load',)))),
568edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep('Expression', ('Num', (1, 0), 10L)),
569edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep('Expression', ('Str', (1, 0), 'string')),
570edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep('Expression', ('Attribute', (1, 0), ('Name', (1, 0), 'a', ('Load',)), 'b', ('Load',))),
571edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep('Expression', ('Subscript', (1, 0), ('Name', (1, 0), 'a', ('Load',)), ('Slice', ('Name', (1, 2), 'b', ('Load',)), ('Name', (1, 4), 'c', ('Load',)), None), ('Load',))),
572edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep('Expression', ('Name', (1, 0), 'v', ('Load',))),
573edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep('Expression', ('List', (1, 0), [('Num', (1, 1), 1), ('Num', (1, 3), 2), ('Num', (1, 5), 3)], ('Load',))),
574edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep('Expression', ('List', (1, 0), [], ('Load',))),
575edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep('Expression', ('Tuple', (1, 0), [('Num', (1, 0), 1), ('Num', (1, 2), 2), ('Num', (1, 4), 3)], ('Load',))),
576edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep('Expression', ('Tuple', (1, 1), [('Num', (1, 1), 1), ('Num', (1, 3), 2), ('Num', (1, 5), 3)], ('Load',))),
577edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep('Expression', ('Tuple', (1, 0), [], ('Load',))),
578edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep('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)),
579edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep]
580edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoepmain()
581