You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@ant.apache.org by bo...@apache.org on 2002/09/09 10:21:39 UTC

cvs commit: jakarta-ant/src/testcases/org/apache/tools/ant/taskdefs/condition IsReferenceTest.java

bodewig     2002/09/09 01:21:39

  Modified:    docs/manual/CoreTasks conditions.html
               src/main/org/apache/tools/ant/taskdefs/condition
                        ConditionBase.java
               src/testcases/org/apache/tools/ant BuildFileTest.java
  Added:       src/etc/testcases/taskdefs/conditions isreference.xml
               src/main/org/apache/tools/ant/taskdefs/condition
                        IsReference.java
               src/testcases/org/apache/tools/ant/taskdefs/condition
                        IsReferenceTest.java
  Log:
  New <isreference> condition.
  
  Revision  Changes    Path
  1.13      +26 -0     jakarta-ant/docs/manual/CoreTasks/conditions.html
  
  Index: conditions.html
  ===================================================================
  RCS file: /home/cvs/jakarta-ant/docs/manual/CoreTasks/conditions.html,v
  retrieving revision 1.12
  retrieving revision 1.13
  diff -u -r1.12 -r1.13
  --- conditions.html	4 Sep 2002 11:05:16 -0000	1.12
  +++ conditions.html	9 Sep 2002 08:21:39 -0000	1.13
  @@ -292,6 +292,32 @@
       &lt;isfalse value=&quot;false&quot;/&gt;
   </pre>
   
  +<h4>isreference</h4>
  +
  +<p>Test whether a given reference has been defined in this project and
  +- optionally - is of an expected type.</p>
  +
  +<p>This condition has been added in Apache Ant 1.6.</p>
  +
  +<table border="1" cellpadding="2" cellspacing="0">
  +  <tr>
  +    <td valign="top"><b>Attribute</b></td>
  +    <td valign="top"><b>Description</b></td>
  +    <td align="center" valign="top"><b>Required</b></td>
  +  </tr>
  +  <tr>
  +    <td valign="top">refid</td>
  +    <td valign="top">The id of the reference to test.</td>
  +    <td valign="top" align="center">Yes</td>
  +  </tr>
  +  <tr>
  +    <td valign="top">type</td>
  +    <td valign="top">Name of the data type or task this reference is
  +       expected to be.</td>
  +    <td valign="top" align="center">No</td>
  +  </tr>
  +</table>
  +
   <hr>
   <p align="center">Copyright &copy; 2001-2002 Apache Software
   Foundation. All rights Reserved.</p>
  
  
  
  1.1                  jakarta-ant/src/etc/testcases/taskdefs/conditions/isreference.xml
  
  Index: isreference.xml
  ===================================================================
  <project default="nope">
    <path id="global-path-id"/>
    <echo id="echo-id"/>
  
    <target name="nope">
      <fail>This build file should be run by a testcase</fail>
    </target>
  
    <target name="define">
      <path id="target-path-id"/>
    </target>
  
    <target name="basic" depends="define">
      <condition property="global-path">
        <isreference refid="global-path-id"/>
      </condition>
      <condition property="target-path">
        <isreference refid="target-path-id"/>
      </condition>
    </target>
  
    <target name="isreference-incomplete">
      <condition property="foo">
        <isreference/>
      </condition>
    </target>
  
    <target name="type">
      <condition property="global-path">
        <isreference refid="global-path-id" type="path"/>
      </condition>
      <condition property="global-path-as-fileset">
        <isreference refid="global-path-id" type="fileset"/>
      </condition>
      <condition property="global-path-as-foo">
        <isreference refid="global-path-id" type="foo"/>
      </condition>
      <condition property="global-echo">
        <isreference refid="echo-id" type="echo"/>
      </condition>
    </target>
  
  </project>
  
  
  1.16      +8 -1      jakarta-ant/src/main/org/apache/tools/ant/taskdefs/condition/ConditionBase.java
  
  Index: ConditionBase.java
  ===================================================================
  RCS file: /home/cvs/jakarta-ant/src/main/org/apache/tools/ant/taskdefs/condition/ConditionBase.java,v
  retrieving revision 1.15
  retrieving revision 1.16
  diff -u -r1.15 -r1.16
  --- ConditionBase.java	25 Jul 2002 15:21:10 -0000	1.15
  +++ ConditionBase.java	9 Sep 2002 08:21:39 -0000	1.16
  @@ -196,4 +196,11 @@
        */
       public void addIsFalse(IsFalse test) {conditions.addElement(test);}
         
  +    /**
  +     * Add an &lt;isreference&gt; condition.
  +     *
  +     * @since Ant 1.6
  +     */
  +    public void addIsReference(IsReference i) {conditions.addElement(i);}
  +
   }
  
  
  
  1.1                  jakarta-ant/src/main/org/apache/tools/ant/taskdefs/condition/IsReference.java
  
  Index: IsReference.java
  ===================================================================
  /*
   * The Apache Software License, Version 1.1
   *
   * Copyright (c) 2002 The Apache Software Foundation.  All rights
   * reserved.
   *
   * Redistribution and use in source and binary forms, with or without
   * modification, are permitted provided that the following conditions
   * are met:
   *
   * 1. Redistributions of source code must retain the above copyright
   *    notice, this list of conditions and the following disclaimer.
   *
   * 2. Redistributions in binary form must reproduce the above copyright
   *    notice, this list of conditions and the following disclaimer in
   *    the documentation and/or other materials provided with the
   *    distribution.
   *
   * 3. The end-user documentation included with the redistribution, if
   *    any, must include the following acknowlegement:
   *       "This product includes software developed by the
   *        Apache Software Foundation (http://www.apache.org/)."
   *    Alternately, this acknowlegement may appear in the software itself,
   *    if and wherever such third-party acknowlegements normally appear.
   *
   * 4. The names "The Jakarta Project", "Ant", and "Apache Software
   *    Foundation" must not be used to endorse or promote products derived
   *    from this software without prior written permission. For written
   *    permission, please contact apache@apache.org.
   *
   * 5. Products derived from this software may not be called "Apache"
   *    nor may "Apache" appear in their names without prior written
   *    permission of the Apache Group.
   *
   * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
   * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
   * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
   * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
   * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
   * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
   * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
   * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
   * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
   * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
   * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
   * SUCH DAMAGE.
   * ====================================================================
   *
   * This software consists of voluntary contributions made by many
   * individuals on behalf of the Apache Software Foundation.  For more
   * information on the Apache Software Foundation, please see
   * <http://www.apache.org/>.
   */
  
  package org.apache.tools.ant.taskdefs.condition;
  
  import org.apache.tools.ant.BuildException;
  import org.apache.tools.ant.ProjectComponent;
  import org.apache.tools.ant.types.Reference;
  
  /**
   * Condition that tests whether a given reference has been defined.
   *
   * <p>Optionally tests whether it is of a given type/class.</p>
   *
   * @author <a href="mailto:stefan.bodewig@epost.de">Stefan Bodewig</a>
   * @since Ant 1.6
   * @version $Revision: 1.1 $
   */
  public class IsReference extends ProjectComponent implements Condition {
      private Reference ref;
      private String type;
  
      public void setRefid(Reference r) {
          ref = r;
      }
  
      public void setType(String type) {
          this.type = type;
      }
  
      public boolean eval() throws BuildException {
          if (ref == null) {
              throw new BuildException("No reference specified for isreference "
                                       + "condition");
          }
          
          Object o = getProject().getReference(ref.getRefId());
  
          if (o == null) {
              return false;
          } else if (type == null) {
              return true;
          } else {
              Class typeClass = 
                  (Class) getProject().getDataTypeDefinitions().get(type);
  
              if (typeClass == null) {
                  typeClass = 
                      (Class) getProject().getTaskDefinitions().get(type);
              }
  
              if (typeClass == null) {
                  // don't know the type, should throw exception instead?
                  return false;
              }
  
              return typeClass.isAssignableFrom(o.getClass());
          }
      }
  
  }
  
  
  
  1.16      +16 -0     jakarta-ant/src/testcases/org/apache/tools/ant/BuildFileTest.java
  
  Index: BuildFileTest.java
  ===================================================================
  RCS file: /home/cvs/jakarta-ant/src/testcases/org/apache/tools/ant/BuildFileTest.java,v
  retrieving revision 1.15
  retrieving revision 1.16
  diff -u -r1.15 -r1.16
  --- BuildFileTest.java	9 Jul 2002 21:06:15 -0000	1.15
  +++ BuildFileTest.java	9 Sep 2002 08:21:39 -0000	1.16
  @@ -345,6 +345,22 @@
           assertEquals("property " + property,value,result);
       }
   
  +    /**
  +     * assert that a property equals &quot;true&quot;
  +     * @param property property name
  +     */
  +    protected void assertPropertySet(String property) {
  +        assertPropertyEquals(property, "true");
  +    }
  +
  +    /**
  +     * assert that a property is null
  +     * @param property property name
  +     */
  +    protected void assertPropertyUnset(String property) {
  +        assertPropertyEquals(property, null);
  +    }
  +
   
       /**
        * call a target, verify named property is "true".
  
  
  
  1.1                  jakarta-ant/src/testcases/org/apache/tools/ant/taskdefs/condition/IsReferenceTest.java
  
  Index: IsReferenceTest.java
  ===================================================================
  /*
   *  The Apache Software License, Version 1.1
   *
   *  Copyright (c) 2002 The Apache Software Foundation.  All rights
   *  reserved.
   *
   *  Redistribution and use in source and binary forms, with or without
   *  modification, are permitted provided that the following conditions
   *  are met:
   *
   *  1. Redistributions of source code must retain the above copyright
   *  notice, this list of conditions and the following disclaimer.
   *
   *  2. Redistributions in binary form must reproduce the above copyright
   *  notice, this list of conditions and the following disclaimer in
   *  the documentation and/or other materials provided with the
   *  distribution.
   *
   *  3. The end-user documentation included with the redistribution, if
   *  any, must include the following acknowlegement:
   *  "This product includes software developed by the
   *  Apache Software Foundation (http://www.apache.org/)."
   *  Alternately, this acknowlegement may appear in the software itself,
   *  if and wherever such third-party acknowlegements normally appear.
   *
   *  4. The names "The Jakarta Project", "Ant", and "Apache Software
   *  Foundation" must not be used to endorse or promote products derived
   *  from this software without prior written permission. For written
   *  permission, please contact apache@apache.org.
   *
   *  5. Products derived from this software may not be called "Apache"
   *  nor may "Apache" appear in their names without prior written
   *  permission of the Apache Group.
   *
   *  THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
   *  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
   *  OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
   *  DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
   *  ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
   *  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
   *  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
   *  USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
   *  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
   *  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
   *  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
   *  SUCH DAMAGE.
   *  ====================================================================
   *
   *  This software consists of voluntary contributions made by many
   *  individuals on behalf of the Apache Software Foundation.  For more
   *  information on the Apache Software Foundation, please see
   *  <http://www.apache.org/>.
   */
  package org.apache.tools.ant.taskdefs.condition;
  
  import org.apache.tools.ant.Project;
  import org.apache.tools.ant.BuildException;
  import org.apache.tools.ant.BuildFileTest;
  
  /**
   * Testcases for the &lt;isreference&gt; condition.
   *
   * @author <a href="mailto:stefan.bodewig@epost.de">Stefan Bodewig</a>
   */
  public class IsReferenceTest extends BuildFileTest {
  
      public IsReferenceTest(String name) {
          super(name);
      }
  
      /**
       * The JUnit setup method
       */
      public void setUp() {
          configureProject("src/etc/testcases/taskdefs/conditions/isreference.xml");
      }
  
      public void testBasic() {
         expectPropertySet("basic", "global-path"); 
         assertPropertySet("target-path");
         assertPropertyUnset("undefined");
      }
  
      public void testNotEnoughArgs() {
          expectSpecificBuildException("isreference-incomplete", 
                                       "refid attribute has been omitted",
                                       "No reference specified for isreference "
                                       + "condition");
      }
  
      public void testType() {
         expectPropertySet("type", "global-path"); 
         assertPropertyUnset("global-path-as-fileset");
         assertPropertyUnset("global-path-as-foo");
         assertPropertySet("global-echo"); 
      }
  
  }
  
  
  

--
To unsubscribe, e-mail:   <ma...@jakarta.apache.org>
For additional commands, e-mail: <ma...@jakarta.apache.org>