annotate Lib/test/test_extcall.py @ 54294:dba767bc3155 legacy-trunk

remove mention of old ctypes version
author Benjamin Peterson <benjamin@python.org>
date Sat, 23 May 2009 20:59:09 +0000
parents 222b6d80e769
children a666134e6c0c
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
58751
222b6d80e769 Merged revisions 68805 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 45875
diff changeset
1 # -*- coding: utf-8 -*-
45817
8defa1d5f066 Move test_extcall to doctest.
Brett Cannon <bcannon@gmail.com>
parents: 45468
diff changeset
2 """Doctest for method/function calls.
8defa1d5f066 Move test_extcall to doctest.
Brett Cannon <bcannon@gmail.com>
parents: 45468
diff changeset
3
8defa1d5f066 Move test_extcall to doctest.
Brett Cannon <bcannon@gmail.com>
parents: 45468
diff changeset
4 We're going the use these types for extra testing
8defa1d5f066 Move test_extcall to doctest.
Brett Cannon <bcannon@gmail.com>
parents: 45468
diff changeset
5
8defa1d5f066 Move test_extcall to doctest.
Brett Cannon <bcannon@gmail.com>
parents: 45468
diff changeset
6 >>> from UserList import UserList
8defa1d5f066 Move test_extcall to doctest.
Brett Cannon <bcannon@gmail.com>
parents: 45468
diff changeset
7 >>> from UserDict import UserDict
8defa1d5f066 Move test_extcall to doctest.
Brett Cannon <bcannon@gmail.com>
parents: 45468
diff changeset
8
8defa1d5f066 Move test_extcall to doctest.
Brett Cannon <bcannon@gmail.com>
parents: 45468
diff changeset
9 We're defining four helper functions
12083
7e006342e790 add test cases for Greg Ewing's extended call syntax patch
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff changeset
10
45817
8defa1d5f066 Move test_extcall to doctest.
Brett Cannon <bcannon@gmail.com>
parents: 45468
diff changeset
11 >>> def e(a,b):
8defa1d5f066 Move test_extcall to doctest.
Brett Cannon <bcannon@gmail.com>
parents: 45468
diff changeset
12 ... print a, b
8defa1d5f066 Move test_extcall to doctest.
Brett Cannon <bcannon@gmail.com>
parents: 45468
diff changeset
13
8defa1d5f066 Move test_extcall to doctest.
Brett Cannon <bcannon@gmail.com>
parents: 45468
diff changeset
14 >>> def f(*a, **k):
8defa1d5f066 Move test_extcall to doctest.
Brett Cannon <bcannon@gmail.com>
parents: 45468
diff changeset
15 ... print a, test_support.sortdict(k)
8defa1d5f066 Move test_extcall to doctest.
Brett Cannon <bcannon@gmail.com>
parents: 45468
diff changeset
16
8defa1d5f066 Move test_extcall to doctest.
Brett Cannon <bcannon@gmail.com>
parents: 45468
diff changeset
17 >>> def g(x, *y, **z):
8defa1d5f066 Move test_extcall to doctest.
Brett Cannon <bcannon@gmail.com>
parents: 45468
diff changeset
18 ... print x, y, test_support.sortdict(z)
8defa1d5f066 Move test_extcall to doctest.
Brett Cannon <bcannon@gmail.com>
parents: 45468
diff changeset
19
8defa1d5f066 Move test_extcall to doctest.
Brett Cannon <bcannon@gmail.com>
parents: 45468
diff changeset
20 >>> def h(j=1, a=2, h=3):
8defa1d5f066 Move test_extcall to doctest.
Brett Cannon <bcannon@gmail.com>
parents: 45468
diff changeset
21 ... print j, a, h
8defa1d5f066 Move test_extcall to doctest.
Brett Cannon <bcannon@gmail.com>
parents: 45468
diff changeset
22
8defa1d5f066 Move test_extcall to doctest.
Brett Cannon <bcannon@gmail.com>
parents: 45468
diff changeset
23 Argument list examples
29339
fc286e28556f SF bug #733667: kwargs handled incorrectly
Raymond Hettinger <python@rcn.com>
parents: 28089
diff changeset
24
45817
8defa1d5f066 Move test_extcall to doctest.
Brett Cannon <bcannon@gmail.com>
parents: 45468
diff changeset
25 >>> f()
8defa1d5f066 Move test_extcall to doctest.
Brett Cannon <bcannon@gmail.com>
parents: 45468
diff changeset
26 () {}
8defa1d5f066 Move test_extcall to doctest.
Brett Cannon <bcannon@gmail.com>
parents: 45468
diff changeset
27 >>> f(1)
8defa1d5f066 Move test_extcall to doctest.
Brett Cannon <bcannon@gmail.com>
parents: 45468
diff changeset
28 (1,) {}
8defa1d5f066 Move test_extcall to doctest.
Brett Cannon <bcannon@gmail.com>
parents: 45468
diff changeset
29 >>> f(1, 2)
8defa1d5f066 Move test_extcall to doctest.
Brett Cannon <bcannon@gmail.com>
parents: 45468
diff changeset
30 (1, 2) {}
8defa1d5f066 Move test_extcall to doctest.
Brett Cannon <bcannon@gmail.com>
parents: 45468
diff changeset
31 >>> f(1, 2, 3)
8defa1d5f066 Move test_extcall to doctest.
Brett Cannon <bcannon@gmail.com>
parents: 45468
diff changeset
32 (1, 2, 3) {}
8defa1d5f066 Move test_extcall to doctest.
Brett Cannon <bcannon@gmail.com>
parents: 45468
diff changeset
33 >>> f(1, 2, 3, *(4, 5))
8defa1d5f066 Move test_extcall to doctest.
Brett Cannon <bcannon@gmail.com>
parents: 45468
diff changeset
34 (1, 2, 3, 4, 5) {}
8defa1d5f066 Move test_extcall to doctest.
Brett Cannon <bcannon@gmail.com>
parents: 45468
diff changeset
35 >>> f(1, 2, 3, *[4, 5])
8defa1d5f066 Move test_extcall to doctest.
Brett Cannon <bcannon@gmail.com>
parents: 45468
diff changeset
36 (1, 2, 3, 4, 5) {}
8defa1d5f066 Move test_extcall to doctest.
Brett Cannon <bcannon@gmail.com>
parents: 45468
diff changeset
37 >>> f(1, 2, 3, *UserList([4, 5]))
8defa1d5f066 Move test_extcall to doctest.
Brett Cannon <bcannon@gmail.com>
parents: 45468
diff changeset
38 (1, 2, 3, 4, 5) {}
8defa1d5f066 Move test_extcall to doctest.
Brett Cannon <bcannon@gmail.com>
parents: 45468
diff changeset
39
8defa1d5f066 Move test_extcall to doctest.
Brett Cannon <bcannon@gmail.com>
parents: 45468
diff changeset
40 Here we add keyword arguments
8defa1d5f066 Move test_extcall to doctest.
Brett Cannon <bcannon@gmail.com>
parents: 45468
diff changeset
41
8defa1d5f066 Move test_extcall to doctest.
Brett Cannon <bcannon@gmail.com>
parents: 45468
diff changeset
42 >>> f(1, 2, 3, **{'a':4, 'b':5})
8defa1d5f066 Move test_extcall to doctest.
Brett Cannon <bcannon@gmail.com>
parents: 45468
diff changeset
43 (1, 2, 3) {'a': 4, 'b': 5}
8defa1d5f066 Move test_extcall to doctest.
Brett Cannon <bcannon@gmail.com>
parents: 45468
diff changeset
44 >>> f(1, 2, 3, *[4, 5], **{'a':6, 'b':7})
8defa1d5f066 Move test_extcall to doctest.
Brett Cannon <bcannon@gmail.com>
parents: 45468
diff changeset
45 (1, 2, 3, 4, 5) {'a': 6, 'b': 7}
8defa1d5f066 Move test_extcall to doctest.
Brett Cannon <bcannon@gmail.com>
parents: 45468
diff changeset
46 >>> f(1, 2, 3, x=4, y=5, *(6, 7), **{'a':8, 'b': 9})
8defa1d5f066 Move test_extcall to doctest.
Brett Cannon <bcannon@gmail.com>
parents: 45468
diff changeset
47 (1, 2, 3, 6, 7) {'a': 8, 'b': 9, 'x': 4, 'y': 5}
12083
7e006342e790 add test cases for Greg Ewing's extended call syntax patch
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff changeset
48
45817
8defa1d5f066 Move test_extcall to doctest.
Brett Cannon <bcannon@gmail.com>
parents: 45468
diff changeset
49 >>> f(1, 2, 3, **UserDict(a=4, b=5))
8defa1d5f066 Move test_extcall to doctest.
Brett Cannon <bcannon@gmail.com>
parents: 45468
diff changeset
50 (1, 2, 3) {'a': 4, 'b': 5}
8defa1d5f066 Move test_extcall to doctest.
Brett Cannon <bcannon@gmail.com>
parents: 45468
diff changeset
51 >>> f(1, 2, 3, *(4, 5), **UserDict(a=6, b=7))
8defa1d5f066 Move test_extcall to doctest.
Brett Cannon <bcannon@gmail.com>
parents: 45468
diff changeset
52 (1, 2, 3, 4, 5) {'a': 6, 'b': 7}
8defa1d5f066 Move test_extcall to doctest.
Brett Cannon <bcannon@gmail.com>
parents: 45468
diff changeset
53 >>> f(1, 2, 3, x=4, y=5, *(6, 7), **UserDict(a=8, b=9))
8defa1d5f066 Move test_extcall to doctest.
Brett Cannon <bcannon@gmail.com>
parents: 45468
diff changeset
54 (1, 2, 3, 6, 7) {'a': 8, 'b': 9, 'x': 4, 'y': 5}
8defa1d5f066 Move test_extcall to doctest.
Brett Cannon <bcannon@gmail.com>
parents: 45468
diff changeset
55
8defa1d5f066 Move test_extcall to doctest.
Brett Cannon <bcannon@gmail.com>
parents: 45468
diff changeset
56 Examples with invalid arguments (TypeErrors). We're also testing the function
8defa1d5f066 Move test_extcall to doctest.
Brett Cannon <bcannon@gmail.com>
parents: 45468
diff changeset
57 names in the exception messages.
8defa1d5f066 Move test_extcall to doctest.
Brett Cannon <bcannon@gmail.com>
parents: 45468
diff changeset
58
8defa1d5f066 Move test_extcall to doctest.
Brett Cannon <bcannon@gmail.com>
parents: 45468
diff changeset
59 Verify clearing of SF bug #733667
12083
7e006342e790 add test cases for Greg Ewing's extended call syntax patch
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff changeset
60
45817
8defa1d5f066 Move test_extcall to doctest.
Brett Cannon <bcannon@gmail.com>
parents: 45468
diff changeset
61 >>> e(c=4)
8defa1d5f066 Move test_extcall to doctest.
Brett Cannon <bcannon@gmail.com>
parents: 45468
diff changeset
62 Traceback (most recent call last):
8defa1d5f066 Move test_extcall to doctest.
Brett Cannon <bcannon@gmail.com>
parents: 45468
diff changeset
63 ...
8defa1d5f066 Move test_extcall to doctest.
Brett Cannon <bcannon@gmail.com>
parents: 45468
diff changeset
64 TypeError: e() got an unexpected keyword argument 'c'
8defa1d5f066 Move test_extcall to doctest.
Brett Cannon <bcannon@gmail.com>
parents: 45468
diff changeset
65
8defa1d5f066 Move test_extcall to doctest.
Brett Cannon <bcannon@gmail.com>
parents: 45468
diff changeset
66 >>> g()
8defa1d5f066 Move test_extcall to doctest.
Brett Cannon <bcannon@gmail.com>
parents: 45468
diff changeset
67 Traceback (most recent call last):
8defa1d5f066 Move test_extcall to doctest.
Brett Cannon <bcannon@gmail.com>
parents: 45468
diff changeset
68 ...
8defa1d5f066 Move test_extcall to doctest.
Brett Cannon <bcannon@gmail.com>
parents: 45468
diff changeset
69 TypeError: g() takes at least 1 argument (0 given)
8defa1d5f066 Move test_extcall to doctest.
Brett Cannon <bcannon@gmail.com>
parents: 45468
diff changeset
70
8defa1d5f066 Move test_extcall to doctest.
Brett Cannon <bcannon@gmail.com>
parents: 45468
diff changeset
71 >>> g(*())
8defa1d5f066 Move test_extcall to doctest.
Brett Cannon <bcannon@gmail.com>
parents: 45468
diff changeset
72 Traceback (most recent call last):
8defa1d5f066 Move test_extcall to doctest.
Brett Cannon <bcannon@gmail.com>
parents: 45468
diff changeset
73 ...
8defa1d5f066 Move test_extcall to doctest.
Brett Cannon <bcannon@gmail.com>
parents: 45468
diff changeset
74 TypeError: g() takes at least 1 argument (0 given)
12083
7e006342e790 add test cases for Greg Ewing's extended call syntax patch
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff changeset
75
45817
8defa1d5f066 Move test_extcall to doctest.
Brett Cannon <bcannon@gmail.com>
parents: 45468
diff changeset
76 >>> g(*(), **{})
8defa1d5f066 Move test_extcall to doctest.
Brett Cannon <bcannon@gmail.com>
parents: 45468
diff changeset
77 Traceback (most recent call last):
8defa1d5f066 Move test_extcall to doctest.
Brett Cannon <bcannon@gmail.com>
parents: 45468
diff changeset
78 ...
8defa1d5f066 Move test_extcall to doctest.
Brett Cannon <bcannon@gmail.com>
parents: 45468
diff changeset
79 TypeError: g() takes at least 1 argument (0 given)
8defa1d5f066 Move test_extcall to doctest.
Brett Cannon <bcannon@gmail.com>
parents: 45468
diff changeset
80
8defa1d5f066 Move test_extcall to doctest.
Brett Cannon <bcannon@gmail.com>
parents: 45468
diff changeset
81 >>> g(1)
8defa1d5f066 Move test_extcall to doctest.
Brett Cannon <bcannon@gmail.com>
parents: 45468
diff changeset
82 1 () {}
8defa1d5f066 Move test_extcall to doctest.
Brett Cannon <bcannon@gmail.com>
parents: 45468
diff changeset
83 >>> g(1, 2)
8defa1d5f066 Move test_extcall to doctest.
Brett Cannon <bcannon@gmail.com>
parents: 45468
diff changeset
84 1 (2,) {}
8defa1d5f066 Move test_extcall to doctest.
Brett Cannon <bcannon@gmail.com>
parents: 45468
diff changeset
85 >>> g(1, 2, 3)
8defa1d5f066 Move test_extcall to doctest.
Brett Cannon <bcannon@gmail.com>
parents: 45468
diff changeset
86 1 (2, 3) {}
8defa1d5f066 Move test_extcall to doctest.
Brett Cannon <bcannon@gmail.com>
parents: 45468
diff changeset
87 >>> g(1, 2, 3, *(4, 5))
8defa1d5f066 Move test_extcall to doctest.
Brett Cannon <bcannon@gmail.com>
parents: 45468
diff changeset
88 1 (2, 3, 4, 5) {}
8defa1d5f066 Move test_extcall to doctest.
Brett Cannon <bcannon@gmail.com>
parents: 45468
diff changeset
89
8defa1d5f066 Move test_extcall to doctest.
Brett Cannon <bcannon@gmail.com>
parents: 45468
diff changeset
90 >>> class Nothing: pass
8defa1d5f066 Move test_extcall to doctest.
Brett Cannon <bcannon@gmail.com>
parents: 45468
diff changeset
91 ...
8defa1d5f066 Move test_extcall to doctest.
Brett Cannon <bcannon@gmail.com>
parents: 45468
diff changeset
92 >>> g(*Nothing())
8defa1d5f066 Move test_extcall to doctest.
Brett Cannon <bcannon@gmail.com>
parents: 45468
diff changeset
93 Traceback (most recent call last):
8defa1d5f066 Move test_extcall to doctest.
Brett Cannon <bcannon@gmail.com>
parents: 45468
diff changeset
94 ...
8defa1d5f066 Move test_extcall to doctest.
Brett Cannon <bcannon@gmail.com>
parents: 45468
diff changeset
95 TypeError: g() argument after * must be a sequence, not instance
8defa1d5f066 Move test_extcall to doctest.
Brett Cannon <bcannon@gmail.com>
parents: 45468
diff changeset
96
8defa1d5f066 Move test_extcall to doctest.
Brett Cannon <bcannon@gmail.com>
parents: 45468
diff changeset
97 >>> class Nothing:
8defa1d5f066 Move test_extcall to doctest.
Brett Cannon <bcannon@gmail.com>
parents: 45468
diff changeset
98 ... def __len__(self): return 5
8defa1d5f066 Move test_extcall to doctest.
Brett Cannon <bcannon@gmail.com>
parents: 45468
diff changeset
99 ...
8defa1d5f066 Move test_extcall to doctest.
Brett Cannon <bcannon@gmail.com>
parents: 45468
diff changeset
100
8defa1d5f066 Move test_extcall to doctest.
Brett Cannon <bcannon@gmail.com>
parents: 45468
diff changeset
101 >>> g(*Nothing())
8defa1d5f066 Move test_extcall to doctest.
Brett Cannon <bcannon@gmail.com>
parents: 45468
diff changeset
102 Traceback (most recent call last):
8defa1d5f066 Move test_extcall to doctest.
Brett Cannon <bcannon@gmail.com>
parents: 45468
diff changeset
103 ...
8defa1d5f066 Move test_extcall to doctest.
Brett Cannon <bcannon@gmail.com>
parents: 45468
diff changeset
104 TypeError: g() argument after * must be a sequence, not instance
8defa1d5f066 Move test_extcall to doctest.
Brett Cannon <bcannon@gmail.com>
parents: 45468
diff changeset
105
8defa1d5f066 Move test_extcall to doctest.
Brett Cannon <bcannon@gmail.com>
parents: 45468
diff changeset
106 >>> class Nothing():
8defa1d5f066 Move test_extcall to doctest.
Brett Cannon <bcannon@gmail.com>
parents: 45468
diff changeset
107 ... def __len__(self): return 5
8defa1d5f066 Move test_extcall to doctest.
Brett Cannon <bcannon@gmail.com>
parents: 45468
diff changeset
108 ... def __getitem__(self, i):
8defa1d5f066 Move test_extcall to doctest.
Brett Cannon <bcannon@gmail.com>
parents: 45468
diff changeset
109 ... if i<3: return i
8defa1d5f066 Move test_extcall to doctest.
Brett Cannon <bcannon@gmail.com>
parents: 45468
diff changeset
110 ... else: raise IndexError(i)
8defa1d5f066 Move test_extcall to doctest.
Brett Cannon <bcannon@gmail.com>
parents: 45468
diff changeset
111 ...
12083
7e006342e790 add test cases for Greg Ewing's extended call syntax patch
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff changeset
112
45817
8defa1d5f066 Move test_extcall to doctest.
Brett Cannon <bcannon@gmail.com>
parents: 45468
diff changeset
113 >>> g(*Nothing())
8defa1d5f066 Move test_extcall to doctest.
Brett Cannon <bcannon@gmail.com>
parents: 45468
diff changeset
114 0 (1, 2) {}
8defa1d5f066 Move test_extcall to doctest.
Brett Cannon <bcannon@gmail.com>
parents: 45468
diff changeset
115
8defa1d5f066 Move test_extcall to doctest.
Brett Cannon <bcannon@gmail.com>
parents: 45468
diff changeset
116 >>> class Nothing:
8defa1d5f066 Move test_extcall to doctest.
Brett Cannon <bcannon@gmail.com>
parents: 45468
diff changeset
117 ... def __init__(self): self.c = 0
8defa1d5f066 Move test_extcall to doctest.
Brett Cannon <bcannon@gmail.com>
parents: 45468
diff changeset
118 ... def __iter__(self): return self
8defa1d5f066 Move test_extcall to doctest.
Brett Cannon <bcannon@gmail.com>
parents: 45468
diff changeset
119 ... def next(self):
8defa1d5f066 Move test_extcall to doctest.
Brett Cannon <bcannon@gmail.com>
parents: 45468
diff changeset
120 ... if self.c == 4:
8defa1d5f066 Move test_extcall to doctest.
Brett Cannon <bcannon@gmail.com>
parents: 45468
diff changeset
121 ... raise StopIteration
8defa1d5f066 Move test_extcall to doctest.
Brett Cannon <bcannon@gmail.com>
parents: 45468
diff changeset
122 ... c = self.c
8defa1d5f066 Move test_extcall to doctest.
Brett Cannon <bcannon@gmail.com>
parents: 45468
diff changeset
123 ... self.c += 1
8defa1d5f066 Move test_extcall to doctest.
Brett Cannon <bcannon@gmail.com>
parents: 45468
diff changeset
124 ... return c
8defa1d5f066 Move test_extcall to doctest.
Brett Cannon <bcannon@gmail.com>
parents: 45468
diff changeset
125 ...
8defa1d5f066 Move test_extcall to doctest.
Brett Cannon <bcannon@gmail.com>
parents: 45468
diff changeset
126
8defa1d5f066 Move test_extcall to doctest.
Brett Cannon <bcannon@gmail.com>
parents: 45468
diff changeset
127 >>> g(*Nothing())
8defa1d5f066 Move test_extcall to doctest.
Brett Cannon <bcannon@gmail.com>
parents: 45468
diff changeset
128 0 (1, 2, 3) {}
12083
7e006342e790 add test cases for Greg Ewing's extended call syntax patch
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff changeset
129
45817
8defa1d5f066 Move test_extcall to doctest.
Brett Cannon <bcannon@gmail.com>
parents: 45468
diff changeset
130 Make sure that the function doesn't stomp the dictionary
41807
a405732a262d Patch #1686487: you can now pass any mapping after '**' in function calls.
Georg Brandl <georg@python.org>
parents: 31574
diff changeset
131
45817
8defa1d5f066 Move test_extcall to doctest.
Brett Cannon <bcannon@gmail.com>
parents: 45468
diff changeset
132 >>> d = {'a': 1, 'b': 2, 'c': 3}
8defa1d5f066 Move test_extcall to doctest.
Brett Cannon <bcannon@gmail.com>
parents: 45468
diff changeset
133 >>> d2 = d.copy()
8defa1d5f066 Move test_extcall to doctest.
Brett Cannon <bcannon@gmail.com>
parents: 45468
diff changeset
134 >>> g(1, d=4, **d)
8defa1d5f066 Move test_extcall to doctest.
Brett Cannon <bcannon@gmail.com>
parents: 45468
diff changeset
135 1 () {'a': 1, 'b': 2, 'c': 3, 'd': 4}
8defa1d5f066 Move test_extcall to doctest.
Brett Cannon <bcannon@gmail.com>
parents: 45468
diff changeset
136 >>> d == d2
8defa1d5f066 Move test_extcall to doctest.
Brett Cannon <bcannon@gmail.com>
parents: 45468
diff changeset
137 True
8defa1d5f066 Move test_extcall to doctest.
Brett Cannon <bcannon@gmail.com>
parents: 45468
diff changeset
138
8defa1d5f066 Move test_extcall to doctest.
Brett Cannon <bcannon@gmail.com>
parents: 45468
diff changeset
139 What about willful misconduct?
8defa1d5f066 Move test_extcall to doctest.
Brett Cannon <bcannon@gmail.com>
parents: 45468
diff changeset
140
8defa1d5f066 Move test_extcall to doctest.
Brett Cannon <bcannon@gmail.com>
parents: 45468
diff changeset
141 >>> def saboteur(**kw):
8defa1d5f066 Move test_extcall to doctest.
Brett Cannon <bcannon@gmail.com>
parents: 45468
diff changeset
142 ... kw['x'] = 'm'
8defa1d5f066 Move test_extcall to doctest.
Brett Cannon <bcannon@gmail.com>
parents: 45468
diff changeset
143 ... return kw
8defa1d5f066 Move test_extcall to doctest.
Brett Cannon <bcannon@gmail.com>
parents: 45468
diff changeset
144
8defa1d5f066 Move test_extcall to doctest.
Brett Cannon <bcannon@gmail.com>
parents: 45468
diff changeset
145 >>> d = {}
8defa1d5f066 Move test_extcall to doctest.
Brett Cannon <bcannon@gmail.com>
parents: 45468
diff changeset
146 >>> kw = saboteur(a=1, **d)
8defa1d5f066 Move test_extcall to doctest.
Brett Cannon <bcannon@gmail.com>
parents: 45468
diff changeset
147 >>> d
8defa1d5f066 Move test_extcall to doctest.
Brett Cannon <bcannon@gmail.com>
parents: 45468
diff changeset
148 {}
41807
a405732a262d Patch #1686487: you can now pass any mapping after '**' in function calls.
Georg Brandl <georg@python.org>
parents: 31574
diff changeset
149
a405732a262d Patch #1686487: you can now pass any mapping after '**' in function calls.
Georg Brandl <georg@python.org>
parents: 31574
diff changeset
150
45817
8defa1d5f066 Move test_extcall to doctest.
Brett Cannon <bcannon@gmail.com>
parents: 45468
diff changeset
151 >>> g(1, 2, 3, **{'x': 4, 'y': 5})
8defa1d5f066 Move test_extcall to doctest.
Brett Cannon <bcannon@gmail.com>
parents: 45468
diff changeset
152 Traceback (most recent call last):
8defa1d5f066 Move test_extcall to doctest.
Brett Cannon <bcannon@gmail.com>
parents: 45468
diff changeset
153 ...
8defa1d5f066 Move test_extcall to doctest.
Brett Cannon <bcannon@gmail.com>
parents: 45468
diff changeset
154 TypeError: g() got multiple values for keyword argument 'x'
29339
fc286e28556f SF bug #733667: kwargs handled incorrectly
Raymond Hettinger <python@rcn.com>
parents: 28089
diff changeset
155
45817
8defa1d5f066 Move test_extcall to doctest.
Brett Cannon <bcannon@gmail.com>
parents: 45468
diff changeset
156 >>> f(**{1:2})
8defa1d5f066 Move test_extcall to doctest.
Brett Cannon <bcannon@gmail.com>
parents: 45468
diff changeset
157 Traceback (most recent call last):
8defa1d5f066 Move test_extcall to doctest.
Brett Cannon <bcannon@gmail.com>
parents: 45468
diff changeset
158 ...
8defa1d5f066 Move test_extcall to doctest.
Brett Cannon <bcannon@gmail.com>
parents: 45468
diff changeset
159 TypeError: f() keywords must be strings
15305
07f24261c6e6 Make reindent.py happy (convert everything to 4-space indents!).
Fred Drake <fdrake@acm.org>
parents: 13610
diff changeset
160
45817
8defa1d5f066 Move test_extcall to doctest.
Brett Cannon <bcannon@gmail.com>
parents: 45468
diff changeset
161 >>> h(**{'e': 2})
8defa1d5f066 Move test_extcall to doctest.
Brett Cannon <bcannon@gmail.com>
parents: 45468
diff changeset
162 Traceback (most recent call last):
8defa1d5f066 Move test_extcall to doctest.
Brett Cannon <bcannon@gmail.com>
parents: 45468
diff changeset
163 ...
8defa1d5f066 Move test_extcall to doctest.
Brett Cannon <bcannon@gmail.com>
parents: 45468
diff changeset
164 TypeError: h() got an unexpected keyword argument 'e'
12133
711340d44777 Two fixes for extended call syntax:
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 12084
diff changeset
165
45817
8defa1d5f066 Move test_extcall to doctest.
Brett Cannon <bcannon@gmail.com>
parents: 45468
diff changeset
166 >>> h(*h)
8defa1d5f066 Move test_extcall to doctest.
Brett Cannon <bcannon@gmail.com>
parents: 45468
diff changeset
167 Traceback (most recent call last):
8defa1d5f066 Move test_extcall to doctest.
Brett Cannon <bcannon@gmail.com>
parents: 45468
diff changeset
168 ...
8defa1d5f066 Move test_extcall to doctest.
Brett Cannon <bcannon@gmail.com>
parents: 45468
diff changeset
169 TypeError: h() argument after * must be a sequence, not function
15305
07f24261c6e6 Make reindent.py happy (convert everything to 4-space indents!).
Fred Drake <fdrake@acm.org>
parents: 13610
diff changeset
170
45817
8defa1d5f066 Move test_extcall to doctest.
Brett Cannon <bcannon@gmail.com>
parents: 45468
diff changeset
171 >>> dir(*h)
8defa1d5f066 Move test_extcall to doctest.
Brett Cannon <bcannon@gmail.com>
parents: 45468
diff changeset
172 Traceback (most recent call last):
8defa1d5f066 Move test_extcall to doctest.
Brett Cannon <bcannon@gmail.com>
parents: 45468
diff changeset
173 ...
8defa1d5f066 Move test_extcall to doctest.
Brett Cannon <bcannon@gmail.com>
parents: 45468
diff changeset
174 TypeError: dir() argument after * must be a sequence, not function
12133
711340d44777 Two fixes for extended call syntax:
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 12084
diff changeset
175
45817
8defa1d5f066 Move test_extcall to doctest.
Brett Cannon <bcannon@gmail.com>
parents: 45468
diff changeset
176 >>> None(*h)
8defa1d5f066 Move test_extcall to doctest.
Brett Cannon <bcannon@gmail.com>
parents: 45468
diff changeset
177 Traceback (most recent call last):
8defa1d5f066 Move test_extcall to doctest.
Brett Cannon <bcannon@gmail.com>
parents: 45468
diff changeset
178 ...
8defa1d5f066 Move test_extcall to doctest.
Brett Cannon <bcannon@gmail.com>
parents: 45468
diff changeset
179 TypeError: NoneType object argument after * must be a sequence, \
8defa1d5f066 Move test_extcall to doctest.
Brett Cannon <bcannon@gmail.com>
parents: 45468
diff changeset
180 not function
31574
c37c407faf52 adding passing test. testing for g(*Nothing()) where Nothing is a user-defined iterator.
Samuele Pedroni <pedronis@openend.se>
parents: 29339
diff changeset
181
45817
8defa1d5f066 Move test_extcall to doctest.
Brett Cannon <bcannon@gmail.com>
parents: 45468
diff changeset
182 >>> h(**h)
8defa1d5f066 Move test_extcall to doctest.
Brett Cannon <bcannon@gmail.com>
parents: 45468
diff changeset
183 Traceback (most recent call last):
8defa1d5f066 Move test_extcall to doctest.
Brett Cannon <bcannon@gmail.com>
parents: 45468
diff changeset
184 ...
8defa1d5f066 Move test_extcall to doctest.
Brett Cannon <bcannon@gmail.com>
parents: 45468
diff changeset
185 TypeError: h() argument after ** must be a mapping, not function
8defa1d5f066 Move test_extcall to doctest.
Brett Cannon <bcannon@gmail.com>
parents: 45468
diff changeset
186
8defa1d5f066 Move test_extcall to doctest.
Brett Cannon <bcannon@gmail.com>
parents: 45468
diff changeset
187 >>> dir(**h)
8defa1d5f066 Move test_extcall to doctest.
Brett Cannon <bcannon@gmail.com>
parents: 45468
diff changeset
188 Traceback (most recent call last):
8defa1d5f066 Move test_extcall to doctest.
Brett Cannon <bcannon@gmail.com>
parents: 45468
diff changeset
189 ...
8defa1d5f066 Move test_extcall to doctest.
Brett Cannon <bcannon@gmail.com>
parents: 45468
diff changeset
190 TypeError: dir() argument after ** must be a mapping, not function
31574
c37c407faf52 adding passing test. testing for g(*Nothing()) where Nothing is a user-defined iterator.
Samuele Pedroni <pedronis@openend.se>
parents: 29339
diff changeset
191
45817
8defa1d5f066 Move test_extcall to doctest.
Brett Cannon <bcannon@gmail.com>
parents: 45468
diff changeset
192 >>> None(**h)
8defa1d5f066 Move test_extcall to doctest.
Brett Cannon <bcannon@gmail.com>
parents: 45468
diff changeset
193 Traceback (most recent call last):
8defa1d5f066 Move test_extcall to doctest.
Brett Cannon <bcannon@gmail.com>
parents: 45468
diff changeset
194 ...
8defa1d5f066 Move test_extcall to doctest.
Brett Cannon <bcannon@gmail.com>
parents: 45468
diff changeset
195 TypeError: NoneType object argument after ** must be a mapping, \
8defa1d5f066 Move test_extcall to doctest.
Brett Cannon <bcannon@gmail.com>
parents: 45468
diff changeset
196 not function
15305
07f24261c6e6 Make reindent.py happy (convert everything to 4-space indents!).
Fred Drake <fdrake@acm.org>
parents: 13610
diff changeset
197
45817
8defa1d5f066 Move test_extcall to doctest.
Brett Cannon <bcannon@gmail.com>
parents: 45468
diff changeset
198 >>> dir(b=1, **{'b': 1})
8defa1d5f066 Move test_extcall to doctest.
Brett Cannon <bcannon@gmail.com>
parents: 45468
diff changeset
199 Traceback (most recent call last):
8defa1d5f066 Move test_extcall to doctest.
Brett Cannon <bcannon@gmail.com>
parents: 45468
diff changeset
200 ...
8defa1d5f066 Move test_extcall to doctest.
Brett Cannon <bcannon@gmail.com>
parents: 45468
diff changeset
201 TypeError: dir() got multiple values for keyword argument 'b'
15305
07f24261c6e6 Make reindent.py happy (convert everything to 4-space indents!).
Fred Drake <fdrake@acm.org>
parents: 13610
diff changeset
202
45817
8defa1d5f066 Move test_extcall to doctest.
Brett Cannon <bcannon@gmail.com>
parents: 45468
diff changeset
203 Another helper function
12083
7e006342e790 add test cases for Greg Ewing's extended call syntax patch
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff changeset
204
45817
8defa1d5f066 Move test_extcall to doctest.
Brett Cannon <bcannon@gmail.com>
parents: 45468
diff changeset
205 >>> def f2(*a, **b):
8defa1d5f066 Move test_extcall to doctest.
Brett Cannon <bcannon@gmail.com>
parents: 45468
diff changeset
206 ... return a, b
12083
7e006342e790 add test cases for Greg Ewing's extended call syntax patch
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff changeset
207
7e006342e790 add test cases for Greg Ewing's extended call syntax patch
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff changeset
208
45817
8defa1d5f066 Move test_extcall to doctest.
Brett Cannon <bcannon@gmail.com>
parents: 45468
diff changeset
209 >>> d = {}
8defa1d5f066 Move test_extcall to doctest.
Brett Cannon <bcannon@gmail.com>
parents: 45468
diff changeset
210 >>> for i in xrange(512):
8defa1d5f066 Move test_extcall to doctest.
Brett Cannon <bcannon@gmail.com>
parents: 45468
diff changeset
211 ... key = 'k%d' % i
8defa1d5f066 Move test_extcall to doctest.
Brett Cannon <bcannon@gmail.com>
parents: 45468
diff changeset
212 ... d[key] = i
8defa1d5f066 Move test_extcall to doctest.
Brett Cannon <bcannon@gmail.com>
parents: 45468
diff changeset
213 >>> a, b = f2(1, *(2,3), **d)
8defa1d5f066 Move test_extcall to doctest.
Brett Cannon <bcannon@gmail.com>
parents: 45468
diff changeset
214 >>> len(a), len(b), b == d
8defa1d5f066 Move test_extcall to doctest.
Brett Cannon <bcannon@gmail.com>
parents: 45468
diff changeset
215 (3, 512, True)
17407
9d76d8552c36 Test cases for examples of ext call error handling.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 16517
diff changeset
216
45817
8defa1d5f066 Move test_extcall to doctest.
Brett Cannon <bcannon@gmail.com>
parents: 45468
diff changeset
217 >>> class Foo:
8defa1d5f066 Move test_extcall to doctest.
Brett Cannon <bcannon@gmail.com>
parents: 45468
diff changeset
218 ... def method(self, arg1, arg2):
8defa1d5f066 Move test_extcall to doctest.
Brett Cannon <bcannon@gmail.com>
parents: 45468
diff changeset
219 ... return arg1+arg2
17407
9d76d8552c36 Test cases for examples of ext call error handling.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 16517
diff changeset
220
45817
8defa1d5f066 Move test_extcall to doctest.
Brett Cannon <bcannon@gmail.com>
parents: 45468
diff changeset
221 >>> x = Foo()
8defa1d5f066 Move test_extcall to doctest.
Brett Cannon <bcannon@gmail.com>
parents: 45468
diff changeset
222 >>> Foo.method(*(x, 1, 2))
8defa1d5f066 Move test_extcall to doctest.
Brett Cannon <bcannon@gmail.com>
parents: 45468
diff changeset
223 3
8defa1d5f066 Move test_extcall to doctest.
Brett Cannon <bcannon@gmail.com>
parents: 45468
diff changeset
224 >>> Foo.method(x, *(1, 2))
8defa1d5f066 Move test_extcall to doctest.
Brett Cannon <bcannon@gmail.com>
parents: 45468
diff changeset
225 3
8defa1d5f066 Move test_extcall to doctest.
Brett Cannon <bcannon@gmail.com>
parents: 45468
diff changeset
226 >>> Foo.method(*(1, 2, 3))
8defa1d5f066 Move test_extcall to doctest.
Brett Cannon <bcannon@gmail.com>
parents: 45468
diff changeset
227 Traceback (most recent call last):
8defa1d5f066 Move test_extcall to doctest.
Brett Cannon <bcannon@gmail.com>
parents: 45468
diff changeset
228 ...
8defa1d5f066 Move test_extcall to doctest.
Brett Cannon <bcannon@gmail.com>
parents: 45468
diff changeset
229 TypeError: unbound method method() must be called with Foo instance as \
8defa1d5f066 Move test_extcall to doctest.
Brett Cannon <bcannon@gmail.com>
parents: 45468
diff changeset
230 first argument (got int instance instead)
12083
7e006342e790 add test cases for Greg Ewing's extended call syntax patch
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff changeset
231
45817
8defa1d5f066 Move test_extcall to doctest.
Brett Cannon <bcannon@gmail.com>
parents: 45468
diff changeset
232 >>> Foo.method(1, *[2, 3])
8defa1d5f066 Move test_extcall to doctest.
Brett Cannon <bcannon@gmail.com>
parents: 45468
diff changeset
233 Traceback (most recent call last):
8defa1d5f066 Move test_extcall to doctest.
Brett Cannon <bcannon@gmail.com>
parents: 45468
diff changeset
234 ...
8defa1d5f066 Move test_extcall to doctest.
Brett Cannon <bcannon@gmail.com>
parents: 45468
diff changeset
235 TypeError: unbound method method() must be called with Foo instance as \
8defa1d5f066 Move test_extcall to doctest.
Brett Cannon <bcannon@gmail.com>
parents: 45468
diff changeset
236 first argument (got int instance instead)
15364
09952d6ed372 Fix for SF bug #117241
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 15305
diff changeset
237
45817
8defa1d5f066 Move test_extcall to doctest.
Brett Cannon <bcannon@gmail.com>
parents: 45468
diff changeset
238 A PyCFunction that takes only positional parameters shoud allow an
8defa1d5f066 Move test_extcall to doctest.
Brett Cannon <bcannon@gmail.com>
parents: 45468
diff changeset
239 empty keyword dictionary to pass without a complaint, but raise a
8defa1d5f066 Move test_extcall to doctest.
Brett Cannon <bcannon@gmail.com>
parents: 45468
diff changeset
240 TypeError if te dictionary is not empty
15364
09952d6ed372 Fix for SF bug #117241
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 15305
diff changeset
241
45817
8defa1d5f066 Move test_extcall to doctest.
Brett Cannon <bcannon@gmail.com>
parents: 45468
diff changeset
242 >>> try:
8defa1d5f066 Move test_extcall to doctest.
Brett Cannon <bcannon@gmail.com>
parents: 45468
diff changeset
243 ... silence = id(1, *{})
8defa1d5f066 Move test_extcall to doctest.
Brett Cannon <bcannon@gmail.com>
parents: 45468
diff changeset
244 ... True
8defa1d5f066 Move test_extcall to doctest.
Brett Cannon <bcannon@gmail.com>
parents: 45468
diff changeset
245 ... except:
8defa1d5f066 Move test_extcall to doctest.
Brett Cannon <bcannon@gmail.com>
parents: 45468
diff changeset
246 ... False
8defa1d5f066 Move test_extcall to doctest.
Brett Cannon <bcannon@gmail.com>
parents: 45468
diff changeset
247 True
15899
152814f6cd11 This patch makes sure that the function name always appears in the error
Ka-Ping Yee <ping@zesty.ca>
parents: 15739
diff changeset
248
45817
8defa1d5f066 Move test_extcall to doctest.
Brett Cannon <bcannon@gmail.com>
parents: 45468
diff changeset
249 >>> id(1, **{'foo': 1})
8defa1d5f066 Move test_extcall to doctest.
Brett Cannon <bcannon@gmail.com>
parents: 45468
diff changeset
250 Traceback (most recent call last):
8defa1d5f066 Move test_extcall to doctest.
Brett Cannon <bcannon@gmail.com>
parents: 45468
diff changeset
251 ...
8defa1d5f066 Move test_extcall to doctest.
Brett Cannon <bcannon@gmail.com>
parents: 45468
diff changeset
252 TypeError: id() takes no keyword arguments
8defa1d5f066 Move test_extcall to doctest.
Brett Cannon <bcannon@gmail.com>
parents: 45468
diff changeset
253
8defa1d5f066 Move test_extcall to doctest.
Brett Cannon <bcannon@gmail.com>
parents: 45468
diff changeset
254 """
15899
152814f6cd11 This patch makes sure that the function name always appears in the error
Ka-Ping Yee <ping@zesty.ca>
parents: 15739
diff changeset
255
58751
222b6d80e769 Merged revisions 68805 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 45875
diff changeset
256 import unittest
45817
8defa1d5f066 Move test_extcall to doctest.
Brett Cannon <bcannon@gmail.com>
parents: 45468
diff changeset
257 from test import test_support
8defa1d5f066 Move test_extcall to doctest.
Brett Cannon <bcannon@gmail.com>
parents: 45468
diff changeset
258
58751
222b6d80e769 Merged revisions 68805 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 45875
diff changeset
259
222b6d80e769 Merged revisions 68805 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 45875
diff changeset
260 class UnicodeKeywordArgsTest(unittest.TestCase):
222b6d80e769 Merged revisions 68805 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 45875
diff changeset
261
222b6d80e769 Merged revisions 68805 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 45875
diff changeset
262 def test_unicode_keywords(self):
222b6d80e769 Merged revisions 68805 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 45875
diff changeset
263 def f(a):
222b6d80e769 Merged revisions 68805 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 45875
diff changeset
264 return a
222b6d80e769 Merged revisions 68805 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 45875
diff changeset
265 self.assertEqual(f(**{u'a': 4}), 4)
222b6d80e769 Merged revisions 68805 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 45875
diff changeset
266 self.assertRaises(TypeError, f, **{u'stören': 4})
222b6d80e769 Merged revisions 68805 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 45875
diff changeset
267 self.assertRaises(TypeError, f, **{u'someLongString':2})
222b6d80e769 Merged revisions 68805 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 45875
diff changeset
268 try:
222b6d80e769 Merged revisions 68805 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 45875
diff changeset
269 f(a=4, **{u'a': 4})
222b6d80e769 Merged revisions 68805 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 45875
diff changeset
270 except TypeError:
222b6d80e769 Merged revisions 68805 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 45875
diff changeset
271 pass
222b6d80e769 Merged revisions 68805 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 45875
diff changeset
272 else:
222b6d80e769 Merged revisions 68805 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 45875
diff changeset
273 self.fail("duplicate arguments didn't raise")
222b6d80e769 Merged revisions 68805 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 45875
diff changeset
274
222b6d80e769 Merged revisions 68805 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 45875
diff changeset
275
45817
8defa1d5f066 Move test_extcall to doctest.
Brett Cannon <bcannon@gmail.com>
parents: 45468
diff changeset
276 def test_main():
45875
1bb67e503dff Import the test properly. This is especially important for py3k.
Neal Norwitz <nnorwitz@gmail.com>
parents: 45817
diff changeset
277 from test import test_extcall # self import
45817
8defa1d5f066 Move test_extcall to doctest.
Brett Cannon <bcannon@gmail.com>
parents: 45468
diff changeset
278 test_support.run_doctest(test_extcall, True)
58751
222b6d80e769 Merged revisions 68805 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 45875
diff changeset
279 test_support.run_unittest(UnicodeKeywordArgsTest)
45817
8defa1d5f066 Move test_extcall to doctest.
Brett Cannon <bcannon@gmail.com>
parents: 45468
diff changeset
280
8defa1d5f066 Move test_extcall to doctest.
Brett Cannon <bcannon@gmail.com>
parents: 45468
diff changeset
281 if __name__ == '__main__':
8defa1d5f066 Move test_extcall to doctest.
Brett Cannon <bcannon@gmail.com>
parents: 45468
diff changeset
282 test_main()