diff --git a/Examples/test-suite/java/special_variables_runme.java b/Examples/test-suite/java/special_variables_runme.java new file mode 100644 index 000000000..2e5fa674b --- /dev/null +++ b/Examples/test-suite/java/special_variables_runme.java @@ -0,0 +1,53 @@ + +import special_variables.*; + +public class special_variables_runme { + + static { + try { + System.loadLibrary("special_variables"); + } catch (UnsatisfiedLinkError e) { + System.err.println("Native code library failed to load. See the chapter on Dynamic Linking Problems in the SWIG Java documentation for help.\n" + e); + System.exit(1); + } + } + + public static void main(String argv[]) + { + verify(special_variables.ExceptionVars(1.0, 2.0), + "result = Space::exceptionvars(arg1,arg2); Space::exceptionvars ExceptionVars Java_special_1variables_special_1variablesJNI_ExceptionVars"); + + verify(special_variables.overloadedmethod(), + "result = Space::overloadedmethod(); Space::overloadedmethod overloadedmethod __SWIG_1 Java_special_1variables_special_1variablesJNI_overloadedmethod_1_1SWIG_11"); + + verify(special_variables.overloadedmethod(10.0), + "result = Space::overloadedmethod(arg1); Space::overloadedmethod overloadedmethod __SWIG_0 Java_special_1variables_special_1variablesJNI_overloadedmethod_1_1SWIG_10"); + + ABC a = new ABC(0, 0.0); + verify(special_variables.getDeclaration(), "SpaceNamespace::ABC::ABC(int,double) SpaceNamespace::ABC::ABC(int,double)"); + a = new ABC(); + verify(special_variables.getDeclaration(), "SpaceNamespace::ABC::ABC() SpaceNamespace::ABC::ABC()"); + a.instancemethod(1); + verify(special_variables.getDeclaration(), "short * SpaceNamespace::ABC::instancemethod(int) SpaceNamespace::ABC::instancemethod(int)"); + a.instancemethod(1, false); + verify(special_variables.getDeclaration(), "short * SpaceNamespace::ABC::instancemethod(int,bool) SpaceNamespace::ABC::instancemethod(int,bool)"); + a.constmethod(1); + verify(special_variables.getDeclaration(), "short * SpaceNamespace::ABC::constmethod(int) const SpaceNamespace::ABC::constmethod(int) const"); + ABC.staticmethod(0, false); + verify(special_variables.getDeclaration(), "short * SpaceNamespace::ABC::staticmethod(int,bool) SpaceNamespace::ABC::staticmethod(int,bool)"); + a.delete(); + verify(special_variables.getDeclaration(), "SpaceNamespace::ABC::~ABC() SpaceNamespace::ABC::~ABC()"); + TemplateABC abc = new TemplateABC(); + verify(special_variables.getDeclaration(), "SpaceNamespace::Template::Template() SpaceNamespace::Template::Template()"); + abc.tmethod(new ABC()); + verify(special_variables.getDeclaration(), "std::string SpaceNamespace::Template::tmethod(SpaceNamespace::ABC) SpaceNamespace::Template::tmethod(SpaceNamespace::ABC)"); + abc.delete(); + verify(special_variables.getDeclaration(), "SpaceNamespace::Template::~Template() SpaceNamespace::Template::~Template()"); + special_variables.globtemplate(new TemplateABC()); + verify(special_variables.getDeclaration(), "void SpaceNamespace::globtemplate(SpaceNamespace::Template) SpaceNamespace::globtemplate(SpaceNamespace::Template)"); + } + static void verify(String received, String expected) { + if (!received.equals(expected)) + throw new RuntimeException("Incorrect, received: " + received); + } +} diff --git a/Examples/test-suite/special_variables.i b/Examples/test-suite/special_variables.i index d5673b6db..e8853cec2 100644 --- a/Examples/test-suite/special_variables.i +++ b/Examples/test-suite/special_variables.i @@ -1,5 +1,7 @@ %module special_variables +%include + // will fail to compile if $symname is not expanded %typemap(argout) int i { $symname(99); @@ -18,3 +20,71 @@ struct KKK { }; %} +%{ +std::string ExceptionVars(double i, double j) { + return "a1"; +} +%} + +%rename(ExceptionVars) Space::exceptionvars; +%exception Space::exceptionvars %{ + $action + result = $symname(1.0,2.0); // Should expand to ExceptionVars + result = $name(3.0,4.0); // Should expand to Space::exceptionvars + // above will not compile if the variables are not expanded properly + result = "$action $name $symname $overname $wrapname"; +%} +%inline %{ +namespace Space { +std::string exceptionvars(double i, double j) { + return "b2"; +} +} +%} + + +%exception Space::overloadedmethod %{ + $action + result = Space::$symname(1.0); + result = $name(); + result = $name(2.0); + // above will not compile if the variables are not expanded properly + result = "$action $name $symname $overname $wrapname"; + // $decl +%} + +%inline %{ +namespace Space { + std::string overloadedmethod(double j) { + return "c3"; + } + std::string overloadedmethod() { + return "d4"; + } +} +std::string declaration; +%} + +%exception { + $action + declaration = "$fulldecl $decl"; +} + +%inline %{ +namespace SpaceNamespace { + struct ABC { + ABC(int a, double b) {} + ABC() {} + static short * staticmethod(int x, bool b) { return 0; } + short * instancemethod(int x, bool b = false) { return 0; } + short * constmethod(int x) const { return 0; } + }; + template struct Template { + std::string tmethod(T t) { return ""; } + }; + void globtemplate(Template t) {} +} +%} + +%template(TemplateABC) SpaceNamespace::Template; +