test argument unpacking code for extension types and Python types
authorStefan Behnel <scoder@users.berlios.de>
Sat, 2 Feb 2008 11:36:30 +0000 (12:36 +0100)
committerStefan Behnel <scoder@users.berlios.de>
Sat, 2 Feb 2008 11:36:30 +0000 (12:36 +0100)
tests/run/classkwonlyargs.pyx [new file with mode: 0644]
tests/run/extkwonlyargs.pyx [new file with mode: 0644]
tests/run/kwonlyargs.pyx

diff --git a/tests/run/classkwonlyargs.pyx b/tests/run/classkwonlyargs.pyx
new file mode 100644 (file)
index 0000000..31e5b36
--- /dev/null
@@ -0,0 +1,110 @@
+__doc__ = """
+    >>> spam = Spam()
+    >>> b,c,d,e,f,g,h,k = spam.b,spam.c,spam.d,spam.e,spam.f,spam.g,spam.h,spam.k
+
+    >>> b(1,2,3)
+    >>> b(1,2,3,4)
+    Traceback (most recent call last):
+    TypeError: function takes exactly 4 arguments (5 given)
+
+    >>> c(1,2)
+    >>> c(1,2,3)
+    >>> c(1,2,3,4)
+    Traceback (most recent call last):
+    TypeError: function takes at most 4 arguments (5 given)
+
+    >>> d(1,2)
+    >>> d(1,2, c=1)
+
+    >>> d(1,2,3)
+    Traceback (most recent call last):
+    TypeError: function takes at most 3 positional arguments (4 given)
+    >>> d(1,2, d=1)
+    Traceback (most recent call last):
+    TypeError: 'd' is an invalid keyword argument for this function
+
+    >>> e(1,2)
+    >>> e(1,2, c=1)
+    >>> e(1,2, d=1)
+    >>> e(1,2, c=1, d=2, e=3)
+    >>> e(1,2,3)
+    >>> e(1,2,3,4)
+    Traceback (most recent call last):
+    TypeError: function takes at most 4 positional arguments (5 given)
+
+    >>> f(1,2, c=1)
+    >>> f(1,2, c=1, d=2)
+
+    >>> f(1,2,3)
+    Traceback (most recent call last):
+    TypeError: function takes at most 3 positional arguments (4 given)
+    >>> f(1,2)
+    Traceback (most recent call last):
+    TypeError: required keyword argument 'c' is missing
+    >>> f(1,2, c=1, e=2)
+    Traceback (most recent call last):
+    TypeError: 'e' is an invalid keyword argument for this function
+
+    >>> g(1,2, c=1, f=2)
+    >>> g(1,2, c=1, e=0, f=2, d=11)
+    >>> g(1,2, c=1, f=2, e=0, x=25)
+
+    >>> g(1,2,3)
+    Traceback (most recent call last):
+    TypeError: function takes at most 3 positional arguments (4 given)
+    >>> g(1,2)
+    Traceback (most recent call last):
+    TypeError: required keyword argument 'c' is missing
+    >>> g(1,2, c=1)
+    Traceback (most recent call last):
+    TypeError: required keyword argument 'f' is missing
+
+    >>> h(1,2, c=1, f=2)
+    >>> h(1,2, c=1, f=2, e=3)
+    >>> h(1,2,3,4,5,6, c=1, f=2)
+    >>> h(1,2,3,4,5,6, c=1, f=2, e=3, x=25, y=11)
+
+    >>> h(1,2,3)
+    Traceback (most recent call last):
+    TypeError: required keyword argument 'c' is missing
+    >>> h(1,2, d=1)
+    Traceback (most recent call last):
+    TypeError: required keyword argument 'c' is missing
+
+    >>> k(1,2, c=1, f=2)
+    >>> k(1,2, c=1, f=2, e=3)
+    >>> k(1,2,3,4,5,6, d=1, f=2)
+    >>> k(1,2,3,4,5,6, d=1, f=2, e=3, x=25, y=11)
+
+    >>> k(1,2,3)
+    Traceback (most recent call last):
+    TypeError: required keyword argument 'f' is missing
+    >>> k(1,2, d=1)
+    Traceback (most recent call last):
+    TypeError: required keyword argument 'f' is missing
+"""
+
+class Spam:
+    def b(self, a, b, c):
+        pass
+
+    def c(self, a, b, c=1):
+        pass
+
+    def d(self, a, b, *, c = 88):
+        pass
+
+    def e(self, a, b, c = 88, **kwds):
+        pass
+
+    def f(self, a, b, *, c, d = 42):
+        pass
+
+    def g(self, a, b, *, c, d = 42, e = 17, f, **kwds):
+        pass
+
+    def h(self, a, b, *args, c, d = 42, e = 17, f, **kwds):
+        pass
+
+    def k(self, a, b, c=1, *args, d = 42, e = 17, f, **kwds):
+        pass
diff --git a/tests/run/extkwonlyargs.pyx b/tests/run/extkwonlyargs.pyx
new file mode 100644 (file)
index 0000000..5c14e55
--- /dev/null
@@ -0,0 +1,110 @@
+__doc__ = """
+    >>> ext = Ext()
+    >>> b,c,d,e,f,g,h,k = ext.b,ext.c,ext.d,ext.e,ext.f,ext.g,ext.h,ext.k
+
+    >>> b(1,2,3)
+    >>> b(1,2,3,4)
+    Traceback (most recent call last):
+    TypeError: function takes exactly 3 arguments (4 given)
+
+    >>> c(1,2)
+    >>> c(1,2,3)
+    >>> c(1,2,3,4)
+    Traceback (most recent call last):
+    TypeError: function takes at most 3 arguments (4 given)
+
+    >>> d(1,2)
+    >>> d(1,2, c=1)
+
+    >>> d(1,2,3)
+    Traceback (most recent call last):
+    TypeError: function takes at most 2 positional arguments (3 given)
+    >>> d(1,2, d=1)
+    Traceback (most recent call last):
+    TypeError: 'd' is an invalid keyword argument for this function
+
+    >>> e(1,2)
+    >>> e(1,2, c=1)
+    >>> e(1,2, d=1)
+    >>> e(1,2, c=1, d=2, e=3)
+    >>> e(1,2,3)
+    >>> e(1,2,3,4)
+    Traceback (most recent call last):
+    TypeError: function takes at most 3 positional arguments (4 given)
+
+    >>> f(1,2, c=1)
+    >>> f(1,2, c=1, d=2)
+
+    >>> f(1,2,3)
+    Traceback (most recent call last):
+    TypeError: function takes at most 2 positional arguments (3 given)
+    >>> f(1,2)
+    Traceback (most recent call last):
+    TypeError: required keyword argument 'c' is missing
+    >>> f(1,2, c=1, e=2)
+    Traceback (most recent call last):
+    TypeError: 'e' is an invalid keyword argument for this function
+
+    >>> g(1,2, c=1, f=2)
+    >>> g(1,2, c=1, e=0, f=2, d=11)
+    >>> g(1,2, c=1, f=2, e=0, x=25)
+
+    >>> g(1,2,3)
+    Traceback (most recent call last):
+    TypeError: function takes at most 2 positional arguments (3 given)
+    >>> g(1,2)
+    Traceback (most recent call last):
+    TypeError: required keyword argument 'c' is missing
+    >>> g(1,2, c=1)
+    Traceback (most recent call last):
+    TypeError: required keyword argument 'f' is missing
+
+    >>> h(1,2, c=1, f=2)
+    >>> h(1,2, c=1, f=2, e=3)
+    >>> h(1,2,3,4,5,6, c=1, f=2)
+    >>> h(1,2,3,4,5,6, c=1, f=2, e=3, x=25, y=11)
+
+    >>> h(1,2,3)
+    Traceback (most recent call last):
+    TypeError: required keyword argument 'c' is missing
+    >>> h(1,2, d=1)
+    Traceback (most recent call last):
+    TypeError: required keyword argument 'c' is missing
+
+    >>> k(1,2, c=1, f=2)
+    >>> k(1,2, c=1, f=2, e=3)
+    >>> k(1,2,3,4,5,6, d=1, f=2)
+    >>> k(1,2,3,4,5,6, d=1, f=2, e=3, x=25, y=11)
+
+    >>> k(1,2,3)
+    Traceback (most recent call last):
+    TypeError: required keyword argument 'f' is missing
+    >>> k(1,2, d=1)
+    Traceback (most recent call last):
+    TypeError: required keyword argument 'f' is missing
+"""
+
+cdef class Ext:
+    def b(self, a, b, c):
+        pass
+
+    def c(self, a, b, c=1):
+        pass
+
+    def d(self, a, b, *, c = 88):
+        pass
+
+    def e(self, a, b, c = 88, **kwds):
+        pass
+
+    def f(self, a, b, *, c, d = 42):
+        pass
+
+    def g(self, a, b, *, c, d = 42, e = 17, f, **kwds):
+        pass
+
+    def h(self, a, b, *args, c, d = 42, e = 17, f, **kwds):
+        pass
+
+    def k(self, a, b, c=1, *args, d = 42, e = 17, f, **kwds):
+        pass
index d18d1d7e7b9af514ac8117c3e96703711595b13a..eae17e0b88b8cf2020ac464ee95a79a53aa54b51 100644 (file)
@@ -67,6 +67,18 @@ __doc__ = """
     >>> h(1,2, d=1)
     Traceback (most recent call last):
     TypeError: required keyword argument 'c' is missing
+
+    >>> k(1,2, c=1, f=2)
+    >>> k(1,2, c=1, f=2, e=3)
+    >>> k(1,2,3,4,5,6, d=1, f=2)
+    >>> k(1,2,3,4,5,6, d=1, f=2, e=3, x=25, y=11)
+
+    >>> k(1,2,3)
+    Traceback (most recent call last):
+    TypeError: required keyword argument 'f' is missing
+    >>> k(1,2, d=1)
+    Traceback (most recent call last):
+    TypeError: required keyword argument 'f' is missing
 """
 
 def b(a, b, c):
@@ -89,3 +101,6 @@ def g(a, b, *, c, d = 42, e = 17, f, **kwds):
 
 def h(a, b, *args, c, d = 42, e = 17, f, **kwds):
     pass
+
+def k(a, b, c=1, *args, d = 42, e = 17, f, **kwds):
+    pass