Add testcase for nested inner class deriving from a templated base class and defined outside of the outer class.
For languages that don't support nested class support, use flatnested. See issue #270
This commit is contained in:
parent
70a04c9ffe
commit
68a936a638
4 changed files with 79 additions and 0 deletions
|
|
@ -299,6 +299,7 @@ CPP_TEST_CASES += \
|
||||||
nested_directors \
|
nested_directors \
|
||||||
nested_comment \
|
nested_comment \
|
||||||
nested_scope \
|
nested_scope \
|
||||||
|
nested_template_base \
|
||||||
nested_workaround \
|
nested_workaround \
|
||||||
newobject1 \
|
newobject1 \
|
||||||
null_pointer \
|
null_pointer \
|
||||||
|
|
|
||||||
27
Examples/test-suite/java/nested_template_base_runme.java
Normal file
27
Examples/test-suite/java/nested_template_base_runme.java
Normal file
|
|
@ -0,0 +1,27 @@
|
||||||
|
import nested_template_base.*;
|
||||||
|
|
||||||
|
public class nested_template_base_runme {
|
||||||
|
|
||||||
|
static {
|
||||||
|
try {
|
||||||
|
System.loadLibrary("nested_template_base");
|
||||||
|
} 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[]) {
|
||||||
|
OuterC.InnerS ois = new OuterC.InnerS(123);
|
||||||
|
OuterC.InnerC oic = new OuterC.InnerC();
|
||||||
|
|
||||||
|
// Check base method is available
|
||||||
|
if (oic.outer(ois).getVal() != 123)
|
||||||
|
throw new RuntimeException("Wrong value calling outer");
|
||||||
|
|
||||||
|
// Check non-derived class using base class
|
||||||
|
if (oic.innerc().outer(ois).getVal() != 123)
|
||||||
|
throw new RuntimeException("Wrong value calling innerc");
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
38
Examples/test-suite/nested_template_base.i
Normal file
38
Examples/test-suite/nested_template_base.i
Normal file
|
|
@ -0,0 +1,38 @@
|
||||||
|
%module nested_template_base
|
||||||
|
|
||||||
|
%inline %{
|
||||||
|
template <class T> class OuterT {
|
||||||
|
public:
|
||||||
|
T outer(T t) { return t; }
|
||||||
|
};
|
||||||
|
%}
|
||||||
|
|
||||||
|
// The %template goes after OuterT and before OuterC as OuterC::InnerC's base is handled inside OuterC
|
||||||
|
%template(OuterTInnerS) OuterT<OuterC::InnerS>;
|
||||||
|
|
||||||
|
#if !defined(SWIGCSHARP) && !defined(SWIGJAVA)
|
||||||
|
%feature("flatnested") OuterC::InnerS;
|
||||||
|
%feature("flatnested") OuterC::InnerC;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
%inline %{
|
||||||
|
class OuterC {
|
||||||
|
public:
|
||||||
|
class InnerS;
|
||||||
|
class InnerC;
|
||||||
|
};
|
||||||
|
|
||||||
|
struct OuterC::InnerS {
|
||||||
|
int val;
|
||||||
|
InnerS(int val = 0) : val(val) {}
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
class OuterC::InnerC : public OuterT<InnerS> {
|
||||||
|
public:
|
||||||
|
OuterT<InnerS>& innerc() {
|
||||||
|
return *this;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
%}
|
||||||
13
Examples/test-suite/python/nested_template_base_runme.py
Normal file
13
Examples/test-suite/python/nested_template_base_runme.py
Normal file
|
|
@ -0,0 +1,13 @@
|
||||||
|
from nested_template_base import *
|
||||||
|
|
||||||
|
|
||||||
|
ois = InnerS(123);
|
||||||
|
oic = InnerC();
|
||||||
|
|
||||||
|
# Check base method is available
|
||||||
|
if (oic.outer(ois).val != 123):
|
||||||
|
raise RuntimeError("Wrong value calling outer");
|
||||||
|
|
||||||
|
# Check non-derived class using base class
|
||||||
|
if (oic.innerc().outer(ois).val != 123):
|
||||||
|
raise RuntimeError("Wrong value calling innerc");
|
||||||
Loading…
Add table
Add a link
Reference in a new issue