diff options
| author | Matthew Jason Benson <mbenson@apache.org> | 2004-04-29 21:25:40 +0000 |
|---|---|---|
| committer | Matthew Jason Benson <mbenson@apache.org> | 2004-04-29 21:25:40 +0000 |
| commit | 7665bc264e9923f65eb5cd80188cfec9cf338a41 (patch) | |
| tree | 8fddf5f773c247657abfa86026383e4adfd2c9a5 /src | |
| parent | 1f6f45aebb95ddf56779db1609bf7bfcd4eddcb3 (diff) | |
| download | ant-7665bc264e9923f65eb5cd80188cfec9cf338a41.tar.gz | |
Restore Task inheritance to Exit/<fail>.
git-svn-id: https://svn.apache.org/repos/asf/ant/core/trunk@276428 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'src')
| -rw-r--r-- | src/etc/testcases/taskdefs/fail.xml | 51 | ||||
| -rw-r--r-- | src/main/org/apache/tools/ant/taskdefs/Exit.java | 50 | ||||
| -rw-r--r-- | src/testcases/org/apache/tools/ant/taskdefs/FailTest.java | 17 |
3 files changed, 96 insertions, 22 deletions
diff --git a/src/etc/testcases/taskdefs/fail.xml b/src/etc/testcases/taskdefs/fail.xml index b7b7f3037..d32c2c6c9 100644 --- a/src/etc/testcases/taskdefs/fail.xml +++ b/src/etc/testcases/taskdefs/fail.xml @@ -28,54 +28,87 @@ <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> + </project> diff --git a/src/main/org/apache/tools/ant/taskdefs/Exit.java b/src/main/org/apache/tools/ant/taskdefs/Exit.java index f3fbfc792..e04706e36 100644 --- a/src/main/org/apache/tools/ant/taskdefs/Exit.java +++ b/src/main/org/apache/tools/ant/taskdefs/Exit.java @@ -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 @@ import org.apache.tools.ant.taskdefs.condition.ConditionBase; * * @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 @@ public class Exit extends ConditionBase { } /** + * 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 @@ public class Exit extends ConditionBase { * @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); } + } diff --git a/src/testcases/org/apache/tools/ant/taskdefs/FailTest.java b/src/testcases/org/apache/tools/ant/taskdefs/FailTest.java index f5df9932d..033865894 100644 --- a/src/testcases/org/apache/tools/ant/taskdefs/FailTest.java +++ b/src/testcases/org/apache/tools/ant/taskdefs/FailTest.java @@ -138,7 +138,7 @@ public class FailTest extends BuildFileTest { 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 @@ public class FailTest extends BuildFileTest { "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); + } + } + +} |
