annotate Lib/test/test_extcall.py @ 79675:c0a2294de787 2.7

Issue #16199: Backport 2to3 typo fix from 3.2.
author Chris Jerdonek <chris.jerdonek@gmail.com>
date Thu, 11 Oct 2012 16:15:46 -0700
parents cd8d3c2d3bce
children
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 -*-
59823
643bf9ff228f rewrite a bit
Benjamin Peterson <benjamin@python.org>
parents: 54858
diff changeset
2
45817
8defa1d5f066 Move test_extcall to doctest.
Brett Cannon <bcannon@gmail.com>
parents: 45468
diff changeset
3 """Doctest for method/function calls.
8defa1d5f066 Move test_extcall to doctest.
Brett Cannon <bcannon@gmail.com>
parents: 45468
diff changeset
4
8defa1d5f066 Move test_extcall to doctest.
Brett Cannon <bcannon@gmail.com>
parents: 45468
diff changeset
5 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
6
8defa1d5f066 Move test_extcall to doctest.
Brett Cannon <bcannon@gmail.com>
parents: 45468
diff changeset
7 >>> from UserList import UserList
8defa1d5f066 Move test_extcall to doctest.
Brett Cannon <bcannon@gmail.com>
parents: 45468
diff changeset
8 >>> from UserDict import UserDict
8defa1d5f066 Move test_extcall to doctest.
Brett Cannon <bcannon@gmail.com>
parents: 45468
diff changeset
9
8defa1d5f066 Move test_extcall to doctest.
Brett Cannon <bcannon@gmail.com>
parents: 45468
diff changeset
10 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
11
45817
8defa1d5f066 Move test_extcall to doctest.
Brett Cannon <bcannon@gmail.com>
parents: 45468
diff changeset
12 >>> def e(a,b):
8defa1d5f066 Move test_extcall to doctest.
Brett Cannon <bcannon@gmail.com>
parents: 45468
diff changeset
13 ... print a, b
8defa1d5f066 Move test_extcall to doctest.
Brett Cannon <bcannon@gmail.com>
parents: 45468
diff changeset
14
8defa1d5f066 Move test_extcall to doctest.
Brett Cannon <bcannon@gmail.com>
parents: 45468
diff changeset
15 >>> def f(*a, **k):
8defa1d5f066 Move test_extcall to doctest.
Brett Cannon <bcannon@gmail.com>
parents: 45468
diff changeset
16 ... print a, test_support.sortdict(k)
8defa1d5f066 Move test_extcall to doctest.
Brett Cannon <bcannon@gmail.com>
parents: 45468
diff changeset
17
8defa1d5f066 Move test_extcall to doctest.
Brett Cannon <bcannon@gmail.com>
parents: 45468
diff changeset
18 >>> def g(x, *y, **z):
8defa1d5f066 Move test_extcall to doctest.
Brett Cannon <bcannon@gmail.com>
parents: 45468
diff changeset
19 ... print x, y, test_support.sortdict(z)
8defa1d5f066 Move test_extcall to doctest.
Brett Cannon <bcannon@gmail.com>
parents: 45468
diff changeset
20
8defa1d5f066 Move test_extcall to doctest.
Brett Cannon <bcannon@gmail.com>
parents: 45468
diff changeset
21 >>> def h(j=1, a=2, h=3):
8defa1d5f066 Move test_extcall to doctest.
Brett Cannon <bcannon@gmail.com>
parents: 45468
diff changeset
22 ... print j, a, h
8defa1d5f066 Move test_extcall to doctest.
Brett Cannon <bcannon@gmail.com>
parents: 45468
diff changeset
23
8defa1d5f066 Move test_extcall to doctest.
Brett Cannon <bcannon@gmail.com>
parents: 45468
diff changeset
24 Argument list examples
29339
fc286e28556f SF bug #733667: kwargs handled incorrectly
Raymond Hettinger <python@rcn.com>
parents: 28089
diff changeset
25
45817
8defa1d5f066 Move test_extcall to doctest.
Brett Cannon <bcannon@gmail.com>
parents: 45468
diff changeset
26 >>> f()
8defa1d5f066 Move test_extcall to doctest.
Brett Cannon <bcannon@gmail.com>
parents: 45468
diff changeset
27 () {}
8defa1d5f066 Move test_extcall to doctest.
Brett Cannon <bcannon@gmail.com>
parents: 45468
diff changeset
28 >>> f(1)
8defa1d5f066 Move test_extcall to doctest.
Brett Cannon <bcannon@gmail.com>
parents: 45468
diff changeset
29 (1,) {}
8defa1d5f066 Move test_extcall to doctest.
Brett Cannon <bcannon@gmail.com>
parents: 45468
diff changeset
30 >>> f(1, 2)
8defa1d5f066 Move test_extcall to doctest.
Brett Cannon <bcannon@gmail.com>
parents: 45468
diff changeset
31 (1, 2) {}
8defa1d5f066 Move test_extcall to doctest.
Brett Cannon <bcannon@gmail.com>
parents: 45468
diff changeset
32 >>> f(1, 2, 3)
8defa1d5f066 Move test_extcall to doctest.
Brett Cannon <bcannon@gmail.com>
parents: 45468
diff changeset
33 (1, 2, 3) {}
8defa1d5f066 Move test_extcall to doctest.
Brett Cannon <bcannon@gmail.com>
parents: 45468
diff changeset
34 >>> f(1, 2, 3, *(4, 5))
8defa1d5f066 Move test_extcall to doctest.
Brett Cannon <bcannon@gmail.com>
parents: 45468
diff changeset
35 (1, 2, 3, 4, 5) {}
8defa1d5f066 Move test_extcall to doctest.
Brett Cannon <bcannon@gmail.com>
parents: 45468
diff changeset
36 >>> f(1, 2, 3, *[4, 5])
8defa1d5f066 Move test_extcall to doctest.
Brett Cannon <bcannon@gmail.com>
parents: 45468
diff changeset
37 (1, 2, 3, 4, 5) {}
8defa1d5f066 Move test_extcall to doctest.
Brett Cannon <bcannon@gmail.com>
parents: 45468
diff changeset
38 >>> f(1, 2, 3, *UserList([4, 5]))
8defa1d5f066 Move test_extcall to doctest.
Brett Cannon <bcannon@gmail.com>
parents: 45468
diff changeset
39 (1, 2, 3, 4, 5) {}
8defa1d5f066 Move test_extcall to doctest.
Brett Cannon <bcannon@gmail.com>
parents: 45468
diff changeset
40
8defa1d5f066 Move test_extcall to doctest.
Brett Cannon <bcannon@gmail.com>
parents: 45468
diff changeset
41 Here we add keyword arguments
8defa1d5f066 Move test_extcall to doctest.
Brett Cannon <bcannon@gmail.com>
parents: 45468
diff changeset
42
8defa1d5f066 Move test_extcall to doctest.
Brett Cannon <bcannon@gmail.com>
parents: 45468
diff changeset
43 >>> f(1, 2, 3, **{'a':4, 'b':5})
8defa1d5f066 Move test_extcall to doctest.
Brett Cannon <bcannon@gmail.com>
parents: 45468
diff changeset
44 (1, 2, 3) {'a': 4, 'b': 5}
8defa1d5f066 Move test_extcall to doctest.
Brett Cannon <bcannon@gmail.com>
parents: 45468
diff changeset
45 >>> 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
46 (1, 2, 3, 4, 5) {'a': 6, 'b': 7}
8defa1d5f066 Move test_extcall to doctest.
Brett Cannon <bcannon@gmail.com>
parents: 45468
diff changeset
47 >>> 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
48 (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
49
45817
8defa1d5f066 Move test_extcall to doctest.
Brett Cannon <bcannon@gmail.com>
parents: 45468
diff changeset
50 >>> f(1, 2, 3, **UserDict(a=4, b=5))
8defa1d5f066 Move test_extcall to doctest.
Brett Cannon <bcannon@gmail.com>
parents: 45468
diff changeset
51 (1, 2, 3) {'a': 4, 'b': 5}
8defa1d5f066 Move test_extcall to doctest.
Brett Cannon <bcannon@gmail.com>
parents: 45468
diff changeset
52 >>> 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
53 (1, 2, 3, 4, 5) {'a': 6, 'b': 7}
8defa1d5f066 Move test_extcall to doctest.
Brett Cannon <bcannon@gmail.com>
parents: 45468
diff changeset
54 >>> 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
55 (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
56
8defa1d5f066 Move test_extcall to doctest.
Brett Cannon <bcannon@gmail.com>
parents: 45468
diff changeset
57 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
58 names in the exception messages.
8defa1d5f066 Move test_extcall to doctest.
Brett Cannon <bcannon@gmail.com>
parents: 45468
diff changeset
59
8defa1d5f066 Move test_extcall to doctest.
Brett Cannon <bcannon@gmail.com>
parents: 45468
diff changeset
60 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
61
45817
8defa1d5f066 Move test_extcall to doctest.
Brett Cannon <bcannon@gmail.com>
parents: 45468
diff changeset
62 >>> e(c=4)
8defa1d5f066 Move test_extcall to doctest.
Brett Cannon <bcannon@gmail.com>
parents: 45468
diff changeset
63 Traceback (most recent call last):
8defa1d5f066 Move test_extcall to doctest.
Brett Cannon <bcannon@gmail.com>
parents: 45468
diff changeset
64 ...
8defa1d5f066 Move test_extcall to doctest.
Brett Cannon <bcannon@gmail.com>
parents: 45468
diff changeset
65 TypeError: e() got an unexpected keyword argument 'c'
8defa1d5f066 Move test_extcall to doctest.
Brett Cannon <bcannon@gmail.com>
parents: 45468
diff changeset
66
8defa1d5f066 Move test_extcall to doctest.
Brett Cannon <bcannon@gmail.com>
parents: 45468
diff changeset
67 >>> g()
8defa1d5f066 Move test_extcall to doctest.
Brett Cannon <bcannon@gmail.com>
parents: 45468
diff changeset
68 Traceback (most recent call last):
8defa1d5f066 Move test_extcall to doctest.
Brett Cannon <bcannon@gmail.com>
parents: 45468
diff changeset
69 ...
8defa1d5f066 Move test_extcall to doctest.
Brett Cannon <bcannon@gmail.com>
parents: 45468
diff changeset
70 TypeError: g() takes at least 1 argument (0 given)
8defa1d5f066 Move test_extcall to doctest.
Brett Cannon <bcannon@gmail.com>
parents: 45468
diff changeset
71
8defa1d5f066 Move test_extcall to doctest.
Brett Cannon <bcannon@gmail.com>
parents: 45468
diff changeset
72 >>> g(*())
8defa1d5f066 Move test_extcall to doctest.
Brett Cannon <bcannon@gmail.com>
parents: 45468
diff changeset
73 Traceback (most recent call last):
8defa1d5f066 Move test_extcall to doctest.
Brett Cannon <bcannon@gmail.com>
parents: 45468
diff changeset
74 ...
8defa1d5f066 Move test_extcall to doctest.
Brett Cannon <bcannon@gmail.com>
parents: 45468
diff changeset
75 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
76
45817
8defa1d5f066 Move test_extcall to doctest.
Brett Cannon <bcannon@gmail.com>
parents: 45468
diff changeset
77 >>> g(*(), **{})
8defa1d5f066 Move test_extcall to doctest.
Brett Cannon <bcannon@gmail.com>
parents: 45468
diff changeset
78 Traceback (most recent call last):
8defa1d5f066 Move test_extcall to doctest.
Brett Cannon <bcannon@gmail.com>
parents: 45468
diff changeset
79 ...
8defa1d5f066 Move test_extcall to doctest.
Brett Cannon <bcannon@gmail.com>
parents: 45468
diff changeset
80 TypeError: g() takes at least 1 argument (0 given)
8defa1d5f066 Move test_extcall to doctest.
Brett Cannon <bcannon@gmail.com>
parents: 45468
diff changeset
81
8defa1d5f066 Move test_extcall to doctest.
Brett Cannon <bcannon@gmail.com>
parents: 45468
diff changeset
82 >>> g(1)
8defa1d5f066 Move test_extcall to doctest.
Brett Cannon <bcannon@gmail.com>
parents: 45468
diff changeset
83 1 () {}
8defa1d5f066 Move test_extcall to doctest.
Brett Cannon <bcannon@gmail.com>
parents: 45468
diff changeset
84 >>> g(1, 2)
8defa1d5f066 Move test_extcall to doctest.
Brett Cannon <bcannon@gmail.com>
parents: 45468
diff changeset
85 1 (2,) {}
8defa1d5f066 Move test_extcall to doctest.
Brett Cannon <bcannon@gmail.com>
parents: 45468
diff changeset
86 >>> g(1, 2, 3)
8defa1d5f066 Move test_extcall to doctest.
Brett Cannon <bcannon@gmail.com>
parents: 45468
diff changeset
87 1 (2, 3) {}
8defa1d5f066 Move test_extcall to doctest.
Brett Cannon <bcannon@gmail.com>
parents: 45468
diff changeset
88 >>> g(1, 2, 3, *(4, 5))
8defa1d5f066 Move test_extcall to doctest.
Brett Cannon <bcannon@gmail.com>
parents: 45468
diff changeset
89 1 (2, 3, 4, 5) {}
8defa1d5f066 Move test_extcall to doctest.
Brett Cannon <bcannon@gmail.com>
parents: 45468
diff changeset
90
8defa1d5f066 Move test_extcall to doctest.
Brett Cannon <bcannon@gmail.com>
parents: 45468
diff changeset
91 >>> class Nothing: pass
8defa1d5f066 Move test_extcall to doctest.
Brett Cannon <bcannon@gmail.com>
parents: 45468
diff changeset
92 ...
8defa1d5f066 Move test_extcall to doctest.
Brett Cannon <bcannon@gmail.com>
parents: 45468
diff changeset
93 >>> g(*Nothing())
8defa1d5f066 Move test_extcall to doctest.
Brett Cannon <bcannon@gmail.com>
parents: 45468
diff changeset
94 Traceback (most recent call last):
8defa1d5f066 Move test_extcall to doctest.
Brett Cannon <bcannon@gmail.com>
parents: 45468
diff changeset
95 ...
8defa1d5f066 Move test_extcall to doctest.
Brett Cannon <bcannon@gmail.com>
parents: 45468
diff changeset
96 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
97
8defa1d5f066 Move test_extcall to doctest.
Brett Cannon <bcannon@gmail.com>
parents: 45468
diff changeset
98 >>> class Nothing:
8defa1d5f066 Move test_extcall to doctest.
Brett Cannon <bcannon@gmail.com>
parents: 45468
diff changeset
99 ... def __len__(self): return 5
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
8defa1d5f066 Move test_extcall to doctest.
Brett Cannon <bcannon@gmail.com>
parents: 45468
diff changeset
102 >>> g(*Nothing())
8defa1d5f066 Move test_extcall to doctest.
Brett Cannon <bcannon@gmail.com>
parents: 45468
diff changeset
103 Traceback (most recent call last):
8defa1d5f066 Move test_extcall to doctest.
Brett Cannon <bcannon@gmail.com>
parents: 45468
diff changeset
104 ...
8defa1d5f066 Move test_extcall to doctest.
Brett Cannon <bcannon@gmail.com>
parents: 45468
diff changeset
105 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
106
8defa1d5f066 Move test_extcall to doctest.
Brett Cannon <bcannon@gmail.com>
parents: 45468
diff changeset
107 >>> class Nothing():
8defa1d5f066 Move test_extcall to doctest.
Brett Cannon <bcannon@gmail.com>
parents: 45468
diff changeset
108 ... def __len__(self): return 5
8defa1d5f066 Move test_extcall to doctest.
Brett Cannon <bcannon@gmail.com>
parents: 45468
diff changeset
109 ... def __getitem__(self, i):
8defa1d5f066 Move test_extcall to doctest.
Brett Cannon <bcannon@gmail.com>
parents: 45468
diff changeset
110 ... if i<3: return i
8defa1d5f066 Move test_extcall to doctest.
Brett Cannon <bcannon@gmail.com>
parents: 45468
diff changeset
111 ... else: raise IndexError(i)
8defa1d5f066 Move test_extcall to doctest.
Brett Cannon <bcannon@gmail.com>
parents: 45468
diff changeset
112 ...
12083
7e006342e790 add test cases for Greg Ewing's extended call syntax patch
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff changeset
113
45817
8defa1d5f066 Move test_extcall to doctest.
Brett Cannon <bcannon@gmail.com>
parents: 45468
diff changeset
114 >>> g(*Nothing())
8defa1d5f066 Move test_extcall to doctest.
Brett Cannon <bcannon@gmail.com>
parents: 45468
diff changeset
115 0 (1, 2) {}
8defa1d5f066 Move test_extcall to doctest.
Brett Cannon <bcannon@gmail.com>
parents: 45468
diff changeset
116
8defa1d5f066 Move test_extcall to doctest.
Brett Cannon <bcannon@gmail.com>
parents: 45468
diff changeset
117 >>> class Nothing:
8defa1d5f066 Move test_extcall to doctest.
Brett Cannon <bcannon@gmail.com>
parents: 45468
diff changeset
118 ... def __init__(self): self.c = 0
8defa1d5f066 Move test_extcall to doctest.
Brett Cannon <bcannon@gmail.com>
parents: 45468
diff changeset
119 ... def __iter__(self): return self
8defa1d5f066 Move test_extcall to doctest.
Brett Cannon <bcannon@gmail.com>
parents: 45468
diff changeset
120 ... def next(self):
8defa1d5f066 Move test_extcall to doctest.
Brett Cannon <bcannon@gmail.com>
parents: 45468
diff changeset
121 ... if self.c == 4:
8defa1d5f066 Move test_extcall to doctest.
Brett Cannon <bcannon@gmail.com>
parents: 45468
diff changeset
122 ... raise StopIteration
8defa1d5f066 Move test_extcall to doctest.
Brett Cannon <bcannon@gmail.com>
parents: 45468
diff changeset
123 ... c = self.c
8defa1d5f066 Move test_extcall to doctest.
Brett Cannon <bcannon@gmail.com>
parents: 45468
diff changeset
124 ... self.c += 1
8defa1d5f066 Move test_extcall to doctest.
Brett Cannon <bcannon@gmail.com>
parents: 45468
diff changeset
125 ... return c
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
8defa1d5f066 Move test_extcall to doctest.
Brett Cannon <bcannon@gmail.com>
parents: 45468
diff changeset
128 >>> g(*Nothing())
8defa1d5f066 Move test_extcall to doctest.
Brett Cannon <bcannon@gmail.com>
parents: 45468
diff changeset
129 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
130
45817
8defa1d5f066 Move test_extcall to doctest.
Brett Cannon <bcannon@gmail.com>
parents: 45468
diff changeset
131 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
132
45817
8defa1d5f066 Move test_extcall to doctest.
Brett Cannon <bcannon@gmail.com>
parents: 45468
diff changeset
133 >>> d = {'a': 1, 'b': 2, 'c': 3}
8defa1d5f066 Move test_extcall to doctest.
Brett Cannon <bcannon@gmail.com>
parents: 45468
diff changeset
134 >>> d2 = d.copy()
8defa1d5f066 Move test_extcall to doctest.
Brett Cannon <bcannon@gmail.com>
parents: 45468
diff changeset
135 >>> g(1, d=4, **d)
8defa1d5f066 Move test_extcall to doctest.
Brett Cannon <bcannon@gmail.com>
parents: 45468
diff changeset
136 1 () {'a': 1, 'b': 2, 'c': 3, 'd': 4}
8defa1d5f066 Move test_extcall to doctest.
Brett Cannon <bcannon@gmail.com>
parents: 45468
diff changeset
137 >>> d == d2
8defa1d5f066 Move test_extcall to doctest.
Brett Cannon <bcannon@gmail.com>
parents: 45468
diff changeset
138 True
8defa1d5f066 Move test_extcall to doctest.
Brett Cannon <bcannon@gmail.com>
parents: 45468
diff changeset
139
8defa1d5f066 Move test_extcall to doctest.
Brett Cannon <bcannon@gmail.com>
parents: 45468
diff changeset
140 What about willful misconduct?
8defa1d5f066 Move test_extcall to doctest.
Brett Cannon <bcannon@gmail.com>
parents: 45468
diff changeset
141
8defa1d5f066 Move test_extcall to doctest.
Brett Cannon <bcannon@gmail.com>
parents: 45468
diff changeset
142 >>> def saboteur(**kw):
8defa1d5f066 Move test_extcall to doctest.
Brett Cannon <bcannon@gmail.com>
parents: 45468
diff changeset
143 ... kw['x'] = 'm'
8defa1d5f066 Move test_extcall to doctest.
Brett Cannon <bcannon@gmail.com>
parents: 45468
diff changeset
144 ... return kw
8defa1d5f066 Move test_extcall to doctest.
Brett Cannon <bcannon@gmail.com>
parents: 45468
diff changeset
145
8defa1d5f066 Move test_extcall to doctest.
Brett Cannon <bcannon@gmail.com>
parents: 45468
diff changeset
146 >>> d = {}
8defa1d5f066 Move test_extcall to doctest.
Brett Cannon <bcannon@gmail.com>
parents: 45468
diff changeset
147 >>> kw = saboteur(a=1, **d)
8defa1d5f066 Move test_extcall to doctest.
Brett Cannon <bcannon@gmail.com>
parents: 45468
diff changeset
148 >>> d
8defa1d5f066 Move test_extcall to doctest.
Brett Cannon <bcannon@gmail.com>
parents: 45468
diff changeset
149 {}
41807
a405732a262d Patch #1686487: you can now pass any mapping after '**' in function calls.
Georg Brandl <georg@python.org>
parents: 31574
diff changeset
150
a405732a262d Patch #1686487: you can now pass any mapping after '**' in function calls.
Georg Brandl <georg@python.org>
parents: 31574
diff changeset
151
45817
8defa1d5f066 Move test_extcall to doctest.
Brett Cannon <bcannon@gmail.com>
parents: 45468
diff changeset
152 >>> g(1, 2, 3, **{'x': 4, 'y': 5})
8defa1d5f066 Move test_extcall to doctest.
Brett Cannon <bcannon@gmail.com>
parents: 45468
diff changeset
153 Traceback (most recent call last):
8defa1d5f066 Move test_extcall to doctest.
Brett Cannon <bcannon@gmail.com>
parents: 45468
diff changeset
154 ...
8defa1d5f066 Move test_extcall to doctest.
Brett Cannon <bcannon@gmail.com>
parents: 45468
diff changeset
155 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
156
45817
8defa1d5f066 Move test_extcall to doctest.
Brett Cannon <bcannon@gmail.com>
parents: 45468
diff changeset
157 >>> f(**{1:2})
8defa1d5f066 Move test_extcall to doctest.
Brett Cannon <bcannon@gmail.com>
parents: 45468
diff changeset
158 Traceback (most recent call last):
8defa1d5f066 Move test_extcall to doctest.
Brett Cannon <bcannon@gmail.com>
parents: 45468
diff changeset
159 ...
8defa1d5f066 Move test_extcall to doctest.
Brett Cannon <bcannon@gmail.com>
parents: 45468
diff changeset
160 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
161
45817
8defa1d5f066 Move test_extcall to doctest.
Brett Cannon <bcannon@gmail.com>
parents: 45468
diff changeset
162 >>> h(**{'e': 2})
8defa1d5f066 Move test_extcall to doctest.
Brett Cannon <bcannon@gmail.com>
parents: 45468
diff changeset
163 Traceback (most recent call last):
8defa1d5f066 Move test_extcall to doctest.
Brett Cannon <bcannon@gmail.com>
parents: 45468
diff changeset
164 ...
8defa1d5f066 Move test_extcall to doctest.
Brett Cannon <bcannon@gmail.com>
parents: 45468
diff changeset
165 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
166
45817
8defa1d5f066 Move test_extcall to doctest.
Brett Cannon <bcannon@gmail.com>
parents: 45468
diff changeset
167 >>> h(*h)
8defa1d5f066 Move test_extcall to doctest.
Brett Cannon <bcannon@gmail.com>
parents: 45468
diff changeset
168 Traceback (most recent call last):
8defa1d5f066 Move test_extcall to doctest.
Brett Cannon <bcannon@gmail.com>
parents: 45468
diff changeset
169 ...
8defa1d5f066 Move test_extcall to doctest.
Brett Cannon <bcannon@gmail.com>
parents: 45468
diff changeset
170 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
171
45817
8defa1d5f066 Move test_extcall to doctest.
Brett Cannon <bcannon@gmail.com>
parents: 45468
diff changeset
172 >>> dir(*h)
8defa1d5f066 Move test_extcall to doctest.
Brett Cannon <bcannon@gmail.com>
parents: 45468
diff changeset
173 Traceback (most recent call last):
8defa1d5f066 Move test_extcall to doctest.
Brett Cannon <bcannon@gmail.com>
parents: 45468
diff changeset
174 ...
8defa1d5f066 Move test_extcall to doctest.
Brett Cannon <bcannon@gmail.com>
parents: 45468
diff changeset
175 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
176
45817
8defa1d5f066 Move test_extcall to doctest.
Brett Cannon <bcannon@gmail.com>
parents: 45468
diff changeset
177 >>> None(*h)
8defa1d5f066 Move test_extcall to doctest.
Brett Cannon <bcannon@gmail.com>
parents: 45468
diff changeset
178 Traceback (most recent call last):
8defa1d5f066 Move test_extcall to doctest.
Brett Cannon <bcannon@gmail.com>
parents: 45468
diff changeset
179 ...
8defa1d5f066 Move test_extcall to doctest.
Brett Cannon <bcannon@gmail.com>
parents: 45468
diff changeset
180 TypeError: NoneType object argument after * must be a sequence, \
8defa1d5f066 Move test_extcall to doctest.
Brett Cannon <bcannon@gmail.com>
parents: 45468
diff changeset
181 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
182
45817
8defa1d5f066 Move test_extcall to doctest.
Brett Cannon <bcannon@gmail.com>
parents: 45468
diff changeset
183 >>> h(**h)
8defa1d5f066 Move test_extcall to doctest.
Brett Cannon <bcannon@gmail.com>
parents: 45468
diff changeset
184 Traceback (most recent call last):
8defa1d5f066 Move test_extcall to doctest.
Brett Cannon <bcannon@gmail.com>
parents: 45468
diff changeset
185 ...
8defa1d5f066 Move test_extcall to doctest.
Brett Cannon <bcannon@gmail.com>
parents: 45468
diff changeset
186 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
187
8defa1d5f066 Move test_extcall to doctest.
Brett Cannon <bcannon@gmail.com>
parents: 45468
diff changeset
188 >>> dir(**h)
8defa1d5f066 Move test_extcall to doctest.
Brett Cannon <bcannon@gmail.com>
parents: 45468
diff changeset
189 Traceback (most recent call last):
8defa1d5f066 Move test_extcall to doctest.
Brett Cannon <bcannon@gmail.com>
parents: 45468
diff changeset
190 ...
8defa1d5f066 Move test_extcall to doctest.
Brett Cannon <bcannon@gmail.com>
parents: 45468
diff changeset
191 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
192
45817
8defa1d5f066 Move test_extcall to doctest.
Brett Cannon <bcannon@gmail.com>
parents: 45468
diff changeset
193 >>> None(**h)
8defa1d5f066 Move test_extcall to doctest.
Brett Cannon <bcannon@gmail.com>
parents: 45468
diff changeset
194 Traceback (most recent call last):
8defa1d5f066 Move test_extcall to doctest.
Brett Cannon <bcannon@gmail.com>
parents: 45468
diff changeset
195 ...
8defa1d5f066 Move test_extcall to doctest.
Brett Cannon <bcannon@gmail.com>
parents: 45468
diff changeset
196 TypeError: NoneType object argument after ** must be a mapping, \
8defa1d5f066 Move test_extcall to doctest.
Brett Cannon <bcannon@gmail.com>
parents: 45468
diff changeset
197 not function
15305
07f24261c6e6 Make reindent.py happy (convert everything to 4-space indents!).
Fred Drake <fdrake@acm.org>
parents: 13610
diff changeset
198
45817
8defa1d5f066 Move test_extcall to doctest.
Brett Cannon <bcannon@gmail.com>
parents: 45468
diff changeset
199 >>> dir(b=1, **{'b': 1})
8defa1d5f066 Move test_extcall to doctest.
Brett Cannon <bcannon@gmail.com>
parents: 45468
diff changeset
200 Traceback (most recent call last):
8defa1d5f066 Move test_extcall to doctest.
Brett Cannon <bcannon@gmail.com>
parents: 45468
diff changeset
201 ...
8defa1d5f066 Move test_extcall to doctest.
Brett Cannon <bcannon@gmail.com>
parents: 45468
diff changeset
202 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
203
45817
8defa1d5f066 Move test_extcall to doctest.
Brett Cannon <bcannon@gmail.com>
parents: 45468
diff changeset
204 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
205
45817
8defa1d5f066 Move test_extcall to doctest.
Brett Cannon <bcannon@gmail.com>
parents: 45468
diff changeset
206 >>> def f2(*a, **b):
8defa1d5f066 Move test_extcall to doctest.
Brett Cannon <bcannon@gmail.com>
parents: 45468
diff changeset
207 ... 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
208
7e006342e790 add test cases for Greg Ewing's extended call syntax patch
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff changeset
209
45817
8defa1d5f066 Move test_extcall to doctest.
Brett Cannon <bcannon@gmail.com>
parents: 45468
diff changeset
210 >>> d = {}
8defa1d5f066 Move test_extcall to doctest.
Brett Cannon <bcannon@gmail.com>
parents: 45468
diff changeset
211 >>> for i in xrange(512):
8defa1d5f066 Move test_extcall to doctest.
Brett Cannon <bcannon@gmail.com>
parents: 45468
diff changeset
212 ... key = 'k%d' % i
8defa1d5f066 Move test_extcall to doctest.
Brett Cannon <bcannon@gmail.com>
parents: 45468
diff changeset
213 ... d[key] = i
8defa1d5f066 Move test_extcall to doctest.
Brett Cannon <bcannon@gmail.com>
parents: 45468
diff changeset
214 >>> a, b = f2(1, *(2,3), **d)
8defa1d5f066 Move test_extcall to doctest.
Brett Cannon <bcannon@gmail.com>
parents: 45468
diff changeset
215 >>> len(a), len(b), b == d
8defa1d5f066 Move test_extcall to doctest.
Brett Cannon <bcannon@gmail.com>
parents: 45468
diff changeset
216 (3, 512, True)
17407
9d76d8552c36 Test cases for examples of ext call error handling.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 16517
diff changeset
217
45817
8defa1d5f066 Move test_extcall to doctest.
Brett Cannon <bcannon@gmail.com>
parents: 45468
diff changeset
218 >>> class Foo:
8defa1d5f066 Move test_extcall to doctest.
Brett Cannon <bcannon@gmail.com>
parents: 45468
diff changeset
219 ... def method(self, arg1, arg2):
8defa1d5f066 Move test_extcall to doctest.
Brett Cannon <bcannon@gmail.com>
parents: 45468
diff changeset
220 ... return arg1+arg2
17407
9d76d8552c36 Test cases for examples of ext call error handling.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 16517
diff changeset
221
45817
8defa1d5f066 Move test_extcall to doctest.
Brett Cannon <bcannon@gmail.com>
parents: 45468
diff changeset
222 >>> x = Foo()
8defa1d5f066 Move test_extcall to doctest.
Brett Cannon <bcannon@gmail.com>
parents: 45468
diff changeset
223 >>> Foo.method(*(x, 1, 2))
8defa1d5f066 Move test_extcall to doctest.
Brett Cannon <bcannon@gmail.com>
parents: 45468
diff changeset
224 3
8defa1d5f066 Move test_extcall to doctest.
Brett Cannon <bcannon@gmail.com>
parents: 45468
diff changeset
225 >>> Foo.method(x, *(1, 2))
8defa1d5f066 Move test_extcall to doctest.
Brett Cannon <bcannon@gmail.com>
parents: 45468
diff changeset
226 3
8defa1d5f066 Move test_extcall to doctest.
Brett Cannon <bcannon@gmail.com>
parents: 45468
diff changeset
227 >>> Foo.method(*(1, 2, 3))
8defa1d5f066 Move test_extcall to doctest.
Brett Cannon <bcannon@gmail.com>
parents: 45468
diff changeset
228 Traceback (most recent call last):
8defa1d5f066 Move test_extcall to doctest.
Brett Cannon <bcannon@gmail.com>
parents: 45468
diff changeset
229 ...
8defa1d5f066 Move test_extcall to doctest.
Brett Cannon <bcannon@gmail.com>
parents: 45468
diff changeset
230 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
231 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
232
45817
8defa1d5f066 Move test_extcall to doctest.
Brett Cannon <bcannon@gmail.com>
parents: 45468
diff changeset
233 >>> Foo.method(1, *[2, 3])
8defa1d5f066 Move test_extcall to doctest.
Brett Cannon <bcannon@gmail.com>
parents: 45468
diff changeset
234 Traceback (most recent call last):
8defa1d5f066 Move test_extcall to doctest.
Brett Cannon <bcannon@gmail.com>
parents: 45468
diff changeset
235 ...
8defa1d5f066 Move test_extcall to doctest.
Brett Cannon <bcannon@gmail.com>
parents: 45468
diff changeset
236 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
237 first argument (got int instance instead)
15364
09952d6ed372 Fix for SF bug #117241
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 15305
diff changeset
238
68588
cd8d3c2d3bce #11565: Fix several typos. Patch by Piotr Kasprzyk.
Ezio Melotti <ezio.melotti@gmail.com>
parents: 59855
diff changeset
239 A PyCFunction that takes only positional parameters should allow an
45817
8defa1d5f066 Move test_extcall to doctest.
Brett Cannon <bcannon@gmail.com>
parents: 45468
diff changeset
240 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
241 TypeError if te dictionary is not empty
15364
09952d6ed372 Fix for SF bug #117241
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 15305
diff changeset
242
45817
8defa1d5f066 Move test_extcall to doctest.
Brett Cannon <bcannon@gmail.com>
parents: 45468
diff changeset
243 >>> try:
8defa1d5f066 Move test_extcall to doctest.
Brett Cannon <bcannon@gmail.com>
parents: 45468
diff changeset
244 ... silence = id(1, *{})
8defa1d5f066 Move test_extcall to doctest.
Brett Cannon <bcannon@gmail.com>
parents: 45468
diff changeset
245 ... True
8defa1d5f066 Move test_extcall to doctest.
Brett Cannon <bcannon@gmail.com>
parents: 45468
diff changeset
246 ... except:
8defa1d5f066 Move test_extcall to doctest.
Brett Cannon <bcannon@gmail.com>
parents: 45468
diff changeset
247 ... False
8defa1d5f066 Move test_extcall to doctest.
Brett Cannon <bcannon@gmail.com>
parents: 45468
diff changeset
248 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
249
45817
8defa1d5f066 Move test_extcall to doctest.
Brett Cannon <bcannon@gmail.com>
parents: 45468
diff changeset
250 >>> id(1, **{'foo': 1})
8defa1d5f066 Move test_extcall to doctest.
Brett Cannon <bcannon@gmail.com>
parents: 45468
diff changeset
251 Traceback (most recent call last):
8defa1d5f066 Move test_extcall to doctest.
Brett Cannon <bcannon@gmail.com>
parents: 45468
diff changeset
252 ...
8defa1d5f066 Move test_extcall to doctest.
Brett Cannon <bcannon@gmail.com>
parents: 45468
diff changeset
253 TypeError: id() takes no keyword arguments
8defa1d5f066 Move test_extcall to doctest.
Brett Cannon <bcannon@gmail.com>
parents: 45468
diff changeset
254
54858
a666134e6c0c #2016 Fix a crash in function call when the **kwargs dictionary is mutated
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents: 58751
diff changeset
255 A corner case of keyword dictionary items being deleted during
a666134e6c0c #2016 Fix a crash in function call when the **kwargs dictionary is mutated
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents: 58751
diff changeset
256 the function call setup. See <http://bugs.python.org/issue2016>.
a666134e6c0c #2016 Fix a crash in function call when the **kwargs dictionary is mutated
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents: 58751
diff changeset
257
a666134e6c0c #2016 Fix a crash in function call when the **kwargs dictionary is mutated
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents: 58751
diff changeset
258 >>> class Name(str):
a666134e6c0c #2016 Fix a crash in function call when the **kwargs dictionary is mutated
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents: 58751
diff changeset
259 ... def __eq__(self, other):
a666134e6c0c #2016 Fix a crash in function call when the **kwargs dictionary is mutated
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents: 58751
diff changeset
260 ... try:
a666134e6c0c #2016 Fix a crash in function call when the **kwargs dictionary is mutated
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents: 58751
diff changeset
261 ... del x[self]
a666134e6c0c #2016 Fix a crash in function call when the **kwargs dictionary is mutated
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents: 58751
diff changeset
262 ... except KeyError:
a666134e6c0c #2016 Fix a crash in function call when the **kwargs dictionary is mutated
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents: 58751
diff changeset
263 ... pass
a666134e6c0c #2016 Fix a crash in function call when the **kwargs dictionary is mutated
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents: 58751
diff changeset
264 ... return str.__eq__(self, other)
a666134e6c0c #2016 Fix a crash in function call when the **kwargs dictionary is mutated
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents: 58751
diff changeset
265 ... def __hash__(self):
a666134e6c0c #2016 Fix a crash in function call when the **kwargs dictionary is mutated
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents: 58751
diff changeset
266 ... return str.__hash__(self)
a666134e6c0c #2016 Fix a crash in function call when the **kwargs dictionary is mutated
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents: 58751
diff changeset
267
a666134e6c0c #2016 Fix a crash in function call when the **kwargs dictionary is mutated
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents: 58751
diff changeset
268 >>> x = {Name("a"):1, Name("b"):2}
a666134e6c0c #2016 Fix a crash in function call when the **kwargs dictionary is mutated
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents: 58751
diff changeset
269 >>> def f(a, b):
a666134e6c0c #2016 Fix a crash in function call when the **kwargs dictionary is mutated
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents: 58751
diff changeset
270 ... print a,b
a666134e6c0c #2016 Fix a crash in function call when the **kwargs dictionary is mutated
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents: 58751
diff changeset
271 >>> f(**x)
a666134e6c0c #2016 Fix a crash in function call when the **kwargs dictionary is mutated
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents: 58751
diff changeset
272 1 2
59853
651a8e5c460f improve error message from passing inadequate number of keyword arguments #6474
Benjamin Peterson <benjamin@python.org>
parents: 59851
diff changeset
273
651a8e5c460f improve error message from passing inadequate number of keyword arguments #6474
Benjamin Peterson <benjamin@python.org>
parents: 59851
diff changeset
274 A obscure message:
651a8e5c460f improve error message from passing inadequate number of keyword arguments #6474
Benjamin Peterson <benjamin@python.org>
parents: 59851
diff changeset
275
651a8e5c460f improve error message from passing inadequate number of keyword arguments #6474
Benjamin Peterson <benjamin@python.org>
parents: 59851
diff changeset
276 >>> def f(a, b):
651a8e5c460f improve error message from passing inadequate number of keyword arguments #6474
Benjamin Peterson <benjamin@python.org>
parents: 59851
diff changeset
277 ... pass
651a8e5c460f improve error message from passing inadequate number of keyword arguments #6474
Benjamin Peterson <benjamin@python.org>
parents: 59851
diff changeset
278 >>> f(b=1)
651a8e5c460f improve error message from passing inadequate number of keyword arguments #6474
Benjamin Peterson <benjamin@python.org>
parents: 59851
diff changeset
279 Traceback (most recent call last):
651a8e5c460f improve error message from passing inadequate number of keyword arguments #6474
Benjamin Peterson <benjamin@python.org>
parents: 59851
diff changeset
280 ...
651a8e5c460f improve error message from passing inadequate number of keyword arguments #6474
Benjamin Peterson <benjamin@python.org>
parents: 59851
diff changeset
281 TypeError: f() takes exactly 2 arguments (1 given)
59855
dbad1c0668c9 take into account keyword arguments when passing too many args
Benjamin Peterson <benjamin@python.org>
parents: 59853
diff changeset
282
dbad1c0668c9 take into account keyword arguments when passing too many args
Benjamin Peterson <benjamin@python.org>
parents: 59853
diff changeset
283 The number of arguments passed in includes keywords:
dbad1c0668c9 take into account keyword arguments when passing too many args
Benjamin Peterson <benjamin@python.org>
parents: 59853
diff changeset
284
dbad1c0668c9 take into account keyword arguments when passing too many args
Benjamin Peterson <benjamin@python.org>
parents: 59853
diff changeset
285 >>> def f(a):
dbad1c0668c9 take into account keyword arguments when passing too many args
Benjamin Peterson <benjamin@python.org>
parents: 59853
diff changeset
286 ... pass
dbad1c0668c9 take into account keyword arguments when passing too many args
Benjamin Peterson <benjamin@python.org>
parents: 59853
diff changeset
287 >>> f(6, a=4, *(1, 2, 3))
dbad1c0668c9 take into account keyword arguments when passing too many args
Benjamin Peterson <benjamin@python.org>
parents: 59853
diff changeset
288 Traceback (most recent call last):
dbad1c0668c9 take into account keyword arguments when passing too many args
Benjamin Peterson <benjamin@python.org>
parents: 59853
diff changeset
289 ...
dbad1c0668c9 take into account keyword arguments when passing too many args
Benjamin Peterson <benjamin@python.org>
parents: 59853
diff changeset
290 TypeError: f() takes exactly 1 argument (5 given)
45817
8defa1d5f066 Move test_extcall to doctest.
Brett Cannon <bcannon@gmail.com>
parents: 45468
diff changeset
291 """
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
292
58751
222b6d80e769 Merged revisions 68805 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 45875
diff changeset
293 import unittest
59850
0c344827e048 fix import
Benjamin Peterson <benjamin@python.org>
parents: 59823
diff changeset
294 import sys
45817
8defa1d5f066 Move test_extcall to doctest.
Brett Cannon <bcannon@gmail.com>
parents: 45468
diff changeset
295 from test import test_support
8defa1d5f066 Move test_extcall to doctest.
Brett Cannon <bcannon@gmail.com>
parents: 45468
diff changeset
296
58751
222b6d80e769 Merged revisions 68805 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 45875
diff changeset
297
59823
643bf9ff228f rewrite a bit
Benjamin Peterson <benjamin@python.org>
parents: 54858
diff changeset
298 class ExtCallTest(unittest.TestCase):
58751
222b6d80e769 Merged revisions 68805 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 45875
diff changeset
299
222b6d80e769 Merged revisions 68805 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 45875
diff changeset
300 def test_unicode_keywords(self):
222b6d80e769 Merged revisions 68805 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 45875
diff changeset
301 def f(a):
222b6d80e769 Merged revisions 68805 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 45875
diff changeset
302 return a
222b6d80e769 Merged revisions 68805 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 45875
diff changeset
303 self.assertEqual(f(**{u'a': 4}), 4)
222b6d80e769 Merged revisions 68805 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 45875
diff changeset
304 self.assertRaises(TypeError, f, **{u'stören': 4})
222b6d80e769 Merged revisions 68805 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 45875
diff changeset
305 self.assertRaises(TypeError, f, **{u'someLongString':2})
222b6d80e769 Merged revisions 68805 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 45875
diff changeset
306 try:
222b6d80e769 Merged revisions 68805 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 45875
diff changeset
307 f(a=4, **{u'a': 4})
222b6d80e769 Merged revisions 68805 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 45875
diff changeset
308 except TypeError:
222b6d80e769 Merged revisions 68805 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 45875
diff changeset
309 pass
222b6d80e769 Merged revisions 68805 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 45875
diff changeset
310 else:
222b6d80e769 Merged revisions 68805 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 45875
diff changeset
311 self.fail("duplicate arguments didn't raise")
222b6d80e769 Merged revisions 68805 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 45875
diff changeset
312
222b6d80e769 Merged revisions 68805 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 45875
diff changeset
313
45817
8defa1d5f066 Move test_extcall to doctest.
Brett Cannon <bcannon@gmail.com>
parents: 45468
diff changeset
314 def test_main():
59823
643bf9ff228f rewrite a bit
Benjamin Peterson <benjamin@python.org>
parents: 54858
diff changeset
315 test_support.run_doctest(sys.modules[__name__], True)
643bf9ff228f rewrite a bit
Benjamin Peterson <benjamin@python.org>
parents: 54858
diff changeset
316 test_support.run_unittest(ExtCallTest)
45817
8defa1d5f066 Move test_extcall to doctest.
Brett Cannon <bcannon@gmail.com>
parents: 45468
diff changeset
317
8defa1d5f066 Move test_extcall to doctest.
Brett Cannon <bcannon@gmail.com>
parents: 45468
diff changeset
318 if __name__ == '__main__':
8defa1d5f066 Move test_extcall to doctest.
Brett Cannon <bcannon@gmail.com>
parents: 45468
diff changeset
319 test_main()