123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151 |
- /* *******************************************************************
- * Copyright (c) 2002 Palo Alto Research Center, Incorporated (PARC).
- * All rights reserved.
- * This program and the accompanying materials are made available
- * under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- * PARC initial implementation
- * ******************************************************************/
-
-
- package org.aspectj.weaver.bcel;
-
- import java.lang.reflect.Modifier;
-
- import org.aspectj.weaver.*;
-
- /**
- * This is a test case for the nameType parts of worlds.
- */
- public class WorldTestCase extends AbstractWorldTestCase {
-
- public WorldTestCase(String name) {
- super(name);
- }
-
- private final BcelWorld world
- = new BcelWorld(BcweaverTests.TESTDATA_PATH + "/tracing.jar");
-
- protected World getWorld() {
- return world;
- }
-
- // XXX fix the various XXXs before expecting this test to work
- public void xtestTraceJar() {
- ResolvedType trace = world.resolve(UnresolvedType.forName("Trace"),true);
- assertTrue("Couldnt find type Trace",!trace.isMissing());
- fieldsTest(trace, Member.NONE);
- /*Member constr = */TestUtils.methodFromString("void Trace.<init>()");
- //XXX need attribute fix -
- //methodsTest(trace, new Member[] { constr });
-
- interfacesTest(trace, ResolvedType.NONE);
- superclassTest(trace, UnresolvedType.OBJECT);
- isInterfaceTest(trace, false);
- isClassTest(trace, false);
- isAspectTest(trace, true);
-
- pointcutsTest(trace,
- new Member[] {
- MemberImpl.pointcut(trace, "traced", "(Ljava/lang/Object;)V"),
- });
-
- modifiersTest(trace.findPointcut("traced"),
- Modifier.PUBLIC | Modifier.ABSTRACT);
-
- mungersTest(trace,
- new ShadowMunger[] {
- TestUtils.shadowMunger(world,"before(foo): traced(foo) -> void Trace.ajc_before_4(java.lang.Object))",
- 0),
- TestUtils.shadowMunger(world,"afterReturning(foo): traced(foo) -> void Trace.ajc_afterreturning_3(java.lang.Object, java.lang.Object))",
- Advice.ExtraArgument),
- TestUtils.shadowMunger(world,"around(): execution(* doit(..)) -> java.lang.Object Trace.ajc_around_2(org.aspectj.runtime.internal.AroundClosure))",
- Advice.ExtraArgument),
- TestUtils.shadowMunger(world,"around(foo): traced(foo) -> java.lang.Object Trace.ajc_around_1(java.lang.Object, org.aspectj.runtime.internal.AroundClosure))",
- Advice.ExtraArgument),
- });
-
- ResolvedType myTrace = world.resolve(UnresolvedType.forName("MyTrace"),true);
- assertTrue("Couldnt find type MyTrace",!myTrace.isMissing());
-
- interfacesTest(myTrace, ResolvedType.NONE);
- superclassTest(myTrace, trace);
- isInterfaceTest(myTrace, false);
- isClassTest(myTrace, false);
- isAspectTest(myTrace, true);
-
- //XXX need attribute fix -
- //fieldsTest(myTrace, Member.NONE);
-
-
- pointcutsTest(trace,
- new Member[] {
- MemberImpl.pointcut(trace, "traced", "(Ljava/lang/Object;)V"),
- });
-
- modifiersTest(myTrace.findPointcut("traced"),
- Modifier.PUBLIC);
-
- // this tests for declared mungers
- mungersTest(myTrace, ShadowMunger.NONE);
-
- }
-
- public void testIterator() {
- int abstractPublic = Modifier.ABSTRACT | Modifier.PUBLIC;
- ResolvedType iter = world.getCoreType(UnresolvedType.forRawTypeName("java.util.Iterator"));
-
- modifiersTest(iter, abstractPublic | Modifier.INTERFACE);
- fieldsTest(iter, ResolvedMember.NONE);
- methodsTest(iter,
- new Member[] {
- MemberImpl.method(iter, 0, "hasNext", "()Z"),
- MemberImpl.method(iter, 0, "remove", "()V"),
- MemberImpl.method(iter, 0, "next", "()Ljava/lang/Object;"),
- });
- ResolvedMember remove = iter.lookupMethod(MemberImpl.method(iter, 0, "remove", "()V"));
- assertNotNull("iterator doesn't have remove" , remove);
- modifiersTest(remove, abstractPublic | Modifier.INTERFACE);
- exceptionsTest(remove, UnresolvedType.NONE);
-
- ResolvedMember clone = iter.lookupMethod(MemberImpl.method(UnresolvedType.OBJECT, 0, "clone", "()Ljava/lang/Object;"));
- assertNotNull("iterator doesn't have clone" , clone);
- //AV: JRockit Object.clone() is not native.. corrupted test here:
- //modifiersTest(clone, Modifier.PROTECTED | Modifier.NATIVE);
- assertTrue("should be protected" + clone.toString(), clone.isProtected());
- exceptionsTest(clone, UnresolvedType.forNames(new String[] {"java.lang.CloneNotSupportedException"}));
-
- interfacesTest(iter, ResolvedType.NONE);
- superclassTest(iter, UnresolvedType.OBJECT);
- pointcutsTest(iter, ResolvedMember.NONE);
- mungersTest(iter, ShadowMunger.NONE);
- isInterfaceTest(iter, true);
- isClassTest(iter, false);
- isAspectTest(iter, false);
- }
-
- public void testObjectCoersion() {
- assertCouldBeCoercibleFrom("java.lang.Object", "java.lang.String");
- assertCouldBeCoercibleFrom("java.lang.Integer", "java.lang.Object");
- assertCouldBeCoercibleFrom("java.io.Serializable", "java.lang.Runnable");
- assertCouldBeCoercibleFrom("java.util.Stack", "java.lang.Runnable");
- assertCouldNotBeCoercibleFrom("java.lang.Runnable", "java.lang.Integer");
- assertCouldNotBeCoercibleFrom("java.lang.Integer", "java.lang.String");
- assertCouldNotBeCoercibleFrom("java.lang.Integer", "java.lang.Runnable");
- }
-
- // ----
-
- private void assertCouldBeCoercibleFrom(String a, String b) {
- isCoerceableFromTest(world.resolve(a), world.resolve(b), true);
- }
-
- private void assertCouldNotBeCoercibleFrom(String a, String b) {
- isCoerceableFromTest(world.resolve(a), world.resolve(b), false);
- }
-
-
- }
|