PageRenderTime 53ms CodeModel.GetById 23ms RepoModel.GetById 0ms app.codeStats 0ms

/src/xmlvm2csharp/test/org/xmlvm/test/nativeImpl/ReflectionTest2.java

https://github.com/tisoft/xmlvm
Java | 353 lines | 305 code | 13 blank | 35 comment | 3 complexity | 018b580afd24525a8b746a68cfdcd601 MD5 | raw file
Possible License(s): LGPL-2.1
  1. /* Copyright (c) 2002-2011 by XMLVM.org
  2. *
  3. * Project Info: http://www.xmlvm.org
  4. *
  5. * This program is free software; you can redistribute it and/or modify it
  6. * under the terms of the GNU Lesser General Public License as published by
  7. * the Free Software Foundation; either version 2.1 of the License, or
  8. * (at your option) any later version.
  9. *
  10. * This library is distributed in the hope that it will be useful, but
  11. * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
  12. * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public
  13. * License for more details.
  14. *
  15. * You should have received a copy of the GNU Lesser General Public
  16. * License along with this library; if not, write to the Free Software
  17. * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
  18. * USA.
  19. */
  20. package org.xmlvm.test.nativeImpl;
  21. import java.lang.reflect.Array;
  22. /*
  23. * tests native implementation of java.lang.Class,
  24. * mainly, getName(), getSimpleName() and getCanonicalName()
  25. */
  26. class OuterClass {
  27. class InnerClass{}
  28. class InnerChild extends OuterClass {}
  29. }
  30. public class ReflectionTest2 {
  31. public static int localId = 1;
  32. public static int anonymousId = 0;
  33. // this dummy method is only used to increment the localId
  34. public static String getLocalName() {
  35. class Local {} // increment localId
  36. Class<?> localClass = Local.class;
  37. return localClass.getName();
  38. }
  39. public static void main(String[] args) {
  40. int numTests = 82;
  41. String[] description = new String[numTests];
  42. boolean[] result = new boolean[numTests];
  43. int i = -1;
  44. String thisPackage = "org.xmlvm.test.nativeImpl";
  45. String thisClass = thisPackage + ".ReflectionTest2";
  46. // getSuperClass:
  47. i++;
  48. result[i] = java.lang.Object.class.getSuperclass() == null;
  49. description[i] = "java.lang.Object.class.getSuperclass() == null";
  50. i++;
  51. result[i] = int.class.getSuperclass() == null;
  52. description[i] = "int.class.getSuperclass() == null";
  53. // getName, getSimpleName, getCanonicalName
  54. i++;
  55. result[i] = java.lang.Object.class.getName().equals("java.lang.Object");
  56. description[i] = "java.lang.Object.class.getName().equals(\"java.lang.Object\")";
  57. i++;
  58. result[i] = java.lang.Object.class.getCanonicalName().equals("java.lang.Object");
  59. description[i] = "java.lang.Object.class.getCanonicalName().equals(\"java.lang.Object\")";
  60. i++;
  61. result[i] = java.lang.Object.class.getSimpleName().equals("Object");
  62. description[i] = "java.lang.Object.class.getSimpleName().equals(\"Object\")";
  63. i++;
  64. result[i] = java.lang.String.class.getName().equals("java.lang.String");
  65. description[i] = "java.lang.String.class.getName().equals(\"java.lang.String\")";
  66. i++;
  67. result[i] = java.lang.String.class.getCanonicalName().equals("java.lang.String");
  68. description[i] = "java.lang.String.class.getCanonicalName().equals(\"java.lang.String\")";
  69. i++;
  70. result[i] = java.lang.String.class.getSimpleName().equals("String");
  71. description[i] = "java.lang.String.class.getSimpleName().equals(\"String\")";
  72. i++;
  73. result[i] = boolean.class.getName().equals("boolean");
  74. description[i] = "boolean.class.getName().equals(\"boolean\")";
  75. i++;
  76. result[i] = boolean.class.getCanonicalName().equals("boolean");
  77. description[i] = "boolean.class.getCanonicalName().equals(\"boolean\")";
  78. i++;
  79. result[i] = boolean.class.getSimpleName().equals("boolean");
  80. description[i] = "boolean.class.getSimpleName().equals(\"boolean\")";
  81. i++;
  82. result[i] = byte.class.getName().equals("byte");
  83. description[i] = "byte.class.getName().equals(\"byte\")";
  84. i++;
  85. result[i] = byte.class.getCanonicalName().equals("byte");
  86. description[i] = "byte.class.getCanonicalName().equals(\"byte\")";
  87. i++;
  88. result[i] = byte.class.getSimpleName().equals("byte");
  89. description[i] = "byte.class.getSimpleName().equals(\"byte\")";
  90. i++;
  91. result[i] = char.class.getName().equals("char");
  92. description[i] = "char.class.getName().equals(\"char\")";
  93. i++;
  94. result[i] = char.class.getCanonicalName().equals("char");
  95. description[i] = "char.class.getCanonicalName().equals(\"char\")";
  96. i++;
  97. result[i] = char.class.getSimpleName().equals("char");
  98. description[i] = "char.class.getSimpleName().equals(\"char\")";
  99. i++;
  100. result[i] = short.class.getName().equals("short");
  101. description[i] = "short.class.getName().equals(\"short\")";
  102. i++;
  103. result[i] = short.class.getCanonicalName().equals("short");
  104. description[i] = "short.class.getCanonicalName().equals(\"short\")";
  105. i++;
  106. result[i] = short.class.getSimpleName().equals("short");
  107. description[i] = "short.class.getSimpleName().equals(\"short\")";
  108. i++;
  109. result[i] = int.class.getName().equals("int");
  110. description[i] = "int.class.getName().equals(\"int\")";
  111. i++;
  112. result[i] = int.class.getCanonicalName().equals("int");
  113. description[i] = "int.class.getCanonicalName().equals(\"int\")";
  114. i++;
  115. result[i] = int.class.getSimpleName().equals("int");
  116. description[i] = "int.class.getSimpleName().equals(\"int\")";
  117. i++;
  118. result[i] = long.class.getName().equals("long");
  119. description[i] = "long.class.getName().equals(\"long\")";
  120. i++;
  121. result[i] = long.class.getCanonicalName().equals("long");
  122. description[i] = "long.class.getCanonicalName().equals(\"long\")";
  123. i++;
  124. result[i] = long.class.getSimpleName().equals("long");
  125. description[i] = "long.class.getSimpleName().equals(\"long\")";
  126. i++;
  127. result[i] = float.class.getName().equals("float");
  128. description[i] = "float.class.getName().equals(\"float\")";
  129. i++;
  130. result[i] = float.class.getCanonicalName().equals("float");
  131. description[i] = "float.class.getCanonicalName().equals(\"float\")";
  132. i++;
  133. result[i] = float.class.getSimpleName().equals("float");
  134. description[i] = "float.class.getSimpleName().equals(\"float\")";
  135. i++;
  136. result[i] = double.class.getName().equals("double");
  137. description[i] = "double.class.getName().equals(\"double\")";
  138. i++;
  139. result[i] = double.class.getCanonicalName().equals("double");
  140. description[i] = "double.class.getCanonicalName().equals(\"double\")";
  141. i++;
  142. result[i] = double.class.getSimpleName().equals("double");
  143. description[i] = "double.class.getSimpleName().equals(\"double\")";
  144. // inner class:
  145. Class<?> innerClass = OuterClass.InnerClass.class;
  146. i++;
  147. result[i] = innerClass.getName().equals(thisPackage
  148. + ".OuterClass$InnerClass");
  149. description[i] = "inner class name is: "
  150. + thisPackage + "OuterClass$InnerClass";
  151. i++;
  152. result[i] = innerClass.getSimpleName().equals("InnerClass");
  153. description[i] = "inner class simple name is: InnerClass";
  154. i++;
  155. result[i] = innerClass.getCanonicalName().equals(thisPackage
  156. + ".OuterClass.InnerClass");
  157. description[i] = "inner class canonical name is: "
  158. + thisPackage + "OuterClass.InnerClass";
  159. // inherited inner class:
  160. innerClass = OuterClass.InnerChild.InnerChild.InnerClass.class;
  161. i++;
  162. result[i] = innerClass.getName().equals(thisPackage
  163. + ".OuterClass$InnerClass");
  164. description[i] = "inherited inner class name is: "
  165. + thisPackage + "OuterClass$InnerClass";
  166. i++;
  167. result[i] = innerClass.getSimpleName().equals("InnerClass");
  168. description[i] = "injerited inner class simple name is: InnerClass";
  169. i++;
  170. result[i] = innerClass.getCanonicalName().equals(thisPackage
  171. + ".OuterClass.InnerClass");
  172. description[i] = "inherited inner class canonical name is: "
  173. + thisPackage + "OuterClass.InnerClass";
  174. // local:
  175. localId++;
  176. class Local {}
  177. Class<Local> localClass = Local.class;
  178. i++;
  179. result[i] = localClass.getName().equals(thisClass
  180. + "$" + localId + "Local");
  181. description[i] = "local class name is: "
  182. + thisClass + "$" + localId + "Local";
  183. i++;
  184. result[i] = localClass.getSimpleName().equals("Local");
  185. description[i] = "local class simple name is: " + "Local";
  186. i++;
  187. result[i] = localClass.getCanonicalName()==null;
  188. description[i] = "local class canonical name is null";
  189. // anonymous:
  190. anonymousId++;
  191. Object anonymousInstance = new Object() {}; // increment the anonymousId
  192. anonymousId++;
  193. anonymousInstance = new Object() {}; // increment the anonymousId
  194. anonymousId++;
  195. anonymousInstance = new Object() {};
  196. Class<?> anonymousClass = anonymousInstance.getClass();
  197. i++;
  198. result[i] = anonymousClass.getName().equals(thisClass + "$" + anonymousId);
  199. description[i] = "anonymous class name is: "
  200. + thisClass + "$" + anonymousId;
  201. i++;
  202. result[i] = anonymousClass.getSimpleName().isEmpty();
  203. description[i] = "anonymous class simple name is empty string";
  204. i++;
  205. result[i] = anonymousClass.getCanonicalName()==null;
  206. description[i] = "anonymous class canonical name is null";
  207. // arrays names:
  208. i++;
  209. result[i] = java.lang.Object[].class.getName().equals("[Ljava.lang.Object;");
  210. description[i] = "java.lang.Object[].class.getName().equals(\"[Ljava.lang.Object;\")";
  211. i++;
  212. result[i] = java.lang.Object[].class.getCanonicalName().equals("java.lang.Object[]");
  213. description[i] = "java.lang.Object[].class.getCanonicalName().equals(\"java.lang.Object[]\")";
  214. i++;
  215. result[i] = java.lang.Object[].class.getSimpleName().equals("Object[]");
  216. description[i] = "java.lang.Object[].class.getSimpleName().equals(\"Object[]\")";
  217. i++;
  218. result[i] = java.lang.String[].class.getName().equals("[Ljava.lang.String;");
  219. description[i] = "java.lang.String[].class.getName().equals(\"[Ljava.lang.String;\")";
  220. i++;
  221. result[i] = java.lang.String[].class.getCanonicalName().equals("java.lang.String[]");
  222. description[i] = "java.lang.String[].class.getCanonicalName().equals(\"java.lang.String[]\")";
  223. i++;
  224. result[i] = java.lang.String[].class.getSimpleName().equals("String[]");
  225. description[i] = "java.lang.String[].class.getSimpleName().equals(\"String[]\")";
  226. i++;
  227. result[i] = boolean[].class.getName().equals("[Z");
  228. description[i] = "boolean[].class.getName().equals(\"[Z\")";
  229. i++;
  230. result[i] = boolean[].class.getCanonicalName().equals("boolean[]");
  231. description[i] = "boolean[].class.getCanonicalName().equals(\"boolean[]\")";
  232. i++;
  233. result[i] = boolean[].class.getSimpleName().equals("boolean[]");
  234. description[i] = "boolean[].class.getSimpleName().equals(\"boolean[]\")";
  235. i++;
  236. result[i] = byte[].class.getName().equals("[B");
  237. description[i] = "byte[].class.getName().equals(\"[B\")";
  238. i++;
  239. result[i] = byte[].class.getCanonicalName().equals("byte[]");
  240. description[i] = "byte[].class.getCanonicalName().equals(\"byte[]\")";
  241. i++;
  242. result[i] = byte[].class.getSimpleName().equals("byte[]");
  243. description[i] = "byte[].class.getSimpleName().equals(\"byte[]\")";
  244. i++;
  245. result[i] = char[].class.getName().equals("[C");
  246. description[i] = "char[].class.getName().equals(\"[C\")";
  247. i++;
  248. result[i] = char[].class.getCanonicalName().equals("char[]");
  249. description[i] = "char[].class.getCanonicalName().equals(\"char[]\")";
  250. i++;
  251. result[i] = char[].class.getSimpleName().equals("char[]");
  252. description[i] = "char[].class.getSimpleName().equals(\"char[]\")";
  253. i++;
  254. result[i] = short[].class.getName().equals("[S");
  255. description[i] = "short[].class.getName().equals(\"[S\")";
  256. i++;
  257. result[i] = short[].class.getCanonicalName().equals("short[]");
  258. description[i] = "short[].class.getCanonicalName().equals(\"short[]\")";
  259. i++;
  260. result[i] = short[].class.getSimpleName().equals("short[]");
  261. description[i] = "short[].class.getSimpleName().equals(\"short[]\")";
  262. i++;
  263. result[i] = int[].class.getName().equals("[I");
  264. description[i] = "int[].class.getName().equals(\"[I\")";
  265. i++;
  266. result[i] = int[].class.getCanonicalName().equals("int[]");
  267. description[i] = "int[].class.getCanonicalName().equals(\"int[]\")";
  268. i++;
  269. result[i] = int[].class.getSimpleName().equals("int[]");
  270. description[i] = "int[].class.getSimpleName().equals(\"int[]\")";
  271. i++;
  272. result[i] = long[].class.getName().equals("[J");
  273. description[i] = "long[].class.getName().equals(\"[J\")";
  274. i++;
  275. result[i] = long[].class.getCanonicalName().equals("long[]");
  276. description[i] = "long[].class.getCanonicalName().equals(\"long[]\")";
  277. i++;
  278. result[i] = long[].class.getSimpleName().equals("long[]");
  279. description[i] = "long[].class.getSimpleName().equals(\"long[]\")";
  280. i++;
  281. result[i] = float[].class.getName().equals("[F");
  282. description[i] = "float[].class.getName().equals(\"[F\")";
  283. i++;
  284. result[i] = float[].class.getCanonicalName().equals("float[]");
  285. description[i] = "float[].class.getCanonicalName().equals(\"float[]\")";
  286. i++;
  287. result[i] = float[].class.getSimpleName().equals("float[]");
  288. description[i] = "float[].class.getSimpleName().equals(\"float[]\")";
  289. i++;
  290. result[i] = double[].class.getName().equals("[D");
  291. description[i] = "double[].class.getName().equals(\"[D\")";
  292. i++;
  293. result[i] = double[].class.getCanonicalName().equals("double[]");
  294. description[i] = "double[].class.getCanonicalName().equals(\"double[]\")";
  295. i++;
  296. result[i] = double[].class.getSimpleName().equals("double[]");
  297. description[i] = "double[].class.getSimpleName().equals(\"double[]\")";
  298. // annonymous arrays
  299. i++;
  300. Object localArray = Array.newInstance(localClass, 42);
  301. result[i] = localArray.getClass().getName().equals("[L"
  302. + thisClass + "$" + localId + "Local;");
  303. description[i] = "local class array's class name is: "
  304. + "[L" + thisClass + "$" + localId + "Local;";
  305. i++;
  306. result[i] = localArray.getClass().getSimpleName().equals("Local[]");
  307. description[i] = "local class array's class simple name is \"Local[]\"";
  308. i++;
  309. result[i] = localArray.getClass().getCanonicalName()==null;
  310. description[i] = "local class array's class canonical name is null";
  311. // anonymous arrays
  312. i++;
  313. Object anonymousArray = Array.newInstance(anonymousClass, 42);
  314. result[i] = anonymousArray.getClass().getName().equals("[L"
  315. + thisClass + "$" + anonymousId + ";");
  316. description[i] = "anonymous class array's class name is: "
  317. + "[L" + thisClass + "$" + anonymousId + ";";
  318. i++;
  319. result[i] = anonymousArray.getClass().getSimpleName().equals("[]");
  320. description[i] = "anonymous class array's class simple name is \"[]\"";
  321. i++;
  322. result[i] = anonymousArray.getClass().getCanonicalName()==null;
  323. description[i] = "anonymous class array's class canonical name is null";
  324. // multi-dim'l arrays
  325. i++;
  326. result[i] = int[][][][][].class.getName().equals("[[[[[I");
  327. description[i] = "int[][][][][].class.getName().equals(\"[[[[[I\")";
  328. i++;
  329. result[i] = int[][][][][].class.getCanonicalName().equals("int[][][][][]");
  330. description[i] = "int[][][][][].class.getCanonicalName().equals(\"int[][][][][]\")";
  331. i++;
  332. result[i] = int[][][][][].class.getSimpleName().equals("int[][][][][]");
  333. description[i] = "int[][][][][].class.getSimpleName().equals(\"int[][][][][]\")";
  334. // print results
  335. for (int j=0; j<numTests; j++) {
  336. System.out.println(j + ") "
  337. + (result[j] ? "passed" : "failed") + ": "+ description[j]);
  338. }
  339. }
  340. }