You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

TypeXTestCase.java 9.6KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219
  1. /* *******************************************************************
  2. * Copyright (c) 2002 Palo Alto Research Center, Incorporated (PARC).
  3. * All rights reserved.
  4. * This program and the accompanying materials are made available
  5. * under the terms of the Eclipse Public License v1.0
  6. * which accompanies this distribution and is available at
  7. * http://www.eclipse.org/legal/epl-v10.html
  8. *
  9. * Contributors:
  10. * PARC initial implementation
  11. * ******************************************************************/
  12. package org.aspectj.weaver;
  13. import org.aspectj.testing.util.TestUtil;
  14. import org.aspectj.util.LangUtil;
  15. import org.aspectj.weaver.bcel.BcelWorld;
  16. import junit.framework.TestCase;
  17. /**
  18. * This is a test case for all the portions of UnresolvedType that don't require a world.
  19. */
  20. public class TypeXTestCase extends TestCase {
  21. public TypeXTestCase(String name) {
  22. super(name);
  23. }
  24. public void testUnresolvedTypes() {
  25. // basic equality
  26. String[] testNames =
  27. new String[] {"int", "long", "int[]", "boolean[][]",
  28. "java.lang.String", "java.lang.String[]", "void" };
  29. String[] testSigs =
  30. new String[] {"I", "J", "[I", "[[Z",
  31. "Ljava/lang/String;", "[Ljava/lang/String;", "V" };
  32. String[] componentNames =
  33. new String[] {null, null, "int", "boolean[]",
  34. null, "java.lang.String", null };
  35. int[] sizes = new int[] {1, 2, 1, 1, 1, 1, 0};
  36. boolean[] isPrimitive =
  37. new boolean[] { true, true, false, false, false, false, true };
  38. nameSignatureTest(testNames, testSigs);
  39. arrayTest(UnresolvedType.forNames(testNames), componentNames);
  40. arrayTest(UnresolvedType.forSignatures(testSigs), componentNames);
  41. sizeTest(UnresolvedType.forNames(testNames), sizes);
  42. sizeTest(UnresolvedType.forSignatures(testSigs), sizes);
  43. isPrimitiveTest(UnresolvedType.forSignatures(testSigs), isPrimitive);
  44. }
  45. public void testNameAndSigWithInners() {
  46. UnresolvedType t = UnresolvedType.forName("java.util.Map$Entry");
  47. assertEquals(t.getName(), "java.util.Map$Entry");
  48. assertEquals(t.getSignature(), "Ljava/util/Map$Entry;");
  49. assertEquals(t.getOutermostType(), UnresolvedType.forName("java.util.Map"));
  50. assertEquals(UnresolvedType.forName("java.util.Map").getOutermostType(), UnresolvedType.forName("java.util.Map"));
  51. }
  52. public void testNameAndSigWithParameters() {
  53. UnresolvedType t = UnresolvedType.forName("java.util.List<java.lang.String>");
  54. assertEquals(t.getName(),"java.util.List<java.lang.String>");
  55. assertEquals(t.getSignature(),"Pjava/util/List<Ljava/lang/String;>;");
  56. t = UnresolvedType.forSignature("Pjava/util/List<Ljava/lang/String;>;");
  57. assertEquals(t.getName(),"java.util.List<java.lang.String>");
  58. assertEquals(t.getSignature(),"Pjava/util/List<Ljava/lang/String;>;");
  59. t = UnresolvedType.forName("java.util.Map<java.util.String,java.util.List<java.lang.Integer>>");
  60. assertEquals(t.getName(),"java.util.Map<java.util.String,java.util.List<java.lang.Integer>>");
  61. assertEquals(t.getSignature(),"Pjava/util/Map<Ljava/util/String;Pjava/util/List<Ljava/lang/Integer;>;>;");
  62. t = UnresolvedType.forSignature("Pjava/util/Map<Ljava/util/String;Pjava/util/List<Ljava/lang/Integer;>;>;");
  63. assertEquals(t.getName(),"java.util.Map<java.util.String,java.util.List<java.lang.Integer>>");
  64. assertEquals(t.getSignature(),"Pjava/util/Map<Ljava/util/String;Pjava/util/List<Ljava/lang/Integer;>;>;");
  65. }
  66. /**
  67. * Verify UnresolvedType signature processing creates the right kind of UnresolvedType's from a signature.
  68. *
  69. * For example, calling UnresolvedType.dump() for
  70. * "Ljava/util/Map<Ljava/util/List<Ljava/lang/String;>;Ljava/lang/String;>;"
  71. * results in:
  72. * UnresolvedType: signature=Ljava/util/Map<Ljava/util/List<Ljava/lang/String;>;Ljava/lang/String;>; parameterized=true #params=2
  73. * UnresolvedType: signature=Ljava/util/List<Ljava/lang/String;>; parameterized=true #params=1
  74. * UnresolvedType: signature=Ljava/lang/String; parameterized=false #params=0
  75. * UnresolvedType: signature=Ljava/lang/String; parameterized=false #params=0
  76. */
  77. public void testTypexGenericSignatureProcessing() {
  78. UnresolvedType tx = null;
  79. tx = UnresolvedType.forSignature("Pjava/util/Set<Ljava/lang/String;>;");
  80. checkTX(tx,true,1);
  81. tx = UnresolvedType.forSignature("Pjava/util/Set<Pjava/util/List<Ljava/lang/String;>;>;");
  82. checkTX(tx,true,1);
  83. tx = UnresolvedType.forSignature("Pjava/util/Map<Pjava/util/List<Ljava/lang/String;>;Ljava/lang/String;>;");
  84. checkTX(tx,true,2);
  85. checkTX(tx.getTypeParameters()[0],true,1);
  86. checkTX(tx.getTypeParameters()[1],false,0);
  87. // System.err.println(tx.dump());
  88. }
  89. public void testTypeXForParameterizedTypes() {
  90. if (LangUtil.is15VMOrGreater()) { // no funny types pre 1.5
  91. World world = new BcelWorld();
  92. UnresolvedType stringType = UnresolvedType.forName("java/lang/String");
  93. ResolvedType listOfStringType =
  94. TypeFactory.createParameterizedType(
  95. UnresolvedType.forName("java/util/List").resolve(world),
  96. new UnresolvedType[] {stringType},
  97. world);
  98. assertEquals("1 type param",1,listOfStringType.typeParameters.length);
  99. assertEquals(stringType,listOfStringType.typeParameters[0]);
  100. assertTrue(listOfStringType.isParameterizedType());
  101. assertFalse(listOfStringType.isGenericType());
  102. }
  103. }
  104. public void testTypeFactoryForParameterizedTypes() {
  105. if (LangUtil.is15VMOrGreater()) { // no funny types pre 1.5
  106. UnresolvedType enumOfSimpleType =
  107. TypeFactory.createTypeFromSignature("Pjava/lang/Enum<Ljava/lang/String;>;");
  108. assertEquals(1, enumOfSimpleType.getTypeParameters().length);
  109. UnresolvedType enumOfNestedType =
  110. TypeFactory.createTypeFromSignature("Pjava/lang/Enum<Ljavax/jws/soap/SOAPBinding$ParameterStyle;>;");
  111. assertEquals(1, enumOfNestedType.getTypeParameters().length);
  112. // is this signature right?
  113. UnresolvedType nestedTypeOfParameterized =
  114. TypeFactory.createTypeFromSignature("PMyInterface<Ljava/lang/String;>$MyOtherType;");
  115. assertEquals(0, nestedTypeOfParameterized.getTypeParameters().length);
  116. // how about this one? is this valid?
  117. UnresolvedType doublyNestedTypeSignatures =
  118. TypeFactory.createTypeFromSignature("PMyInterface<Ljava/lang/String;Ljava/lang/String;>$MyOtherType<Ljava/lang/Object;>;");
  119. assertEquals(1, doublyNestedTypeSignatures.getTypeParameters().length);
  120. }
  121. }
  122. private void checkTX(UnresolvedType tx,boolean shouldBeParameterized,int numberOfTypeParameters) {
  123. assertTrue("Expected parameterization flag to be "+shouldBeParameterized,tx.isParameterizedType()==shouldBeParameterized);
  124. if (numberOfTypeParameters==0) {
  125. UnresolvedType[] params = tx.getTypeParameters();
  126. assertTrue("Expected 0 type parameters but found "+params.length, params.length==0);
  127. } else {
  128. assertTrue("Expected #type parameters to be "+numberOfTypeParameters,tx.getTypeParameters().length==numberOfTypeParameters);
  129. }
  130. }
  131. private void isPrimitiveTest(UnresolvedType[] types, boolean[] isPrimitives) {
  132. for (int i = 0, len = types.length; i < len; i++) {
  133. UnresolvedType type = types[i];
  134. boolean b = isPrimitives[i];
  135. assertEquals(type + " is primitive: ", b, type.isPrimitiveType());
  136. }
  137. }
  138. private void sizeTest(UnresolvedType[] types, int[] sizes) {
  139. for (int i = 0, len = types.length; i < len; i++) {
  140. UnresolvedType type = types[i];
  141. int size = sizes[i];
  142. assertEquals("size of " + type + ": ", size, type.getSize());
  143. }
  144. }
  145. private void arrayTest(UnresolvedType[] types, String[] components) {
  146. for (int i = 0, len = types.length; i < len; i++) {
  147. UnresolvedType type = types[i];
  148. String component = components[i];
  149. assertEquals(type + " is array: ", component != null, type.isArray());
  150. if (component != null)
  151. assertEquals(type + " componentType: ", component,
  152. type.getComponentType().getName());
  153. }
  154. }
  155. private void nameSignatureTest(String[] ns, String[] ss) {
  156. for (int i = 0, len = ns.length; i < len; i++) {
  157. String n = ns[i];
  158. String s = ss[i];
  159. UnresolvedType tn = UnresolvedType.forName(n);
  160. UnresolvedType ts = UnresolvedType.forSignature(s);
  161. assertEquals("forName(n).getName()", n,
  162. tn.getName());
  163. assertEquals("forSignature(s).getSignature()", s,
  164. ts.getSignature());
  165. assertEquals("forName(n).getSignature()", s,
  166. tn.getSignature());
  167. assertEquals("forSignature(n).getName()", n,
  168. ts.getName());
  169. TestUtil.assertCommutativeEquals(tn, tn, true);
  170. TestUtil.assertCommutativeEquals(ts, ts, true);
  171. TestUtil.assertCommutativeEquals(tn, ts, true);
  172. for (int j = 0; j < len; j++) {
  173. if (i == j) continue;
  174. UnresolvedType tn1 = UnresolvedType.forName(ns[j]);
  175. UnresolvedType ts1 = UnresolvedType.forSignature(ss[j]);
  176. TestUtil.assertCommutativeEquals(tn, tn1, false);
  177. TestUtil.assertCommutativeEquals(ts, tn1, false);
  178. TestUtil.assertCommutativeEquals(tn, ts1, false);
  179. TestUtil.assertCommutativeEquals(ts, ts1, false);
  180. }
  181. }
  182. }
  183. }