]> source.dussan.org Git - aspectj.git/commitdiff
pipeline changes: testcode
authoraclement <aclement>
Wed, 26 Jul 2006 15:01:31 +0000 (15:01 +0000)
committeraclement <aclement>
Wed, 26 Jul 2006 15:01:31 +0000 (15:01 +0000)
13 files changed:
tests/features153/pipelining/AtAJAspect.java [new file with mode: 0644]
tests/features153/pipelining/AtInnerAJAspect.java [new file with mode: 0644]
tests/features153/pipelining/ClassOne.java [new file with mode: 0644]
tests/features153/pipelining/ClassTwo.java [new file with mode: 0644]
tests/features153/pipelining/SimpleAspect.java [new file with mode: 0644]
tests/features153/pipelining/SimpleAspect2.java [new file with mode: 0644]
tests/features153/pipelining/SubAspect.java [new file with mode: 0644]
tests/features153/pipelining/SuperClass.java [new file with mode: 0644]
tests/features153/pipelining/annotations/AnAspect.java [new file with mode: 0644]
tests/features153/pipelining/annotations/DecoratedClass.java [new file with mode: 0644]
tests/features153/pipelining/annotations/Foo.java [new file with mode: 0644]
tests/src/org/aspectj/systemtest/ajc153/PipeliningTests.java [new file with mode: 0644]
tests/src/org/aspectj/systemtest/ajc153/pipelining.xml [new file with mode: 0644]

diff --git a/tests/features153/pipelining/AtAJAspect.java b/tests/features153/pipelining/AtAJAspect.java
new file mode 100644 (file)
index 0000000..a739761
--- /dev/null
@@ -0,0 +1,7 @@
+import org.aspectj.lang.annotation.*;
+
+@Aspect
+public class AtAJAspect {
+  @Before("staticinitialization(*)")
+  public void m() { }
+}
diff --git a/tests/features153/pipelining/AtInnerAJAspect.java b/tests/features153/pipelining/AtInnerAJAspect.java
new file mode 100644 (file)
index 0000000..7f06938
--- /dev/null
@@ -0,0 +1,9 @@
+import org.aspectj.lang.annotation.*;
+
+public class AtInnerAJAspect {
+  @Aspect
+  public static class SimpleAspect {
+    @Before("staticinitialization(*)")
+    public void m() { }
+  }
+}
diff --git a/tests/features153/pipelining/ClassOne.java b/tests/features153/pipelining/ClassOne.java
new file mode 100644 (file)
index 0000000..b86d8e1
--- /dev/null
@@ -0,0 +1,9 @@
+public class ClassOne {
+       public static void main(String[] args) {
+               new ClassOne().printMessage("I am ClassOne");
+       }
+       
+       public void printMessage(String message) {
+               System.out.println(message);
+       }
+}
\ No newline at end of file
diff --git a/tests/features153/pipelining/ClassTwo.java b/tests/features153/pipelining/ClassTwo.java
new file mode 100644 (file)
index 0000000..8b26686
--- /dev/null
@@ -0,0 +1,9 @@
+public class ClassTwo {
+       public static void main(String[] args) {
+               new ClassTwo().printMessage("I am ClassTwo");
+       }
+       
+       public void printMessage(String message) {
+               System.out.println(message);
+       }
+}
\ No newline at end of file
diff --git a/tests/features153/pipelining/SimpleAspect.java b/tests/features153/pipelining/SimpleAspect.java
new file mode 100644 (file)
index 0000000..431f93f
--- /dev/null
@@ -0,0 +1,5 @@
+public aspect SimpleAspect {
+       before(): staticinitialization(*) {
+               
+       }
+}
\ No newline at end of file
diff --git a/tests/features153/pipelining/SimpleAspect2.java b/tests/features153/pipelining/SimpleAspect2.java
new file mode 100644 (file)
index 0000000..609256e
--- /dev/null
@@ -0,0 +1,4 @@
+public aspect SimpleAspect2 {
+       before(): staticinitialization(*) {
+       }
+}
diff --git a/tests/features153/pipelining/SubAspect.java b/tests/features153/pipelining/SubAspect.java
new file mode 100644 (file)
index 0000000..94f0376
--- /dev/null
@@ -0,0 +1,3 @@
+public aspect SubAspect extends SuperClass {
+  before(): p() { }
+}
diff --git a/tests/features153/pipelining/SuperClass.java b/tests/features153/pipelining/SuperClass.java
new file mode 100644 (file)
index 0000000..474d44d
--- /dev/null
@@ -0,0 +1,3 @@
+public class SuperClass {
+  pointcut p(): staticinitialization(*);
+}
diff --git a/tests/features153/pipelining/annotations/AnAspect.java b/tests/features153/pipelining/annotations/AnAspect.java
new file mode 100644 (file)
index 0000000..2b3d6ee
--- /dev/null
@@ -0,0 +1,15 @@
+import java.lang.annotation.*;
+
+public aspect AnAspect {
+
+  declare @type: Foo: @SimpleAnnotation(id=5); // one type in an array
+
+
+  declare @type: Foo: @AnnotationClassElement(clz=Integer.class); // one type not in an array
+
+
+  before(): call(* (@SimpleAnnotation *).m(..))  {
+  }
+
+//  declare @type: Foo: @AnnotationStringElement(stringval="www"); // two types in an array
+}
diff --git a/tests/features153/pipelining/annotations/DecoratedClass.java b/tests/features153/pipelining/annotations/DecoratedClass.java
new file mode 100644 (file)
index 0000000..769c72f
--- /dev/null
@@ -0,0 +1,61 @@
+// Use all the variants of annotations - to exercise the 
+// eclipse transform code in EclipseSourceType
+
+import java.lang.annotation.*;
+
+@AnnotationStringElement(stringval="hello")
+@SimpleAnnotation(id=1)
+@AnnotationClassElement(clz=Integer.class)
+@CombinedAnnotation({@SimpleAnnotation(id=4)})
+@AnnotationEnumElement(enumval=SimpleEnum.Red)
+@ComplexAnnotation(ival=4,bval=2,cval='5',fval=3.0f,dval=33.4,zval=false,jval=56,sval=99)
+public class DecoratedClass {
+public void m() {}
+
+}
+
+@Target(value={ElementType.TYPE})
+@Retention(RetentionPolicy.RUNTIME)
+@interface SimpleAnnotation {
+  int id();
+  String fruit() default "bananas";
+}
+enum SimpleEnum { Red,Orange,Yellow,Green,Blue,Indigo,Violet };
+
+@Retention(RetentionPolicy.RUNTIME)
+@interface SimpleStringAnnotation {
+  String fruit();
+}
+
+
+@Target({ElementType.TYPE,ElementType.FIELD})
+@Retention(RetentionPolicy.RUNTIME)
+@interface AnnotationClassElement {
+  Class clz();
+}
+
+@Retention(RetentionPolicy.RUNTIME)
+@interface AnnotationEnumElement {
+  SimpleEnum enumval();
+}
+@Target({ElementType.TYPE,ElementType.METHOD,ElementType.FIELD})
+@Retention(RetentionPolicy.RUNTIME)
+@interface AnnotationStringElement {
+  String stringval();
+}
+@Retention(RetentionPolicy.RUNTIME)
+@interface CombinedAnnotation {
+ SimpleAnnotation[] value();
+}
+@Retention(RetentionPolicy.RUNTIME)
+@interface ComplexAnnotation {
+  int ival();
+  byte bval();
+  char cval();
+  long jval();
+  double dval();
+  boolean zval();
+  short sval();
+  float fval();
+}
+
diff --git a/tests/features153/pipelining/annotations/Foo.java b/tests/features153/pipelining/annotations/Foo.java
new file mode 100644 (file)
index 0000000..a7d68dd
--- /dev/null
@@ -0,0 +1,5 @@
+public class Foo { 
+  public static void main(String []argv) {
+    new DecoratedClass().m();
+  }
+}
diff --git a/tests/src/org/aspectj/systemtest/ajc153/PipeliningTests.java b/tests/src/org/aspectj/systemtest/ajc153/PipeliningTests.java
new file mode 100644 (file)
index 0000000..5da2dc8
--- /dev/null
@@ -0,0 +1,87 @@
+/*******************************************************************************
+ * Copyright (c) 2006 IBM 
+ * 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:
+ *    Andy Clement - initial API and implementation
+ *******************************************************************************/
+package org.aspectj.systemtest.ajc153;
+
+import java.io.File;
+
+import junit.framework.Test;
+
+import org.aspectj.ajdt.internal.compiler.AjCompilerAdapter;
+import org.aspectj.testing.XMLBasedAjcTestCase;
+
+/**
+ * testplan: (x = complete)
+ * 
+ * x @AspectJ aspects - are they recognized and sorted correctly ?
+ * x compiling classes (various orderings)
+ * x compiling classes (inheritance relationships)
+ * x compiling aspects and classes (various orderings - aspects first/last)
+ * x eclipse annotation transformation logic
+ * x aspects extending classes
+ * x nested types (and aspect inside a regular class)
+ * x set of files that are only aspects
+ * x pointcuts in super classes
+ * - classes with errors
+ * - aspects with errors
+ * - Xterminate after compilation (now == skip weaving??)
+ * 
+ * That this pipeline works OK for large systems is kind of confirmed by using it to build shadows!
+ *
+ */
+public class PipeliningTests extends org.aspectj.testing.XMLBasedAjcTestCase {
+
+       // straightforward compilation
+       public void testBuildTwoClasses() { runTest("build two classes");}
+       public void testBuildOneAspectTwoClasses() { runTest("build one aspect and two classes");}
+       public void testBuildTwoClassesOneAspect() { runTest("build two classes and one aspect");}
+       public void testBuildTwoAspects() { runTest("build two aspects");}
+       
+       public void testAspectExtendsClass() { runTest("aspect extends class"); }
+       
+       // verifying the type sorting
+       public void testRecognizingAnnotationStyleAspects1() { 
+               AjCompilerAdapter.pipelineTesting=true;
+               runTest("recognizing annotation style aspects - 1");
+               
+               String filesContainingAspects = AjCompilerAdapter.getPipelineDebugOutput("filesContainingAspects");
+               assertTrue("Should be one file containing aspects but it thinks there are "+filesContainingAspects,filesContainingAspects.equals("1"));
+                               
+               String weaveOrder = AjCompilerAdapter.getPipelineDebugOutput("weaveOrder");
+               String expectedOrder="[AtAJAspect.java,ClassOne.java]";
+               assertTrue("Expected weaving order to be "+expectedOrder+" but was "+weaveOrder,weaveOrder.equals(expectedOrder));
+       }
+       public void testRecognizingAnnotationStyleAspects2() { 
+               AjCompilerAdapter.pipelineTesting=true;
+               runTest("recognizing annotation style aspects - 2");
+
+               String filesContainingAspects = AjCompilerAdapter.getPipelineDebugOutput("filesContainingAspects");
+               assertTrue("Should be one file containing aspects but it thinks there are "+filesContainingAspects,filesContainingAspects.equals("1"));
+                               
+               String weaveOrder = AjCompilerAdapter.getPipelineDebugOutput("weaveOrder");
+               String expectedOrder="[AtInnerAJAspect.java,ClassOne.java]";
+               assertTrue("Expected weaving order to be "+expectedOrder+" but was "+weaveOrder,weaveOrder.equals(expectedOrder));
+       }
+       
+       // verifying the new code for transforming Eclipse Annotations into AspectJ ones
+       public void testAnnotationTransformation() { runTest("annotation transformation"); }
+
+  // --
+  protected void tearDown() throws Exception {
+               super.tearDown();
+               AjCompilerAdapter.pipelineTesting=false;
+  }
+  public static Test suite() {
+    return XMLBasedAjcTestCase.loadSuite(PipeliningTests.class);
+  }
+  protected File getSpecFile() {
+    return new File("../tests/src/org/aspectj/systemtest/ajc153/pipelining.xml");
+  }
+}
\ No newline at end of file
diff --git a/tests/src/org/aspectj/systemtest/ajc153/pipelining.xml b/tests/src/org/aspectj/systemtest/ajc153/pipelining.xml
new file mode 100644 (file)
index 0000000..409327a
--- /dev/null
@@ -0,0 +1,64 @@
+<!DOCTYPE suite SYSTEM "../tests/ajcTestSuite.dtd"[]>
+
+<!-- Pipelining tests -->
+<suite>
+
+    <!-- testing the very very basics of pipelining -->
+    <ajc-test dir="features153/pipelining" title="build two classes">
+      <compile files="ClassOne.java,ClassTwo.java" options="-verbose"/>
+    </ajc-test>
+    
+    <!-- testing the basics when an aspect is included, it is placed at the front deliberately -->
+    <ajc-test dir="features153/pipelining" title="build one aspect and two classes">
+      <compile files="SimpleAspect.java,ClassOne.java,ClassTwo.java" options="-verbose -showWeaveInfo">
+        <message kind="weave" text="Join point 'staticinitialization(void SimpleAspect.&lt;clinit&gt;())' in Type 'SimpleAspect' (SimpleAspect.java:1) advised by before advice from 'SimpleAspect' (SimpleAspect.java:2)"/>
+        <message kind="weave" text="Join point 'staticinitialization(void ClassOne.&lt;clinit&gt;())' in Type 'ClassOne' (ClassOne.java:1) advised by before advice from 'SimpleAspect' (SimpleAspect.java:2)"/>
+        <message kind="weave" text="Join point 'staticinitialization(void ClassTwo.&lt;clinit&gt;())' in Type 'ClassTwo' (ClassTwo.java:1) advised by before advice from 'SimpleAspect' (SimpleAspect.java:2)"/>
+      </compile>        
+    </ajc-test>
+    
+    <!-- testing the basics when an aspect is included, aspect should be moved to the front after diet parsing -->
+    <ajc-test dir="features153/pipelining" title="build two classes and one aspect">
+      <compile files="ClassOne.java,ClassTwo.java,SimpleAspect.java" options="-verbose -showWeaveInfo">
+        <message kind="weave" text="Join point 'staticinitialization(void SimpleAspect.&lt;clinit&gt;())' in Type 'SimpleAspect' (SimpleAspect.java:1) advised by before advice from 'SimpleAspect' (SimpleAspect.java:2)"/>
+        <message kind="weave" text="Join point 'staticinitialization(void ClassOne.&lt;clinit&gt;())' in Type 'ClassOne' (ClassOne.java:1) advised by before advice from 'SimpleAspect' (SimpleAspect.java:2)"/>
+        <message kind="weave" text="Join point 'staticinitialization(void ClassTwo.&lt;clinit&gt;())' in Type 'ClassTwo' (ClassTwo.java:1) advised by before advice from 'SimpleAspect' (SimpleAspect.java:2)"/>
+      </compile>        
+    </ajc-test>
+    
+    <!-- just building aspects, no classes around - will the sorting behave -->
+    <ajc-test dir="features153/pipelining" title="build two aspects">
+      <compile files="SimpleAspect.java,SimpleAspect2.java" options="-verbose -showWeaveInfo">
+        <message kind="weave" text="Join point 'staticinitialization(void SimpleAspect.&lt;clinit&gt;())' in Type 'SimpleAspect' (SimpleAspect.java:1) advised by before advice from 'SimpleAspect2' (SimpleAspect2.java:2)"/>
+        <message kind="weave" text="Join point 'staticinitialization(void SimpleAspect.&lt;clinit&gt;())' in Type 'SimpleAspect' (SimpleAspect.java:1) advised by before advice from 'SimpleAspect' (SimpleAspect.java:2)"/>
+        <message kind="weave" text="Join point 'staticinitialization(void SimpleAspect2.&lt;clinit&gt;())' in Type 'SimpleAspect2' (SimpleAspect2.java:1) advised by before advice from 'SimpleAspect2' (SimpleAspect2.java:2)"/>
+        <message kind="weave" text="Join point 'staticinitialization(void SimpleAspect2.&lt;clinit&gt;())' in Type 'SimpleAspect2' (SimpleAspect2.java:1) advised by before advice from 'SimpleAspect' (SimpleAspect.java:2)"/>
+      </compile>        
+    </ajc-test>
+    
+    <!-- pointcut in a superclass, subaspect extends the class - pointcut class is supplied after the superclass -->
+    <ajc-test dir="features153/pipelining" title="aspect extends class">
+      <compile files="ClassOne.java,SubAspect.java,ClassTwo.java,SuperClass.java" options="-verbose -showWeaveInfo">
+        <message kind="weave" text="Join point 'staticinitialization(void SubAspect.&lt;clinit&gt;())' in Type 'SubAspect' (SubAspect.java:1) advised by before advice from 'SubAspect' (SubAspect.java:2)"/>
+        <message kind="weave" text="Join point 'staticinitialization(void ClassOne.&lt;clinit&gt;())' in Type 'ClassOne' (ClassOne.java:1) advised by before advice from 'SubAspect' (SubAspect.java:2)"/>
+        <message kind="weave" text="Join point 'staticinitialization(void ClassTwo.&lt;clinit&gt;())' in Type 'ClassTwo' (ClassTwo.java:1) advised by before advice from 'SubAspect' (SubAspect.java:2)"/>
+        <message kind="weave" text="Join point 'staticinitialization(void SuperClass.&lt;clinit&gt;())' in Type 'SuperClass' (SuperClass.java:1) advised by before advice from 'SubAspect' (SubAspect.java:2)"/>
+      </compile>        
+    </ajc-test>
+    
+    <!-- testing eclipse to aspectj annotation transformation -->
+    <ajc-test dir="features153/pipelining/annotations" title="annotation transformation">
+      <compile files="AnAspect.java,Foo.java,DecoratedClass.java" options="-1.5 -verbose"/>
+    </ajc-test>
+
+    <!-- does the aspect sorter recognize annotation style aspects, pass the aspects last  -->
+    <ajc-test dir="features153/pipelining" title="recognizing annotation style aspects - 1">
+      <compile files="ClassOne.java,AtAJAspect.java" options="-1.5 -verbose"/>
+    </ajc-test>
+    
+    <!-- does the aspect sorter recognize annotation style aspects (inner type), pass the aspects last -->
+    <ajc-test dir="features153/pipelining" title="recognizing annotation style aspects - 2">
+      <compile files="ClassOne.java,AtInnerAJAspect.java" options="-1.5 -verbose"/>
+    </ajc-test>
+
+</suite>
\ No newline at end of file