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.3KB

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