Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit aed0d8d

Browse files
committed
add test cases for Greg Ewing's extended call syntax patch
1 parent 7690151 commit aed0d8d

4 files changed

Lines changed: 174 additions & 2 deletions

File tree

Lib/test/output/test_extcall

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
test_extcall
2+
() {}
3+
(1,) {}
4+
(1, 2) {}
5+
(1, 2, 3) {}
6+
(1, 2, 3, 4, 5) {}
7+
(1, 2, 3) {'b': 5, 'a': 4}
8+
(1, 2, 3, 4, 5) {'b': 7, 'a': 6}
9+
(1, 2, 3, 6, 7) {'y': 5, 'b': 9, 'x': 4, 'a': 8}
10+
TypeError: not enough arguments; expected 1, got 0
11+
TypeError: not enough arguments; expected 1, got 0
12+
TypeError: not enough arguments; expected 1, got 0
13+
1 () {}
14+
1 (2,) {}
15+
1 (2, 3) {}
16+
1 (2, 3, 4, 5) {}
17+
keyword parameter redefined: x
18+
keyword parameter redefined: b

Lib/test/output/test_grammar

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,5 +42,29 @@ additive ops
4242
multiplicative ops
4343
unary ops
4444
selectors
45+
.
46+
.
47+
.
48+
.
49+
.
50+
.
51+
.
52+
.
53+
.
54+
.
55+
.
56+
.
57+
.
58+
.
59+
.
60+
.
61+
.
62+
.
63+
.
64+
.
65+
.
66+
.
67+
.
68+
4569
atoms
4670
classdef

Lib/test/test_extcall.py

Lines changed: 99 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,99 @@
1+
from UserList import UserList
2+
3+
def f(*a, **k):
4+
print a, k
5+
6+
def g(x, *y, **z):
7+
print x, y, z
8+
9+
def h(j=1, a=2, h=3):
10+
print j, a, h
11+
12+
f()
13+
f(1)
14+
f(1, 2)
15+
f(1, 2, 3)
16+
17+
f(1, 2, 3, *(4, 5))
18+
f(1, 2, 3, *[4, 5])
19+
f(1, 2, 3, *UserList([4, 5])
20+
f(1, 2, 3, **{'a':4, 'b':5})
21+
f(1, 2, 3, *(4, 5), **{'a':6, 'b':7})
22+
f(1, 2, 3, x=4, y=5, *(6, 7), **{'a':8, 'b':9})
23+
24+
try:
25+
g()
26+
except TypeError, err:
27+
print "TypeError:", err
28+
else:
29+
print "should raise TypeError: not enough arguments; expected 1, got 0"
30+
31+
try:
32+
g(*())
33+
except TypeError, err:
34+
print "TypeError:", err
35+
else:
36+
print "should raise TypeError: not enough arguments; expected 1, got 0"
37+
38+
try:
39+
g(*(), **{})
40+
except TypeError, err:
41+
print "TypeError:", err
42+
else:
43+
print "should raise TypeError: not enough arguments; expected 1, got 0"
44+
45+
g(1)
46+
g(1, 2)
47+
g(1, 2, 3)
48+
g(1, 2, 3, *(4, 5))
49+
try:
50+
g(1, 2, 3, **{'x':4, 'y':5})
51+
except TypeError, err:
52+
print err
53+
else:
54+
print "should raise TypeError: keyword parameter redefined"
55+
56+
try:
57+
g(1, 2, 3, a=4, b=5, *(6, 7), **{'a':8, 'b':9})
58+
except TypeError, err:
59+
print err
60+
else:
61+
print "should raise TypeError: keyword parameter redefined"
62+
63+
try:
64+
f(**{1:2})
65+
except TypeError, err:
66+
print err
67+
else:
68+
print "should raise TypeError: keywords must be strings"
69+
70+
try:
71+
h(**{'e': 2})
72+
except TypeError, err:
73+
print err
74+
else:
75+
print "should raise TypeError: unexpected keyword argument: e"
76+
77+
try:
78+
h(*h)
79+
except TypeError, err:
80+
print err
81+
else:
82+
print "should raise TypeError: * argument must be a tuple"
83+
84+
try:
85+
h(**h)
86+
except TypeError, err:
87+
print err
88+
else:
89+
print "should raise TypeError: ** argument must be a dictionary"
90+
91+
def f2(*a, **b):
92+
return a, b
93+
94+
d = {}
95+
for i in range(512):
96+
key = 'k%d' % i
97+
d[key] = i
98+
a, b = f2(1, *(2, 3), **d)
99+
print len(a), len(b), b == d

Lib/test/test_grammar.py

Lines changed: 33 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -140,11 +140,17 @@
140140
print 'funcdef'
141141
### 'def' NAME parameters ':' suite
142142
### parameters: '(' [varargslist] ')'
143-
### varargslist: (fpdef ['=' test] ',')* '*' NAME
144-
### | fpdef ['=' test] (',' fpdef ['=' test])* [',']
143+
### varargslist: (fpdef ['=' test] ',')* ('*' NAME [',' ('**'|'*' '*') NAME]
144+
### | ('**'|'*' '*') NAME)
145+
### | fpdef ['=' test] (',' fpdef ['=' test])* [',']
145146
### fpdef: NAME | '(' fplist ')'
146147
### fplist: fpdef (',' fpdef)* [',']
148+
### arglist: (argument ',')* (argument | *' test [',' '**' test] | '**' test)
149+
### argument: [test '='] test # Really [keyword '='] test
147150
def f1(): pass
151+
f1()
152+
f1(*())
153+
f1(*(), **{})
148154
def f2(one_argument): pass
149155
def f3(two, arguments): pass
150156
def f4(two, (compound, (argument, list))): pass
@@ -157,16 +163,27 @@ def v3(a, (b, c), *rest): pass
157163
def d01(a=1): pass
158164
d01()
159165
d01(1)
166+
d01(*(1,))
167+
d01(**{'a':2})
160168
def d11(a, b=1): pass
161169
d11(1)
162170
d11(1, 2)
171+
d11(1, **{'b':2})
163172
def d21(a, b, c=1): pass
164173
d21(1, 2)
165174
d21(1, 2, 3)
175+
d21(*(1, 2, 3))
176+
d21(1, *(2, 3))
177+
d21(1, 2, *(3,))
178+
d21(1, 2, **{'c':3})
166179
def d02(a=1, b=2): pass
167180
d02()
168181
d02(1)
169182
d02(1, 2)
183+
d02(*(1, 2))
184+
d02(1, *(2,))
185+
d02(1, **{'b':2})
186+
d02(**{'a': 1, 'b': 2})
170187
def d12(a, b=1, c=2): pass
171188
d12(1)
172189
d12(1, 2)
@@ -179,6 +196,9 @@ def d01v(a=1, *rest): pass
179196
d01v()
180197
d01v(1)
181198
d01v(1, 2)
199+
d01v(*(1, 2, 3, 4))
200+
d01v(*(1,))
201+
d01v(**{'a':2})
182202
def d11v(a, b=1, *rest): pass
183203
d11v(1)
184204
d11v(1, 2)
@@ -187,21 +207,31 @@ def d21v(a, b, c=1, *rest): pass
187207
d21v(1, 2)
188208
d21v(1, 2, 3)
189209
d21v(1, 2, 3, 4)
210+
d21v(*(1, 2, 3, 4))
211+
d21v(1, 2, **{'c': 3})
190212
def d02v(a=1, b=2, *rest): pass
191213
d02v()
192214
d02v(1)
193215
d02v(1, 2)
194216
d02v(1, 2, 3)
217+
d02v(1, *(2, 3, 4))
218+
d02v(**{'a': 1, 'b': 2})
195219
def d12v(a, b=1, c=2, *rest): pass
196220
d12v(1)
197221
d12v(1, 2)
198222
d12v(1, 2, 3)
199223
d12v(1, 2, 3, 4)
224+
d12v(*(1, 2, 3, 4))
225+
d12v(1, 2, *(3, 4, 5))
226+
d12v(1, *(2,), **{'c': 3})
200227
def d22v(a, b, c=1, d=2, *rest): pass
201228
d22v(1, 2)
202229
d22v(1, 2, 3)
203230
d22v(1, 2, 3, 4)
204231
d22v(1, 2, 3, 4, 5)
232+
d22v(*(1, 2, 3, 4))
233+
d22v(1, 2, *(3, 4, 5))
234+
d22v(1, *(2, 3), **{'d': 4})
205235

206236
### stmt: simple_stmt | compound_stmt
207237
# Tested below
@@ -455,6 +485,7 @@ def __getitem__(self, i):
455485
v3(1,(2,3))
456486
v3(1,(2,3),4)
457487
v3(1,(2,3),4,5,6,7,8,9,0)
488+
print
458489
import sys, time
459490
c = sys.path[0]
460491
x = time.time()

0 commit comments

Comments
 (0)