TestJava.hx 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207
  1. package unit;
  2. import haxe.io.Bytes;
  3. import haxe.test.Base;
  4. import haxe.test.Base.Base_InnerClass;
  5. import haxe.test.TEnum;
  6. #if java
  7. class TestJava extends Test
  8. {
  9. function testException()
  10. {
  11. var native = new NativeClass();
  12. var hx:NativeClass = new HxClass();
  13. exc(function() try native.excTest() catch (e:Dynamic) throw e);
  14. var dyn:Dynamic = native;
  15. exc(dyn.excTest);
  16. try
  17. hx.excTest()
  18. catch(e:Dynamic) throw e; //shouldn't throw any exception
  19. }
  20. function testNameCase()
  21. {
  22. t(haxe.uppercasepackage.SomeClass.SomeClassFound);
  23. t(haxe.uppercasepackage.Lowercase.lowercaseFound);
  24. }
  25. function testHaxeKeywords()
  26. {
  27. eq(Base._inline, 42);
  28. eq(Base._callback, 43);
  29. eq(Base._cast, 44);
  30. eq(Base._untyped, 45);
  31. eq(Base._in, 46);
  32. Base._in = 40;
  33. eq(Base._in, 40);
  34. }
  35. function testTypes()
  36. {
  37. eq(Base.charTest(cast 10), cast 10);
  38. eq(Base.byteTest(cast 10), cast 10);
  39. }
  40. function testInnerClass()
  41. {
  42. //-java-lib should be able to detect inner classes on import
  43. var i = new Base_InnerClass();
  44. eq(i.nameClash(), 10);
  45. var i2 = new Base_InnerClass_InnerInnerClass();
  46. t(true);
  47. }
  48. function testGenerics()
  49. {
  50. var jcl:java.lang.Class<Base_InnerClass_InnerInnerClass> = cast Base_InnerClass_InnerInnerClass;
  51. t(haxe.test.GenericHelper.staticTypedGeneric(jcl) != null);
  52. var helper = new haxe.test.GenericHelper();
  53. //TODO use typedAs
  54. eq(helper.getUntypedGeneric(), null);
  55. eq(helper.typedGeneric, null);
  56. var val = new Base_InnerClass();
  57. var g1 = new haxe.test.Generic1(val);
  58. g1.complexTypeParameterOfTypeParameter(new Base_InnerClass_InnerInnerClass());
  59. //if no compile-time error, we're fine!
  60. t(true);
  61. }
  62. function testNameClash()
  63. {
  64. eq(Base._nameClash(null), -1);
  65. eq(new Base().nameClash(), 1);
  66. eq(new Base().varNameClash(1), 1);
  67. eq(Base._varNameClash(10.4), 10.4);
  68. }
  69. function testOverloadOverride()
  70. {
  71. var c = new TestMyClass();
  72. c.normalOverload(true);
  73. t(c.boolCalled);
  74. c.normalOverload(10);
  75. t(c.intCalled);
  76. c.normalOverload(haxe.Int64.ofInt(0));
  77. t(c.int64Called);
  78. c.normalOverload("");
  79. t(c.stringCalled);
  80. c.normalOverload({});
  81. t(c.dynamicCalled);
  82. var c = new TestMyClass("");
  83. t(c.alternativeCtorCalled);
  84. var b:haxe.test.MyClass = c;
  85. b.normalOverload(true);
  86. t(c.boolCalled);
  87. b.normalOverload(10);
  88. t(c.intCalled);
  89. b.normalOverload(haxe.Int64.ofInt(0));
  90. t(c.int64Called);
  91. b.normalOverload("");
  92. t(c.stringCalled);
  93. b.normalOverload({});
  94. t(c.dynamicCalled);
  95. }
  96. function testJavaLibEnum()
  97. {
  98. var e = TEnum.TA;
  99. switch(e)
  100. {
  101. case TA:
  102. t(true);
  103. case _:
  104. t(false);
  105. }
  106. eq("TA",Type.enumConstructor(e));
  107. }
  108. function testMiscJavaLib()
  109. {
  110. //setting inline should be an error
  111. t(TestType.typeError(Base.inlineNumber = 4));
  112. }
  113. //TODO:
  114. //overload with functions + variable types
  115. }
  116. private class TestMyClass extends haxe.test.MyClass
  117. {
  118. @:overload public function new()
  119. {
  120. super();
  121. }
  122. @:overload public function new(str:String)
  123. {
  124. super();
  125. alternativeCtorCalled = true;
  126. }
  127. public var alternativeCtorCalled:Bool;
  128. public var boolCalled:Bool;
  129. public var intCalled:Bool;
  130. public var int64Called:Bool;
  131. public var stringCalled:Bool;
  132. public var dynamicCalled:Bool;
  133. @:overload override public function normalOverload(b:Bool):Void
  134. {
  135. this.boolCalled = true;
  136. }
  137. @:overload override public function normalOverload(i:Int):Void
  138. {
  139. this.intCalled = true;
  140. }
  141. @:overload override public function normalOverload(i64:haxe.Int64):Void
  142. {
  143. this.int64Called = true;
  144. }
  145. @:overload override public function normalOverload(str:String):Void
  146. {
  147. this.stringCalled = true;
  148. }
  149. @:overload override public function normalOverload(dyn:Dynamic):Void
  150. {
  151. this.dynamicCalled = true;
  152. }
  153. }
  154. @:nativeGen private class NativeClass
  155. {
  156. public function new()
  157. {
  158. }
  159. @:throws("java.lang.Throwable")
  160. public function excTest():Void
  161. {
  162. throw new java.lang.Throwable("test", null);
  163. }
  164. }
  165. private class HxClass extends NativeClass
  166. {
  167. @:throws("java.lang.Throwable")
  168. override public function excTest():Void
  169. {
  170. }
  171. }
  172. #end