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
  +  &lt;condition&gt; 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>
     &lt;fail&gt;
  -     &lt;not&gt;
  -       &lt;isset property=&quot;thisdoesnotexist&quot;/&gt;
  -     &lt;/not&gt;
  +     &lt;condition&gt;
  +       &lt;not&gt;
  +         &lt;isset property=&quot;thisdoesnotexist&quot;/&gt;
  +       &lt;/not&gt;
  +     &lt;/condition&gt;
      &lt;/fail&gt;
   </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]

Reply via email to