]> source.dussan.org Git - aspectj.git/commitdiff
better tests for 133298 - yucky bug.
authoraclement <aclement>
Sun, 26 Mar 2006 18:15:39 +0000 (18:15 +0000)
committeraclement <aclement>
Sun, 26 Mar 2006 18:15:39 +0000 (18:15 +0000)
tests/bugs151/Deca/DecA.java [deleted file]
tests/bugs151/pr133298/DecA.java [new file with mode: 0644]
tests/bugs151/pr133298/DecA2.java [new file with mode: 0644]
tests/src/org/aspectj/systemtest/ajc151/Ajc151Tests.java
tests/src/org/aspectj/systemtest/ajc151/ajc151.xml

diff --git a/tests/bugs151/Deca/DecA.java b/tests/bugs151/Deca/DecA.java
deleted file mode 100644 (file)
index c668c74..0000000
+++ /dev/null
@@ -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();
-         }
-  }
-}
\ No newline at end of file
diff --git a/tests/bugs151/pr133298/DecA.java b/tests/bugs151/pr133298/DecA.java
new file mode 100644 (file)
index 0000000..7be6a7b
--- /dev/null
@@ -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());
+         }
+  }
+}
\ No newline at end of file
diff --git a/tests/bugs151/pr133298/DecA2.java b/tests/bugs151/pr133298/DecA2.java
new file mode 100644 (file)
index 0000000..bb87289
--- /dev/null
@@ -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());
+         }
+  }
+}
\ No newline at end of file
index 81f495b8936b5024aa3db7bb58cab7316b90814f..fce100bd4fe57745e913758d0edd826ffadd8bda 100644 (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");}
index c627cf8ff41141a7c8f48ae9fa019b7918f4e111..2373c27eca6b90db9caa7da0c19f7cfb7346d491 100644 (file)
         <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>