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)