mbenson 2004/04/29 14:25:40 Modified: src/testcases/org/apache/tools/ant/taskdefs FailTest.java docs/manual/CoreTasks fail.html src/main/org/apache/tools/ant/taskdefs Exit.java src/etc/testcases/taskdefs fail.xml Log: Restore Task inheritance to Exit/<fail>. Revision Changes Path 1.15 +15 -2 ant/src/testcases/org/apache/tools/ant/taskdefs/FailTest.java Index: FailTest.java =================================================================== RCS file: /home/cvs/ant/src/testcases/org/apache/tools/ant/taskdefs/FailTest.java,v retrieving revision 1.14 retrieving revision 1.15 diff -u -r1.14 -r1.15 --- FailTest.java 28 Apr 2004 18:08:47 -0000 1.14 +++ FailTest.java 29 Apr 2004 21:25:40 -0000 1.15 @@ -138,7 +138,7 @@ public void testNested5() { expectSpecificBuildException("testNested5", "it is required to fail :-)", - "Too many conditions: 2"); + "Only one nested condition is allowed."); } public void testNested6() { @@ -147,4 +147,17 @@ "testNested6\ntestNested6\ntestNested6"); } - } + public void testNested7() { + String specificMessage = "A single nested condition is required."; + + char[] c = {'a', 'b'}; + StringBuffer target = new StringBuffer("testNested7x"); + + for (int i = 0; i < c.length; i++) { + target.setCharAt(target.length() - 1, c[i]); + expectSpecificBuildException(target.toString(), + "it is required to fail :-)", specificMessage); + } + } + +} 1.11 +11 -8 ant/docs/manual/CoreTasks/fail.html Index: fail.html =================================================================== RCS file: /home/cvs/ant/docs/manual/CoreTasks/fail.html,v retrieving revision 1.10 retrieving revision 1.11 diff -u -r1.10 -r1.11 --- fail.html 28 Apr 2004 18:08:47 -0000 1.10 +++ fail.html 29 Apr 2004 21:25:40 -0000 1.11 @@ -41,10 +41,10 @@ <h3>Parameters specified as nested elements</h3> <p>As an alternative to the <i>if</i>/<i>unless</i> attributes, - conditional failure can be achieved using a single nested condition. - For a complete list of core conditions, as well as information - about custom conditions, see <a href="conditions.html">here</a>.<br /> - <b>Since Ant 1.6.2</b> + conditional failure can be achieved using a single nested + <condition> element, which should contain exactly one + core or custom condition. For information about conditions, see + <a href="conditions.html">here</a>.<br /><b>Since Ant 1.6.2</b> </p> <h3>Examples</h3> @@ -79,12 +79,15 @@ build.xml:2: unless=thisdoesnotexist </pre> -A simple example using conditions to achieve the same effect: +Using a condition to achieve the same effect: + <pre> <fail> - <not> - <isset property="thisdoesnotexist"/> - </not> + <condition> + <not> + <isset property="thisdoesnotexist"/> + </not> + </condition> </fail> </pre> 1.31 +39 -11 ant/src/main/org/apache/tools/ant/taskdefs/Exit.java Index: Exit.java =================================================================== RCS file: /home/cvs/ant/src/main/org/apache/tools/ant/taskdefs/Exit.java,v retrieving revision 1.30 retrieving revision 1.31 diff -u -r1.30 -r1.31 --- Exit.java 28 Apr 2004 18:08:47 -0000 1.30 +++ Exit.java 29 Apr 2004 21:25:40 -0000 1.31 @@ -17,6 +17,8 @@ package org.apache.tools.ant.taskdefs; +import java.util.Vector; +import org.apache.tools.ant.Task; import org.apache.tools.ant.BuildException; import org.apache.tools.ant.taskdefs.condition.Condition; import org.apache.tools.ant.taskdefs.condition.ConditionBase; @@ -42,9 +44,21 @@ * * @ant.task name="fail" category="control" */ -public class Exit extends ConditionBase { +public class Exit extends Task { + + private class NestedCondition extends ConditionBase implements Condition { + public boolean eval() { + if (countConditions() != 1) { + throw new BuildException( + "A single nested condition is required."); + } + return ((Condition)(getConditions().nextElement())).eval(); + } + } + private String message; private String ifCondition, unlessCondition; + private NestedCondition nestedCondition; /** * A message giving further information on why the build exited. @@ -129,6 +143,19 @@ } /** + * Add a condition element. + * @return <CODE>ConditionBase</CODE>. + * @since Ant 1.6.2 + */ + public ConditionBase createCondition() { + if (nestedCondition != null) { + throw new BuildException("Only one nested condition is allowed."); + } + nestedCondition = new NestedCondition(); + return nestedCondition; + } + + /** * test the if condition * @return true if there is no if condition, or the named property exists */ @@ -156,21 +183,22 @@ * @return true if there is none, or it evaluates to true */ private boolean testNestedCondition() { - if (ifCondition != null || unlessCondition != null) { - throw new BuildException("Nested conditions " - + "not permitted in conjunction with if/unless attributes"); - } + boolean result = nestedConditionPresent(); - int count = countConditions(); - if (count > 1) { - throw new BuildException("Too many conditions: " + count); + if (result && ifCondition != null || unlessCondition != null) { + throw new BuildException("Nested conditions " + + "not permitted in conjunction with if/unless attributes"); } - return (count == 0) ? true - : (((Condition)(getConditions().nextElement())).eval()); + return result && nestedCondition.eval(); } + /** + * test whether there is a nested condition. + * @return <CODE>boolean</CODE>. + */ private boolean nestedConditionPresent() { - return (countConditions() > 0); + return (nestedCondition != null); } + } 1.7 +42 -9 ant/src/etc/testcases/taskdefs/fail.xml Index: fail.xml =================================================================== RCS file: /home/cvs/ant/src/etc/testcases/taskdefs/fail.xml,v retrieving revision 1.6 retrieving revision 1.7 diff -u -r1.6 -r1.7 --- fail.xml 28 Apr 2004 18:08:47 -0000 1.6 +++ fail.xml 29 Apr 2004 21:25:40 -0000 1.7 @@ -28,53 +28,86 @@ <target name="testNested1" description="should fail with default message"> <fail> - <and /> + <condition> + <and /> + </condition> </fail> </target> <target name="testNested2" description="should pass"> <fail> - <or /> + <condition> + <or /> + </condition> </fail> </target> <target name="testNested3" description="should fail"> <fail message="testNested3"> - <and /> + <condition> + <and /> + </condition> </fail> </target> <target name="testNested4a" description="should error"> <fail if="if"> - <and /> + <condition> + <and /> + </condition> </fail> </target> <target name="testNested4b" description="should error"> <fail unless="unless"> - <and /> + <condition> + <and /> + </condition> </fail> </target> <target name="testNested4c" description="should error"> <fail if="if" unless="unless"> - <and /> + <condition> + <and /> + </condition> </fail> </target> <target name="testNested5" description="should error"> <fail> - <and /> - <or /> + <condition> + <or /> + </condition> + <condition> + <and /> + </condition> </fail> </target> <target name="testNested6" description="should fail with message"> <fail> - <and /> + <condition> + <and /> + </condition> testNested6 testNested6 testNested6 + </fail> + </target> + + <target name="testNested7a" description="should error"> + <fail> + <condition /> + </fail> + </target> + + <target name="testNested7b" description="should error"> + <fail> + <condition> + <and /> + <and /> + </condition> </fail> </target>
--------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]