annotate Demo/parser/test_unparse.py @ 80661:94de77bd0b4b 2.7

Issue #16194: document imp.load_dynamic problems when read several extension modules from the same binary object file.
author Andrew Svetlov <andrew.svetlov@gmail.com>
date Thu, 29 Nov 2012 19:51:28 +0200
parents 9dcc93fe7528
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
62605
3cb3ce7dcab8 Fix some shallow bugs in Demo/parser/unparse.py, and add tests:
Mark Dickinson <dickinsm@gmail.com>
parents:
diff changeset
1 import unittest
3cb3ce7dcab8 Fix some shallow bugs in Demo/parser/unparse.py, and add tests:
Mark Dickinson <dickinsm@gmail.com>
parents:
diff changeset
2 from test import test_support
3cb3ce7dcab8 Fix some shallow bugs in Demo/parser/unparse.py, and add tests:
Mark Dickinson <dickinsm@gmail.com>
parents:
diff changeset
3 import cStringIO
62653
9dcc93fe7528 Update Demo/parser directory; backport unparse fixes from py3k.
Mark Dickinson <dickinsm@gmail.com>
parents: 62611
diff changeset
4 import sys
9dcc93fe7528 Update Demo/parser directory; backport unparse fixes from py3k.
Mark Dickinson <dickinsm@gmail.com>
parents: 62611
diff changeset
5 import os
9dcc93fe7528 Update Demo/parser directory; backport unparse fixes from py3k.
Mark Dickinson <dickinsm@gmail.com>
parents: 62611
diff changeset
6 import tokenize
62605
3cb3ce7dcab8 Fix some shallow bugs in Demo/parser/unparse.py, and add tests:
Mark Dickinson <dickinsm@gmail.com>
parents:
diff changeset
7 import ast
3cb3ce7dcab8 Fix some shallow bugs in Demo/parser/unparse.py, and add tests:
Mark Dickinson <dickinsm@gmail.com>
parents:
diff changeset
8 import unparse
3cb3ce7dcab8 Fix some shallow bugs in Demo/parser/unparse.py, and add tests:
Mark Dickinson <dickinsm@gmail.com>
parents:
diff changeset
9
62653
9dcc93fe7528 Update Demo/parser directory; backport unparse fixes from py3k.
Mark Dickinson <dickinsm@gmail.com>
parents: 62611
diff changeset
10 def read_pyfile(filename):
9dcc93fe7528 Update Demo/parser directory; backport unparse fixes from py3k.
Mark Dickinson <dickinsm@gmail.com>
parents: 62611
diff changeset
11 """Read and return the contents of a Python source file (as a
9dcc93fe7528 Update Demo/parser directory; backport unparse fixes from py3k.
Mark Dickinson <dickinsm@gmail.com>
parents: 62611
diff changeset
12 string), taking into account the file encoding."""
9dcc93fe7528 Update Demo/parser directory; backport unparse fixes from py3k.
Mark Dickinson <dickinsm@gmail.com>
parents: 62611
diff changeset
13 with open(filename, "r") as pyfile:
9dcc93fe7528 Update Demo/parser directory; backport unparse fixes from py3k.
Mark Dickinson <dickinsm@gmail.com>
parents: 62611
diff changeset
14 source = pyfile.read()
9dcc93fe7528 Update Demo/parser directory; backport unparse fixes from py3k.
Mark Dickinson <dickinsm@gmail.com>
parents: 62611
diff changeset
15 return source
9dcc93fe7528 Update Demo/parser directory; backport unparse fixes from py3k.
Mark Dickinson <dickinsm@gmail.com>
parents: 62611
diff changeset
16
9dcc93fe7528 Update Demo/parser directory; backport unparse fixes from py3k.
Mark Dickinson <dickinsm@gmail.com>
parents: 62611
diff changeset
17 for_else = """\
62605
3cb3ce7dcab8 Fix some shallow bugs in Demo/parser/unparse.py, and add tests:
Mark Dickinson <dickinsm@gmail.com>
parents:
diff changeset
18 def f():
3cb3ce7dcab8 Fix some shallow bugs in Demo/parser/unparse.py, and add tests:
Mark Dickinson <dickinsm@gmail.com>
parents:
diff changeset
19 for x in range(10):
3cb3ce7dcab8 Fix some shallow bugs in Demo/parser/unparse.py, and add tests:
Mark Dickinson <dickinsm@gmail.com>
parents:
diff changeset
20 break
3cb3ce7dcab8 Fix some shallow bugs in Demo/parser/unparse.py, and add tests:
Mark Dickinson <dickinsm@gmail.com>
parents:
diff changeset
21 else:
3cb3ce7dcab8 Fix some shallow bugs in Demo/parser/unparse.py, and add tests:
Mark Dickinson <dickinsm@gmail.com>
parents:
diff changeset
22 y = 2
3cb3ce7dcab8 Fix some shallow bugs in Demo/parser/unparse.py, and add tests:
Mark Dickinson <dickinsm@gmail.com>
parents:
diff changeset
23 z = 3
3cb3ce7dcab8 Fix some shallow bugs in Demo/parser/unparse.py, and add tests:
Mark Dickinson <dickinsm@gmail.com>
parents:
diff changeset
24 """
3cb3ce7dcab8 Fix some shallow bugs in Demo/parser/unparse.py, and add tests:
Mark Dickinson <dickinsm@gmail.com>
parents:
diff changeset
25
62653
9dcc93fe7528 Update Demo/parser directory; backport unparse fixes from py3k.
Mark Dickinson <dickinsm@gmail.com>
parents: 62611
diff changeset
26 while_else = """\
62605
3cb3ce7dcab8 Fix some shallow bugs in Demo/parser/unparse.py, and add tests:
Mark Dickinson <dickinsm@gmail.com>
parents:
diff changeset
27 def g():
3cb3ce7dcab8 Fix some shallow bugs in Demo/parser/unparse.py, and add tests:
Mark Dickinson <dickinsm@gmail.com>
parents:
diff changeset
28 while True:
3cb3ce7dcab8 Fix some shallow bugs in Demo/parser/unparse.py, and add tests:
Mark Dickinson <dickinsm@gmail.com>
parents:
diff changeset
29 break
3cb3ce7dcab8 Fix some shallow bugs in Demo/parser/unparse.py, and add tests:
Mark Dickinson <dickinsm@gmail.com>
parents:
diff changeset
30 else:
3cb3ce7dcab8 Fix some shallow bugs in Demo/parser/unparse.py, and add tests:
Mark Dickinson <dickinsm@gmail.com>
parents:
diff changeset
31 y = 2
3cb3ce7dcab8 Fix some shallow bugs in Demo/parser/unparse.py, and add tests:
Mark Dickinson <dickinsm@gmail.com>
parents:
diff changeset
32 z = 3
3cb3ce7dcab8 Fix some shallow bugs in Demo/parser/unparse.py, and add tests:
Mark Dickinson <dickinsm@gmail.com>
parents:
diff changeset
33 """
3cb3ce7dcab8 Fix some shallow bugs in Demo/parser/unparse.py, and add tests:
Mark Dickinson <dickinsm@gmail.com>
parents:
diff changeset
34
62653
9dcc93fe7528 Update Demo/parser directory; backport unparse fixes from py3k.
Mark Dickinson <dickinsm@gmail.com>
parents: 62611
diff changeset
35 relative_import = """\
9dcc93fe7528 Update Demo/parser directory; backport unparse fixes from py3k.
Mark Dickinson <dickinsm@gmail.com>
parents: 62611
diff changeset
36 from . import fred
9dcc93fe7528 Update Demo/parser directory; backport unparse fixes from py3k.
Mark Dickinson <dickinsm@gmail.com>
parents: 62611
diff changeset
37 from .. import barney
9dcc93fe7528 Update Demo/parser directory; backport unparse fixes from py3k.
Mark Dickinson <dickinsm@gmail.com>
parents: 62611
diff changeset
38 from .australia import shrimp as prawns
9dcc93fe7528 Update Demo/parser directory; backport unparse fixes from py3k.
Mark Dickinson <dickinsm@gmail.com>
parents: 62611
diff changeset
39 """
9dcc93fe7528 Update Demo/parser directory; backport unparse fixes from py3k.
Mark Dickinson <dickinsm@gmail.com>
parents: 62611
diff changeset
40
9dcc93fe7528 Update Demo/parser directory; backport unparse fixes from py3k.
Mark Dickinson <dickinsm@gmail.com>
parents: 62611
diff changeset
41 class_decorator = """\
9dcc93fe7528 Update Demo/parser directory; backport unparse fixes from py3k.
Mark Dickinson <dickinsm@gmail.com>
parents: 62611
diff changeset
42 @f1(arg)
9dcc93fe7528 Update Demo/parser directory; backport unparse fixes from py3k.
Mark Dickinson <dickinsm@gmail.com>
parents: 62611
diff changeset
43 @f2
9dcc93fe7528 Update Demo/parser directory; backport unparse fixes from py3k.
Mark Dickinson <dickinsm@gmail.com>
parents: 62611
diff changeset
44 class Foo: pass
9dcc93fe7528 Update Demo/parser directory; backport unparse fixes from py3k.
Mark Dickinson <dickinsm@gmail.com>
parents: 62611
diff changeset
45 """
9dcc93fe7528 Update Demo/parser directory; backport unparse fixes from py3k.
Mark Dickinson <dickinsm@gmail.com>
parents: 62611
diff changeset
46
9dcc93fe7528 Update Demo/parser directory; backport unparse fixes from py3k.
Mark Dickinson <dickinsm@gmail.com>
parents: 62611
diff changeset
47 elif1 = """\
9dcc93fe7528 Update Demo/parser directory; backport unparse fixes from py3k.
Mark Dickinson <dickinsm@gmail.com>
parents: 62611
diff changeset
48 if cond1:
9dcc93fe7528 Update Demo/parser directory; backport unparse fixes from py3k.
Mark Dickinson <dickinsm@gmail.com>
parents: 62611
diff changeset
49 suite1
9dcc93fe7528 Update Demo/parser directory; backport unparse fixes from py3k.
Mark Dickinson <dickinsm@gmail.com>
parents: 62611
diff changeset
50 elif cond2:
9dcc93fe7528 Update Demo/parser directory; backport unparse fixes from py3k.
Mark Dickinson <dickinsm@gmail.com>
parents: 62611
diff changeset
51 suite2
9dcc93fe7528 Update Demo/parser directory; backport unparse fixes from py3k.
Mark Dickinson <dickinsm@gmail.com>
parents: 62611
diff changeset
52 else:
9dcc93fe7528 Update Demo/parser directory; backport unparse fixes from py3k.
Mark Dickinson <dickinsm@gmail.com>
parents: 62611
diff changeset
53 suite3
9dcc93fe7528 Update Demo/parser directory; backport unparse fixes from py3k.
Mark Dickinson <dickinsm@gmail.com>
parents: 62611
diff changeset
54 """
9dcc93fe7528 Update Demo/parser directory; backport unparse fixes from py3k.
Mark Dickinson <dickinsm@gmail.com>
parents: 62611
diff changeset
55
9dcc93fe7528 Update Demo/parser directory; backport unparse fixes from py3k.
Mark Dickinson <dickinsm@gmail.com>
parents: 62611
diff changeset
56 elif2 = """\
9dcc93fe7528 Update Demo/parser directory; backport unparse fixes from py3k.
Mark Dickinson <dickinsm@gmail.com>
parents: 62611
diff changeset
57 if cond1:
9dcc93fe7528 Update Demo/parser directory; backport unparse fixes from py3k.
Mark Dickinson <dickinsm@gmail.com>
parents: 62611
diff changeset
58 suite1
9dcc93fe7528 Update Demo/parser directory; backport unparse fixes from py3k.
Mark Dickinson <dickinsm@gmail.com>
parents: 62611
diff changeset
59 elif cond2:
9dcc93fe7528 Update Demo/parser directory; backport unparse fixes from py3k.
Mark Dickinson <dickinsm@gmail.com>
parents: 62611
diff changeset
60 suite2
9dcc93fe7528 Update Demo/parser directory; backport unparse fixes from py3k.
Mark Dickinson <dickinsm@gmail.com>
parents: 62611
diff changeset
61 """
9dcc93fe7528 Update Demo/parser directory; backport unparse fixes from py3k.
Mark Dickinson <dickinsm@gmail.com>
parents: 62611
diff changeset
62
9dcc93fe7528 Update Demo/parser directory; backport unparse fixes from py3k.
Mark Dickinson <dickinsm@gmail.com>
parents: 62611
diff changeset
63 try_except_finally = """\
9dcc93fe7528 Update Demo/parser directory; backport unparse fixes from py3k.
Mark Dickinson <dickinsm@gmail.com>
parents: 62611
diff changeset
64 try:
9dcc93fe7528 Update Demo/parser directory; backport unparse fixes from py3k.
Mark Dickinson <dickinsm@gmail.com>
parents: 62611
diff changeset
65 suite1
9dcc93fe7528 Update Demo/parser directory; backport unparse fixes from py3k.
Mark Dickinson <dickinsm@gmail.com>
parents: 62611
diff changeset
66 except ex1:
9dcc93fe7528 Update Demo/parser directory; backport unparse fixes from py3k.
Mark Dickinson <dickinsm@gmail.com>
parents: 62611
diff changeset
67 suite2
9dcc93fe7528 Update Demo/parser directory; backport unparse fixes from py3k.
Mark Dickinson <dickinsm@gmail.com>
parents: 62611
diff changeset
68 except ex2:
9dcc93fe7528 Update Demo/parser directory; backport unparse fixes from py3k.
Mark Dickinson <dickinsm@gmail.com>
parents: 62611
diff changeset
69 suite3
9dcc93fe7528 Update Demo/parser directory; backport unparse fixes from py3k.
Mark Dickinson <dickinsm@gmail.com>
parents: 62611
diff changeset
70 else:
9dcc93fe7528 Update Demo/parser directory; backport unparse fixes from py3k.
Mark Dickinson <dickinsm@gmail.com>
parents: 62611
diff changeset
71 suite4
9dcc93fe7528 Update Demo/parser directory; backport unparse fixes from py3k.
Mark Dickinson <dickinsm@gmail.com>
parents: 62611
diff changeset
72 finally:
9dcc93fe7528 Update Demo/parser directory; backport unparse fixes from py3k.
Mark Dickinson <dickinsm@gmail.com>
parents: 62611
diff changeset
73 suite5
9dcc93fe7528 Update Demo/parser directory; backport unparse fixes from py3k.
Mark Dickinson <dickinsm@gmail.com>
parents: 62611
diff changeset
74 """
9dcc93fe7528 Update Demo/parser directory; backport unparse fixes from py3k.
Mark Dickinson <dickinsm@gmail.com>
parents: 62611
diff changeset
75
9dcc93fe7528 Update Demo/parser directory; backport unparse fixes from py3k.
Mark Dickinson <dickinsm@gmail.com>
parents: 62611
diff changeset
76 class ASTTestCase(unittest.TestCase):
9dcc93fe7528 Update Demo/parser directory; backport unparse fixes from py3k.
Mark Dickinson <dickinsm@gmail.com>
parents: 62611
diff changeset
77 def assertASTEqual(self, ast1, ast2):
9dcc93fe7528 Update Demo/parser directory; backport unparse fixes from py3k.
Mark Dickinson <dickinsm@gmail.com>
parents: 62611
diff changeset
78 dump1 = ast.dump(ast1)
9dcc93fe7528 Update Demo/parser directory; backport unparse fixes from py3k.
Mark Dickinson <dickinsm@gmail.com>
parents: 62611
diff changeset
79 dump2 = ast.dump(ast2)
9dcc93fe7528 Update Demo/parser directory; backport unparse fixes from py3k.
Mark Dickinson <dickinsm@gmail.com>
parents: 62611
diff changeset
80 self.assertEqual(ast.dump(ast1), ast.dump(ast2))
62605
3cb3ce7dcab8 Fix some shallow bugs in Demo/parser/unparse.py, and add tests:
Mark Dickinson <dickinsm@gmail.com>
parents:
diff changeset
81
3cb3ce7dcab8 Fix some shallow bugs in Demo/parser/unparse.py, and add tests:
Mark Dickinson <dickinsm@gmail.com>
parents:
diff changeset
82 def check_roundtrip(self, code1, filename="internal"):
62653
9dcc93fe7528 Update Demo/parser directory; backport unparse fixes from py3k.
Mark Dickinson <dickinsm@gmail.com>
parents: 62611
diff changeset
83 ast1 = compile(code1, filename, "exec", ast.PyCF_ONLY_AST)
62605
3cb3ce7dcab8 Fix some shallow bugs in Demo/parser/unparse.py, and add tests:
Mark Dickinson <dickinsm@gmail.com>
parents:
diff changeset
84 unparse_buffer = cStringIO.StringIO()
3cb3ce7dcab8 Fix some shallow bugs in Demo/parser/unparse.py, and add tests:
Mark Dickinson <dickinsm@gmail.com>
parents:
diff changeset
85 unparse.Unparser(ast1, unparse_buffer)
3cb3ce7dcab8 Fix some shallow bugs in Demo/parser/unparse.py, and add tests:
Mark Dickinson <dickinsm@gmail.com>
parents:
diff changeset
86 code2 = unparse_buffer.getvalue()
62653
9dcc93fe7528 Update Demo/parser directory; backport unparse fixes from py3k.
Mark Dickinson <dickinsm@gmail.com>
parents: 62611
diff changeset
87 ast2 = compile(code2, filename, "exec", ast.PyCF_ONLY_AST)
9dcc93fe7528 Update Demo/parser directory; backport unparse fixes from py3k.
Mark Dickinson <dickinsm@gmail.com>
parents: 62611
diff changeset
88 self.assertASTEqual(ast1, ast2)
9dcc93fe7528 Update Demo/parser directory; backport unparse fixes from py3k.
Mark Dickinson <dickinsm@gmail.com>
parents: 62611
diff changeset
89
9dcc93fe7528 Update Demo/parser directory; backport unparse fixes from py3k.
Mark Dickinson <dickinsm@gmail.com>
parents: 62611
diff changeset
90 class UnparseTestCase(ASTTestCase):
9dcc93fe7528 Update Demo/parser directory; backport unparse fixes from py3k.
Mark Dickinson <dickinsm@gmail.com>
parents: 62611
diff changeset
91 # Tests for specific bugs found in earlier versions of unparse
62605
3cb3ce7dcab8 Fix some shallow bugs in Demo/parser/unparse.py, and add tests:
Mark Dickinson <dickinsm@gmail.com>
parents:
diff changeset
92
3cb3ce7dcab8 Fix some shallow bugs in Demo/parser/unparse.py, and add tests:
Mark Dickinson <dickinsm@gmail.com>
parents:
diff changeset
93 def test_del_statement(self):
3cb3ce7dcab8 Fix some shallow bugs in Demo/parser/unparse.py, and add tests:
Mark Dickinson <dickinsm@gmail.com>
parents:
diff changeset
94 self.check_roundtrip("del x, y, z")
3cb3ce7dcab8 Fix some shallow bugs in Demo/parser/unparse.py, and add tests:
Mark Dickinson <dickinsm@gmail.com>
parents:
diff changeset
95
3cb3ce7dcab8 Fix some shallow bugs in Demo/parser/unparse.py, and add tests:
Mark Dickinson <dickinsm@gmail.com>
parents:
diff changeset
96 def test_shifts(self):
3cb3ce7dcab8 Fix some shallow bugs in Demo/parser/unparse.py, and add tests:
Mark Dickinson <dickinsm@gmail.com>
parents:
diff changeset
97 self.check_roundtrip("45 << 2")
3cb3ce7dcab8 Fix some shallow bugs in Demo/parser/unparse.py, and add tests:
Mark Dickinson <dickinsm@gmail.com>
parents:
diff changeset
98 self.check_roundtrip("13 >> 7")
3cb3ce7dcab8 Fix some shallow bugs in Demo/parser/unparse.py, and add tests:
Mark Dickinson <dickinsm@gmail.com>
parents:
diff changeset
99
3cb3ce7dcab8 Fix some shallow bugs in Demo/parser/unparse.py, and add tests:
Mark Dickinson <dickinsm@gmail.com>
parents:
diff changeset
100 def test_for_else(self):
62653
9dcc93fe7528 Update Demo/parser directory; backport unparse fixes from py3k.
Mark Dickinson <dickinsm@gmail.com>
parents: 62611
diff changeset
101 self.check_roundtrip(for_else)
62605
3cb3ce7dcab8 Fix some shallow bugs in Demo/parser/unparse.py, and add tests:
Mark Dickinson <dickinsm@gmail.com>
parents:
diff changeset
102
3cb3ce7dcab8 Fix some shallow bugs in Demo/parser/unparse.py, and add tests:
Mark Dickinson <dickinsm@gmail.com>
parents:
diff changeset
103 def test_while_else(self):
62653
9dcc93fe7528 Update Demo/parser directory; backport unparse fixes from py3k.
Mark Dickinson <dickinsm@gmail.com>
parents: 62611
diff changeset
104 self.check_roundtrip(while_else)
62605
3cb3ce7dcab8 Fix some shallow bugs in Demo/parser/unparse.py, and add tests:
Mark Dickinson <dickinsm@gmail.com>
parents:
diff changeset
105
3cb3ce7dcab8 Fix some shallow bugs in Demo/parser/unparse.py, and add tests:
Mark Dickinson <dickinsm@gmail.com>
parents:
diff changeset
106 def test_unary_parens(self):
3cb3ce7dcab8 Fix some shallow bugs in Demo/parser/unparse.py, and add tests:
Mark Dickinson <dickinsm@gmail.com>
parents:
diff changeset
107 self.check_roundtrip("(-1)**7")
62653
9dcc93fe7528 Update Demo/parser directory; backport unparse fixes from py3k.
Mark Dickinson <dickinsm@gmail.com>
parents: 62611
diff changeset
108 self.check_roundtrip("(-1.)**8")
9dcc93fe7528 Update Demo/parser directory; backport unparse fixes from py3k.
Mark Dickinson <dickinsm@gmail.com>
parents: 62611
diff changeset
109 self.check_roundtrip("(-1j)**6")
62605
3cb3ce7dcab8 Fix some shallow bugs in Demo/parser/unparse.py, and add tests:
Mark Dickinson <dickinsm@gmail.com>
parents:
diff changeset
110 self.check_roundtrip("not True or False")
3cb3ce7dcab8 Fix some shallow bugs in Demo/parser/unparse.py, and add tests:
Mark Dickinson <dickinsm@gmail.com>
parents:
diff changeset
111 self.check_roundtrip("True or not False")
3cb3ce7dcab8 Fix some shallow bugs in Demo/parser/unparse.py, and add tests:
Mark Dickinson <dickinsm@gmail.com>
parents:
diff changeset
112
62653
9dcc93fe7528 Update Demo/parser directory; backport unparse fixes from py3k.
Mark Dickinson <dickinsm@gmail.com>
parents: 62611
diff changeset
113 def test_integer_parens(self):
9dcc93fe7528 Update Demo/parser directory; backport unparse fixes from py3k.
Mark Dickinson <dickinsm@gmail.com>
parents: 62611
diff changeset
114 self.check_roundtrip("3 .__abs__()")
9dcc93fe7528 Update Demo/parser directory; backport unparse fixes from py3k.
Mark Dickinson <dickinsm@gmail.com>
parents: 62611
diff changeset
115
9dcc93fe7528 Update Demo/parser directory; backport unparse fixes from py3k.
Mark Dickinson <dickinsm@gmail.com>
parents: 62611
diff changeset
116 def test_huge_float(self):
9dcc93fe7528 Update Demo/parser directory; backport unparse fixes from py3k.
Mark Dickinson <dickinsm@gmail.com>
parents: 62611
diff changeset
117 self.check_roundtrip("1e1000")
9dcc93fe7528 Update Demo/parser directory; backport unparse fixes from py3k.
Mark Dickinson <dickinsm@gmail.com>
parents: 62611
diff changeset
118 self.check_roundtrip("-1e1000")
9dcc93fe7528 Update Demo/parser directory; backport unparse fixes from py3k.
Mark Dickinson <dickinsm@gmail.com>
parents: 62611
diff changeset
119 self.check_roundtrip("1e1000j")
9dcc93fe7528 Update Demo/parser directory; backport unparse fixes from py3k.
Mark Dickinson <dickinsm@gmail.com>
parents: 62611
diff changeset
120 self.check_roundtrip("-1e1000j")
9dcc93fe7528 Update Demo/parser directory; backport unparse fixes from py3k.
Mark Dickinson <dickinsm@gmail.com>
parents: 62611
diff changeset
121
9dcc93fe7528 Update Demo/parser directory; backport unparse fixes from py3k.
Mark Dickinson <dickinsm@gmail.com>
parents: 62611
diff changeset
122 def test_min_int(self):
9dcc93fe7528 Update Demo/parser directory; backport unparse fixes from py3k.
Mark Dickinson <dickinsm@gmail.com>
parents: 62611
diff changeset
123 self.check_roundtrip(str(-sys.maxint-1))
9dcc93fe7528 Update Demo/parser directory; backport unparse fixes from py3k.
Mark Dickinson <dickinsm@gmail.com>
parents: 62611
diff changeset
124 self.check_roundtrip("-(%s)" % (sys.maxint + 1))
9dcc93fe7528 Update Demo/parser directory; backport unparse fixes from py3k.
Mark Dickinson <dickinsm@gmail.com>
parents: 62611
diff changeset
125
9dcc93fe7528 Update Demo/parser directory; backport unparse fixes from py3k.
Mark Dickinson <dickinsm@gmail.com>
parents: 62611
diff changeset
126 def test_imaginary_literals(self):
9dcc93fe7528 Update Demo/parser directory; backport unparse fixes from py3k.
Mark Dickinson <dickinsm@gmail.com>
parents: 62611
diff changeset
127 self.check_roundtrip("7j")
9dcc93fe7528 Update Demo/parser directory; backport unparse fixes from py3k.
Mark Dickinson <dickinsm@gmail.com>
parents: 62611
diff changeset
128 self.check_roundtrip("-7j")
9dcc93fe7528 Update Demo/parser directory; backport unparse fixes from py3k.
Mark Dickinson <dickinsm@gmail.com>
parents: 62611
diff changeset
129 self.check_roundtrip("-(7j)")
9dcc93fe7528 Update Demo/parser directory; backport unparse fixes from py3k.
Mark Dickinson <dickinsm@gmail.com>
parents: 62611
diff changeset
130 self.check_roundtrip("0j")
9dcc93fe7528 Update Demo/parser directory; backport unparse fixes from py3k.
Mark Dickinson <dickinsm@gmail.com>
parents: 62611
diff changeset
131 self.check_roundtrip("-0j")
9dcc93fe7528 Update Demo/parser directory; backport unparse fixes from py3k.
Mark Dickinson <dickinsm@gmail.com>
parents: 62611
diff changeset
132 self.check_roundtrip("-(0j)")
9dcc93fe7528 Update Demo/parser directory; backport unparse fixes from py3k.
Mark Dickinson <dickinsm@gmail.com>
parents: 62611
diff changeset
133
9dcc93fe7528 Update Demo/parser directory; backport unparse fixes from py3k.
Mark Dickinson <dickinsm@gmail.com>
parents: 62611
diff changeset
134 def test_negative_zero(self):
9dcc93fe7528 Update Demo/parser directory; backport unparse fixes from py3k.
Mark Dickinson <dickinsm@gmail.com>
parents: 62611
diff changeset
135 self.check_roundtrip("-0")
9dcc93fe7528 Update Demo/parser directory; backport unparse fixes from py3k.
Mark Dickinson <dickinsm@gmail.com>
parents: 62611
diff changeset
136 self.check_roundtrip("-(0)")
9dcc93fe7528 Update Demo/parser directory; backport unparse fixes from py3k.
Mark Dickinson <dickinsm@gmail.com>
parents: 62611
diff changeset
137 self.check_roundtrip("-0b0")
9dcc93fe7528 Update Demo/parser directory; backport unparse fixes from py3k.
Mark Dickinson <dickinsm@gmail.com>
parents: 62611
diff changeset
138 self.check_roundtrip("-(0b0)")
9dcc93fe7528 Update Demo/parser directory; backport unparse fixes from py3k.
Mark Dickinson <dickinsm@gmail.com>
parents: 62611
diff changeset
139 self.check_roundtrip("-0o0")
9dcc93fe7528 Update Demo/parser directory; backport unparse fixes from py3k.
Mark Dickinson <dickinsm@gmail.com>
parents: 62611
diff changeset
140 self.check_roundtrip("-(0o0)")
9dcc93fe7528 Update Demo/parser directory; backport unparse fixes from py3k.
Mark Dickinson <dickinsm@gmail.com>
parents: 62611
diff changeset
141 self.check_roundtrip("-0x0")
9dcc93fe7528 Update Demo/parser directory; backport unparse fixes from py3k.
Mark Dickinson <dickinsm@gmail.com>
parents: 62611
diff changeset
142 self.check_roundtrip("-(0x0)")
9dcc93fe7528 Update Demo/parser directory; backport unparse fixes from py3k.
Mark Dickinson <dickinsm@gmail.com>
parents: 62611
diff changeset
143
9dcc93fe7528 Update Demo/parser directory; backport unparse fixes from py3k.
Mark Dickinson <dickinsm@gmail.com>
parents: 62611
diff changeset
144 def test_lambda_parentheses(self):
9dcc93fe7528 Update Demo/parser directory; backport unparse fixes from py3k.
Mark Dickinson <dickinsm@gmail.com>
parents: 62611
diff changeset
145 self.check_roundtrip("(lambda: int)()")
9dcc93fe7528 Update Demo/parser directory; backport unparse fixes from py3k.
Mark Dickinson <dickinsm@gmail.com>
parents: 62611
diff changeset
146
62611
9ca9524d3e57 unparse.py: fix mispaced parentheses in chained comparisons
Mark Dickinson <dickinsm@gmail.com>
parents: 62606
diff changeset
147 def test_chained_comparisons(self):
9ca9524d3e57 unparse.py: fix mispaced parentheses in chained comparisons
Mark Dickinson <dickinsm@gmail.com>
parents: 62606
diff changeset
148 self.check_roundtrip("1 < 4 <= 5")
9ca9524d3e57 unparse.py: fix mispaced parentheses in chained comparisons
Mark Dickinson <dickinsm@gmail.com>
parents: 62606
diff changeset
149 self.check_roundtrip("a is b is c is not d")
9ca9524d3e57 unparse.py: fix mispaced parentheses in chained comparisons
Mark Dickinson <dickinsm@gmail.com>
parents: 62606
diff changeset
150
62653
9dcc93fe7528 Update Demo/parser directory; backport unparse fixes from py3k.
Mark Dickinson <dickinsm@gmail.com>
parents: 62611
diff changeset
151 def test_function_arguments(self):
9dcc93fe7528 Update Demo/parser directory; backport unparse fixes from py3k.
Mark Dickinson <dickinsm@gmail.com>
parents: 62611
diff changeset
152 self.check_roundtrip("def f(): pass")
9dcc93fe7528 Update Demo/parser directory; backport unparse fixes from py3k.
Mark Dickinson <dickinsm@gmail.com>
parents: 62611
diff changeset
153 self.check_roundtrip("def f(a): pass")
9dcc93fe7528 Update Demo/parser directory; backport unparse fixes from py3k.
Mark Dickinson <dickinsm@gmail.com>
parents: 62611
diff changeset
154 self.check_roundtrip("def f(b = 2): pass")
9dcc93fe7528 Update Demo/parser directory; backport unparse fixes from py3k.
Mark Dickinson <dickinsm@gmail.com>
parents: 62611
diff changeset
155 self.check_roundtrip("def f(a, b): pass")
9dcc93fe7528 Update Demo/parser directory; backport unparse fixes from py3k.
Mark Dickinson <dickinsm@gmail.com>
parents: 62611
diff changeset
156 self.check_roundtrip("def f(a, b = 2): pass")
9dcc93fe7528 Update Demo/parser directory; backport unparse fixes from py3k.
Mark Dickinson <dickinsm@gmail.com>
parents: 62611
diff changeset
157 self.check_roundtrip("def f(a = 5, b = 2): pass")
9dcc93fe7528 Update Demo/parser directory; backport unparse fixes from py3k.
Mark Dickinson <dickinsm@gmail.com>
parents: 62611
diff changeset
158 self.check_roundtrip("def f(*args, **kwargs): pass")
9dcc93fe7528 Update Demo/parser directory; backport unparse fixes from py3k.
Mark Dickinson <dickinsm@gmail.com>
parents: 62611
diff changeset
159
9dcc93fe7528 Update Demo/parser directory; backport unparse fixes from py3k.
Mark Dickinson <dickinsm@gmail.com>
parents: 62611
diff changeset
160 def test_relative_import(self):
9dcc93fe7528 Update Demo/parser directory; backport unparse fixes from py3k.
Mark Dickinson <dickinsm@gmail.com>
parents: 62611
diff changeset
161 self.check_roundtrip(relative_import)
9dcc93fe7528 Update Demo/parser directory; backport unparse fixes from py3k.
Mark Dickinson <dickinsm@gmail.com>
parents: 62611
diff changeset
162
9dcc93fe7528 Update Demo/parser directory; backport unparse fixes from py3k.
Mark Dickinson <dickinsm@gmail.com>
parents: 62611
diff changeset
163 def test_bytes(self):
9dcc93fe7528 Update Demo/parser directory; backport unparse fixes from py3k.
Mark Dickinson <dickinsm@gmail.com>
parents: 62611
diff changeset
164 self.check_roundtrip("b'123'")
9dcc93fe7528 Update Demo/parser directory; backport unparse fixes from py3k.
Mark Dickinson <dickinsm@gmail.com>
parents: 62611
diff changeset
165
9dcc93fe7528 Update Demo/parser directory; backport unparse fixes from py3k.
Mark Dickinson <dickinsm@gmail.com>
parents: 62611
diff changeset
166 def test_set_literal(self):
9dcc93fe7528 Update Demo/parser directory; backport unparse fixes from py3k.
Mark Dickinson <dickinsm@gmail.com>
parents: 62611
diff changeset
167 self.check_roundtrip("{'a', 'b', 'c'}")
9dcc93fe7528 Update Demo/parser directory; backport unparse fixes from py3k.
Mark Dickinson <dickinsm@gmail.com>
parents: 62611
diff changeset
168
9dcc93fe7528 Update Demo/parser directory; backport unparse fixes from py3k.
Mark Dickinson <dickinsm@gmail.com>
parents: 62611
diff changeset
169 def test_set_comprehension(self):
9dcc93fe7528 Update Demo/parser directory; backport unparse fixes from py3k.
Mark Dickinson <dickinsm@gmail.com>
parents: 62611
diff changeset
170 self.check_roundtrip("{x for x in range(5)}")
9dcc93fe7528 Update Demo/parser directory; backport unparse fixes from py3k.
Mark Dickinson <dickinsm@gmail.com>
parents: 62611
diff changeset
171
9dcc93fe7528 Update Demo/parser directory; backport unparse fixes from py3k.
Mark Dickinson <dickinsm@gmail.com>
parents: 62611
diff changeset
172 def test_dict_comprehension(self):
9dcc93fe7528 Update Demo/parser directory; backport unparse fixes from py3k.
Mark Dickinson <dickinsm@gmail.com>
parents: 62611
diff changeset
173 self.check_roundtrip("{x: x*x for x in range(10)}")
9dcc93fe7528 Update Demo/parser directory; backport unparse fixes from py3k.
Mark Dickinson <dickinsm@gmail.com>
parents: 62611
diff changeset
174
9dcc93fe7528 Update Demo/parser directory; backport unparse fixes from py3k.
Mark Dickinson <dickinsm@gmail.com>
parents: 62611
diff changeset
175 def test_class_decorators(self):
9dcc93fe7528 Update Demo/parser directory; backport unparse fixes from py3k.
Mark Dickinson <dickinsm@gmail.com>
parents: 62611
diff changeset
176 self.check_roundtrip(class_decorator)
9dcc93fe7528 Update Demo/parser directory; backport unparse fixes from py3k.
Mark Dickinson <dickinsm@gmail.com>
parents: 62611
diff changeset
177
9dcc93fe7528 Update Demo/parser directory; backport unparse fixes from py3k.
Mark Dickinson <dickinsm@gmail.com>
parents: 62611
diff changeset
178 def test_elifs(self):
9dcc93fe7528 Update Demo/parser directory; backport unparse fixes from py3k.
Mark Dickinson <dickinsm@gmail.com>
parents: 62611
diff changeset
179 self.check_roundtrip(elif1)
9dcc93fe7528 Update Demo/parser directory; backport unparse fixes from py3k.
Mark Dickinson <dickinsm@gmail.com>
parents: 62611
diff changeset
180 self.check_roundtrip(elif2)
9dcc93fe7528 Update Demo/parser directory; backport unparse fixes from py3k.
Mark Dickinson <dickinsm@gmail.com>
parents: 62611
diff changeset
181
9dcc93fe7528 Update Demo/parser directory; backport unparse fixes from py3k.
Mark Dickinson <dickinsm@gmail.com>
parents: 62611
diff changeset
182 def test_try_except_finally(self):
9dcc93fe7528 Update Demo/parser directory; backport unparse fixes from py3k.
Mark Dickinson <dickinsm@gmail.com>
parents: 62611
diff changeset
183 self.check_roundtrip(try_except_finally)
9dcc93fe7528 Update Demo/parser directory; backport unparse fixes from py3k.
Mark Dickinson <dickinsm@gmail.com>
parents: 62611
diff changeset
184
9dcc93fe7528 Update Demo/parser directory; backport unparse fixes from py3k.
Mark Dickinson <dickinsm@gmail.com>
parents: 62611
diff changeset
185 class DirectoryTestCase(ASTTestCase):
9dcc93fe7528 Update Demo/parser directory; backport unparse fixes from py3k.
Mark Dickinson <dickinsm@gmail.com>
parents: 62611
diff changeset
186 """Test roundtrip behaviour on all files in Lib and Lib/test."""
9dcc93fe7528 Update Demo/parser directory; backport unparse fixes from py3k.
Mark Dickinson <dickinsm@gmail.com>
parents: 62611
diff changeset
187
9dcc93fe7528 Update Demo/parser directory; backport unparse fixes from py3k.
Mark Dickinson <dickinsm@gmail.com>
parents: 62611
diff changeset
188 # test directories, relative to the root of the distribution
9dcc93fe7528 Update Demo/parser directory; backport unparse fixes from py3k.
Mark Dickinson <dickinsm@gmail.com>
parents: 62611
diff changeset
189 test_directories = 'Lib', os.path.join('Lib', 'test')
9dcc93fe7528 Update Demo/parser directory; backport unparse fixes from py3k.
Mark Dickinson <dickinsm@gmail.com>
parents: 62611
diff changeset
190
9dcc93fe7528 Update Demo/parser directory; backport unparse fixes from py3k.
Mark Dickinson <dickinsm@gmail.com>
parents: 62611
diff changeset
191 def test_files(self):
9dcc93fe7528 Update Demo/parser directory; backport unparse fixes from py3k.
Mark Dickinson <dickinsm@gmail.com>
parents: 62611
diff changeset
192 # get names of files to test
9dcc93fe7528 Update Demo/parser directory; backport unparse fixes from py3k.
Mark Dickinson <dickinsm@gmail.com>
parents: 62611
diff changeset
193 dist_dir = os.path.join(os.path.dirname(__file__), os.pardir, os.pardir)
9dcc93fe7528 Update Demo/parser directory; backport unparse fixes from py3k.
Mark Dickinson <dickinsm@gmail.com>
parents: 62611
diff changeset
194
9dcc93fe7528 Update Demo/parser directory; backport unparse fixes from py3k.
Mark Dickinson <dickinsm@gmail.com>
parents: 62611
diff changeset
195 names = []
9dcc93fe7528 Update Demo/parser directory; backport unparse fixes from py3k.
Mark Dickinson <dickinsm@gmail.com>
parents: 62611
diff changeset
196 for d in self.test_directories:
9dcc93fe7528 Update Demo/parser directory; backport unparse fixes from py3k.
Mark Dickinson <dickinsm@gmail.com>
parents: 62611
diff changeset
197 test_dir = os.path.join(dist_dir, d)
9dcc93fe7528 Update Demo/parser directory; backport unparse fixes from py3k.
Mark Dickinson <dickinsm@gmail.com>
parents: 62611
diff changeset
198 for n in os.listdir(test_dir):
9dcc93fe7528 Update Demo/parser directory; backport unparse fixes from py3k.
Mark Dickinson <dickinsm@gmail.com>
parents: 62611
diff changeset
199 if n.endswith('.py') and not n.startswith('bad'):
9dcc93fe7528 Update Demo/parser directory; backport unparse fixes from py3k.
Mark Dickinson <dickinsm@gmail.com>
parents: 62611
diff changeset
200 names.append(os.path.join(test_dir, n))
9dcc93fe7528 Update Demo/parser directory; backport unparse fixes from py3k.
Mark Dickinson <dickinsm@gmail.com>
parents: 62611
diff changeset
201
9dcc93fe7528 Update Demo/parser directory; backport unparse fixes from py3k.
Mark Dickinson <dickinsm@gmail.com>
parents: 62611
diff changeset
202 for filename in names:
9dcc93fe7528 Update Demo/parser directory; backport unparse fixes from py3k.
Mark Dickinson <dickinsm@gmail.com>
parents: 62611
diff changeset
203 if test_support.verbose:
9dcc93fe7528 Update Demo/parser directory; backport unparse fixes from py3k.
Mark Dickinson <dickinsm@gmail.com>
parents: 62611
diff changeset
204 print('Testing %s' % filename)
9dcc93fe7528 Update Demo/parser directory; backport unparse fixes from py3k.
Mark Dickinson <dickinsm@gmail.com>
parents: 62611
diff changeset
205 source = read_pyfile(filename)
9dcc93fe7528 Update Demo/parser directory; backport unparse fixes from py3k.
Mark Dickinson <dickinsm@gmail.com>
parents: 62611
diff changeset
206 self.check_roundtrip(source)
9dcc93fe7528 Update Demo/parser directory; backport unparse fixes from py3k.
Mark Dickinson <dickinsm@gmail.com>
parents: 62611
diff changeset
207
62605
3cb3ce7dcab8 Fix some shallow bugs in Demo/parser/unparse.py, and add tests:
Mark Dickinson <dickinsm@gmail.com>
parents:
diff changeset
208
3cb3ce7dcab8 Fix some shallow bugs in Demo/parser/unparse.py, and add tests:
Mark Dickinson <dickinsm@gmail.com>
parents:
diff changeset
209 def test_main():
62653
9dcc93fe7528 Update Demo/parser directory; backport unparse fixes from py3k.
Mark Dickinson <dickinsm@gmail.com>
parents: 62611
diff changeset
210 test_support.run_unittest(UnparseTestCase, DirectoryTestCase)
62605
3cb3ce7dcab8 Fix some shallow bugs in Demo/parser/unparse.py, and add tests:
Mark Dickinson <dickinsm@gmail.com>
parents:
diff changeset
211
3cb3ce7dcab8 Fix some shallow bugs in Demo/parser/unparse.py, and add tests:
Mark Dickinson <dickinsm@gmail.com>
parents:
diff changeset
212 if __name__ == '__main__':
3cb3ce7dcab8 Fix some shallow bugs in Demo/parser/unparse.py, and add tests:
Mark Dickinson <dickinsm@gmail.com>
parents:
diff changeset
213 test_main()