stevel 2005/01/22 14:01:15 Modified: docs/manual/CoreTasks conditions.html src/main/org/apache/tools/ant/types defaults.properties Added: src/etc/testcases/taskdefs/conditions xor.xml src/main/org/apache/tools/ant/taskdefs/condition Xor.java src/testcases/org/apache/tools/ant/taskdefs/condition XorTest.java Log: Xor. Not strictly necessary, but the logical equivalent is a dog to type. Revision Changes Path 1.26 +9 -0 ant/docs/manual/CoreTasks/conditions.html Index: conditions.html =================================================================== RCS file: /home/cvs/ant/docs/manual/CoreTasks/conditions.html,v retrieving revision 1.25 retrieving revision 1.26 diff -u -r1.25 -r1.26 --- conditions.html 17 Jan 2005 21:54:34 -0000 1.25 +++ conditions.html 22 Jan 2005 22:01:15 -0000 1.26 @@ -49,6 +49,15 @@ shortcut semantics as the Java || operator, as soon as one of the nested conditions is true, no other condition will be evaluated.</p> +<h4>xor</h4> +<p>The <code><xor></code> element performs an exclusive +or on all nested elements, similar to the <code>^</code> operator +in Java. It only evaluates to true if an odd number of nested conditions +are true. There is no shortcutting of evaluation, unlike the <code><and></code> +and <code><or></code> tests. +It doesn't have any attributes and accepts all nested +elements of the condition task as nested elements as well.</p> + <h4>available</h4> <p>This condition is identical to the <a href="available.html">Available</a> task, all attributes and nested 1.36 +1 -1 ant/src/main/org/apache/tools/ant/types/defaults.properties Index: defaults.properties =================================================================== RCS file: /home/cvs/ant/src/main/org/apache/tools/ant/types/defaults.properties,v retrieving revision 1.35 retrieving revision 1.36 diff -u -r1.35 -r1.36 --- defaults.properties 17 Jan 2005 21:54:34 -0000 1.35 +++ defaults.properties 22 Jan 2005 22:01:15 -0000 1.36 @@ -41,4 +41,4 @@ mavenrepository=org.apache.tools.ant.taskdefs.repository.MavenRepository scriptselector=org.apache.tools.ant.types.optional.ScriptSelector scriptcondition=org.apache.tools.ant.types.optional.ScriptCondition - +xor=org.apache.tools.ant.taskdefs.condition.Xor 1.1 ant/src/etc/testcases/taskdefs/conditions/xor.xml Index: xor.xml =================================================================== <project default="all"> <!-- Xor semantics in out == === 00 0 01 1 10 1 00 0 --> <target name="testEmpty" > <fail message="empty test"> <condition> <xor/> </condition> </fail> </target> <target name="test1" > <fail message="testTrue"> <condition> <not> <xor> <istrue value="true" /> </xor> </not> </condition> </fail> </target> <target name="test0" > <fail message="testFalse"> <condition> <xor> <istrue value="" /> </xor> </condition> </fail> </target> <target name="test10" > <fail message="test10"> <condition> <not> <xor> <istrue value="true" /> <istrue value="" /> </xor> </not> </condition> </fail> </target> <target name="test01" > <fail message="test01"> <condition> <not> <xor> <istrue value="" /> <istrue value="true" /> </xor> </not> </condition> </fail> </target> <target name="test00" > <fail message="test10"> <condition> <xor> <istrue value="" /> <istrue value="" /> </xor> </condition> </fail> </target> <target name="test11" > <fail message="test11"> <condition> <xor> <istrue value="" /> <istrue value="" /> </xor> </condition> </fail> </target> </project> 1.1 ant/src/main/org/apache/tools/ant/taskdefs/condition/Xor.java Index: Xor.java =================================================================== /* * 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.taskdefs.condition; import org.apache.tools.ant.BuildException; import java.util.Enumeration; /** * <tt>Xor</tt> task to exclusive or operations. * This does not shortcut stuff */ public class Xor extends ConditionBase implements Condition { /** * @return true if all the contained conditions evaluates to true * @throws org.apache.tools.ant.BuildException * if an error occurs */ public boolean eval() throws BuildException { Enumeration e = getConditions(); //initial state is false. boolean state=false; while (e.hasMoreElements()) { Condition c = (Condition) e.nextElement(); //every condition is xored against the previous one state ^= c.eval(); } return state; } } 1.1 ant/src/testcases/org/apache/tools/ant/taskdefs/condition/XorTest.java Index: XorTest.java =================================================================== /* * 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.taskdefs.condition; import org.apache.tools.ant.BuildFileTest; /** * Test that Xor follows the conventional boolean logic semantics * (a ^ b) === (a||b)&!(a&&b) */ public class XorTest extends BuildFileTest { public XorTest(String name) { super(name); } /** * The JUnit setup method */ public void setUp() { configureProject("src/etc/testcases/taskdefs/conditions/xor.xml"); } public void testEmpty() { executeTarget("testEmpty"); } public void test0() { executeTarget("test0"); } public void test1() { executeTarget("test1"); } public void test00() { executeTarget("test00"); } public void test10() { executeTarget("test10"); } public void test01() { executeTarget("test01"); } public void test11() { executeTarget("test11"); } }
--------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]