annotate Tools/parser/test_unparse.py @ 74006:88198b93ff2f

Issue #13560: Add PyUnicode_EncodeLocale() * Use PyUnicode_EncodeLocale() in time.strftime() if wcsftime() is not available * Document my last changes in Misc/NEWS
author Victor Stinner <victor.stinner@haypocalc.com>
date Sat, 17 Dec 2011 04:13:41 +0100
parents 87e6bdb373d1
children c80576303892
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
62609
68b670f3614e Merged revisions 82338,82340-82341 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
diff changeset
1 import unittest
68b670f3614e Merged revisions 82338,82340-82341 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
diff changeset
2 import test.support
68b670f3614e Merged revisions 82338,82340-82341 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
diff changeset
3 import io
62627
b72c33f496ac test_unparse.py: Do roundtrip testing for all Python files in Lib and Lib/test.
Mark Dickinson <dickinsm@gmail.com>
parents: 62623
diff changeset
4 import os
b72c33f496ac test_unparse.py: Do roundtrip testing for all Python files in Lib and Lib/test.
Mark Dickinson <dickinsm@gmail.com>
parents: 62623
diff changeset
5 import tokenize
62609
68b670f3614e Merged revisions 82338,82340-82341 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
diff changeset
6 import ast
68b670f3614e Merged revisions 82338,82340-82341 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
diff changeset
7 import unparse
68b670f3614e Merged revisions 82338,82340-82341 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
diff changeset
8
62627
b72c33f496ac test_unparse.py: Do roundtrip testing for all Python files in Lib and Lib/test.
Mark Dickinson <dickinsm@gmail.com>
parents: 62623
diff changeset
9 def read_pyfile(filename):
b72c33f496ac test_unparse.py: Do roundtrip testing for all Python files in Lib and Lib/test.
Mark Dickinson <dickinsm@gmail.com>
parents: 62623
diff changeset
10 """Read and return the contents of a Python source file (as a
b72c33f496ac test_unparse.py: Do roundtrip testing for all Python files in Lib and Lib/test.
Mark Dickinson <dickinsm@gmail.com>
parents: 62623
diff changeset
11 string), taking into account the file encoding."""
b72c33f496ac test_unparse.py: Do roundtrip testing for all Python files in Lib and Lib/test.
Mark Dickinson <dickinsm@gmail.com>
parents: 62623
diff changeset
12 with open(filename, "rb") as pyfile:
b72c33f496ac test_unparse.py: Do roundtrip testing for all Python files in Lib and Lib/test.
Mark Dickinson <dickinsm@gmail.com>
parents: 62623
diff changeset
13 encoding = tokenize.detect_encoding(pyfile.readline)[0]
b72c33f496ac test_unparse.py: Do roundtrip testing for all Python files in Lib and Lib/test.
Mark Dickinson <dickinsm@gmail.com>
parents: 62623
diff changeset
14 with open(filename, "r", encoding=encoding) as pyfile:
b72c33f496ac test_unparse.py: Do roundtrip testing for all Python files in Lib and Lib/test.
Mark Dickinson <dickinsm@gmail.com>
parents: 62623
diff changeset
15 source = pyfile.read()
b72c33f496ac test_unparse.py: Do roundtrip testing for all Python files in Lib and Lib/test.
Mark Dickinson <dickinsm@gmail.com>
parents: 62623
diff changeset
16 return source
b72c33f496ac test_unparse.py: Do roundtrip testing for all Python files in Lib and Lib/test.
Mark Dickinson <dickinsm@gmail.com>
parents: 62623
diff changeset
17
62613
b817e716516e Update Demo/parser/unparse.py to current Python 3.x syntax. Additions:
Mark Dickinson <dickinsm@gmail.com>
parents: 62612
diff changeset
18 for_else = """\
62609
68b670f3614e Merged revisions 82338,82340-82341 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
diff changeset
19 def f():
68b670f3614e Merged revisions 82338,82340-82341 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
diff changeset
20 for x in range(10):
68b670f3614e Merged revisions 82338,82340-82341 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
diff changeset
21 break
68b670f3614e Merged revisions 82338,82340-82341 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
diff changeset
22 else:
68b670f3614e Merged revisions 82338,82340-82341 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
diff changeset
23 y = 2
68b670f3614e Merged revisions 82338,82340-82341 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
diff changeset
24 z = 3
68b670f3614e Merged revisions 82338,82340-82341 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
diff changeset
25 """
68b670f3614e Merged revisions 82338,82340-82341 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
diff changeset
26
62613
b817e716516e Update Demo/parser/unparse.py to current Python 3.x syntax. Additions:
Mark Dickinson <dickinsm@gmail.com>
parents: 62612
diff changeset
27 while_else = """\
62609
68b670f3614e Merged revisions 82338,82340-82341 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
diff changeset
28 def g():
68b670f3614e Merged revisions 82338,82340-82341 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
diff changeset
29 while True:
68b670f3614e Merged revisions 82338,82340-82341 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
diff changeset
30 break
68b670f3614e Merged revisions 82338,82340-82341 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
diff changeset
31 else:
68b670f3614e Merged revisions 82338,82340-82341 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
diff changeset
32 y = 2
68b670f3614e Merged revisions 82338,82340-82341 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
diff changeset
33 z = 3
68b670f3614e Merged revisions 82338,82340-82341 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
diff changeset
34 """
68b670f3614e Merged revisions 82338,82340-82341 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
diff changeset
35
62613
b817e716516e Update Demo/parser/unparse.py to current Python 3.x syntax. Additions:
Mark Dickinson <dickinsm@gmail.com>
parents: 62612
diff changeset
36 relative_import = """\
b817e716516e Update Demo/parser/unparse.py to current Python 3.x syntax. Additions:
Mark Dickinson <dickinsm@gmail.com>
parents: 62612
diff changeset
37 from . import fred
b817e716516e Update Demo/parser/unparse.py to current Python 3.x syntax. Additions:
Mark Dickinson <dickinsm@gmail.com>
parents: 62612
diff changeset
38 from .. import barney
b817e716516e Update Demo/parser/unparse.py to current Python 3.x syntax. Additions:
Mark Dickinson <dickinsm@gmail.com>
parents: 62612
diff changeset
39 from .australia import shrimp as prawns
b817e716516e Update Demo/parser/unparse.py to current Python 3.x syntax. Additions:
Mark Dickinson <dickinsm@gmail.com>
parents: 62612
diff changeset
40 """
b817e716516e Update Demo/parser/unparse.py to current Python 3.x syntax. Additions:
Mark Dickinson <dickinsm@gmail.com>
parents: 62612
diff changeset
41
b817e716516e Update Demo/parser/unparse.py to current Python 3.x syntax. Additions:
Mark Dickinson <dickinsm@gmail.com>
parents: 62612
diff changeset
42 nonlocal_ex = """\
b817e716516e Update Demo/parser/unparse.py to current Python 3.x syntax. Additions:
Mark Dickinson <dickinsm@gmail.com>
parents: 62612
diff changeset
43 def f():
b817e716516e Update Demo/parser/unparse.py to current Python 3.x syntax. Additions:
Mark Dickinson <dickinsm@gmail.com>
parents: 62612
diff changeset
44 x = 1
b817e716516e Update Demo/parser/unparse.py to current Python 3.x syntax. Additions:
Mark Dickinson <dickinsm@gmail.com>
parents: 62612
diff changeset
45 def g():
b817e716516e Update Demo/parser/unparse.py to current Python 3.x syntax. Additions:
Mark Dickinson <dickinsm@gmail.com>
parents: 62612
diff changeset
46 nonlocal x
b817e716516e Update Demo/parser/unparse.py to current Python 3.x syntax. Additions:
Mark Dickinson <dickinsm@gmail.com>
parents: 62612
diff changeset
47 x = 2
b817e716516e Update Demo/parser/unparse.py to current Python 3.x syntax. Additions:
Mark Dickinson <dickinsm@gmail.com>
parents: 62612
diff changeset
48 y = 7
b817e716516e Update Demo/parser/unparse.py to current Python 3.x syntax. Additions:
Mark Dickinson <dickinsm@gmail.com>
parents: 62612
diff changeset
49 def h():
b817e716516e Update Demo/parser/unparse.py to current Python 3.x syntax. Additions:
Mark Dickinson <dickinsm@gmail.com>
parents: 62612
diff changeset
50 nonlocal x, y
b817e716516e Update Demo/parser/unparse.py to current Python 3.x syntax. Additions:
Mark Dickinson <dickinsm@gmail.com>
parents: 62612
diff changeset
51 """
b817e716516e Update Demo/parser/unparse.py to current Python 3.x syntax. Additions:
Mark Dickinson <dickinsm@gmail.com>
parents: 62612
diff changeset
52
b817e716516e Update Demo/parser/unparse.py to current Python 3.x syntax. Additions:
Mark Dickinson <dickinsm@gmail.com>
parents: 62612
diff changeset
53 # also acts as test for 'except ... as ...'
b817e716516e Update Demo/parser/unparse.py to current Python 3.x syntax. Additions:
Mark Dickinson <dickinsm@gmail.com>
parents: 62612
diff changeset
54 raise_from = """\
b817e716516e Update Demo/parser/unparse.py to current Python 3.x syntax. Additions:
Mark Dickinson <dickinsm@gmail.com>
parents: 62612
diff changeset
55 try:
b817e716516e Update Demo/parser/unparse.py to current Python 3.x syntax. Additions:
Mark Dickinson <dickinsm@gmail.com>
parents: 62612
diff changeset
56 1 / 0
b817e716516e Update Demo/parser/unparse.py to current Python 3.x syntax. Additions:
Mark Dickinson <dickinsm@gmail.com>
parents: 62612
diff changeset
57 except ZeroDivisionError as e:
b817e716516e Update Demo/parser/unparse.py to current Python 3.x syntax. Additions:
Mark Dickinson <dickinsm@gmail.com>
parents: 62612
diff changeset
58 raise ArithmeticError from e
b817e716516e Update Demo/parser/unparse.py to current Python 3.x syntax. Additions:
Mark Dickinson <dickinsm@gmail.com>
parents: 62612
diff changeset
59 """
b817e716516e Update Demo/parser/unparse.py to current Python 3.x syntax. Additions:
Mark Dickinson <dickinsm@gmail.com>
parents: 62612
diff changeset
60
b817e716516e Update Demo/parser/unparse.py to current Python 3.x syntax. Additions:
Mark Dickinson <dickinsm@gmail.com>
parents: 62612
diff changeset
61 class_decorator = """\
b817e716516e Update Demo/parser/unparse.py to current Python 3.x syntax. Additions:
Mark Dickinson <dickinsm@gmail.com>
parents: 62612
diff changeset
62 @f1(arg)
b817e716516e Update Demo/parser/unparse.py to current Python 3.x syntax. Additions:
Mark Dickinson <dickinsm@gmail.com>
parents: 62612
diff changeset
63 @f2
b817e716516e Update Demo/parser/unparse.py to current Python 3.x syntax. Additions:
Mark Dickinson <dickinsm@gmail.com>
parents: 62612
diff changeset
64 class Foo: pass
b817e716516e Update Demo/parser/unparse.py to current Python 3.x syntax. Additions:
Mark Dickinson <dickinsm@gmail.com>
parents: 62612
diff changeset
65 """
b817e716516e Update Demo/parser/unparse.py to current Python 3.x syntax. Additions:
Mark Dickinson <dickinsm@gmail.com>
parents: 62612
diff changeset
66
62643
25fbf023102d Collapse else: if: ... into elif:
Mark Dickinson <dickinsm@gmail.com>
parents: 62637
diff changeset
67 elif1 = """\
25fbf023102d Collapse else: if: ... into elif:
Mark Dickinson <dickinsm@gmail.com>
parents: 62637
diff changeset
68 if cond1:
25fbf023102d Collapse else: if: ... into elif:
Mark Dickinson <dickinsm@gmail.com>
parents: 62637
diff changeset
69 suite1
25fbf023102d Collapse else: if: ... into elif:
Mark Dickinson <dickinsm@gmail.com>
parents: 62637
diff changeset
70 elif cond2:
25fbf023102d Collapse else: if: ... into elif:
Mark Dickinson <dickinsm@gmail.com>
parents: 62637
diff changeset
71 suite2
25fbf023102d Collapse else: if: ... into elif:
Mark Dickinson <dickinsm@gmail.com>
parents: 62637
diff changeset
72 else:
25fbf023102d Collapse else: if: ... into elif:
Mark Dickinson <dickinsm@gmail.com>
parents: 62637
diff changeset
73 suite3
25fbf023102d Collapse else: if: ... into elif:
Mark Dickinson <dickinsm@gmail.com>
parents: 62637
diff changeset
74 """
25fbf023102d Collapse else: if: ... into elif:
Mark Dickinson <dickinsm@gmail.com>
parents: 62637
diff changeset
75
25fbf023102d Collapse else: if: ... into elif:
Mark Dickinson <dickinsm@gmail.com>
parents: 62637
diff changeset
76 elif2 = """\
25fbf023102d Collapse else: if: ... into elif:
Mark Dickinson <dickinsm@gmail.com>
parents: 62637
diff changeset
77 if cond1:
25fbf023102d Collapse else: if: ... into elif:
Mark Dickinson <dickinsm@gmail.com>
parents: 62637
diff changeset
78 suite1
25fbf023102d Collapse else: if: ... into elif:
Mark Dickinson <dickinsm@gmail.com>
parents: 62637
diff changeset
79 elif cond2:
25fbf023102d Collapse else: if: ... into elif:
Mark Dickinson <dickinsm@gmail.com>
parents: 62637
diff changeset
80 suite2
25fbf023102d Collapse else: if: ... into elif:
Mark Dickinson <dickinsm@gmail.com>
parents: 62637
diff changeset
81 """
25fbf023102d Collapse else: if: ... into elif:
Mark Dickinson <dickinsm@gmail.com>
parents: 62637
diff changeset
82
62644
e6bb990ac9f6 Output try-except-finally statements where appropriate.
Mark Dickinson <dickinsm@gmail.com>
parents: 62643
diff changeset
83 try_except_finally = """\
e6bb990ac9f6 Output try-except-finally statements where appropriate.
Mark Dickinson <dickinsm@gmail.com>
parents: 62643
diff changeset
84 try:
e6bb990ac9f6 Output try-except-finally statements where appropriate.
Mark Dickinson <dickinsm@gmail.com>
parents: 62643
diff changeset
85 suite1
e6bb990ac9f6 Output try-except-finally statements where appropriate.
Mark Dickinson <dickinsm@gmail.com>
parents: 62643
diff changeset
86 except ex1:
e6bb990ac9f6 Output try-except-finally statements where appropriate.
Mark Dickinson <dickinsm@gmail.com>
parents: 62643
diff changeset
87 suite2
e6bb990ac9f6 Output try-except-finally statements where appropriate.
Mark Dickinson <dickinsm@gmail.com>
parents: 62643
diff changeset
88 except ex2:
e6bb990ac9f6 Output try-except-finally statements where appropriate.
Mark Dickinson <dickinsm@gmail.com>
parents: 62643
diff changeset
89 suite3
e6bb990ac9f6 Output try-except-finally statements where appropriate.
Mark Dickinson <dickinsm@gmail.com>
parents: 62643
diff changeset
90 else:
e6bb990ac9f6 Output try-except-finally statements where appropriate.
Mark Dickinson <dickinsm@gmail.com>
parents: 62643
diff changeset
91 suite4
e6bb990ac9f6 Output try-except-finally statements where appropriate.
Mark Dickinson <dickinsm@gmail.com>
parents: 62643
diff changeset
92 finally:
e6bb990ac9f6 Output try-except-finally statements where appropriate.
Mark Dickinson <dickinsm@gmail.com>
parents: 62643
diff changeset
93 suite5
e6bb990ac9f6 Output try-except-finally statements where appropriate.
Mark Dickinson <dickinsm@gmail.com>
parents: 62643
diff changeset
94 """
62643
25fbf023102d Collapse else: if: ... into elif:
Mark Dickinson <dickinsm@gmail.com>
parents: 62637
diff changeset
95
62627
b72c33f496ac test_unparse.py: Do roundtrip testing for all Python files in Lib and Lib/test.
Mark Dickinson <dickinsm@gmail.com>
parents: 62623
diff changeset
96 class ASTTestCase(unittest.TestCase):
b72c33f496ac test_unparse.py: Do roundtrip testing for all Python files in Lib and Lib/test.
Mark Dickinson <dickinsm@gmail.com>
parents: 62623
diff changeset
97 def assertASTEqual(self, ast1, ast2):
b72c33f496ac test_unparse.py: Do roundtrip testing for all Python files in Lib and Lib/test.
Mark Dickinson <dickinsm@gmail.com>
parents: 62623
diff changeset
98 self.assertEqual(ast.dump(ast1), ast.dump(ast2))
62609
68b670f3614e Merged revisions 82338,82340-82341 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
diff changeset
99
68b670f3614e Merged revisions 82338,82340-82341 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
diff changeset
100 def check_roundtrip(self, code1, filename="internal"):
62627
b72c33f496ac test_unparse.py: Do roundtrip testing for all Python files in Lib and Lib/test.
Mark Dickinson <dickinsm@gmail.com>
parents: 62623
diff changeset
101 ast1 = compile(code1, filename, "exec", ast.PyCF_ONLY_AST)
62609
68b670f3614e Merged revisions 82338,82340-82341 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
diff changeset
102 unparse_buffer = io.StringIO()
68b670f3614e Merged revisions 82338,82340-82341 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
diff changeset
103 unparse.Unparser(ast1, unparse_buffer)
68b670f3614e Merged revisions 82338,82340-82341 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
diff changeset
104 code2 = unparse_buffer.getvalue()
62627
b72c33f496ac test_unparse.py: Do roundtrip testing for all Python files in Lib and Lib/test.
Mark Dickinson <dickinsm@gmail.com>
parents: 62623
diff changeset
105 ast2 = compile(code2, filename, "exec", ast.PyCF_ONLY_AST)
b72c33f496ac test_unparse.py: Do roundtrip testing for all Python files in Lib and Lib/test.
Mark Dickinson <dickinsm@gmail.com>
parents: 62623
diff changeset
106 self.assertASTEqual(ast1, ast2)
b72c33f496ac test_unparse.py: Do roundtrip testing for all Python files in Lib and Lib/test.
Mark Dickinson <dickinsm@gmail.com>
parents: 62623
diff changeset
107
b72c33f496ac test_unparse.py: Do roundtrip testing for all Python files in Lib and Lib/test.
Mark Dickinson <dickinsm@gmail.com>
parents: 62623
diff changeset
108 class UnparseTestCase(ASTTestCase):
b72c33f496ac test_unparse.py: Do roundtrip testing for all Python files in Lib and Lib/test.
Mark Dickinson <dickinsm@gmail.com>
parents: 62623
diff changeset
109 # Tests for specific bugs found in earlier versions of unparse
62609
68b670f3614e Merged revisions 82338,82340-82341 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
diff changeset
110
68b670f3614e Merged revisions 82338,82340-82341 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
diff changeset
111 def test_del_statement(self):
68b670f3614e Merged revisions 82338,82340-82341 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
diff changeset
112 self.check_roundtrip("del x, y, z")
68b670f3614e Merged revisions 82338,82340-82341 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
diff changeset
113
68b670f3614e Merged revisions 82338,82340-82341 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
diff changeset
114 def test_shifts(self):
68b670f3614e Merged revisions 82338,82340-82341 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
diff changeset
115 self.check_roundtrip("45 << 2")
68b670f3614e Merged revisions 82338,82340-82341 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
diff changeset
116 self.check_roundtrip("13 >> 7")
68b670f3614e Merged revisions 82338,82340-82341 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
diff changeset
117
68b670f3614e Merged revisions 82338,82340-82341 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
diff changeset
118 def test_for_else(self):
62613
b817e716516e Update Demo/parser/unparse.py to current Python 3.x syntax. Additions:
Mark Dickinson <dickinsm@gmail.com>
parents: 62612
diff changeset
119 self.check_roundtrip(for_else)
62609
68b670f3614e Merged revisions 82338,82340-82341 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
diff changeset
120
68b670f3614e Merged revisions 82338,82340-82341 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
diff changeset
121 def test_while_else(self):
62613
b817e716516e Update Demo/parser/unparse.py to current Python 3.x syntax. Additions:
Mark Dickinson <dickinsm@gmail.com>
parents: 62612
diff changeset
122 self.check_roundtrip(while_else)
62609
68b670f3614e Merged revisions 82338,82340-82341 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
diff changeset
123
68b670f3614e Merged revisions 82338,82340-82341 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
diff changeset
124 def test_unary_parens(self):
68b670f3614e Merged revisions 82338,82340-82341 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
diff changeset
125 self.check_roundtrip("(-1)**7")
62651
043ef04f64d2 Unparse infinite imaginary literals correctly. Add some more numeric tests.
Mark Dickinson <dickinsm@gmail.com>
parents: 62650
diff changeset
126 self.check_roundtrip("(-1.)**8")
043ef04f64d2 Unparse infinite imaginary literals correctly. Add some more numeric tests.
Mark Dickinson <dickinsm@gmail.com>
parents: 62650
diff changeset
127 self.check_roundtrip("(-1j)**6")
62609
68b670f3614e Merged revisions 82338,82340-82341 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
diff changeset
128 self.check_roundtrip("not True or False")
68b670f3614e Merged revisions 82338,82340-82341 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
diff changeset
129 self.check_roundtrip("True or not False")
68b670f3614e Merged revisions 82338,82340-82341 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
diff changeset
130
62622
2f9051fe6ad9 Add parentheses around numeric literals, to avoid turning 3 .bit_length() into 3.bit_length().
Mark Dickinson <dickinsm@gmail.com>
parents: 62613
diff changeset
131 def test_integer_parens(self):
2f9051fe6ad9 Add parentheses around numeric literals, to avoid turning 3 .bit_length() into 3.bit_length().
Mark Dickinson <dickinsm@gmail.com>
parents: 62613
diff changeset
132 self.check_roundtrip("3 .__abs__()")
2f9051fe6ad9 Add parentheses around numeric literals, to avoid turning 3 .bit_length() into 3.bit_length().
Mark Dickinson <dickinsm@gmail.com>
parents: 62613
diff changeset
133
62623
fe44828ea7ed More unparse.py fixes:
Mark Dickinson <dickinsm@gmail.com>
parents: 62622
diff changeset
134 def test_huge_float(self):
fe44828ea7ed More unparse.py fixes:
Mark Dickinson <dickinsm@gmail.com>
parents: 62622
diff changeset
135 self.check_roundtrip("1e1000")
fe44828ea7ed More unparse.py fixes:
Mark Dickinson <dickinsm@gmail.com>
parents: 62622
diff changeset
136 self.check_roundtrip("-1e1000")
62651
043ef04f64d2 Unparse infinite imaginary literals correctly. Add some more numeric tests.
Mark Dickinson <dickinsm@gmail.com>
parents: 62650
diff changeset
137 self.check_roundtrip("1e1000j")
043ef04f64d2 Unparse infinite imaginary literals correctly. Add some more numeric tests.
Mark Dickinson <dickinsm@gmail.com>
parents: 62650
diff changeset
138 self.check_roundtrip("-1e1000j")
043ef04f64d2 Unparse infinite imaginary literals correctly. Add some more numeric tests.
Mark Dickinson <dickinsm@gmail.com>
parents: 62650
diff changeset
139
043ef04f64d2 Unparse infinite imaginary literals correctly. Add some more numeric tests.
Mark Dickinson <dickinsm@gmail.com>
parents: 62650
diff changeset
140 def test_min_int(self):
043ef04f64d2 Unparse infinite imaginary literals correctly. Add some more numeric tests.
Mark Dickinson <dickinsm@gmail.com>
parents: 62650
diff changeset
141 self.check_roundtrip(str(-2**31))
043ef04f64d2 Unparse infinite imaginary literals correctly. Add some more numeric tests.
Mark Dickinson <dickinsm@gmail.com>
parents: 62650
diff changeset
142 self.check_roundtrip(str(-2**63))
043ef04f64d2 Unparse infinite imaginary literals correctly. Add some more numeric tests.
Mark Dickinson <dickinsm@gmail.com>
parents: 62650
diff changeset
143
043ef04f64d2 Unparse infinite imaginary literals correctly. Add some more numeric tests.
Mark Dickinson <dickinsm@gmail.com>
parents: 62650
diff changeset
144 def test_imaginary_literals(self):
043ef04f64d2 Unparse infinite imaginary literals correctly. Add some more numeric tests.
Mark Dickinson <dickinsm@gmail.com>
parents: 62650
diff changeset
145 self.check_roundtrip("7j")
043ef04f64d2 Unparse infinite imaginary literals correctly. Add some more numeric tests.
Mark Dickinson <dickinsm@gmail.com>
parents: 62650
diff changeset
146 self.check_roundtrip("-7j")
043ef04f64d2 Unparse infinite imaginary literals correctly. Add some more numeric tests.
Mark Dickinson <dickinsm@gmail.com>
parents: 62650
diff changeset
147 self.check_roundtrip("0j")
043ef04f64d2 Unparse infinite imaginary literals correctly. Add some more numeric tests.
Mark Dickinson <dickinsm@gmail.com>
parents: 62650
diff changeset
148 self.check_roundtrip("-0j")
62623
fe44828ea7ed More unparse.py fixes:
Mark Dickinson <dickinsm@gmail.com>
parents: 62622
diff changeset
149
fe44828ea7ed More unparse.py fixes:
Mark Dickinson <dickinsm@gmail.com>
parents: 62622
diff changeset
150 def test_lambda_parentheses(self):
fe44828ea7ed More unparse.py fixes:
Mark Dickinson <dickinsm@gmail.com>
parents: 62622
diff changeset
151 self.check_roundtrip("(lambda: int)()")
fe44828ea7ed More unparse.py fixes:
Mark Dickinson <dickinsm@gmail.com>
parents: 62622
diff changeset
152
62612
69f6d2130281 Merged revisions 82345 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents: 62609
diff changeset
153 def test_chained_comparisons(self):
69f6d2130281 Merged revisions 82345 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents: 62609
diff changeset
154 self.check_roundtrip("1 < 4 <= 5")
69f6d2130281 Merged revisions 82345 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents: 62609
diff changeset
155 self.check_roundtrip("a is b is c is not d")
69f6d2130281 Merged revisions 82345 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents: 62609
diff changeset
156
62613
b817e716516e Update Demo/parser/unparse.py to current Python 3.x syntax. Additions:
Mark Dickinson <dickinsm@gmail.com>
parents: 62612
diff changeset
157 def test_function_arguments(self):
b817e716516e Update Demo/parser/unparse.py to current Python 3.x syntax. Additions:
Mark Dickinson <dickinsm@gmail.com>
parents: 62612
diff changeset
158 self.check_roundtrip("def f(): pass")
b817e716516e Update Demo/parser/unparse.py to current Python 3.x syntax. Additions:
Mark Dickinson <dickinsm@gmail.com>
parents: 62612
diff changeset
159 self.check_roundtrip("def f(a): pass")
b817e716516e Update Demo/parser/unparse.py to current Python 3.x syntax. Additions:
Mark Dickinson <dickinsm@gmail.com>
parents: 62612
diff changeset
160 self.check_roundtrip("def f(b = 2): pass")
b817e716516e Update Demo/parser/unparse.py to current Python 3.x syntax. Additions:
Mark Dickinson <dickinsm@gmail.com>
parents: 62612
diff changeset
161 self.check_roundtrip("def f(a, b): pass")
b817e716516e Update Demo/parser/unparse.py to current Python 3.x syntax. Additions:
Mark Dickinson <dickinsm@gmail.com>
parents: 62612
diff changeset
162 self.check_roundtrip("def f(a, b = 2): pass")
b817e716516e Update Demo/parser/unparse.py to current Python 3.x syntax. Additions:
Mark Dickinson <dickinsm@gmail.com>
parents: 62612
diff changeset
163 self.check_roundtrip("def f(a = 5, b = 2): pass")
b817e716516e Update Demo/parser/unparse.py to current Python 3.x syntax. Additions:
Mark Dickinson <dickinsm@gmail.com>
parents: 62612
diff changeset
164 self.check_roundtrip("def f(*, a = 1, b = 2): pass")
b817e716516e Update Demo/parser/unparse.py to current Python 3.x syntax. Additions:
Mark Dickinson <dickinsm@gmail.com>
parents: 62612
diff changeset
165 self.check_roundtrip("def f(*, a = 1, b): pass")
b817e716516e Update Demo/parser/unparse.py to current Python 3.x syntax. Additions:
Mark Dickinson <dickinsm@gmail.com>
parents: 62612
diff changeset
166 self.check_roundtrip("def f(*, a, b = 2): pass")
b817e716516e Update Demo/parser/unparse.py to current Python 3.x syntax. Additions:
Mark Dickinson <dickinsm@gmail.com>
parents: 62612
diff changeset
167 self.check_roundtrip("def f(a, b = None, *, c, **kwds): pass")
b817e716516e Update Demo/parser/unparse.py to current Python 3.x syntax. Additions:
Mark Dickinson <dickinsm@gmail.com>
parents: 62612
diff changeset
168 self.check_roundtrip("def f(a=2, *args, c=5, d, **kwds): pass")
b817e716516e Update Demo/parser/unparse.py to current Python 3.x syntax. Additions:
Mark Dickinson <dickinsm@gmail.com>
parents: 62612
diff changeset
169 self.check_roundtrip("def f(*args, **kwargs): pass")
b817e716516e Update Demo/parser/unparse.py to current Python 3.x syntax. Additions:
Mark Dickinson <dickinsm@gmail.com>
parents: 62612
diff changeset
170
b817e716516e Update Demo/parser/unparse.py to current Python 3.x syntax. Additions:
Mark Dickinson <dickinsm@gmail.com>
parents: 62612
diff changeset
171 def test_relative_import(self):
b817e716516e Update Demo/parser/unparse.py to current Python 3.x syntax. Additions:
Mark Dickinson <dickinsm@gmail.com>
parents: 62612
diff changeset
172 self.check_roundtrip(relative_import)
b817e716516e Update Demo/parser/unparse.py to current Python 3.x syntax. Additions:
Mark Dickinson <dickinsm@gmail.com>
parents: 62612
diff changeset
173
b817e716516e Update Demo/parser/unparse.py to current Python 3.x syntax. Additions:
Mark Dickinson <dickinsm@gmail.com>
parents: 62612
diff changeset
174 def test_nonlocal(self):
b817e716516e Update Demo/parser/unparse.py to current Python 3.x syntax. Additions:
Mark Dickinson <dickinsm@gmail.com>
parents: 62612
diff changeset
175 self.check_roundtrip(nonlocal_ex)
b817e716516e Update Demo/parser/unparse.py to current Python 3.x syntax. Additions:
Mark Dickinson <dickinsm@gmail.com>
parents: 62612
diff changeset
176
b817e716516e Update Demo/parser/unparse.py to current Python 3.x syntax. Additions:
Mark Dickinson <dickinsm@gmail.com>
parents: 62612
diff changeset
177 def test_raise_from(self):
b817e716516e Update Demo/parser/unparse.py to current Python 3.x syntax. Additions:
Mark Dickinson <dickinsm@gmail.com>
parents: 62612
diff changeset
178 self.check_roundtrip(raise_from)
b817e716516e Update Demo/parser/unparse.py to current Python 3.x syntax. Additions:
Mark Dickinson <dickinsm@gmail.com>
parents: 62612
diff changeset
179
b817e716516e Update Demo/parser/unparse.py to current Python 3.x syntax. Additions:
Mark Dickinson <dickinsm@gmail.com>
parents: 62612
diff changeset
180 def test_bytes(self):
b817e716516e Update Demo/parser/unparse.py to current Python 3.x syntax. Additions:
Mark Dickinson <dickinsm@gmail.com>
parents: 62612
diff changeset
181 self.check_roundtrip("b'123'")
b817e716516e Update Demo/parser/unparse.py to current Python 3.x syntax. Additions:
Mark Dickinson <dickinsm@gmail.com>
parents: 62612
diff changeset
182
b817e716516e Update Demo/parser/unparse.py to current Python 3.x syntax. Additions:
Mark Dickinson <dickinsm@gmail.com>
parents: 62612
diff changeset
183 def test_annotations(self):
b817e716516e Update Demo/parser/unparse.py to current Python 3.x syntax. Additions:
Mark Dickinson <dickinsm@gmail.com>
parents: 62612
diff changeset
184 self.check_roundtrip("def f(a : int): pass")
b817e716516e Update Demo/parser/unparse.py to current Python 3.x syntax. Additions:
Mark Dickinson <dickinsm@gmail.com>
parents: 62612
diff changeset
185 self.check_roundtrip("def f(a: int = 5): pass")
b817e716516e Update Demo/parser/unparse.py to current Python 3.x syntax. Additions:
Mark Dickinson <dickinsm@gmail.com>
parents: 62612
diff changeset
186 self.check_roundtrip("def f(*args: [int]): pass")
b817e716516e Update Demo/parser/unparse.py to current Python 3.x syntax. Additions:
Mark Dickinson <dickinsm@gmail.com>
parents: 62612
diff changeset
187 self.check_roundtrip("def f(**kwargs: dict): pass")
b817e716516e Update Demo/parser/unparse.py to current Python 3.x syntax. Additions:
Mark Dickinson <dickinsm@gmail.com>
parents: 62612
diff changeset
188 self.check_roundtrip("def f() -> None: pass")
b817e716516e Update Demo/parser/unparse.py to current Python 3.x syntax. Additions:
Mark Dickinson <dickinsm@gmail.com>
parents: 62612
diff changeset
189
b817e716516e Update Demo/parser/unparse.py to current Python 3.x syntax. Additions:
Mark Dickinson <dickinsm@gmail.com>
parents: 62612
diff changeset
190 def test_set_literal(self):
b817e716516e Update Demo/parser/unparse.py to current Python 3.x syntax. Additions:
Mark Dickinson <dickinsm@gmail.com>
parents: 62612
diff changeset
191 self.check_roundtrip("{'a', 'b', 'c'}")
b817e716516e Update Demo/parser/unparse.py to current Python 3.x syntax. Additions:
Mark Dickinson <dickinsm@gmail.com>
parents: 62612
diff changeset
192
b817e716516e Update Demo/parser/unparse.py to current Python 3.x syntax. Additions:
Mark Dickinson <dickinsm@gmail.com>
parents: 62612
diff changeset
193 def test_set_comprehension(self):
b817e716516e Update Demo/parser/unparse.py to current Python 3.x syntax. Additions:
Mark Dickinson <dickinsm@gmail.com>
parents: 62612
diff changeset
194 self.check_roundtrip("{x for x in range(5)}")
b817e716516e Update Demo/parser/unparse.py to current Python 3.x syntax. Additions:
Mark Dickinson <dickinsm@gmail.com>
parents: 62612
diff changeset
195
b817e716516e Update Demo/parser/unparse.py to current Python 3.x syntax. Additions:
Mark Dickinson <dickinsm@gmail.com>
parents: 62612
diff changeset
196 def test_dict_comprehension(self):
b817e716516e Update Demo/parser/unparse.py to current Python 3.x syntax. Additions:
Mark Dickinson <dickinsm@gmail.com>
parents: 62612
diff changeset
197 self.check_roundtrip("{x: x*x for x in range(10)}")
b817e716516e Update Demo/parser/unparse.py to current Python 3.x syntax. Additions:
Mark Dickinson <dickinsm@gmail.com>
parents: 62612
diff changeset
198
b817e716516e Update Demo/parser/unparse.py to current Python 3.x syntax. Additions:
Mark Dickinson <dickinsm@gmail.com>
parents: 62612
diff changeset
199 def test_class_decorators(self):
b817e716516e Update Demo/parser/unparse.py to current Python 3.x syntax. Additions:
Mark Dickinson <dickinsm@gmail.com>
parents: 62612
diff changeset
200 self.check_roundtrip(class_decorator)
62609
68b670f3614e Merged revisions 82338,82340-82341 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
diff changeset
201
62637
158166ef6f06 Fix typo in unparsing of a class definition.
Mark Dickinson <dickinsm@gmail.com>
parents: 62627
diff changeset
202 def test_class_definition(self):
158166ef6f06 Fix typo in unparsing of a class definition.
Mark Dickinson <dickinsm@gmail.com>
parents: 62627
diff changeset
203 self.check_roundtrip("class A(metaclass=type, *[], **{}): pass")
62627
b72c33f496ac test_unparse.py: Do roundtrip testing for all Python files in Lib and Lib/test.
Mark Dickinson <dickinsm@gmail.com>
parents: 62623
diff changeset
204
62643
25fbf023102d Collapse else: if: ... into elif:
Mark Dickinson <dickinsm@gmail.com>
parents: 62637
diff changeset
205 def test_elifs(self):
25fbf023102d Collapse else: if: ... into elif:
Mark Dickinson <dickinsm@gmail.com>
parents: 62637
diff changeset
206 self.check_roundtrip(elif1)
25fbf023102d Collapse else: if: ... into elif:
Mark Dickinson <dickinsm@gmail.com>
parents: 62637
diff changeset
207 self.check_roundtrip(elif2)
25fbf023102d Collapse else: if: ... into elif:
Mark Dickinson <dickinsm@gmail.com>
parents: 62637
diff changeset
208
62644
e6bb990ac9f6 Output try-except-finally statements where appropriate.
Mark Dickinson <dickinsm@gmail.com>
parents: 62643
diff changeset
209 def test_try_except_finally(self):
e6bb990ac9f6 Output try-except-finally statements where appropriate.
Mark Dickinson <dickinsm@gmail.com>
parents: 62643
diff changeset
210 self.check_roundtrip(try_except_finally)
e6bb990ac9f6 Output try-except-finally statements where appropriate.
Mark Dickinson <dickinsm@gmail.com>
parents: 62643
diff changeset
211
62627
b72c33f496ac test_unparse.py: Do roundtrip testing for all Python files in Lib and Lib/test.
Mark Dickinson <dickinsm@gmail.com>
parents: 62623
diff changeset
212 class DirectoryTestCase(ASTTestCase):
b72c33f496ac test_unparse.py: Do roundtrip testing for all Python files in Lib and Lib/test.
Mark Dickinson <dickinsm@gmail.com>
parents: 62623
diff changeset
213 """Test roundtrip behaviour on all files in Lib and Lib/test."""
b72c33f496ac test_unparse.py: Do roundtrip testing for all Python files in Lib and Lib/test.
Mark Dickinson <dickinsm@gmail.com>
parents: 62623
diff changeset
214
b72c33f496ac test_unparse.py: Do roundtrip testing for all Python files in Lib and Lib/test.
Mark Dickinson <dickinsm@gmail.com>
parents: 62623
diff changeset
215 # test directories, relative to the root of the distribution
b72c33f496ac test_unparse.py: Do roundtrip testing for all Python files in Lib and Lib/test.
Mark Dickinson <dickinsm@gmail.com>
parents: 62623
diff changeset
216 test_directories = 'Lib', os.path.join('Lib', 'test')
b72c33f496ac test_unparse.py: Do roundtrip testing for all Python files in Lib and Lib/test.
Mark Dickinson <dickinsm@gmail.com>
parents: 62623
diff changeset
217
62650
30843be2e11a Revert accidental extra changes included in r82391.
Mark Dickinson <dickinsm@gmail.com>
parents: 62649
diff changeset
218 def test_files(self):
62627
b72c33f496ac test_unparse.py: Do roundtrip testing for all Python files in Lib and Lib/test.
Mark Dickinson <dickinsm@gmail.com>
parents: 62623
diff changeset
219 # get names of files to test
b72c33f496ac test_unparse.py: Do roundtrip testing for all Python files in Lib and Lib/test.
Mark Dickinson <dickinsm@gmail.com>
parents: 62623
diff changeset
220 dist_dir = os.path.join(os.path.dirname(__file__), os.pardir, os.pardir)
b72c33f496ac test_unparse.py: Do roundtrip testing for all Python files in Lib and Lib/test.
Mark Dickinson <dickinsm@gmail.com>
parents: 62623
diff changeset
221
b72c33f496ac test_unparse.py: Do roundtrip testing for all Python files in Lib and Lib/test.
Mark Dickinson <dickinsm@gmail.com>
parents: 62623
diff changeset
222 names = []
b72c33f496ac test_unparse.py: Do roundtrip testing for all Python files in Lib and Lib/test.
Mark Dickinson <dickinsm@gmail.com>
parents: 62623
diff changeset
223 for d in self.test_directories:
b72c33f496ac test_unparse.py: Do roundtrip testing for all Python files in Lib and Lib/test.
Mark Dickinson <dickinsm@gmail.com>
parents: 62623
diff changeset
224 test_dir = os.path.join(dist_dir, d)
b72c33f496ac test_unparse.py: Do roundtrip testing for all Python files in Lib and Lib/test.
Mark Dickinson <dickinsm@gmail.com>
parents: 62623
diff changeset
225 for n in os.listdir(test_dir):
b72c33f496ac test_unparse.py: Do roundtrip testing for all Python files in Lib and Lib/test.
Mark Dickinson <dickinsm@gmail.com>
parents: 62623
diff changeset
226 if n.endswith('.py') and not n.startswith('bad'):
b72c33f496ac test_unparse.py: Do roundtrip testing for all Python files in Lib and Lib/test.
Mark Dickinson <dickinsm@gmail.com>
parents: 62623
diff changeset
227 names.append(os.path.join(test_dir, n))
b72c33f496ac test_unparse.py: Do roundtrip testing for all Python files in Lib and Lib/test.
Mark Dickinson <dickinsm@gmail.com>
parents: 62623
diff changeset
228
b72c33f496ac test_unparse.py: Do roundtrip testing for all Python files in Lib and Lib/test.
Mark Dickinson <dickinsm@gmail.com>
parents: 62623
diff changeset
229 for filename in names:
b72c33f496ac test_unparse.py: Do roundtrip testing for all Python files in Lib and Lib/test.
Mark Dickinson <dickinsm@gmail.com>
parents: 62623
diff changeset
230 if test.support.verbose:
b72c33f496ac test_unparse.py: Do roundtrip testing for all Python files in Lib and Lib/test.
Mark Dickinson <dickinsm@gmail.com>
parents: 62623
diff changeset
231 print('Testing %s' % filename)
b72c33f496ac test_unparse.py: Do roundtrip testing for all Python files in Lib and Lib/test.
Mark Dickinson <dickinsm@gmail.com>
parents: 62623
diff changeset
232 source = read_pyfile(filename)
b72c33f496ac test_unparse.py: Do roundtrip testing for all Python files in Lib and Lib/test.
Mark Dickinson <dickinsm@gmail.com>
parents: 62623
diff changeset
233 self.check_roundtrip(source)
b72c33f496ac test_unparse.py: Do roundtrip testing for all Python files in Lib and Lib/test.
Mark Dickinson <dickinsm@gmail.com>
parents: 62623
diff changeset
234
b72c33f496ac test_unparse.py: Do roundtrip testing for all Python files in Lib and Lib/test.
Mark Dickinson <dickinsm@gmail.com>
parents: 62623
diff changeset
235
62609
68b670f3614e Merged revisions 82338,82340-82341 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
diff changeset
236 def test_main():
62627
b72c33f496ac test_unparse.py: Do roundtrip testing for all Python files in Lib and Lib/test.
Mark Dickinson <dickinsm@gmail.com>
parents: 62623
diff changeset
237 test.support.run_unittest(UnparseTestCase, DirectoryTestCase)
62609
68b670f3614e Merged revisions 82338,82340-82341 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
diff changeset
238
68b670f3614e Merged revisions 82338,82340-82341 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
diff changeset
239 if __name__ == '__main__':
68b670f3614e Merged revisions 82338,82340-82341 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
diff changeset
240 test_main()