| import cpp11_template_using_base.*; | |
| public class cpp11_template_using_base_runme { | |
| static { | |
| try { | |
| System.loadLibrary("cpp11_template_using_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); | |
| } | |
| } | |
| private static void check(String actual, String expected) { | |
| if (!actual.equals(expected)) | |
| throw new RuntimeException("expected '" + expected + "' but got '" + actual + "'"); | |
| } | |
| public static void main(String argv[]) { | |
| DerivedInt d = new DerivedInt(); | |
| check(d.call(7), "Int:7"); | |
| // Inheriting constructor: using I::I; brings IntCase(int) into DerivedInt | |
| DerivedInt d10 = new DerivedInt(10); | |
| check(d10.call(7), "Int:17"); | |
| // Inheriting constructor through a typedef-name for a template-instance base (issue #2951) | |
| check(new TypedefMixin().call(7), "Int:7"); | |
| check(new TypedefMixin(10).call(7), "Int:17"); | |
| // As above but the unqualified-id is the base template's own name through the typedef (issue #2951) | |
| check(new TypedefNameMixin().call(7), "Int:7"); | |
| check(new TypedefNameMixin(10).call(7), "Int:17"); | |
| // As above but through a typedef of a typedef (issue #2951) | |
| check(new TypedefChainMixin().call(7), "Int:7"); | |
| check(new TypedefChainMixin(10).call(7), "Int:17"); | |
| // Multiple bases plus a typedef of a typedef naming the base (issue #2951) | |
| TypedefChainMultiBase tcmb = new TypedefChainMultiBase(); | |
| check(tcmb.call(7), "Int:7"); | |
| check(tcmb.call(7.5), "Double:7.500000"); | |
| check(new TypedefChainMultiBase(10).call(7), "Int:17"); | |
| // Multiple bases where the base is named through a typedef-argument typedef (issue #2951) | |
| TypedefArgMultiBase tamb = new TypedefArgMultiBase(); | |
| check(tamb.call(7), "Int:7"); | |
| check(tamb.call(7.5), "Double:7.500000"); | |
| check(new TypedefArgMultiBase(10).call(7), "Int:17"); | |
| // Base named through a scope-qualified qualifier: using ns2951::QualBase::QualBase (issue #2951) | |
| check(new QualifiedBaseUsing().call(7), "Int:7"); | |
| check(new QualifiedBaseUsing(10).call(7), "Int:17"); | |
| // Same immediate base named through a non-fully-qualified qualifier: using QualBase::QualBase (issue #2951) | |
| check(new SemiQualifiedBaseUsing().call(7), "Int:7"); | |
| check(new SemiQualifiedBaseUsing(10).call(7), "Int:17"); | |
| // Base reached through a typedef of a typedef whose intermediate lives in a namespace (issue #2951) | |
| check(new NsChainUsing().call(7), "Int:7"); | |
| check(new NsChainUsing(10).call(7), "Int:17"); | |
| OverloadedIntDouble o = new OverloadedIntDouble(); | |
| check(o.call(7), "Int:7"); | |
| check(o.call(7.5), "Double:7.500000"); | |
| } | |
| } |