diff options
Diffstat (limited to 'Examples/test-suite/python/cpp_parameters_runme.py')
-rw-r--r-- | Examples/test-suite/python/cpp_parameters_runme.py | 296 |
1 files changed, 296 insertions, 0 deletions
diff --git a/Examples/test-suite/python/cpp_parameters_runme.py b/Examples/test-suite/python/cpp_parameters_runme.py new file mode 100644 index 000000000..99d14ad74 --- /dev/null +++ b/Examples/test-suite/python/cpp_parameters_runme.py @@ -0,0 +1,296 @@ +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) |