File: test_compat.py

package info (click to toggle)
python-gast 0.6.0-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 260 kB
  • sloc: python: 2,208; sh: 7; makefile: 3
file content (463 lines) | stat: -rw-r--r-- 24,325 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
import unittest

import gast
import sys


def dump(node):
    return gast.dump(node, show_empty=True)


class CompatTestCase(unittest.TestCase):

    def __init__(self, *args, **kwargs):
        unittest.TestCase.__init__(self, *args, **kwargs)
        self.maxDiff = None

    if sys.version_info.major == 2:

        def test_FunctionDef(self):
            code = 'def foo((x, y)): return x, y'
            tree = gast.parse(code)
            compile(gast.gast_to_ast(tree), '<test>', 'exec')
            norm = ("Module(body=[FunctionDef(name='foo', args=arguments(args="
                    "[Tuple(elts=[Name(id='x', ctx=Store(), annotation=None, "
                    "type_comment=None), Name(id='y', ctx=Store(), "
                    "annotation=None, type_comment=None)], ctx=Store())], "
                    "posonlyargs=[], vararg=None, "
                    "kwonlyargs=[], kw_defaults=[], kwarg=None, defaults=[]), "
                    "body=[Return(value=Tuple(elts=[Name(id='x', ctx=Load(), "
                    "annotation=None, type_comment=None), "
                    "Name(id='y', ctx=Load(), "
                    "annotation=None, type_comment=None"
                    ")], ctx=Load()))], decorator_list="
                    "[], returns=None, type_comment=None, type_params=[])], "
                    "type_ignores=[])")
            self.assertEqual(dump(tree), norm)

    else:

        def test_ArgAnnotation(self):
            code = 'def foo(x:int): pass'
            tree = gast.parse(code)
            compile(gast.gast_to_ast(tree), '<test>', 'exec')
            norm = ("Module(body=[FunctionDef(name='foo', args=arguments(args="
                    "[Name(id='x', ctx=Param(), annotation=Name"
                    "(id='int', ctx=Load(), annotation=None, type_comment=None"
                    "), type_comment=None)], posonlyargs="
                    "[], vararg=None, kwonlyargs=[], kw_defaults=[], kwarg="
                    "None, defaults=[]), body=[Pass()], decorator_list=[], "
                    "returns=None, type_comment=None, type_params=[])], "
                    "type_ignores=[])")
            self.assertEqual(dump(tree), norm)

        def test_KeywordOnlyArgument(self):
            code = 'def foo(*, x=1): pass'
            tree = gast.parse(code)
            compile(gast.gast_to_ast(tree), '<test>', 'exec')
            norm = ("Module(body=[FunctionDef(name='foo', args=arguments(args="
                    "[], posonlyargs=[], vararg=None, kwonlyargs=[Name"
                    "(id='x', ctx=Param(), annotation=None, type_comment=None"
                    ")], kw_defaults=[Constant(value=1, kind=None)], kwarg="
                    "None, defaults=[]), body=[Pass()], decorator_list=[], "
                    "returns=None, type_comment=None, type_params=[])], "
                    "type_ignores=[])")
            self.assertEqual(dump(tree), norm)

        if sys.version_info.minor >= 6:

            def test_FormattedValue(self):
                code = 'e = 1; f"{e}"'
                tree = gast.parse(code)
                compile(gast.gast_to_ast(tree), '<test>', 'exec')
                norm = ("Module(body=[Assign(targets=[Name(id='e', ctx=Store()"
                        ", annotation=None, type_comment=None"
                        ")], value=Constant(value=1, kind=None), "
                        "type_comment=None), Expr(value="
                        "JoinedStr(values=[FormattedValue(value=Name(id='e', "
                        "ctx=Load(), annotation=None, type_comment=None), "
                        "conversion=-1, format_spec=None)]))], "
                        "type_ignores=[])")
                self.assertEqual(dump(tree), norm)

            def test_JoinedStr(self):
                code = 'e = 1; f"e = {e}"'
                tree = gast.parse(code)
                compile(gast.gast_to_ast(tree), '<test>', 'exec')
                norm = ("Module(body=[Assign(targets=[Name(id='e', ctx=Store()"
                        ", annotation=None, type_comment=None"
                        ")], value=Constant(value=1, kind=None), "
                        "type_comment=None), Expr(value="
                        "JoinedStr(values=[Constant(value='e = ', kind=None), "
                        "FormattedValue(value=Name(id='e', ctx=Load(), "
                        "annotation=None, type_comment=None), "
                        "conversion=-1, format_spec=None)]))], "
                        "type_ignores=[])")
                self.assertEqual(dump(tree), norm)

        if sys.version_info.minor >= 8:

            def test_TypeIgnore(self):
                code = 'def foo(): pass  # type: ignore[excuse]'
                tree = gast.parse(code, type_comments=True)
                compile(gast.gast_to_ast(tree), '<test>', 'exec')
                norm = ("Module(body=[FunctionDef(name='foo', args=arguments("
                        "args=[], posonlyargs=[], vararg=None, kwonlyargs=[], "
                        "kw_defaults=[], kwarg=None, defaults=[]), body=["
                        "Pass()], decorator_list=[], returns=None, "
                        "type_comment=None, type_params=[])], type_ignores="
                        "[TypeIgnore(lineno=1, tag='[excuse]')])")
                self.assertEqual(dump(tree), norm)

            def test_PosonlyArgs(self):
                code = 'def foo(a, /, b): pass'
                tree = gast.parse(code, type_comments=True)
                compile(gast.gast_to_ast(tree), '<test>', 'exec')
                norm = ("Module(body=[FunctionDef(name='foo', args=arguments("
                        "args=[Name(id='b', ctx=Param(), annotation=None, "
                        "type_comment=None)], posonlyargs=[Name(id='a', "
                        "ctx=Param(), annotation=None, type_comment=None)], "
                        "vararg=None, kwonlyargs=[], kw_defaults=[], "
                        "kwarg=None, defaults=[]), body=[Pass()], "
                        "decorator_list=[], returns=None, type_comment=None, "
                        "type_params=[])], type_ignores=[])")
                self.assertEqual(dump(tree), norm)

            def test_NamedExpr(self):
                code = '(x := 1) '
                tree = gast.parse(code)
                compile(gast.gast_to_ast(tree), '<test>', 'exec')
                norm = ("Module(body=[Expr(value=NamedExpr(target=Name(id='x',"
                        " ctx=Store(), annotation=None, type_comment=None), "
                        "value=Constant(value=1, kind=None)))], type_ignores="
                        "[])")
                self.assertEqual(dump(tree), norm)

            if sys.version_info.minor >= 10:

                def test_MatchValue(self):
                    code = 'match v:\n  case "hello":...'
                    tree = gast.parse(code)
                    compile(gast.gast_to_ast(tree), '<test>', 'exec')
                    norm = ("Module(body=[Match(subject=Name(id='v', ctx=Load"
                            "(), annotation=None, type_comment=None), cases="
                            "[match_case(pattern=MatchValue(value=Constant("
                            "value='hello', kind=None)), guard=None, body="
                            "[Expr(value=Constant(value=Ellipsis, kind=None))]"
                            ")])], type_ignores=[])"
                            )
                    self.assertEqual(dump(tree), norm)

                def test_MatchSingleton(self):
                    code = 'match v:\n  case None:...'
                    tree = gast.parse(code)
                    compile(gast.gast_to_ast(tree), '<test>', 'exec')
                    norm = ("Module(body=[Match(subject=Name(id='v', ctx=Load"
                            "(), annotation=None, type_comment=None), cases=["
                            "match_case(pattern=MatchSingleton(value=None), "
                            "guard=None, body=[Expr(value=Constant(value="
                            "Ellipsis, kind=None))])])], type_ignores=[])")
                    self.assertEqual(dump(tree), norm)

                def test_MatchSequence(self):
                    code = 'match v:\n  case a, b:...'
                    tree = gast.parse(code)
                    compile(gast.gast_to_ast(tree), '<test>', 'exec')
                    norm = ("Module(body=[Match(subject=Name(id='v', ctx=Load"
                            "(), annotation=None, type_comment=None), cases="
                            "[match_case(pattern=MatchSequence(patterns=["
                            "MatchAs(pattern=None, name='a'), MatchAs(pattern"
                            "=None, name='b')]), guard=None, body=[Expr(value"
                            "=Constant(value=Ellipsis, kind=None))])])], "
                            "type_ignores=[])")
                    self.assertEqual(dump(tree), norm)

                def test_MatchMapping(self):
                    code = 'match v:\n  case {1: a}:...'
                    tree = gast.parse(code)
                    compile(gast.gast_to_ast(tree), '<test>', 'exec')
                    norm = ("Module(body=[Match(subject=Name(id='v', ctx=Load"
                            "(), annotation=None, type_comment=None), cases=["
                            "match_case(pattern=MatchMapping(keys=[Constant("
                            "value=1, kind=None)], patterns=[MatchAs(pattern"
                            "=None, name='a')], rest=None), guard=None, body="
                            "[Expr(value=Constant(value=Ellipsis, kind=None))]"
                            ")])], type_ignores=[])")
                    self.assertEqual(dump(tree), norm)

                def test_MatchClass(self):
                    code = 'match v:\n  case Cls(attr=1):...'
                    tree = gast.parse(code)
                    compile(gast.gast_to_ast(tree), '<test>', 'exec')
                    norm = ("Module(body=[Match(subject=Name(id='v', ctx=Load"
                            "(), annotation=None, type_comment=None), cases=["
                            "match_case(pattern=MatchClass(cls=Name(id='Cls'"
                            ", ctx=Load(), annotation=None, type_comment=None"
                            "), patterns=[], kwd_attrs=['attr'], kwd_patterns"
                            "=[MatchValue(value=Constant(value=1, kind=None))"
                            "]), guard=None, body=[Expr(value=Constant(value="
                            "Ellipsis, kind=None))])])], type_ignores=[])")
                    self.assertEqual(dump(tree), norm)

                def test_MatchStar(self):
                    code = 'match v:\n  case [1, *other]:...'
                    tree = gast.parse(code)
                    compile(gast.gast_to_ast(tree), '<test>', 'exec')
                    norm = ("Module(body=[Match(subject=Name(id='v', ctx=Load"
                            "(), annotation=None, type_comment=None), cases=["
                            "match_case(pattern=MatchSequence(patterns=["
                            "MatchValue(value=Constant(value=1, kind=None)), "
                            "MatchStar(name='other')]), guard=None, body="
                            "[Expr(value=Constant(value=Ellipsis, kind=None)"
                            ")])])], type_ignores=[])")
                    self.assertEqual(dump(tree), norm)

                def test_MatchAs(self):
                    code = 'match v:\n  case 1, other:...'
                    tree = gast.parse(code)
                    compile(gast.gast_to_ast(tree), '<test>', 'exec')
                    norm = ("Module(body=[Match(subject=Name(id='v', ctx=Load"
                            "(), annotation=None, type_comment=None), cases=["
                            "match_case(pattern=MatchSequence(patterns=["
                            "MatchValue(value=Constant(value=1, kind=None)), "
                            "MatchAs(pattern=None, name='other')]), guard=None"
                            ", body=[Expr(value=Constant(value=Ellipsis, kind"
                            "=None))])])], type_ignores=[])")
                    self.assertEqual(dump(tree), norm)

                def test_MatchOr(self):
                    code = 'match v:\n  case 1 | 2:...'
                    tree = gast.parse(code)
                    compile(gast.gast_to_ast(tree), '<test>', 'exec')
                    norm = ("Module(body=[Match(subject=Name(id='v', ctx=Load"
                            "(), annotation=None, type_comment=None), cases=["
                            "match_case(pattern=MatchOr(patterns=[MatchValue("
                            "value=Constant(value=1, kind=None)), MatchValue("
                            "value=Constant(value=2, kind=None))]), guard="
                            "None, body=[Expr(value=Constant(value=Ellipsis, "
                            "kind=None))])])], type_ignores=[])")
                    self.assertEqual(dump(tree), norm)


                if sys.version_info.minor >= 11:

                    def test_TryStar(self):
                        code = '''
                            try: ...
                            except *ValueError: ...'''
                        norm = ("Module(body=[TryStar(body=[Expr(value="
                                "Constant(value=Ellipsis))], handlers=["
                                "ExceptHandler(type=Name(id='ValueError', ctx"
                                "=Load()), body=[Expr(value=Constant(value="
                                "Ellipsis))])], orelse=[], finalbody=[])], "
                                "type_ignores=[])")
                        pass

        else:

            def test_Bytes(self):
                code = 'b"0012"'
                tree = gast.parse(code)
                compile(gast.gast_to_ast(tree), '<test>', 'exec')
                norm = ("Module(body=[Expr(value=Constant(value=b'0012', "
                        "kind=None))], type_ignores=[])")
                self.assertEqual(dump(tree), norm)

    # common

    def test_TryExcept(self):
        code = 'try:pass\nexcept e:pass\nelse:pass'
        tree = gast.parse(code)
        compile(gast.gast_to_ast(tree), '<test>', 'exec')
        norm = ("Module(body=[Try(body=[Pass()], handlers=[ExceptHandler("
                "type=Name(id='e', ctx=Load(), annotation=None, "
                "type_comment=None), name=None, body=[Pass()])]"
                ", orelse=[Pass()], finalbody=[])], type_ignores=[])")
        self.assertEqual(dump(tree), norm)

    def test_TryExceptNamed(self):
        code = 'try:pass\nexcept e as f:pass\nelse:pass'
        tree = gast.parse(code)
        compile(gast.gast_to_ast(tree), '<test>', 'exec')
        norm = ("Module(body=[Try(body=[Pass()], handlers=[ExceptHandler("
                "type=Name(id='e', ctx=Load(), annotation=None, "
                "type_comment=None), name=Name(id='f', ctx="
                "Store(), annotation=None, type_comment=None), body=[Pass()])]"
                ", orelse=[Pass()], finalbody=[])], type_ignores=[])")
        self.assertEqual(dump(tree), norm)

    def test_Raise(self):
        codes = ('raise Exception',
                 'raise "Exception"',
                 'raise Exception, "err"',
                 'raise Exception("err")',
                 'raise E, V, T',)
        norms = ("Module(body=[Raise(exc=Name(id='Exception', ctx=Load(), "
                 "annotation=None, type_comment=None),"
                 " cause=None)], type_ignores=[])",

                 "Module(body=[Raise(exc=Constant(value='Exception', kind="
                 "None), cause=None)], type_ignores=[])",

                 "Module(body=[Raise(exc=Call(func=Name(id='Exception', "
                 "ctx=Load(), annotation=None, type_comment=None), "
                 "args=[Constant(value='err', kind=None)], "
                 "keywords=[]), cause=None)], type_ignores=[])",

                 "Module(body=[Raise(exc=Call(func=Name(id='Exception', "
                 "ctx=Load(), annotation=None, type_comment=None), "
                 "args=[Constant(value='err', kind=None)], "
                 "keywords=[]), cause=None)], type_ignores=[])",

                 "Module(body=[Raise(exc=Call(func=Attribute(value=Call("
                 "func=Name(id='E', ctx=Load(), annotation=None, "
                 "type_comment=None), args=[Name(id='V', ctx="
                 "Load(), annotation=None, type_comment=None)], keywords=[]), "
                 "attr='with_traceback', ctx=Load"
                 "()), args=[Name(id='T', ctx=Load(), annotation=None, "
                 "type_comment=None)], keywords=[]), "
                 "cause=None)], type_ignores=[])",)

        if sys.version_info.major == 3:
            codes = codes[0], codes[1], codes[3]
            norms = norms[0], norms[1], norms[3]

        for code, norm in zip(codes, norms):
            tree = gast.parse(code)
            compile(gast.gast_to_ast(tree), '<test>', 'exec')
            self.assertEqual(dump(tree), norm)

    def test_Call(self):
        code = 'foo(x, y=1, *args, **kwargs)'
        tree = gast.parse(code)
        compile(gast.gast_to_ast(tree), '<test>', 'exec')
        norm = ("Module(body=[Expr(value=Call(func=Name(id='foo', ctx=Load"
                "(), annotation=None, type_comment=None"
                "), args=[Name(id='x', ctx=Load(), "
                "annotation=None, type_comment=None), Starred(value=Name("
                "id='args', ctx=Load(), annotation=None, type_comment=None)"
                ", ctx=Load())], keywords=[keyword("
                "arg='y', value=Constant(value=1, kind=None)), keyword(arg"
                "=None, value=Name(id='kwargs', ctx=Load(), annotation=None, "
                "type_comment=None))]))], type_ignores=[])")
        self.assertEqual(dump(tree), norm)

    def test_With(self):
        code = 'with open("any"): pass'
        tree = gast.parse(code)
        compile(gast.gast_to_ast(tree), '<test>', 'exec')
        norm = ("Module(body=[With(items=[withitem(context_expr=Call(func="
                "Name(id='open', ctx=Load(), annotation=None, "
                "type_comment=None), args=[Constant(value='any', "
                "kind=None)], keywords=[]), optional_vars=None)], body=["
                "Pass()], type_comment=None)], type_ignores=[])")
        self.assertEqual(dump(tree), norm)

    def test_TryFinally(self):
        code = 'try:pass\nfinally:pass'
        tree = gast.parse(code)
        compile(gast.gast_to_ast(tree), '<test>', 'exec')
        norm = ("Module(body=[Try(body=[Pass()], handlers=[], orelse=[], "
                "finalbody=[Pass()])], type_ignores=[])")
        self.assertEqual(dump(tree), norm)

    def test_star_argument(self):
        code = 'def foo(*a): pass'
        tree = gast.parse(code)
        compile(gast.gast_to_ast(tree), '<test>', 'exec')
        norm = ("Module(body=[FunctionDef(name='foo', args=arguments(args=[], "
                "posonlyargs=[], vararg=Name(id='a', ctx=Param(), "
                "annotation=None, type_comment=None), "
                "kwonlyargs=[], kw_defaults=[], kwarg=None, defaults=[]), "
                "body=[Pass()], decorator_list=[], returns=None, "
                "type_comment=None, type_params=[])], type_ignores=[])")
        self.assertEqual(dump(tree), norm)

    def test_keyword_argument(self):
        code = 'def foo(**a): pass'
        tree = gast.parse(code)
        compile(gast.gast_to_ast(tree), '<test>', 'exec')
        norm = ("Module(body=[FunctionDef(name='foo', args=arguments(args=[], "
                "posonlyargs=[], vararg=None, kwonlyargs=[], kw_defaults=[], "
                "kwarg=Name(id='a', ctx=Param(), annotation=None, "
                "type_comment=None), defaults=[]), body=[Pass()], "
                "decorator_list=[], returns=None, type_comment=None, "
                "type_params=[])], type_ignores=[])")
        self.assertEqual(dump(tree), norm)

    def test_Index(self):
        code = 'def foo(a): a[1]'
        tree = gast.parse(code)
        compile(gast.gast_to_ast(tree), '<test>', 'exec')
        norm = ("Module(body=[FunctionDef(name='foo', args=arguments(args=["
                "Name(id='a', ctx=Param(), annotation=None, type_comment=None)"
                "], posonlyargs=[], vararg=None, kwonlyargs=[], kw_defaults=[]"
                ", kwarg=None, defaults=[]), body=[Expr(value=Subscript(value="
                "Name(id='a', ctx=Load(), annotation=None, type_comment=None)"
                ", slice=Constant(value=1, kind=None), ctx=Load()"
                "))], decorator_list=[], returns=None, type_comment=None, "
                "type_params=[])], type_ignores=[])")
        self.assertEqual(dump(tree), norm)

    def test_ExtSlice(self):
        code = 'def foo(a): a[:,:]'
        tree = gast.parse(code)
        compile(gast.gast_to_ast(tree), '<test>', 'exec')
        norm = ("Module(body=[FunctionDef(name='foo', args=arguments(args=["
                "Name(id='a', ctx=Param(), annotation=None, type_comment=None)"
                "], posonlyargs=[], vararg=None, kwonlyargs=[], kw_defaults=[]"
                ", kwarg=None, defaults=[]), body=[Expr(value=Subscript(value="
                "Name(id='a', ctx=Load(), annotation=None, type_comment=None)"
                ", slice=Tuple(elts=[Slice(lower=None, upper=None, step="
                "None), Slice(lower=None, upper=None, step=None)], ctx=Load())"
                ", ctx=Load()))], decorator_list=[], returns=None, "
                "type_comment=None, type_params=[])], type_ignores=[])")
        self.assertEqual(dump(tree), norm)

    def test_ExtSlices(self):
        code = 'def foo(a): a[1,:]'
        tree = gast.parse(code)
        compile(gast.gast_to_ast(tree), '<test>', 'exec')
        norm = ("Module(body=[FunctionDef(name='foo', args=arguments(args=["
                "Name(id='a', ctx=Param(), annotation=None, type_comment=None)"
                "], posonlyargs=[], vararg=None, kwonlyargs=[], kw_defaults=[]"
                ", kwarg=None, defaults=[]), body=[Expr(value=Subscript(value="
                "Name(id='a', ctx=Load(), annotation=None, type_comment=None)"
                ", slice=Tuple(elts=[Constant(value=1, kind="
                "None), Slice(lower=None, upper=None, step=None)], ctx=Load())"
                ", ctx=Load()))], decorator_list=[], returns=None, "
                "type_comment=None, type_params=[])], type_ignores=[])")
        self.assertEqual(dump(tree), norm)

    def test_Ellipsis(self):
        code = 'def foo(a): a[...]'
        tree = gast.parse(code)
        compile(gast.gast_to_ast(tree), '<test>', 'exec')
        norm = ("Module(body=[FunctionDef(name='foo', args=arguments(args=["
                "Name(id='a', ctx=Param(), annotation=None, type_comment=None)"
                "], posonlyargs=[], vararg=None, kwonlyargs=[], kw_defaults=[]"
                ", kwarg=None, defaults=[]), body=[Expr(value=Subscript(value="
                "Name(id='a', ctx=Load(), annotation=None, type_comment=None)"
                ", slice=Constant(value=Ellipsis, kind=None), ctx=Load()))], "
                "decorator_list=[], returns=None, type_comment=None, "
                "type_params=[])], type_ignores=[])")
        self.assertEqual(dump(tree), norm)

    def test_ExtSliceEllipsis(self):
        code = 'def foo(a): a[1, ...]'
        tree = gast.parse(code)
        compile(gast.gast_to_ast(tree), '<test>', 'exec')
        norm = ("Module(body=[FunctionDef(name='foo', args=arguments(args=["
                "Name(id='a', ctx=Param(), annotation=None, type_comment=None)"
                "], posonlyargs=[], vararg=None, kwonlyargs=[], kw_defaults=[]"
                ", kwarg=None, defaults=[]), body=[Expr(value=Subscript(value="
                "Name(id='a', ctx=Load(), annotation=None, type_comment=None)"
                ", slice=Tuple(elts=[Constant(value=1, kind=None)"
                ", Constant(value=Ellipsis, kind=None)], ctx=Load()), ctx="
                "Load()))], decorator_list=[], returns=None, type_comment="
                "None, type_params=[])], type_ignores=[])")
        self.assertEqual(dump(tree), norm)


if __name__ == '__main__':
    unittest.main()