mirror of https://github.com/swig/swig
297 lines
6.1 KiB
Python
297 lines
6.1 KiB
Python
from cpp_parameters import *
|
|
|
|
# Testing correct and incorrect parameter counts being passed (kwargs and non-kwargs)
|
|
# Note that the implementation depends a lot on whether zero, one, two or more args are being wrapped
|
|
|
|
def is_python_fastproxy():
|
|
"""Return True if SWIG is generating Python code using -fastproxy."""
|
|
import cpp_parameters
|
|
# Note: _swig_new_instance_method is only generated when using -fastproxy
|
|
return hasattr(cpp_parameters, "_swig_new_instance_method")
|
|
|
|
# Zero parameters expected
|
|
x = Zero()
|
|
try:
|
|
x = Zero(z=0)
|
|
raise RuntimeError("Missed throw")
|
|
except TypeError:
|
|
pass
|
|
try:
|
|
x = Zero(0)
|
|
raise RuntimeError("Missed throw")
|
|
except TypeError:
|
|
pass
|
|
|
|
try:
|
|
x.zero(z=0)
|
|
raise RuntimeError("Missed throw")
|
|
except TypeError:
|
|
pass
|
|
try:
|
|
x.zero(0)
|
|
raise RuntimeError("Missed throw")
|
|
except TypeError:
|
|
pass
|
|
|
|
try:
|
|
Zero.stat_zero(z=0)
|
|
raise RuntimeError("Missed throw")
|
|
except TypeError:
|
|
pass
|
|
try:
|
|
Zero.stat_zero(0)
|
|
raise RuntimeError("Missed throw")
|
|
except TypeError:
|
|
pass
|
|
|
|
try:
|
|
global_zero(z=0)
|
|
raise RuntimeError("Missed throw")
|
|
except TypeError:
|
|
pass
|
|
try:
|
|
global_zero(0)
|
|
raise RuntimeError("Missed throw")
|
|
except TypeError:
|
|
pass
|
|
|
|
# One mandatory parameter expected
|
|
x = One(1)
|
|
try:
|
|
x = One(a=1, z=0)
|
|
raise RuntimeError("Missed throw")
|
|
except TypeError:
|
|
pass
|
|
try:
|
|
x = One(1, 0)
|
|
raise RuntimeError("Missed throw")
|
|
except TypeError:
|
|
pass
|
|
|
|
try:
|
|
x.one(a=1, z=0)
|
|
raise RuntimeError("Missed throw")
|
|
except TypeError:
|
|
pass
|
|
try:
|
|
x.one(1, 0)
|
|
raise RuntimeError("Missed throw")
|
|
except TypeError:
|
|
pass
|
|
|
|
try:
|
|
One.stat_one(a=1, z=0)
|
|
raise RuntimeError("Missed throw")
|
|
except TypeError:
|
|
pass
|
|
try:
|
|
One.stat_one(1, 0)
|
|
raise RuntimeError("Missed throw")
|
|
except TypeError:
|
|
pass
|
|
|
|
try:
|
|
global_one(a=1, z=0)
|
|
raise RuntimeError("Missed throw")
|
|
except TypeError:
|
|
pass
|
|
try:
|
|
global_one(1, 0)
|
|
raise RuntimeError("Missed throw")
|
|
except TypeError:
|
|
pass
|
|
|
|
# Two mandatory parameters expected
|
|
x = Two(1, 2)
|
|
try:
|
|
x = Two(a=1, b=2, z=0)
|
|
raise RuntimeError("Missed throw")
|
|
except TypeError:
|
|
pass
|
|
try:
|
|
x = Two(1, 2, 0)
|
|
raise RuntimeError("Missed throw")
|
|
except TypeError:
|
|
pass
|
|
|
|
try:
|
|
x.two(a=1, b=2, z=0)
|
|
raise RuntimeError("Missed throw")
|
|
except TypeError:
|
|
pass
|
|
try:
|
|
x.two(1, 2, 0)
|
|
raise RuntimeError("Missed throw")
|
|
except TypeError:
|
|
pass
|
|
|
|
try:
|
|
Two.stat_two(a=1, b=2, z=0)
|
|
raise RuntimeError("Missed throw")
|
|
except TypeError:
|
|
pass
|
|
try:
|
|
Two.stat_two(1, 2, 0)
|
|
raise RuntimeError("Missed throw")
|
|
except TypeError:
|
|
pass
|
|
|
|
try:
|
|
global_two(a=1, b=2, z=0)
|
|
raise RuntimeError("Missed throw")
|
|
except TypeError:
|
|
pass
|
|
try:
|
|
global_two(1, 2, 0)
|
|
raise RuntimeError("Missed throw")
|
|
except TypeError:
|
|
pass
|
|
|
|
# Single optional parameter expected
|
|
x = Single(1)
|
|
try:
|
|
x = Single(a=1, z=0)
|
|
raise RuntimeError("Missed throw")
|
|
except TypeError:
|
|
pass
|
|
try:
|
|
x = Single(1, 0)
|
|
raise RuntimeError("Missed throw")
|
|
except TypeError:
|
|
pass
|
|
|
|
try:
|
|
x.single(a=1, z=0)
|
|
raise RuntimeError("Missed throw")
|
|
except TypeError:
|
|
pass
|
|
try:
|
|
x.single(1, 0)
|
|
raise RuntimeError("Missed throw")
|
|
except TypeError:
|
|
pass
|
|
|
|
try:
|
|
Single.stat_single(a=1, z=0)
|
|
raise RuntimeError("Missed throw")
|
|
except TypeError:
|
|
pass
|
|
try:
|
|
Single.stat_single(1, 0)
|
|
raise RuntimeError("Missed throw")
|
|
except TypeError:
|
|
pass
|
|
|
|
try:
|
|
global_single(a=1, z=0)
|
|
raise RuntimeError("Missed throw")
|
|
except TypeError:
|
|
pass
|
|
try:
|
|
global_single(1, 0)
|
|
raise RuntimeError("Missed throw")
|
|
except TypeError:
|
|
pass
|
|
|
|
# Test that -builtin option throws TypeError if kwargs are used even when they look like they should work, kwargs are not supported unless using -keyword.
|
|
# Also same for -fastproxy option except that kwargs are supported by default for constructors. TODO: Fix inconsistency.
|
|
|
|
if is_python_builtin() or is_python_fastproxy():
|
|
# One mandatory parameter in API
|
|
x = One(1)
|
|
if is_python_fastproxy():
|
|
x = One(a=1)
|
|
else:
|
|
try:
|
|
x = One(a=1)
|
|
raise RuntimeError("Missed throw")
|
|
except TypeError:
|
|
pass
|
|
try:
|
|
x.one(a=1)
|
|
raise RuntimeError("Missed throw")
|
|
except TypeError:
|
|
pass
|
|
try:
|
|
One.stat_one(a=1)
|
|
raise RuntimeError("Missed throw")
|
|
except TypeError:
|
|
pass
|
|
try:
|
|
global_one(a=1)
|
|
raise RuntimeError("Missed throw")
|
|
except TypeError:
|
|
pass
|
|
|
|
# Two mandatory parameters in API
|
|
x = Two(1, 2)
|
|
if is_python_fastproxy():
|
|
x = Two(a=1, b=2)
|
|
else:
|
|
try:
|
|
x = Two(a=1, b=2)
|
|
raise RuntimeError("Missed throw")
|
|
except TypeError:
|
|
pass
|
|
try:
|
|
x.two(a=1, b=2)
|
|
raise RuntimeError("Missed throw")
|
|
except TypeError:
|
|
pass
|
|
try:
|
|
Two.stat_two(a=1, b=2)
|
|
raise RuntimeError("Missed throw")
|
|
except TypeError:
|
|
pass
|
|
try:
|
|
global_two(a=1, b=2)
|
|
raise RuntimeError("Missed throw")
|
|
except TypeError:
|
|
pass
|
|
|
|
# Single optional parameter in API
|
|
x = Single(1)
|
|
if is_python_fastproxy():
|
|
x = Single(a=1)
|
|
else:
|
|
try:
|
|
x = Single(a=1)
|
|
raise RuntimeError("Missed throw")
|
|
except TypeError:
|
|
pass
|
|
try:
|
|
x.single(a=1)
|
|
raise RuntimeError("Missed throw")
|
|
except TypeError:
|
|
pass
|
|
try:
|
|
Single.stat_single(a=1)
|
|
raise RuntimeError("Missed throw")
|
|
except TypeError:
|
|
pass
|
|
try:
|
|
global_single(a=1)
|
|
raise RuntimeError("Missed throw")
|
|
except TypeError:
|
|
pass
|
|
|
|
else:
|
|
# Non-builtin should work as expected
|
|
# One mandatory parameter in API
|
|
x = One(a=1)
|
|
x.one(a=1)
|
|
One.stat_one(a=1)
|
|
global_one(a=1)
|
|
|
|
# Two mandatory parameters in API
|
|
x = Two(a=1, b=2)
|
|
x.two(a=1, b=2)
|
|
Two.stat_two(a=1, b=2)
|
|
global_two(a=1, b=2)
|
|
|
|
# Single optional parameter in API
|
|
x = Single(a=1)
|
|
x.single(a=1)
|
|
Single.stat_single(a=1)
|
|
global_single(a=1)
|