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"); | |||||
} | |||||
} |