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 | |||
| </p> | |||
| <p> | |||
| This condition has been added in Apache Ant 1.7. | |||
| This condition was added in Apache Ant 1.7. | |||
| </p> | |||
| <table border="1" cellpadding="2" cellspacing="0"> | |||
| <tr> | |||
| @@ -361,7 +361,7 @@ that is "true","yes", or "on"</p> | |||
| Test whether a file passes an embedded selector. | |||
| </p> | |||
| <p> | |||
| This condition has been added in Apache Ant 1.7. | |||
| This condition was added in Apache Ant 1.7. | |||
| </p> | |||
| <table border="1" cellpadding="2" cellspacing="0"> | |||
| <tr> | |||
| @@ -398,7 +398,7 @@ that is "true","yes", or "on"</p> | |||
| 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> | |||
| <p>This condition was added in Apache Ant 1.7.</p> | |||
| <table border="1" cellpadding="2" cellspacing="0"> | |||
| <tr> | |||
| @@ -413,8 +413,60 @@ tasks, datatypes, scriptdefs, macrodefs and presetdefs.</p> | |||
| </tr> | |||
| </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> | |||
| <p align="center">Copyright © 2001-2004 Apache Software | |||
| <p align="center">Copyright © 2001-2005 Apache Software | |||
| Foundation. All rights Reserved.</p> | |||
| </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> | |||
| </selector> | |||
| </testselected> | |||
| <scriptdef name="nolang"> | |||
| </scriptdef> | |||
| </target> | |||
| <target name="testSelectionSetByDefault"> | |||
| @@ -40,3 +40,5 @@ isfileselected=org.apache.tools.ant.taskdefs.condition.IsFileSelected | |||
| ispingable=org.apache.tools.ant.taskdefs.optional.condition.IsPingable | |||
| mavenrepository=org.apache.tools.ant.taskdefs.repository.MavenRepository | |||
| 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"); | |||
| } | |||
| } | |||