Mercurial > cpython-lru_cache-weakref
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 |
| 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 | 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 | 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 | 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 | 315 test_support.run_doctest(sys.modules[__name__], True) |
| 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() |
