Accept keyword arguments accessing C++ static member functions when using -builtin and kwargs feature and Python class staticmethod syntax. The missing keyword argument support was only when using the class staticmethod syntax, not when using the flat static method syntax.
142 lines
2.4 KiB
Python
142 lines
2.4 KiB
Python
from kwargs_feature import *
|
|
|
|
|
|
class MyFoo(Foo):
|
|
|
|
def __init__(self, a, b=0):
|
|
Foo.__init__(self, a, b)
|
|
|
|
|
|
# Simple class
|
|
f1 = MyFoo(2)
|
|
|
|
f = Foo(b=2, a=1)
|
|
|
|
if f.foo(b=1, a=2) != 3:
|
|
raise RuntimeError
|
|
|
|
if Foo.statfoo(b=2) != 3:
|
|
raise RuntimeError
|
|
|
|
if Foo.statfoo_onearg(x=4) != 8:
|
|
raise RuntimeError
|
|
|
|
if f.efoo(b=2) != 3:
|
|
raise RuntimeError
|
|
|
|
if Foo.sfoo(b=2) != 3:
|
|
raise RuntimeError
|
|
|
|
|
|
# Templated class
|
|
b = BarInt(b=2, a=1)
|
|
|
|
if b.bar(b=1, a=2) != 3:
|
|
raise RuntimeError
|
|
|
|
if BarInt.statbar(b=2) != 3:
|
|
raise RuntimeError
|
|
|
|
if b.ebar(b=2) != 3:
|
|
raise RuntimeError
|
|
|
|
if BarInt.sbar(b=2) != 3:
|
|
raise RuntimeError
|
|
|
|
|
|
# Functions
|
|
if templatedfunction(b=2) != 3:
|
|
raise RuntimeError
|
|
|
|
if foo_fn(a=1, b=2) != 3:
|
|
raise RuntimeError
|
|
|
|
if foo_fn(b=2) != 3:
|
|
raise RuntimeError
|
|
|
|
|
|
# Functions with keywords
|
|
|
|
if foo_kw(_from=2) != 4:
|
|
raise RuntimeError
|
|
|
|
if foo_nu(_from=2, arg2=3) != 2:
|
|
raise RuntimeError
|
|
|
|
if foo_mm(min=2) != 4:
|
|
raise RuntimeError
|
|
|
|
if foo_mm(max=3) != 4:
|
|
raise RuntimeError
|
|
|
|
# Default args with references
|
|
|
|
if rfoo(n=123) != 120:
|
|
raise RuntimeError
|
|
|
|
if rfoo(x=10) != -10:
|
|
raise RuntimeError
|
|
|
|
if rfoo(n=11, x=22) != -11:
|
|
raise RuntimeError
|
|
|
|
if rfoo(x=11, n=22) != 11:
|
|
raise RuntimeError
|
|
|
|
# Extended constructors
|
|
e = Extending0()
|
|
e = Extending1(one=1)
|
|
e = Extending1(1)
|
|
e = Extending2(1, "two")
|
|
e = Extending2(1, two="two")
|
|
e = Extending2(two="two", one=1)
|
|
e = ExtendingOptArgs1()
|
|
e = ExtendingOptArgs1(1)
|
|
e = ExtendingOptArgs2(one=1)
|
|
e = ExtendingOptArgs2()
|
|
e = ExtendingOptArgs2(one=1)
|
|
e = ExtendingOptArgs2(two="two")
|
|
e = ExtendingOptArgs2(two="two", one=1)
|
|
|
|
# Invalid kwargs test
|
|
h = Hello()
|
|
try:
|
|
h = Hello(nonexistent=10)
|
|
raise RuntimeError("missed exception")
|
|
except TypeError as e:
|
|
pass
|
|
|
|
f = Foo(1)
|
|
f = Foo(a=1)
|
|
try:
|
|
f = Foo(nonexistent=10)
|
|
raise RuntimeError("missed exception")
|
|
except TypeError as e:
|
|
pass
|
|
|
|
try:
|
|
f = Foo(a=1, nonexistent=10)
|
|
raise RuntimeError("missed exception")
|
|
except TypeError as e:
|
|
pass
|
|
|
|
try:
|
|
f = Foo(1, nonexistent=10)
|
|
raise RuntimeError("missed exception")
|
|
except TypeError as e:
|
|
pass
|
|
|
|
# Varargs
|
|
f = VarargConstructor(fmt="Ciao")
|
|
f.vararg_method(fmt="Bonjour")
|
|
try:
|
|
f = VarargConstructor(nonexistent="Ciao")
|
|
raise RuntimeError("missed exception")
|
|
except TypeError as e:
|
|
pass
|
|
|
|
try:
|
|
f.vararg_method(nonexistent="Bonjour")
|
|
raise RuntimeError("missed exception")
|
|
except TypeError as e:
|
|
pass
|