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.

WorldTestCase.java 6.2KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163
  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.bcel;
  13. import java.lang.reflect.Modifier;
  14. import org.aspectj.weaver.Advice;
  15. import org.aspectj.weaver.CommonWorldTests;
  16. import org.aspectj.weaver.Member;
  17. import org.aspectj.weaver.MemberImpl;
  18. import org.aspectj.weaver.ResolvedMember;
  19. import org.aspectj.weaver.ResolvedType;
  20. import org.aspectj.weaver.ShadowMunger;
  21. import org.aspectj.weaver.TestUtils;
  22. import org.aspectj.weaver.UnresolvedType;
  23. import org.aspectj.weaver.WeaverTestCase;
  24. import org.aspectj.weaver.World;
  25. /**
  26. * This is a test case for the nameType parts of worlds.
  27. */
  28. public class WorldTestCase extends CommonWorldTests {
  29. private final BcelWorld world = new BcelWorld(WeaverTestCase.TESTDATA_PATH + "/tracing.jar");
  30. protected World getWorld() {
  31. return world;
  32. }
  33. protected boolean getSupportsAutoboxing() {
  34. return true;
  35. }
  36. // XXX fix the various XXXs before expecting this test to work
  37. public void xtestTraceJar() {
  38. ResolvedType trace = world.resolve(UnresolvedType.forName("Trace"), true);
  39. assertTrue("Couldnt find type Trace", !trace.isMissing());
  40. fieldsTest(trace, Member.NONE);
  41. /* Member constr = */TestUtils.methodFromString("void Trace.<init>()");
  42. // XXX need attribute fix -
  43. // methodsTest(trace, new Member[] { constr });
  44. interfacesTest(trace, ResolvedType.NONE);
  45. superclassTest(trace, UnresolvedType.OBJECT);
  46. isInterfaceTest(trace, false);
  47. isClassTest(trace, false);
  48. isAspectTest(trace, true);
  49. pointcutsTest(trace, new Member[] { MemberImpl.pointcut(trace, "traced", "(Ljava/lang/Object;)V"), });
  50. modifiersTest(trace.findPointcut("traced"), Modifier.PUBLIC | Modifier.ABSTRACT);
  51. mungersTest(
  52. trace,
  53. new ShadowMunger[] {
  54. BcelTestUtils.shadowMunger(world, "before(foo): traced(foo) -> void Trace.ajc_before_4(java.lang.Object))",
  55. 0),
  56. BcelTestUtils
  57. .shadowMunger(
  58. world,
  59. "afterReturning(foo): traced(foo) -> void Trace.ajc_afterreturning_3(java.lang.Object, java.lang.Object))",
  60. Advice.ExtraArgument),
  61. BcelTestUtils
  62. .shadowMunger(
  63. world,
  64. "around(): execution(* doit(..)) -> java.lang.Object Trace.ajc_around_2(org.aspectj.runtime.internal.AroundClosure))",
  65. Advice.ExtraArgument),
  66. BcelTestUtils
  67. .shadowMunger(
  68. world,
  69. "around(foo): traced(foo) -> java.lang.Object Trace.ajc_around_1(java.lang.Object, org.aspectj.runtime.internal.AroundClosure))",
  70. Advice.ExtraArgument), });
  71. ResolvedType myTrace = world.resolve(UnresolvedType.forName("MyTrace"), true);
  72. assertTrue("Couldnt find type MyTrace", !myTrace.isMissing());
  73. interfacesTest(myTrace, ResolvedType.NONE);
  74. superclassTest(myTrace, trace);
  75. isInterfaceTest(myTrace, false);
  76. isClassTest(myTrace, false);
  77. isAspectTest(myTrace, true);
  78. // XXX need attribute fix -
  79. // fieldsTest(myTrace, Member.NONE);
  80. pointcutsTest(trace, new Member[] { MemberImpl.pointcut(trace, "traced", "(Ljava/lang/Object;)V"), });
  81. modifiersTest(myTrace.findPointcut("traced"), Modifier.PUBLIC);
  82. // this tests for declared mungers
  83. mungersTest(myTrace, ShadowMunger.NONE);
  84. }
  85. public void testIterator() {
  86. int abstractPublic = Modifier.ABSTRACT | Modifier.PUBLIC;
  87. ResolvedType iter = world.getCoreType(UnresolvedType.forRawTypeName("java.util.Iterator"));
  88. modifiersTest(iter, abstractPublic | Modifier.INTERFACE);
  89. fieldsTest(iter, ResolvedMember.NONE);
  90. methodsTest(iter, new Member[] {
  91. MemberImpl.method(iter, 0, "hasNext", "()Z"),
  92. MemberImpl.method(iter, 0, "remove", "()V"),
  93. MemberImpl.method(iter, 0, "next", "()Ljava/lang/Object;"),
  94. MemberImpl.method(iter, 0, "forEachRemaining", "(Ljava/util/function/Consumer;)V")
  95. // default void forEachRemaining(Consumer<? super E> action) {
  96. // Objects.requireNonNull(action);
  97. // while (hasNext())
  98. // action.accept(next());
  99. // }
  100. });
  101. ResolvedMember remove = iter.lookupMethod(MemberImpl.method(iter, 0, "remove", "()V"));
  102. assertNotNull("iterator doesn't have remove", remove);
  103. modifiersTest(remove, Modifier.PUBLIC); // no longer abstract in Java8 (default instead)
  104. exceptionsTest(remove, UnresolvedType.NONE);
  105. ResolvedMember clone = iter.lookupMethod(MemberImpl.method(UnresolvedType.OBJECT, 0, "clone", "()Ljava/lang/Object;"));
  106. assertNotNull("iterator doesn't have clone", clone);
  107. // AV: JRockit Object.clone() is not native.. corrupted test here:
  108. // modifiersTest(clone, Modifier.PROTECTED | Modifier.NATIVE);
  109. assertTrue("should be protected" + clone.toString(), Modifier.isProtected(clone.getModifiers()));
  110. exceptionsTest(clone, UnresolvedType.forNames(new String[] { "java.lang.CloneNotSupportedException" }));
  111. interfacesTest(iter, ResolvedType.NONE);
  112. superclassTest(iter, UnresolvedType.OBJECT);
  113. pointcutsTest(iter, ResolvedMember.NONE);
  114. mungersTest(iter, ShadowMunger.NONE);
  115. isInterfaceTest(iter, true);
  116. isClassTest(iter, false);
  117. isAspectTest(iter, false);
  118. }
  119. public void testObjectCoersion() {
  120. assertCouldBeCoercibleFrom("java.lang.Object", "java.lang.String");
  121. assertCouldBeCoercibleFrom("java.lang.Integer", "java.lang.Object");
  122. assertCouldBeCoercibleFrom("java.io.Serializable", "java.lang.Runnable");
  123. assertCouldBeCoercibleFrom("java.util.Stack", "java.lang.Runnable");
  124. assertCouldNotBeCoercibleFrom("java.lang.Runnable", "java.lang.Integer");
  125. assertCouldNotBeCoercibleFrom("java.lang.Integer", "java.lang.String");
  126. assertCouldNotBeCoercibleFrom("java.lang.Integer", "java.lang.Runnable");
  127. }
  128. // ----
  129. private void assertCouldBeCoercibleFrom(String a, String b) {
  130. isCoerceableFromTest(world.resolve(a), world.resolve(b), true);
  131. }
  132. private void assertCouldNotBeCoercibleFrom(String a, String b) {
  133. isCoerceableFromTest(world.resolve(a), world.resolve(b), false);
  134. }
  135. }