Browse Source

better tests for 133298 - yucky bug.

tags/V1_5_1_final
aclement 18 years ago
parent
commit
f963fc4dcd

+ 0
- 36
tests/bugs151/Deca/DecA.java View File

@@ -1,36 +0,0 @@
import java.lang.annotation.Annotation;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.reflect.Method;
import java.util.Iterator;

@Retention(RetentionPolicy.RUNTIME)
@interface One {}

@Retention(RetentionPolicy.RUNTIME)
@interface Two {}

class Target {
public void m() {}
}

aspect X {
declare @method: * Target.*(..): @One;
declare @method: * Target.*(..): @Two;
}

public class DecA {
public static void main(String []argv) {
try {
Class c = Target.class;
Method m = c.getDeclaredMethod("m",null);
Annotation[] anns = m.getAnnotations();
System.err.println("There are "+anns.length+" annotations on public void m():");
for (int i = 0; i < anns.length; i++) {
System.err.println((i+1)+") "+anns[i]);
}
} catch (Exception e) {
e.printStackTrace();
}
}
}

+ 72
- 0
tests/bugs151/pr133298/DecA.java View File

@@ -0,0 +1,72 @@
import java.lang.annotation.Annotation;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.reflect.Constructor;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Iterator;
import java.util.List;


@Retention(RetentionPolicy.RUNTIME) @interface One {}
@Retention(RetentionPolicy.RUNTIME) @interface Two {}
@Retention(RetentionPolicy.RUNTIME) @interface Three {}
@Retention(RetentionPolicy.RUNTIME) @interface Four {}
@Retention(RetentionPolicy.RUNTIME) @interface Five {}
@Retention(RetentionPolicy.RUNTIME) @interface Six {}

class Target {
public void m() {}
public Target(int i) {}
public int x;
}

aspect X {
declare @method: * Target.*(..): @One;
declare @method: * Target.*(..): @Two;

declare @constructor: Target.new(int): @Three;
declare @constructor: Target.new(int): @Four;

declare @field: int Target.*: @Five;
declare @field: int Target.*: @Six;
}

public class DecA {
public static void main(String []argv) {
// Let's do the method then the ctor, then the field
try {
Class c = Target.class;
Method m = c.getDeclaredMethod("m",null);
System.err.println("There are "+m.getAnnotations().length+" annotations on public void m():");
dumpAnnos(m.getAnnotations());
Constructor ctor = c.getDeclaredConstructor(new Class[]{Integer.TYPE});
System.err.println("There are "+ctor.getAnnotations().length+" annotations on public Target(int):");
dumpAnnos(ctor.getAnnotations());
Field f = c.getDeclaredField("x");
System.err.println("There are "+f.getAnnotations().length+" annotations on public int x:");
dumpAnnos(f.getAnnotations());
} catch (Exception e) { e.printStackTrace();}
}
public static void dumpAnnos(Annotation[] anns) {
List l = new ArrayList();
if (anns!=null) {
for (int i = 0; i < anns.length; i++) {
l.add(anns[i].annotationType().getName());
}
}
Collections.sort(l);
int i = 1;
for (Iterator iter = l.iterator(); iter.hasNext();) {
System.err.println((i++)+") "+iter.next());
}
}
}

+ 62
- 0
tests/bugs151/pr133298/DecA2.java View File

@@ -0,0 +1,62 @@
import java.lang.annotation.Annotation;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.reflect.Constructor;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Iterator;
import java.util.List;


@Retention(RetentionPolicy.RUNTIME) @interface One {}
@Retention(RetentionPolicy.RUNTIME) @interface Two {}
@Retention(RetentionPolicy.RUNTIME) @interface Three {}
@Retention(RetentionPolicy.RUNTIME) @interface Four {}
@Retention(RetentionPolicy.RUNTIME) @interface Five {}
@Retention(RetentionPolicy.RUNTIME) @interface Six {}

interface Target {
public void m();
}

class A implements Target {
public void m() {
}
}

aspect X {
declare @method: * Target+.*(..): @One;
declare @method: * Target+.*(..): @Two;
}

public class DecA2 {
public static void main(String []argv) {
try {
Class c = Target.class;
Method m = c.getDeclaredMethod("m",null);
System.err.println("There are "+m.getAnnotations().length+" annotations on public void Target.m():");
dumpAnnos(m.getAnnotations());
c = A.class;
m = c.getDeclaredMethod("m",null);
System.err.println("There are "+m.getAnnotations().length+" annotations on public void A.m():");
dumpAnnos(m.getAnnotations());
} catch (Exception e) { e.printStackTrace();}
}
public static void dumpAnnos(Annotation[] anns) {
List l = new ArrayList();
if (anns!=null) {
for (int i = 0; i < anns.length; i++) {
l.add(anns[i].annotationType().getName());
}
}
Collections.sort(l);
int i = 1;
for (Iterator iter = l.iterator(); iter.hasNext();) {
System.err.println((i++)+") "+iter.next());
}
}
}

+ 2
- 3
tests/src/org/aspectj/systemtest/ajc151/Ajc151Tests.java View File

@@ -25,9 +25,8 @@ import org.aspectj.testing.XMLBasedAjcTestCase;

public class Ajc151Tests extends org.aspectj.testing.XMLBasedAjcTestCase {
// reported on the list...
// public void testDeca() { runTest("doubly annotating a method with declare");}
// public void testDeca() { runTest("doubly annotating a method with declare");}
// public void testDeca2() { runTest("doubly annotating a method with declare - 2");}
public void testCrashingWithASM_pr132926_1() { runTest("crashing on annotation type resolving with asm - 1");}
public void testCrashingWithASM_pr132926_2() { runTest("crashing on annotation type resolving with asm - 2");}
public void testCrashingWithASM_pr132926_3() { runTest("crashing on annotation type resolving with asm - 3");}

+ 23
- 3
tests/src/org/aspectj/systemtest/ajc151/ajc151.xml View File

@@ -24,13 +24,33 @@
<run class="A"/>
</ajc-test>
<ajc-test dir="bugs151/Deca" title="doubly annotating a method with declare">
<ajc-test dir="bugs151/pr133298" title="doubly annotating a method with declare">
<compile files="DecA.java" options="-1.5"/>
<run class="DecA">
<stderr>
<line text="There are 2 annotations on public void m()"/>
<line text="1) @One()"/>
<line text="2) @Two()"/>
<line text="1) One"/>
<line text="2) Two"/>
<line text="There are 2 annotations on public Target(int):"/>
<line text="1) Four"/>
<line text="2) Three"/>
<line text="There are 2 annotations on public int x:"/>
<line text="1) Five"/>
<line text="2) Six"/>
</stderr>
</run>
</ajc-test>
<ajc-test dir="bugs151/pr133298" title="doubly annotating a method with declare - 2">
<compile files="DecA2.java" options="-1.5"/>
<run class="DecA2">
<stderr>
<line text="There are 2 annotations on public void Target.m()"/>
<line text="1) One"/>
<line text="2) Two"/>
<line text="There are 2 annotations on public void A.m()"/>
<line text="1) One"/>
<line text="2) Two"/>
</stderr>
</run>
</ajc-test>

Loading…
Cancel
Save