git-svn-id: https://svn.apache.org/repos/asf/ant/core/trunk@277374 13f79535-47bb-0310-9956-ffa450edef68master
| @@ -334,7 +334,7 @@ that is "true","yes", or "on"</p> | |||||
| existence of any signature | existence of any signature | ||||
| </p> | </p> | ||||
| <p> | <p> | ||||
| This condition has been added in Apache Ant 1.7. | |||||
| This condition was added in Apache Ant 1.7. | |||||
| </p> | </p> | ||||
| <table border="1" cellpadding="2" cellspacing="0"> | <table border="1" cellpadding="2" cellspacing="0"> | ||||
| <tr> | <tr> | ||||
| @@ -361,7 +361,7 @@ that is "true","yes", or "on"</p> | |||||
| Test whether a file passes an embedded selector. | Test whether a file passes an embedded selector. | ||||
| </p> | </p> | ||||
| <p> | <p> | ||||
| This condition has been added in Apache Ant 1.7. | |||||
| This condition was added in Apache Ant 1.7. | |||||
| </p> | </p> | ||||
| <table border="1" cellpadding="2" cellspacing="0"> | <table border="1" cellpadding="2" cellspacing="0"> | ||||
| <tr> | <tr> | ||||
| @@ -398,7 +398,7 @@ that is "true","yes", or "on"</p> | |||||
| its implementation class can be loaded. Types include | its implementation class can be loaded. Types include | ||||
| tasks, datatypes, scriptdefs, macrodefs and presetdefs.</p> | tasks, datatypes, scriptdefs, macrodefs and presetdefs.</p> | ||||
| <p>This condition has been added in Apache Ant 1.7.</p> | |||||
| <p>This condition was added in Apache Ant 1.7.</p> | |||||
| <table border="1" cellpadding="2" cellspacing="0"> | <table border="1" cellpadding="2" cellspacing="0"> | ||||
| <tr> | <tr> | ||||
| @@ -413,8 +413,60 @@ tasks, datatypes, scriptdefs, macrodefs and presetdefs.</p> | |||||
| </tr> | </tr> | ||||
| </table> | </table> | ||||
| <h4>scriptcondition</h4> | |||||
| <p>Evaluate a condition based on a script in any | |||||
| <a href="http://jakarta.apache.org/bsf" target="_top">Apache BSF</a> | |||||
| supported language.</p> | |||||
| <p> | |||||
| See the <a href="../OptionalTasks/script.html">Script</a> task for | |||||
| an explanation of scripts and dependencies. | |||||
| </p> | |||||
| <p>This condition was 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">language</td> | |||||
| <td valign="top">script language</td> | |||||
| <td valign="top" align="center">Yes</td> | |||||
| </tr> | |||||
| <tr> | |||||
| <td valign="top">value</td> | |||||
| <td valign="top">default boolean value</td> | |||||
| <td valign="top" align="center">No -default is "false"</td> | |||||
| </tr> | |||||
| <tr> | |||||
| <td valign="top">src</td> | |||||
| <td valign="top">filename of script source</td> | |||||
| <td valign="top" align="center">No</td> | |||||
| </tr> | |||||
| </table> | |||||
| <p> | |||||
| The script supports script language inline, this script has access to the | |||||
| same beans as the <code><script></code> task, and to the <code> | |||||
| self</code> bean, which refers back to the condition itself. The | |||||
| <code>value</code> property of this bean sets the return value: | |||||
| </p> | |||||
| <p> | |||||
| Example: | |||||
| </p> | |||||
| <pre> | |||||
| <scriptcondition language="javascript" | |||||
| value="true"> | |||||
| self.setValue(false); | |||||
| </scriptcondition> | |||||
| </pre> | |||||
| Sets the default value of the condition to true, then in the script, | |||||
| sets the value to false. This condition always evaluates to "false" | |||||
| <hr> | <hr> | ||||
| <p align="center">Copyright © 2001-2004 Apache Software | |||||
| <p align="center">Copyright © 2001-2005 Apache Software | |||||
| Foundation. All rights Reserved.</p> | Foundation. All rights Reserved.</p> | ||||
| </body> | </body> | ||||
| @@ -0,0 +1,77 @@ | |||||
| <project name="testscriptcondition" > | |||||
| <macrodef name="t"> | |||||
| <element name="test" implicit="yes" /> | |||||
| <attribute name="message"/> | |||||
| <sequential> | |||||
| <fail message="query @{message} failed; result was false"> | |||||
| <condition> | |||||
| <not> | |||||
| <test /> | |||||
| </not> | |||||
| </condition> | |||||
| </fail> | |||||
| </sequential> | |||||
| </macrodef> | |||||
| <macrodef name="f"> | |||||
| <element name="test" implicit="yes" /> | |||||
| <attribute name="message"/> | |||||
| <sequential> | |||||
| <fail message="test @{message} failed; result was true"> | |||||
| <condition> | |||||
| <test/> | |||||
| </condition> | |||||
| </fail> | |||||
| </sequential> | |||||
| </macrodef> | |||||
| <!-- this is here to test the macro is well coded --> | |||||
| <target name="testMacro"> | |||||
| <t message="testMacro" > | |||||
| <istrue value="true"/> | |||||
| </t> | |||||
| <f message="testMacro2" > | |||||
| <istrue value="false"/> | |||||
| </f> | |||||
| </target> | |||||
| <target name="testNolanguage"> | |||||
| <t message="testNolanguage" > | |||||
| <scriptcondition > | |||||
| self.setValue(true); | |||||
| </scriptcondition> | |||||
| </t> | |||||
| </target> | |||||
| <target name="testClearByDefault"> | |||||
| <f message="testClearByDefault" > | |||||
| <scriptcondition language="javascript"> | |||||
| </scriptcondition> | |||||
| </f> | |||||
| </target> | |||||
| <target name="testValueWorks"> | |||||
| <t message="testValueWorks" > | |||||
| <scriptcondition language="javascript" | |||||
| value="true" /> | |||||
| </t> | |||||
| </target> | |||||
| <target name="testSetWorks"> | |||||
| <t message="testSetWorks" > | |||||
| <scriptcondition language="javascript" value="false"> | |||||
| self.setValue(true); | |||||
| </scriptcondition> | |||||
| </t> | |||||
| </target> | |||||
| <target name="testClearWorks"> | |||||
| <f message="testClearWorks"> | |||||
| <scriptcondition language="javascript" value="true"> | |||||
| self.setValue(false); | |||||
| </scriptcondition> | |||||
| </f> | |||||
| </target> | |||||
| </project> | |||||
| @@ -46,8 +46,6 @@ | |||||
| </scriptselector> | </scriptselector> | ||||
| </selector> | </selector> | ||||
| </testselected> | </testselected> | ||||
| <scriptdef name="nolang"> | |||||
| </scriptdef> | |||||
| </target> | </target> | ||||
| <target name="testSelectionSetByDefault"> | <target name="testSelectionSetByDefault"> | ||||
| @@ -40,3 +40,5 @@ isfileselected=org.apache.tools.ant.taskdefs.condition.IsFileSelected | |||||
| ispingable=org.apache.tools.ant.taskdefs.optional.condition.IsPingable | ispingable=org.apache.tools.ant.taskdefs.optional.condition.IsPingable | ||||
| mavenrepository=org.apache.tools.ant.taskdefs.repository.MavenRepository | mavenrepository=org.apache.tools.ant.taskdefs.repository.MavenRepository | ||||
| scriptselector=org.apache.tools.ant.types.optional.ScriptSelector | scriptselector=org.apache.tools.ant.types.optional.ScriptSelector | ||||
| scriptcondition=org.apache.tools.ant.types.optional.ScriptCondition | |||||
| @@ -0,0 +1,104 @@ | |||||
| /* | |||||
| * 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.types.optional; | |||||
| import org.apache.tools.ant.ProjectComponent; | |||||
| import org.apache.tools.ant.BuildException; | |||||
| import org.apache.tools.ant.util.ScriptRunner; | |||||
| import org.apache.tools.ant.taskdefs.condition.Condition; | |||||
| import java.io.File; | |||||
| /** | |||||
| * A condition that lets you include script. | |||||
| * The condition component sets a bean "self", whose attribute "result" | |||||
| * must be set to true for the condition to succeed, false to fail. | |||||
| * The default is 'false' | |||||
| */ | |||||
| public class ScriptCondition extends ProjectComponent implements Condition { | |||||
| /** | |||||
| * script runner | |||||
| */ | |||||
| private ScriptRunner runner = new ScriptRunner(); | |||||
| /** | |||||
| * result field | |||||
| */ | |||||
| private boolean value = false; | |||||
| /** | |||||
| * Load the script from an external file ; optional. | |||||
| * | |||||
| * @param file the file containing the script source. | |||||
| */ | |||||
| public void setSrc(File file) { | |||||
| runner.setSrc(file); | |||||
| } | |||||
| /** | |||||
| * The script text. | |||||
| * | |||||
| * @param text a component of the script text to be added. | |||||
| */ | |||||
| public void addText(String text) { | |||||
| runner.addText(text); | |||||
| } | |||||
| /** | |||||
| * Defines the language (required). | |||||
| * | |||||
| * @param language the scripting language name for the script. | |||||
| */ | |||||
| public void setLanguage(String language) { | |||||
| runner.setLanguage(language); | |||||
| } | |||||
| /** | |||||
| * Is this condition true? | |||||
| * | |||||
| * @return true if the condition is true | |||||
| * | |||||
| * @throws org.apache.tools.ant.BuildException | |||||
| * if an error occurs | |||||
| */ | |||||
| public boolean eval() throws BuildException { | |||||
| runner.bindToComponent(this); | |||||
| runner.executeScript("ant_condition"); | |||||
| return getValue(); | |||||
| } | |||||
| /** | |||||
| * get the current value of the conditon | |||||
| * @return true if the condition | |||||
| */ | |||||
| public boolean getValue() { | |||||
| return value; | |||||
| } | |||||
| /** | |||||
| * set the value of the condition. | |||||
| * This is used by the script to pass the return value. | |||||
| * It can be used by an attribute, in which case it sets the default | |||||
| * value | |||||
| * @param value | |||||
| */ | |||||
| public void setValue(boolean value) { | |||||
| this.value = value; | |||||
| } | |||||
| } | |||||
| @@ -0,0 +1,61 @@ | |||||
| /* | |||||
| * 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.types.optional; | |||||
| import org.apache.tools.ant.BuildFileTest; | |||||
| /** | |||||
| */ | |||||
| public class ScriptConditionTest extends BuildFileTest { | |||||
| /** | |||||
| * Constructor for the BuildFileTest object | |||||
| * | |||||
| * @param name string to pass up to TestCase constructor | |||||
| */ | |||||
| public ScriptConditionTest(String name) { | |||||
| super(name); | |||||
| } | |||||
| public void setUp() { | |||||
| configureProject("src/etc/testcases/types/scriptcondition.xml"); | |||||
| } | |||||
| public void testNolanguage() { | |||||
| expectBuildExceptionContaining("testNolanguage", | |||||
| "Absence of language attribute not detected", | |||||
| "script language must be specified"); | |||||
| } | |||||
| public void testMacro() { | |||||
| executeTarget("testMacro"); | |||||
| } | |||||
| public void testClearByDefault() { | |||||
| executeTarget("testClearByDefault"); | |||||
| } | |||||
| public void testValueWorks() { | |||||
| executeTarget("testValueWorks"); | |||||
| } | |||||
| public void testSetWorks() { | |||||
| executeTarget("testSetWorks"); | |||||
| } | |||||
| public void testClearWorks() { | |||||
| executeTarget("testClearWorks"); | |||||
| } | |||||
| } | |||||