summaryrefslogtreecommitdiff
path: root/Examples/test-suite/java/java_director_runme.java
diff options
context:
space:
mode:
Diffstat (limited to 'Examples/test-suite/java/java_director_runme.java')
-rw-r--r--Examples/test-suite/java/java_director_runme.java75
1 files changed, 75 insertions, 0 deletions
diff --git a/Examples/test-suite/java/java_director_runme.java b/Examples/test-suite/java/java_director_runme.java
new file mode 100644
index 0000000..dffba0e
--- /dev/null
+++ b/Examples/test-suite/java/java_director_runme.java
@@ -0,0 +1,75 @@
+// Mainly tests that directors are finalized correctly
+
+import java_director.*;
+
+public class java_director_runme {
+
+ static {
+ try {
+ System.loadLibrary("java_director");
+ } 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[]) {
+ QuuxContainer qc = createContainer();
+
+ int instances = Quux.instances();
+ if (instances != 4)
+ throw new RuntimeException("Quux instances should be 4, actually " + instances);
+
+ for (int i = 0; i < qc.size(); ++i) {
+ Quux q = qc.get(i);
+
+ if (!q.director_method().equals(qc.invoke(i))) {
+ throw new RuntimeException ( "q.director_method()/qv.invoke(" + i + ")");
+ }
+ }
+
+ qc = null;
+ /* Watch qc get reaped, which causes the C++ object to delete
+ objects from the internal vector */
+ System.gc();
+ System.runFinalization();
+
+ /* Watch the Quux objects formerly in the QuuxContainer object
+ get reaped */
+ System.gc();
+ System.runFinalization();
+
+ instances = Quux.instances();
+ if (instances != 0)
+ throw new RuntimeException("Quux instances should be 0, actually " + instances);
+
+ /* Test Quux1's director disconnect method rename */
+ Quux1 quux1 = new Quux1("quux1");
+ if (quux1.disconnectMethodCalled)
+ throw new RuntimeException("Oops");
+ quux1.delete();
+ if (!quux1.disconnectMethodCalled)
+ throw new RuntimeException("disconnect method not called");
+ }
+
+ public static QuuxContainer createContainer() {
+ QuuxContainer qc = new QuuxContainer();
+
+ qc.push(new Quux("element 1"));
+ qc.push(new java_director_MyQuux("element 2"));
+ qc.push(new java_director_MyQuux("element 3"));
+ qc.push(new Quux("element 4"));
+
+ return qc;
+ }
+}
+
+class java_director_MyQuux extends Quux {
+ public java_director_MyQuux(String arg) {
+ super(arg);
+ }
+
+ public String director_method() {
+ return "java_director_MyQuux:" + member();
+ }
+}