extended test for star args in extension functions
authorStefan Behnel <scoder@users.berlios.de>
Wed, 6 Feb 2008 19:58:19 +0000 (20:58 +0100)
committerStefan Behnel <scoder@users.berlios.de>
Wed, 6 Feb 2008 19:58:19 +0000 (20:58 +0100)
tests/run/extstarargs.pyx

index dc00d2e958ebc690db980e254cb2972104d8c118..9e51a71e631519ac2d4c30c7feaa29b8fc5e0dcb 100644 (file)
 __doc__ = """
     >>> s = Silly(1,2,3, 'test')
+    >>> (spam,grail,swallow,creosote,onlyt,onlyk,tk) = (
+    ...     s.spam,s.grail,s.swallow,s.creosote,s.onlyt,s.onlyk,s.tk)
 
-    >>> s.spam(1,2,3)
-    >>> s.spam(1,2)
+    >>> spam(1,2,3)
+    (1, 2, 3)
+    >>> spam(1,2)
     Traceback (most recent call last):
     TypeError: function takes exactly 3 arguments (2 given)
-    >>> s.spam(1,2,3,4)
+    >>> spam(1,2,3,4)
     Traceback (most recent call last):
     TypeError: function takes exactly 3 arguments (4 given)
-    >>> s.spam(1,2,3, a=1)
+    >>> spam(1,2,3, a=1)
     Traceback (most recent call last):
     TypeError: 'a' is an invalid keyword argument for this function
 
-    >>> s.grail(1,2,3)
-    >>> s.grail(1,2,3,4)
-    >>> s.grail(1,2,3,4,5,6,7,8,9)
-    >>> s.grail(1,2)
+    >>> grail(1,2,3)
+    (1, 2, 3, ())
+    >>> grail(1,2,3,4)
+    (1, 2, 3, (4,))
+    >>> grail(1,2,3,4,5,6,7,8,9)
+    (1, 2, 3, (4, 5, 6, 7, 8, 9))
+    >>> grail(1,2)
     Traceback (most recent call last):
     TypeError: function takes exactly 3 arguments (2 given)
-    >>> s.grail(1,2,3, a=1)
+    >>> grail(1,2,3, a=1)
     Traceback (most recent call last):
     TypeError: 'a' is an invalid keyword argument for this function
 
-    >>> s.swallow(1,2,3)
-    >>> s.swallow(1,2,3,4)
+    >>> swallow(1,2,3)
+    (1, 2, 3, ())
+    >>> swallow(1,2,3,4)
     Traceback (most recent call last):
     TypeError: function takes at most 3 positional arguments (4 given)
-    >>> s.swallow(1,2,3, a=1, b=2)
-    >>> s.swallow(1,2,3, x=1)
+    >>> swallow(1,2,3, a=1, b=2)
+    (1, 2, 3, (('a', 1), ('b', 2)))
+    >>> swallow(1,2,3, x=1)
     Traceback (most recent call last):
     TypeError: keyword parameter 'x' was given by position and by name
 
-    >>> s.creosote(1,2,3)
-    >>> s.creosote(1,2,3,4)
-    >>> s.creosote(1,2,3, a=1)
-    >>> s.creosote(1,2,3,4, a=1, b=2)
-    >>> s.creosote(1,2,3,4, x=1)
+    >>> creosote(1,2,3)
+    (1, 2, 3, (), ())
+    >>> creosote(1,2,3,4)
+    (1, 2, 3, (4,), ())
+    >>> creosote(1,2,3, a=1)
+    (1, 2, 3, (), (('a', 1),))
+    >>> creosote(1,2,3,4, a=1, b=2)
+    (1, 2, 3, (4,), (('a', 1), ('b', 2)))
+    >>> creosote(1,2,3,4, x=1)
     Traceback (most recent call last):
     TypeError: keyword parameter 'x' was given by position and by name
+
+    >>> onlyt(1)
+    (1,)
+    >>> onlyt(1,2)
+    (1, 2)
+    >>> onlyt(a=1)
+    Traceback (most recent call last):
+    TypeError: 'a' is an invalid keyword argument for this function
+    >>> onlyt(1, a=2)
+    Traceback (most recent call last):
+    TypeError: 'a' is an invalid keyword argument for this function
+
+    >>> onlyk(a=1)
+    (('a', 1),)
+    >>> onlyk(a=1, b=2)
+    (('a', 1), ('b', 2))
+    >>> onlyk(1)
+    Traceback (most recent call last):
+    TypeError: function takes at most 0 positional arguments (1 given)
+    >>> onlyk(1, 2)
+    Traceback (most recent call last):
+    TypeError: function takes at most 0 positional arguments (2 given)
+    >>> onlyk(1, a=1, b=2)
+    Traceback (most recent call last):
+    TypeError: function takes at most 0 positional arguments (1 given)
+
+    >>> tk(a=1)
+    (('a', 1),)
+    >>> tk(a=1, b=2)
+    (('a', 1), ('b', 2))
+    >>> tk(1)
+    (1,)
+    >>> tk(1, 2)
+    (1, 2)
+    >>> tk(1, a=1, b=2)
+    (1, ('a', 1), ('b', 2))
 """
 
+cdef sorteditems(d):
+    l = d.items()
+    l.sort()
+    return tuple(l)
+
 cdef class Silly:
 
     def __init__(self, *a):
         pass
 
     def spam(self, x, y, z):
-        pass
-    
+        return (x, y, z)
+
     def grail(self, x, y, z, *a):
-        pass
-    
+        return (x, y, z, a)
+
     def swallow(self, x, y, z, **k):
-        pass
-    
+        return (x, y, z, sorteditems(k))
+
     def creosote(self, x, y, z, *a, **k):
-        pass
+        return (x, y, z, a, sorteditems(k))
+
+    def onlyt(self, *a):
+        return a
+
+    def onlyk(self, **k):
+        return sorteditems(k)
+
+    def tk(self, *a, **k):
+        return a + sorteditems(k)