PageRenderTime 47ms CodeModel.GetById 22ms RepoModel.GetById 1ms app.codeStats 0ms

/trunk/Examples/test-suite/java/director_classes_runme.java

#
Java | 207 lines | 121 code | 26 blank | 60 comment | 29 complexity | eed2fa40496b974087c44060b171f4e7 MD5 | raw file
Possible License(s): LGPL-2.1, Cube, GPL-3.0, 0BSD, GPL-2.0
  1. /*
  2. This test demonstrates director classes when the types are classes.
  3. Shown are virtual function calls which use classes passed by:
  4. - Value
  5. - Reference
  6. - Pointer
  7. as both parameters and return values.
  8. The test also demonstrates directors used with:
  9. - method overloading
  10. - default parameters
  11. Note: Methods with default parameters that call up from C++ cannot call
  12. the overloaded Java methods, see DefaultParms method.
  13. Expected output if PrintDebug enabled:
  14. ------------ Start ------------
  15. Base - Val(444.555)
  16. Base - Ref(444.555)
  17. Base - Ptr(444.555)
  18. Base - FullyOverloaded(int 10)
  19. Base - FullyOverloaded(bool 1)
  20. Base - SemiOverloaded(int -678)
  21. Base - SemiOverloaded(bool 1)
  22. Base - DefaultParms(10, 2.2)
  23. Base - DefaultParms(10, 1.1)
  24. --------------------------------
  25. Derived - Val(444.555)
  26. Derived - Ref(444.555)
  27. Derived - Ptr(444.555)
  28. Derived - FullyOverloaded(int 10)
  29. Derived - FullyOverloaded(bool 1)
  30. Derived - SemiOverloaded(int -678)
  31. Base - SemiOverloaded(bool 1)
  32. Derived - DefaultParms(10, 2.2)
  33. Derived - DefaultParms(10, 1.1)
  34. --------------------------------
  35. JavaDerived - Val(444.555)
  36. JavaDerived - Ref(444.555)
  37. JavaDerived - Ptr(444.555)
  38. JavaDerived - FullyOverloaded(int 10)
  39. JavaDerived - FullyOverloaded(bool True)
  40. JavaDerived - SemiOverloaded(-678)
  41. Base - SemiOverloaded(bool 1)
  42. JavaDerived - DefaultParms(10, 2.2)
  43. JavaDerived - DefaultParms(10, 1.1)
  44. ------------ Finish ------------
  45. */
  46. import director_classes.*;
  47. public class director_classes_runme {
  48. static {
  49. try {
  50. System.loadLibrary("director_classes");
  51. } catch (UnsatisfiedLinkError e) {
  52. 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);
  53. System.exit(1);
  54. }
  55. }
  56. public static void main(String argv[]) throws Throwable
  57. {
  58. director_classes_runme r = new director_classes_runme();
  59. r.run();
  60. }
  61. void run()
  62. {
  63. if (director_classes.getPrintDebug()) System.out.println("------------ Start ------------ ");
  64. Caller myCaller = new Caller();
  65. // test C++ base class
  66. {
  67. Base myBase = new Base(100.0);
  68. makeCalls(myCaller, myBase);
  69. myBase.delete();
  70. }
  71. if (director_classes.getPrintDebug()) System.out.println("--------------------------------");
  72. // test vanilla C++ wrapped derived class
  73. {
  74. Base myBase = new Derived(200.0);
  75. makeCalls(myCaller, myBase);
  76. myBase.delete();
  77. }
  78. if (director_classes.getPrintDebug()) System.out.println("--------------------------------");
  79. // test director / Java derived class
  80. {
  81. Base myBase = new JavaDerived(300.0);
  82. makeCalls(myCaller, myBase);
  83. myBase.delete();
  84. }
  85. if (director_classes.getPrintDebug()) System.out.println("------------ Finish ------------ ");
  86. }
  87. void makeCalls(Caller myCaller, Base myBase)
  88. {
  89. String baseSimpleName = getSimpleName(myBase.getClass());
  90. myCaller.set(myBase);
  91. DoubleHolder dh = new DoubleHolder(444.555);
  92. // Class pointer, reference and pass by value tests
  93. if (myCaller.ValCall(dh).getVal() != dh.getVal()) throw new RuntimeException("failed");
  94. if (myCaller.RefCall(dh).getVal() != dh.getVal()) throw new RuntimeException("failed");
  95. if (myCaller.PtrCall(dh).getVal() != dh.getVal()) throw new RuntimeException("failed");
  96. // Fully overloaded method test (all methods in base class are overloaded)
  97. if (!myCaller.FullyOverloadedCall(10).equals(baseSimpleName + "::FullyOverloaded(int)")) {
  98. System.out.println(myCaller.FullyOverloadedCall(10) + "----" + (baseSimpleName + "::FullyOverloaded(int)"));
  99. throw new RuntimeException("failed");
  100. }
  101. if (!myCaller.FullyOverloadedCall(true).equals(baseSimpleName + "::FullyOverloaded(bool)")) throw new RuntimeException("failed");
  102. // Semi overloaded method test (some methods in base class are overloaded)
  103. if (!myCaller.SemiOverloadedCall(-678).equals(baseSimpleName + "::SemiOverloaded(int)")) throw new RuntimeException("failed");
  104. if (!myCaller.SemiOverloadedCall(true).equals("Base" + "::SemiOverloaded(bool)")) throw new RuntimeException("failed");
  105. // Default parameters methods test
  106. if (!(myCaller.DefaultParmsCall(10, 2.2)).equals(baseSimpleName + "::DefaultParms(int, double)")) throw new RuntimeException("failed");
  107. if (myBase instanceof JavaDerived) { // special handling for Java derived classes, there is no way to do this any other way
  108. if (!myCaller.DefaultParmsCall(10).equals(baseSimpleName + "::DefaultParms(int, double)")) throw new RuntimeException("failed");
  109. } else {
  110. if (!myCaller.DefaultParmsCall(10).equals(baseSimpleName + "::DefaultParms(int)")) throw new RuntimeException("failed");
  111. }
  112. myCaller.reset();
  113. }
  114. // Same as Class.getSimpleName() which is not present in all jdks
  115. static String getSimpleName(Class klass) {
  116. String fullName = klass.getName();
  117. Package packag = klass.getPackage();
  118. String simpleName = null;
  119. if (packag != null)
  120. simpleName = fullName.replaceAll(packag.getName() + ".", "");
  121. else
  122. simpleName = fullName;
  123. return simpleName;
  124. }
  125. }
  126. class JavaDerived extends Base
  127. {
  128. public JavaDerived(double dd)
  129. {
  130. super(dd);
  131. }
  132. public DoubleHolder Val(DoubleHolder x)
  133. {
  134. if (director_classes.getPrintDebug()) System.out.println("JavaDerived - Val(" + x.getVal() + ")");
  135. return x;
  136. }
  137. public DoubleHolder Ref(DoubleHolder x)
  138. {
  139. if (director_classes.getPrintDebug()) System.out.println("JavaDerived - Ref(" + x.getVal() + ")");
  140. return x;
  141. }
  142. public DoubleHolder Ptr(DoubleHolder x)
  143. {
  144. if (director_classes.getPrintDebug()) System.out.println("JavaDerived - Ptr(" + x.getVal() + ")");
  145. return x;
  146. }
  147. public String FullyOverloaded(int x)
  148. {
  149. if (director_classes.getPrintDebug()) System.out.println("JavaDerived - FullyOverloaded(int " + x + ")");
  150. return "JavaDerived::FullyOverloaded(int)";
  151. }
  152. public String FullyOverloaded(boolean x)
  153. {
  154. if (director_classes.getPrintDebug()) System.out.println("JavaDerived - FullyOverloaded(bool " + x + ")");
  155. return "JavaDerived::FullyOverloaded(bool)";
  156. }
  157. // Note no SemiOverloaded(bool x) method
  158. public String SemiOverloaded(int x)
  159. {
  160. String ret = "JavaDerived::SemiOverloaded(int)";
  161. if (director_classes.getPrintDebug()) System.out.println("JavaDerived - SemiOverloaded(" + x + ")");
  162. return ret;
  163. }
  164. public String DefaultParms(int x, double y)
  165. {
  166. String ret = "JavaDerived::DefaultParms(int, double)";
  167. if (director_classes.getPrintDebug()) System.out.println("JavaDerived - DefaultParms(" + x + ", " + y + ")");
  168. return ret;
  169. }
  170. // Note the following method can never be called from unmanaged code.
  171. // It is here only for code that calls it directly from managed code.
  172. // But should always be defined to ensure behaviour is consistent
  173. // independent of where DefaultParsms is called from (managed or unmanaged code).
  174. // Note this method can never be called from unmanaged code
  175. public String DefaultParms(int x)
  176. {
  177. if (director_classes.getPrintDebug()) System.out.println("JavaDerived - DefaultParms(" + x + ")");
  178. return DefaultParms(x, 1.1/*use C++ default here*/);
  179. }
  180. }