You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@ant.apache.org by bo...@apache.org on 2010/02/10 15:20:40 UTC

svn commit: r908513 - in /ant/antlibs/props/trunk: docs/index.html src/main/org/apache/ant/props/ConditionEvaluator.java src/tests/antunit/condition-test.xml

Author: bodewig
Date: Wed Feb 10 14:20:39 2010
New Revision: 908513

URL: http://svn.apache.org/viewvc?rev=908513&view=rev
Log:
minimal docs, a bit more tests, tiny optimization and better whitespace handling for the conditions evaluator

Modified:
    ant/antlibs/props/trunk/docs/index.html
    ant/antlibs/props/trunk/src/main/org/apache/ant/props/ConditionEvaluator.java
    ant/antlibs/props/trunk/src/tests/antunit/condition-test.xml

Modified: ant/antlibs/props/trunk/docs/index.html
URL: http://svn.apache.org/viewvc/ant/antlibs/props/trunk/docs/index.html?rev=908513&r1=908512&r2=908513&view=diff
==============================================================================
--- ant/antlibs/props/trunk/docs/index.html (original)
+++ ant/antlibs/props/trunk/docs/index.html Wed Feb 10 14:20:39 2010
@@ -128,6 +128,18 @@
             then <code>(<em>arg</em>)</code>.</td>
       </tr>
       <tr>
+        <a name="conditions" />
+        <td align="center">types</td>
+        <td align="center">PropertyEvaluator</td>
+        <td>Given <code><em>condition</em>([<em>arg1=value1</em>,<em>arg2=value2</em>,...])</code>,
+            attempts to invoke an Ant condition of the given name
+            setting the given attibute values and evaluates to either
+            Boolean.TRUE or Boolean.FALSE.  Usage looks
+            like <em>${os(family=unix)}</em>.  This is probably most
+            useful together with the if/unless attributes of tasks or
+            targets.</td>
+      </tr>
+      <tr>
         <a name="encodeURL" />
         <td align="center">encodeURL</td>
         <td align="center">PropertyEvaluator</td>

Modified: ant/antlibs/props/trunk/src/main/org/apache/ant/props/ConditionEvaluator.java
URL: http://svn.apache.org/viewvc/ant/antlibs/props/trunk/src/main/org/apache/ant/props/ConditionEvaluator.java?rev=908513&r1=908512&r2=908513&view=diff
==============================================================================
--- ant/antlibs/props/trunk/src/main/org/apache/ant/props/ConditionEvaluator.java (original)
+++ ant/antlibs/props/trunk/src/main/org/apache/ant/props/ConditionEvaluator.java Wed Feb 10 14:20:39 2010
@@ -16,6 +16,7 @@
  */
 package org.apache.ant.props;
 
+import java.util.regex.Pattern;
 import org.apache.tools.ant.ComponentHelper;
 import org.apache.tools.ant.IntrospectionHelper;
 import org.apache.tools.ant.Project;
@@ -31,6 +32,9 @@
  * for example <code>os(family=unix)</code>.
  */
 public class ConditionEvaluator extends RegexBasedEvaluator {
+    private static final Pattern COMMA = Pattern.compile(",");
+    private static final Pattern EQ = Pattern.compile("=");
+
     public ConditionEvaluator() {
         super("^(.+?)\\(((?:(?:.+?)=(?:.+?))?(?:,(?:.+?)=(?:.+?))*?)\\)$");
     }
@@ -44,10 +48,11 @@
             if (groups[2].length() > 0) {
                 IntrospectionHelper ih =
                     IntrospectionHelper.getHelper(instance.getClass());
-                String[] attributes = groups[2].split(",");
+                String[] attributes = COMMA.split(groups[2]);
                 for (int i = 0; i < attributes.length; i++) {
-                    String[] keyValue = attributes[i].split("=");
-                    ih.setAttribute(p, instance, keyValue[0], keyValue[1]);
+                    String[] keyValue = EQ.split(attributes[i]);
+                    ih.setAttribute(p, instance, keyValue[0].trim(),
+                                    keyValue[1].trim());
                 }
             }
             return Boolean.valueOf(cond.eval());

Modified: ant/antlibs/props/trunk/src/tests/antunit/condition-test.xml
URL: http://svn.apache.org/viewvc/ant/antlibs/props/trunk/src/tests/antunit/condition-test.xml?rev=908513&r1=908512&r2=908513&view=diff
==============================================================================
--- ant/antlibs/props/trunk/src/tests/antunit/condition-test.xml (original)
+++ ant/antlibs/props/trunk/src/tests/antunit/condition-test.xml Wed Feb 10 14:20:39 2010
@@ -24,10 +24,41 @@
     </propertyhelper>
   </target>
 
-  <target name="testAvailable">
-    <au:assertEquals expected="true"
-                     actual="${available(classname=org.apache.ant.props.ConditionEvaluator)}"/>
-    <au:assertEquals expected="false"
-                     actual="${available(classname=org.apache.ant.props.ConditionEvaluatorFoo)}"/>
+  <target name="testAvailable"
+          depends="if-available,unless-available">
+    <au:assertLogContains text="true"/>
   </target>
+
+  <target name="if-available"
+          if="${available(classname=org.apache.ant.props.ConditionEvaluator)}">
+    <echo>true</echo>
+  </target>
+
+  <target name="unless-available"
+          unless="${available(classname=org.apache.ant.props.ConditionEvaluator)}">
+    <fail>org.apache.ant.props.ConditionEvaluator must be there</fail>
+  </target>
+
+  <target name="testTrueEquals" depends="set-prop,if-equals,unless-equals">
+    <au:assertLogContains text="equal"/>
+  </target>
+
+  <target name="set-prop">
+    <property name="foo" value="bar"/>
+  </target>
+
+  <target name="if-equals"
+          if="${equals(arg1=bar,arg2=${foo})}">
+    <echo>equal</echo>
+  </target>
+
+  <target name="unless-equals"
+          unless="${equals(arg1=bar,arg2=${foo})}">
+    <echo>not equal</echo>
+  </target>
+
+  <target name="testFalseEquals" depends="if-equals,unless-equals">
+    <au:assertLogContains text="not equal"/>
+  </target>
+
 </project>



Re: svn commit: r908513 - in /ant/antlibs/props/trunk: docs/index.html src/main/org/apache/ant/props/ConditionEvaluator.java src/tests/antunit/condition-test.xml

Posted by Matt Benson <gu...@gmail.com>.
Very cute!  -Matt

On Feb 10, 2010, at 8:20 AM, bodewig@apache.org wrote:

> Author: bodewig
> Date: Wed Feb 10 14:20:39 2010
> New Revision: 908513
>
> URL: http://svn.apache.org/viewvc?rev=908513&view=rev
> Log:
> minimal docs, a bit more tests, tiny optimization and better  
> whitespace handling for the conditions evaluator
>
> Modified:
>     ant/antlibs/props/trunk/docs/index.html
>     ant/antlibs/props/trunk/src/main/org/apache/ant/props/ 
> ConditionEvaluator.java
>     ant/antlibs/props/trunk/src/tests/antunit/condition-test.xml
>
> Modified: ant/antlibs/props/trunk/docs/index.html
> URL: http://svn.apache.org/viewvc/ant/antlibs/props/trunk/docs/ 
> index.html?rev=908513&r1=908512&r2=908513&view=diff
> ====================================================================== 
> ========
> --- ant/antlibs/props/trunk/docs/index.html (original)
> +++ ant/antlibs/props/trunk/docs/index.html Wed Feb 10 14:20:39 2010
> @@ -128,6 +128,18 @@
>              then <code>(<em>arg</em>)</code>.</td>
>        </tr>
>        <tr>
> +        <a name="conditions" />
> +        <td align="center">types</td>
> +        <td align="center">PropertyEvaluator</td>
> +        <td>Given <code><em>condition</em>([<em>arg1=value1</ 
> em>,<em>arg2=value2</em>,...])</code>,
> +            attempts to invoke an Ant condition of the given name
> +            setting the given attibute values and evaluates to either
> +            Boolean.TRUE or Boolean.FALSE.  Usage looks
> +            like <em>${os(family=unix)}</em>.  This is probably most
> +            useful together with the if/unless attributes of tasks or
> +            targets.</td>
> +      </tr>
> +      <tr>
>          <a name="encodeURL" />
>          <td align="center">encodeURL</td>
>          <td align="center">PropertyEvaluator</td>
>
> Modified: ant/antlibs/props/trunk/src/main/org/apache/ant/props/ 
> ConditionEvaluator.java
> URL: http://svn.apache.org/viewvc/ant/antlibs/props/trunk/src/main/ 
> org/apache/ant/props/ConditionEvaluator.java? 
> rev=908513&r1=908512&r2=908513&view=diff
> ====================================================================== 
> ========
> --- ant/antlibs/props/trunk/src/main/org/apache/ant/props/ 
> ConditionEvaluator.java (original)
> +++ ant/antlibs/props/trunk/src/main/org/apache/ant/props/ 
> ConditionEvaluator.java Wed Feb 10 14:20:39 2010
> @@ -16,6 +16,7 @@
>   */
>  package org.apache.ant.props;
>
> +import java.util.regex.Pattern;
>  import org.apache.tools.ant.ComponentHelper;
>  import org.apache.tools.ant.IntrospectionHelper;
>  import org.apache.tools.ant.Project;
> @@ -31,6 +32,9 @@
>   * for example <code>os(family=unix)</code>.
>   */
>  public class ConditionEvaluator extends RegexBasedEvaluator {
> +    private static final Pattern COMMA = Pattern.compile(",");
> +    private static final Pattern EQ = Pattern.compile("=");
> +
>      public ConditionEvaluator() {
>          super("^(.+?)\\(((?:(?:.+?)=(?:.+?))?(?:,(?:.+?)=(?:.+?)) 
> *?)\\)$");
>      }
> @@ -44,10 +48,11 @@
>              if (groups[2].length() > 0) {
>                  IntrospectionHelper ih =
>                      IntrospectionHelper.getHelper(instance.getClass 
> ());
> -                String[] attributes = groups[2].split(",");
> +                String[] attributes = COMMA.split(groups[2]);
>                  for (int i = 0; i < attributes.length; i++) {
> -                    String[] keyValue = attributes[i].split("=");
> -                    ih.setAttribute(p, instance, keyValue[0],  
> keyValue[1]);
> +                    String[] keyValue = EQ.split(attributes[i]);
> +                    ih.setAttribute(p, instance, keyValue[0].trim(),
> +                                    keyValue[1].trim());
>                  }
>              }
>              return Boolean.valueOf(cond.eval());
>
> Modified: ant/antlibs/props/trunk/src/tests/antunit/condition-test.xml
> URL: http://svn.apache.org/viewvc/ant/antlibs/props/trunk/src/tests/ 
> antunit/condition-test.xml?rev=908513&r1=908512&r2=908513&view=diff
> ====================================================================== 
> ========
> --- ant/antlibs/props/trunk/src/tests/antunit/condition-test.xml  
> (original)
> +++ ant/antlibs/props/trunk/src/tests/antunit/condition-test.xml  
> Wed Feb 10 14:20:39 2010
> @@ -24,10 +24,41 @@
>      </propertyhelper>
>    </target>
>
> -  <target name="testAvailable">
> -    <au:assertEquals expected="true"
> -                     actual="${available 
> (classname=org.apache.ant.props.ConditionEvaluator)}"/>
> -    <au:assertEquals expected="false"
> -                     actual="${available 
> (classname=org.apache.ant.props.ConditionEvaluatorFoo)}"/>
> +  <target name="testAvailable"
> +          depends="if-available,unless-available">
> +    <au:assertLogContains text="true"/>
>    </target>
> +
> +  <target name="if-available"
> +          if="${available 
> (classname=org.apache.ant.props.ConditionEvaluator)}">
> +    <echo>true</echo>
> +  </target>
> +
> +  <target name="unless-available"
> +          unless="${available 
> (classname=org.apache.ant.props.ConditionEvaluator)}">
> +    <fail>org.apache.ant.props.ConditionEvaluator must be there</ 
> fail>
> +  </target>
> +
> +  <target name="testTrueEquals" depends="set-prop,if-equals,unless- 
> equals">
> +    <au:assertLogContains text="equal"/>
> +  </target>
> +
> +  <target name="set-prop">
> +    <property name="foo" value="bar"/>
> +  </target>
> +
> +  <target name="if-equals"
> +          if="${equals(arg1=bar,arg2=${foo})}">
> +    <echo>equal</echo>
> +  </target>
> +
> +  <target name="unless-equals"
> +          unless="${equals(arg1=bar,arg2=${foo})}">
> +    <echo>not equal</echo>
> +  </target>
> +
> +  <target name="testFalseEquals" depends="if-equals,unless-equals">
> +    <au:assertLogContains text="not equal"/>
> +  </target>
> +
>  </project>
>
>


---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@ant.apache.org
For additional commands, e-mail: dev-help@ant.apache.org