diff options
author | aclement <aclement> | 2005-12-09 08:40:12 +0000 |
---|---|---|
committer | aclement <aclement> | 2005-12-09 08:40:12 +0000 |
commit | b52515fc2319ca34a045a0823ca0f5c8ffeaa2de (patch) | |
tree | 1a0aba109e1286629988a7d1f6500bbe250f9749 /weaver/testsrc | |
parent | 8b87db5ac266514d35e1632546d6888e7ca2f6d0 (diff) | |
download | aspectj-b52515fc2319ca34a045a0823ca0f5c8ffeaa2de.tar.gz aspectj-b52515fc2319ca34a045a0823ca0f5c8ffeaa2de.zip |
delegates modified to return the same thing as BCEL. Ctors have the name <init> and a return type of 'void'. Fix for 119353
Diffstat (limited to 'weaver/testsrc')
-rw-r--r-- | weaver/testsrc/org/aspectj/weaver/reflect/ReflectionBasedReferenceTypeDelegateTest.java | 50 |
1 files changed, 49 insertions, 1 deletions
diff --git a/weaver/testsrc/org/aspectj/weaver/reflect/ReflectionBasedReferenceTypeDelegateTest.java b/weaver/testsrc/org/aspectj/weaver/reflect/ReflectionBasedReferenceTypeDelegateTest.java index cc0407c5c..fe5aaec0a 100644 --- a/weaver/testsrc/org/aspectj/weaver/reflect/ReflectionBasedReferenceTypeDelegateTest.java +++ b/weaver/testsrc/org/aspectj/weaver/reflect/ReflectionBasedReferenceTypeDelegateTest.java @@ -12,6 +12,9 @@ package org.aspectj.weaver.reflect; +import java.util.HashSet; +import java.util.Set; + import junit.framework.TestCase; import org.aspectj.weaver.ReferenceType; @@ -130,7 +133,7 @@ public class ReflectionBasedReferenceTypeDelegateTest extends TestCase { assertEquals(1,methods[idx].getExceptions().length); assertEquals(world.resolve("java.lang.Exception"),methods[idx].getExceptions()[0]); int baridx = findMethod("bar", methods); - int initidx = findMethod("init", methods); + int initidx = findMethod("<init>", methods); assertTrue(baridx > -1); assertTrue(initidx > -1); assertTrue(baridx != initidx && baridx != idx && idx <= 2 && initidx <= 2 && baridx <= 2); @@ -238,6 +241,51 @@ public class ReflectionBasedReferenceTypeDelegateTest extends TestCase { assertTrue("Superclass for Map generic type should be Object but was "+rt2,rt2.equals(UnresolvedType.OBJECT)); } + // FIXME asc maybe. The reflection list of methods returned doesn't include <clinit> (the static initializer) ... is that really a problem. + public void testCompareSubclassDelegates() { + + boolean barfIfClinitMissing = false; + world.setBehaveInJava5Way(true); + + BcelWorld bcelWorld = new BcelWorld(); + bcelWorld.setBehaveInJava5Way(true); + UnresolvedType javaUtilHashMap = UnresolvedType.forName("java.util.HashMap"); + ReferenceType rawType =(ReferenceType)bcelWorld.resolve(javaUtilHashMap ); + + ReferenceType rawReflectType =(ReferenceType)world.resolve(javaUtilHashMap ); + ResolvedMember[] rms1 = rawType.getDelegate().getDeclaredMethods(); + ResolvedMember[] rms2 = rawReflectType.getDelegate().getDeclaredMethods(); + StringBuffer errors = new StringBuffer(); + Set one = new HashSet(); + for (int i = 0; i < rms1.length; i++) { + one.add(rms1[i].toString()); + } + Set two = new HashSet(); + for (int i = 0; i < rms2.length; i++) { + two.add(rms2[i].toString()); + } + for (int i = 0;i<rms2.length;i++) { + if (!one.contains(rms2[i].toString())) { + errors.append("Couldn't find "+rms2[i].toString()+" in the bcel set\n"); + } + } + for (int i = 0;i<rms1.length;i++) { + if (!two.contains(rms1[i].toString())) { + if (!barfIfClinitMissing && rms1[i].getName().equals("<clinit>")) continue; + errors.append("Couldn't find "+rms1[i].toString()+" in the reflection set\n"); + } + } + assertTrue("Errors:"+errors.toString(),errors.length()==0); + + if (barfIfClinitMissing) { + // the numbers must be exact + assertEquals(rms1.length,rms2.length); + } else { + // the numbers can be out by one in favour of bcel + assertTrue("Should be one extra (clinit) in BCEL case, but bcel="+rms1.length+" reflect="+rms2.length,rms1.length==rms2.length+1); + } + } + // todo: array of int protected void setUp() throws Exception { |