git-svn-id: https://svn.apache.org/repos/asf/ant/core/trunk@275950 13f79535-47bb-0310-9956-ffa450edef68master
| @@ -55,6 +55,12 @@ Other changes: | |||
| - Added three new ClearCase commands: ccmkattr, ccmkdir, ccmkelem | |||
| Bugzilla Report 26253. | |||
| * New condition <typefound> that can be used to probe for the declaration | |||
| and implementation of a task, type, preset, macro, scriptdef, whatever. | |||
| As it tests for the implementation, it can be used to check for optional | |||
| tasks being available. | |||
| Changes from Ant 1.5.4 to Ant 1.6.0 | |||
| =================================== | |||
| @@ -326,6 +326,27 @@ that is "true","yes", or "on"</p> | |||
| </tr> | |||
| </table> | |||
| <h4>typefound</h4> | |||
| <p>Test whether a given type is defined, and that | |||
| its implementation class can be loaded. Types include | |||
| tasks, datatypes, scriptdefs, macrodefs and presetdefs.</p> | |||
| <p>This condition has been added in Apache Ant 1.7.</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">name</td> | |||
| <td valign="top">name of the type</td> | |||
| <td valign="top" align="center">Yes</td> | |||
| </tr> | |||
| </table> | |||
| <hr> | |||
| <p align="center">Copyright © 2001-2003 Apache Software | |||
| Foundation. All rights Reserved.</p> | |||
| @@ -0,0 +1,52 @@ | |||
| <project name="typefound"> | |||
| <target name="testTask"> | |||
| <condition property="testTask"> | |||
| <typefound name="echo"/> | |||
| </condition> | |||
| </target> | |||
| <target name="testUndefined"> | |||
| <condition property="testUndefined"> | |||
| <typefound /> | |||
| </condition> | |||
| </target> | |||
| <target name="testTaskThatDoesntReallyExist"> | |||
| <!-- <taskdef name="invalid-task-name" | |||
| classname="org.example.invalid.task.name.hopefully"/> --> | |||
| <condition property="testTaskThatDoesntReallyExist"> | |||
| <typefound name="invalid-task-name"/> | |||
| </condition> | |||
| </target> | |||
| <target name="testType"> | |||
| <condition property="testType"> | |||
| <typefound name="path"/> | |||
| </condition> | |||
| </target> | |||
| <target name="testPreset"> | |||
| <presetdef name="important-echo"> | |||
| <echo level="error"/> | |||
| </presetdef> | |||
| <condition property="testPreset"> | |||
| <typefound name="important-echo"/> | |||
| </condition> | |||
| </target> | |||
| <target name="testMacro"> | |||
| <macrodef name="error-message"> | |||
| <element name="text" optional="false"/> | |||
| <sequential> | |||
| <echo level="error">@{text}</echo> | |||
| </sequential> | |||
| </macrodef> | |||
| <condition property="testMacro"> | |||
| <typefound name="error-message"/> | |||
| </condition> | |||
| </target> | |||
| </project> | |||
| @@ -252,6 +252,13 @@ public abstract class ConditionBase extends ProjectComponent { | |||
| conditions.addElement(i); | |||
| } | |||
| /** | |||
| * Add an <typefound> condition. | |||
| * @param test | |||
| */ | |||
| public void addTypeFound(TypeFound test) { | |||
| conditions.addElement(test); | |||
| } | |||
| /** | |||
| * Add an arbitrary condition | |||
| * @param c a condition | |||
| @@ -0,0 +1,107 @@ | |||
| /* | |||
| * The Apache Software License, Version 1.1 | |||
| * | |||
| * Copyright (c) 2004 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 "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.ComponentHelper; | |||
| import org.apache.tools.ant.ProjectComponent; | |||
| import org.apache.tools.ant.AntTypeDefinition; | |||
| /** | |||
| * looks for a task or other Ant type that exists. Existence is defined as | |||
| * the type is defined, and its implementation class is present. This | |||
| * will work for datatypes and preset, script and macro definitions. | |||
| */ | |||
| public class TypeFound extends ProjectComponent implements Condition { | |||
| private String name; | |||
| /** | |||
| * the task or other type to look for | |||
| * @param name | |||
| */ | |||
| public void setName(String name) { | |||
| this.name = name; | |||
| } | |||
| /** | |||
| * test for a task or other ant type existing in the current project | |||
| * @param typename | |||
| * @return true if the typename exists | |||
| */ | |||
| protected boolean doesTypeExist(String typename) { | |||
| ComponentHelper helper=ComponentHelper.getComponentHelper(getProject()); | |||
| AntTypeDefinition def=helper.getDefinition(typename); | |||
| if(def==null) { | |||
| return false; | |||
| } | |||
| //now verify that the class has an implementation | |||
| return def.getExposedClass(getProject())!=null; | |||
| } | |||
| /** | |||
| * Is this condition true? | |||
| * @return true if the condition is true | |||
| * @exception BuildException if an error occurs | |||
| */ | |||
| public boolean eval() throws BuildException { | |||
| if(name==null) { | |||
| throw new BuildException("No type specified"); | |||
| } | |||
| return doesTypeExist(name); | |||
| } | |||
| } | |||
| @@ -0,0 +1,95 @@ | |||
| /* | |||
| * The Apache Software License, Version 1.1 | |||
| * | |||
| * Copyright (c) 2004 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 "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.BuildFileTest; | |||
| /** | |||
| * test the typeexists condition | |||
| */ | |||
| public class TypeFoundTest extends BuildFileTest { | |||
| public TypeFoundTest(String name) { | |||
| super(name); | |||
| } | |||
| /** | |||
| * The JUnit setup method | |||
| */ | |||
| public void setUp() { | |||
| configureProject("src/etc/testcases/taskdefs/conditions/typefound.xml"); | |||
| } | |||
| public void testTask() { | |||
| expectPropertySet("testTask", "testTask"); | |||
| } | |||
| public void testUndefined() { | |||
| expectBuildExceptionContaining("testUndefined","left out the name attribute", "No type specified"); | |||
| } | |||
| public void testTaskThatDoesntReallyExist() { | |||
| expectPropertyUnset("testTaskThatDoesntReallyExist", "testTaskThatDoesntReallyExist"); | |||
| } | |||
| public void testType() { | |||
| expectPropertySet("testType", "testType"); | |||
| } | |||
| public void testPreset() { | |||
| expectPropertySet("testPreset", "testPreset"); | |||
| } | |||
| public void testMacro() { | |||
| expectPropertySet("testMacro", "testMacro"); | |||
| } | |||
| } | |||