stevel      2005/03/09 14:56:39

  Modified:    .        build.xml
  Added:       src/etc/testcases/taskdefs apt.xml
               src/etc/testcases/taskdefs/apt AptExample.java
                        Distributed.java DistributedAnnotationFactory.java
                        DistributedAnnotationProcessor.java
               src/testcases/org/apache/tools/ant/taskdefs AptTest.java
  Log:
  Apt testing. We can say this works now :)
  I do worry that the example Java1.5 code looks just like STL C++.
  We also need to compare factorypath with classpath behaviour. But we can demo 
that you can add new factories
  
  Revision  Changes    Path
  1.1                  ant/src/etc/testcases/taskdefs/apt.xml
  
  Index: apt.xml
  ===================================================================
  <?xml version="1.0"?>
  <project basedir=".">
  
  <!-- apt tests -->
  
  <property name="build.dir" location="aptbuild/classes" />
  <property name="classes.dir" location="${build.dir}/classes" />
  <property name="classes2.dir" location="${build.dir}/classes2" />
  <property name="preprocess.dir" location="${build.dir}/source" />
  <property name="src" location="apt" />
  
  <property name="AptExample.class" location="${classes.dir}/AptExample.class" 
/>
  
  <macrodef name="assertCompiled">
    <attribute name="file" />
    <sequential >
      <fail  message="not found: @{file}">
        <condition>
          <not>
            <available file="@{file}" />
          </not>
        </condition>
      </fail>
    </sequential>
  </macrodef>
  
  <presetdef name="assertAptExampleCompiled">
    <assertCompiled file="${AptExample.class}"/>
  </presetdef>
  
  <target name="clean">
    <delete dir="${build.dir}"/>
  </target>
  
  <target name="init">
    <mkdir dir="${classes.dir}"/>
    <mkdir dir="${classes2.dir}"/>
    <mkdir dir="${preprocess.dir}"/>
  </target>
  
  <target name="testApt" depends="init">
    <apt srcdir="${src}"
         destdir="${classes.dir}"
         debug="on"
         compile="true"
         preprocessdir="${preprocess.dir}">
    </apt>
    <assertAptExampleCompiled />
  </target>
  
  <target name="testAptFork" depends="init">
    <apt srcdir="${src}"
         destdir="${classes.dir}"
         debug="on"
         compile="true"
         fork="true"
         preprocessdir="${preprocess.dir}">
    </apt>
    <assertAptExampleCompiled />
  </target>
  
  <target name="testListAnnotationTypes" depends="init">
    <apt srcdir="${src}"
         destdir="${classes.dir}"
         debug="on"
         compile="true"
         preprocessdir="${preprocess.dir}">
         <compilerarg value="-XListAnnotationTypes" />
         <compilerarg value="-Xlint:deprecation" /> 
    </apt>
    
    <assertAptExampleCompiled />
  </target>
  
  
  <!-- use the factory we compiled. To avoid trouble
    we deliver into a version in a new classpath, otherwise
    the dependency logic will not run Apt-->
  <target name="testAptNewFactory" depends="testApt">
    <apt srcdir="${src}"
         destdir="${classes2.dir}"
         debug="on"
         compile="true"
         factory="DistributedAnnotationFactory"
         preprocessdir="${preprocess.dir}">
         <factorypath path="${classes.dir}" />
         <option name="build.dir" value="${build.dir}" />
    </apt>
    <assertAptExampleCompiled />
  </target>
  
  <target name="testAptNewFactoryFork" depends="testApt">
    <apt srcdir="${src}"
         destdir="${classes2.dir}"
         debug="on"
         compile="true"
         factory="DistributedAnnotationFactory"
         preprocessdir="${preprocess.dir}">
         <factorypath path="${classes.dir}" />
         <option name="build.dir" value="${build.dir}" />
    </apt>
    <assertAptExampleCompiled />
  </target>
  
  
  
  </project>
  
  
  
  1.1                  ant/src/etc/testcases/taskdefs/apt/AptExample.java
  
  Index: AptExample.java
  ===================================================================
  /*
   * Copyright  2005 The Apache Software Foundation
   *
   *  Licensed under the Apache License, Version 2.0 (the "License");
   *  you may not use this file except in compliance with the License.
   *  You may obtain a copy of the License at
   *
   *      http://www.apache.org/licenses/LICENSE-2.0
   *
   *  Unless required by applicable law or agreed to in writing, software
   *  distributed under the License is distributed on an "AS IS" BASIS,
   *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
   *  See the License for the specific language governing permissions and
   *  limitations under the License.
   *
   */
  /**
   */
  @Distributed(
          protocol="CORBA",
          distribution=Distributed.DistributionTypes.FEDERATED
          )
  public class AptExample {
  }
  
  
  
  1.1                  ant/src/etc/testcases/taskdefs/apt/Distributed.java
  
  Index: Distributed.java
  ===================================================================
  /*
   * Copyright  2005 The Apache Software Foundation
   *
   *  Licensed under the Apache License, Version 2.0 (the "License");
   *  you may not use this file except in compliance with the License.
   *  You may obtain a copy of the License at
   *
   *      http://www.apache.org/licenses/LICENSE-2.0
   *
   *  Unless required by applicable law or agreed to in writing, software
   *  distributed under the License is distributed on an "AS IS" BASIS,
   *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
   *  See the License for the specific language governing permissions and
   *  limitations under the License.
   *
   */
  import java.lang.annotation.Annotation;
  import java.lang.annotation.Target;
  import java.lang.annotation.Retention;
  import java.lang.annotation.Documented;
  import java.lang.annotation.ElementType;
  import java.lang.annotation.RetentionPolicy;
  
  /**
   */
  @Documented
  @Retention(value = RetentionPolicy.RUNTIME)
  @Target(value = ElementType.TYPE)
  public @interface Distributed  {
  
      public DistributionTypes distribution() default DistributionTypes.LOCAL;
  
      public String protocol() default "RMI";
  
      public enum DistributionTypes { SINGLETON, LOCAL, FAULT_TOLERANT, 
FEDERATED, MOBILE};
  
  
  }
  
  
  
  1.1                  
ant/src/etc/testcases/taskdefs/apt/DistributedAnnotationFactory.java
  
  Index: DistributedAnnotationFactory.java
  ===================================================================
  /*
   * Copyright  2005 The Apache Software Foundation
   *
   *  Licensed under the Apache License, Version 2.0 (the "License");
   *  you may not use this file except in compliance with the License.
   *  You may obtain a copy of the License at
   *
   *      http://www.apache.org/licenses/LICENSE-2.0
   *
   *  Unless required by applicable law or agreed to in writing, software
   *  distributed under the License is distributed on an "AS IS" BASIS,
   *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
   *  See the License for the specific language governing permissions and
   *  limitations under the License.
   *
   */
  import com.sun.mirror.apt.AnnotationProcessorFactory;
  import com.sun.mirror.apt.AnnotationProcessor;
  import com.sun.mirror.apt.AnnotationProcessorEnvironment;
  
  import java.util.Collection;
  import java.util.Set;
  import java.util.Arrays;
  import java.util.Collections;
  
  
  /**
   * This was the first piece of Java1.5 code in the source tree.
   * @since 20050-03-09T21:29:25Z
   */
  public class DistributedAnnotationFactory implements 
AnnotationProcessorFactory {
  
      private static final Collection<String> supportedAnnotations
              = Collections.unmodifiableCollection(Arrays.asList("*"));
  
      public Collection<String> supportedOptions() {
          return Collections.emptySet();
      }
  
      public Collection<String> supportedAnnotationTypes() {
          return supportedAnnotations;
      }
  
      public AnnotationProcessor getProcessorFor(
              Set<com.sun.mirror.declaration.AnnotationTypeDeclaration> 
annotationTypeDeclarations,
              AnnotationProcessorEnvironment env) {
          return new DistributedAnnotationProcessor(env);
      }
  }
  
  
  
  1.1                  
ant/src/etc/testcases/taskdefs/apt/DistributedAnnotationProcessor.java
  
  Index: DistributedAnnotationProcessor.java
  ===================================================================
  /*
   * Copyright  2005 The Apache Software Foundation
   *
   *  Licensed under the Apache License, Version 2.0 (the "License");
   *  you may not use this file except in compliance with the License.
   *  You may obtain a copy of the License at
   *
   *      http://www.apache.org/licenses/LICENSE-2.0
   *
   *  Unless required by applicable law or agreed to in writing, software
   *  distributed under the License is distributed on an "AS IS" BASIS,
   *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
   *  See the License for the specific language governing permissions and
   *  limitations under the License.
   *
   */
  
  //found in tools.jar, not the JRE runtime.
  import com.sun.mirror.apt.AnnotationProcessor;
  import com.sun.mirror.apt.AnnotationProcessorEnvironment;
  import com.sun.mirror.declaration.TypeDeclaration;
  import com.sun.mirror.declaration.ClassDeclaration;
  import com.sun.mirror.util.SimpleDeclarationVisitor;
  import static com.sun.mirror.util.DeclarationVisitors.*;
  
  import java.util.Map;
  
  /**
   * Annotation processor outputs stuff
   */
  
  public class DistributedAnnotationProcessor implements AnnotationProcessor {
  
      public AnnotationProcessorEnvironment env;
  
      public DistributedAnnotationProcessor(AnnotationProcessorEnvironment env) 
{
          this.env = env;
      }
  
      public void echo(String text) {
          env.getMessager().printNotice(text);
      }
  
      public void process() {
          echo("DistributedAnnotationProcessor-is-go");
  
          Map<String, String> options=env.getOptions();
          for(String key:options.keySet()) {
              echo("Option ["+key+"] = "+options.get(key));
          }
  
          //work time
          for (TypeDeclaration typeDecl : env.getSpecifiedTypeDeclarations()) {
              typeDecl.accept(getDeclarationScanner(new ClassVisitor(),
                      NO_OP));
          }
      }
  
      private class ClassVisitor extends SimpleDeclarationVisitor {
          public void visitClassDeclaration(ClassDeclaration d) {
              echo("visiting "+ d.getQualifiedName());
          }
      }
  }
  
  
  
  1.1                  
ant/src/testcases/org/apache/tools/ant/taskdefs/AptTest.java
  
  Index: AptTest.java
  ===================================================================
  /*
   * Copyright  2005 The Apache Software Foundation
   *
   *  Licensed under the Apache License, Version 2.0 (the "License");
   *  you may not use this file except in compliance with the License.
   *  You may obtain a copy of the License at
   *
   *      http://www.apache.org/licenses/LICENSE-2.0
   *
   *  Unless required by applicable law or agreed to in writing, software
   *  distributed under the License is distributed on an "AS IS" BASIS,
   *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
   *  See the License for the specific language governing permissions and
   *  limitations under the License.
   *
   */
  
   package org.apache.tools.ant.taskdefs;
  
  import org.apache.tools.ant.BuildFileTest;
  
  /**
   */
  public class AptTest extends BuildFileTest {
      public AptTest(String name) {
          super(name);
      }
  
      public void setUp() {
          configureProject("src/etc/testcases/taskdefs/apt.xml");
      }
  
      /**
       * Tears down the fixture, for example, close a network connection. This
       * method is called after a test is executed.
       */
      protected void tearDown() throws Exception {
          executeTarget("clean");
      }
  
      public void testApt() {
          executeTarget("testApt");
      }
  
      public void testAptFork() {
          executeTarget("testAptFork");
      }
  
      public void testListAnnotationTypes() {
          executeTarget("testListAnnotationTypes");
          assertLogContaining("Set of annotations found:");
          assertLogContaining("Distributed");
      }
  
      public void testAptNewFactory() {
          executeTarget("testAptNewFactory");
          assertProcessed();
      }
  
      public void testAptNewFactoryFork() {
          executeTarget("testAptNewFactoryFork");
          assertProcessed();
      }
      
      private void assertProcessed() {
          assertLogContaining("DistributedAnnotationProcessor-is-go");
          assertLogContaining("[-Abuild.dir=");
          assertLogContaining("visiting DistributedAnnotationFactory");
      }
  }
  
  
  
  
  1.462     +18 -14    ant/build.xml
  
  Index: build.xml
  ===================================================================
  RCS file: /home/cvs/ant/build.xml,v
  retrieving revision 1.461
  retrieving revision 1.462
  diff -u -r1.461 -r1.462
  --- build.xml 9 Mar 2005 09:25:52 -0000       1.461
  +++ build.xml 9 Mar 2005 22:56:38 -0000       1.462
  @@ -30,8 +30,11 @@
     <property name="bootstrap.jar" value="ant-bootstrap.jar"/>
   
     <property name="ant.package" value="org/apache/tools/ant"/>
  -  <property name="optional.package" 
value="${ant.package}/taskdefs/optional"/>
  -  <property name="optional.type.package" 
value="${ant.package}/types/optional"/>
  +  <property name="taskdefs.package" value="${ant.package}/taskdefs"/>
  +  <property name="optional.package" value="${taskdefs.package}/optional"/>
  +  <property name="optional.condition.package" 
value="${optional.package}/condition"/>
  +  <property name="type.package" value="${ant.package}/types"/>
  +  <property name="optional.type.package" value="${type.package}/optional"/>
     <property name="apache.resolver.type.package" 
value="${ant.package}/types/resolver"/>
     <property name="util.package" value="${ant.package}/util"/>
     <property name="regexp.package" value="${util.package}/regexp"/>
  @@ -154,7 +157,8 @@
   
     <selector id="needs.jdk1.5+">
       <or>
  -      <filename 
name="${ant.package}/taskdefs/optional/condition/IsPingable*"/>
  +      <filename name="${optional.condition.package}/IsPingable*"/>
  +      <filename name="${taskdefs.package}/AptTest*"/>
       </or>
     </selector>
     
  @@ -162,7 +166,7 @@
          but not all of them -->
     <selector id="not.in.kaffe">
       <or>
  -      <filename 
name="${ant.package}/taskdefs/optional/condition/IsPingable*"/>
  +      <filename name="${optional.condition.package}/IsPingable*"/>
       </or>
     </selector>
     
  @@ -185,7 +189,7 @@
         <filename name="${optional.package}/sitraka/**"/>
         <filename name="${optional.package}/metamata/MMetrics*"/>
         <filename name="${optional.package}/XsltTest*"/>
  -      <filename name="${ant.package}/types/XMLCatalogBuildFileTest*"/>
  +      <filename name="${type.package}/XMLCatalogBuildFileTest*"/>
       </or>
     </selector>
   
  @@ -1507,7 +1511,7 @@
             <include name="**/*Test*"/>
   
             <!-- abstract classes, not testcases -->
  -          <exclude name="${ant.package}/taskdefs/TaskdefsTest.java"/>
  +          <exclude name="${taskdefs.package}/TaskdefsTest.java"/>
             <exclude name="${ant.package}/BuildFileTest.java"/>
             <exclude name="${regexp.package}/RegexpMatcherTest.java"/>
             <exclude name="${regexp.package}/RegexpTest.java"/>
  @@ -1517,10 +1521,10 @@
   
             <!-- helper classes, not testcases -->
             <exclude name="org/example/**"/>
  -          <exclude name="${ant.package}/taskdefs/TaskdefTest*Task.java"/>
  +          <exclude name="${taskdefs.package}/TaskdefTest*Task.java"/>
   
             <!-- interactive tests -->
  -          <exclude name="${ant.package}/taskdefs/TestProcess.java"/>
  +          <exclude name="${taskdefs.package}/TestProcess.java"/>
             <exclude name="${optional.package}/splash/SplashScreenTest.java"/>
   
             <!-- only run these tests if their required libraries are
  @@ -1580,7 +1584,7 @@
                      unless="trax.impl.present"/>
             <exclude name="${optional.package}/junit/JUnitReportTest.java"
                      unless="run.junitreport"/>
  -          <exclude name="${ant.package}/taskdefs/StyleTest.java"
  +          <exclude name="${taskdefs.package}/StyleTest.java"
                      unless="trax.impl.present"/>
   
             <!-- needs BSF to work -->
  @@ -1610,9 +1614,9 @@
             IllegalAccessExceptions otherwise.  -->
             <exclude name="${ant.package}/DirectoryScannerTest.java"
                      unless="tests.and.ant.share.classloader"/>
  -          <exclude name="${ant.package}/taskdefs/SQLExecTest.java"
  +          <exclude name="${taskdefs.package}/SQLExecTest.java"
                      unless="tests.and.ant.share.classloader"/>
  -          <exclude 
name="${ant.package}/taskdefs/cvslib/ChangeLogWriterTest.java"
  +          <exclude name="${taskdefs.package}/cvslib/ChangeLogWriterTest.java"
                      unless="tests.and.ant.share.classloader"/>
             <exclude name="${optional.package}/sos/SOSTest.java"
                      unless="tests.and.ant.share.classloader"/>
  @@ -1622,15 +1626,15 @@
                      unless="tests.and.ant.share.classloader"/>
             <exclude name="${optional.package}/metamata/MAuditParserTest.java"
                      unless="tests.and.ant.share.classloader"/>
  -          <exclude name="${ant.package}/taskdefs/ProcessDestroyerTest.java"
  +          <exclude name="${taskdefs.package}/ProcessDestroyerTest.java"
                      unless="tests.and.ant.share.classloader"/>
  -          <exclude 
name="${ant.package}/taskdefs/ProtectedJarMethodsTest.java"
  +          <exclude name="${taskdefs.package}/ProtectedJarMethodsTest.java"
                      unless="tests.and.ant.share.classloader"/>
   
             <!-- can only run if cvs is installed on your machine
                  enable by setting the property have.cvs
             -->
  -          <exclude name="${ant.package}/taskdefs/AbstractCvsTaskTest.java"
  +          <exclude name="${taskdefs.package}/AbstractCvsTaskTest.java"
                      unless="have.cvs"/>
   
             <!-- needs a local ftp server and the entry of a user/password 
combination -->
  
  
  

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to