Você não pode selecionar mais de 25 tópicos Os tópicos devem começar com uma letra ou um número, podem incluir traços ('-') e podem ter até 35 caracteres.

WorldTestCase.java 6.0KB

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