git-svn-id: https://svn.apache.org/repos/asf/ant/core/trunk@916460 13f79535-47bb-0310-9956-ffa450edef68master
@@ -65,6 +65,11 @@ Other changes: | |||
* PropertyResource will effectively proxy another Resource if ${name} | |||
evaluates to a Resource object. | |||
* Added forcestring attribute to equals condition to force evaluation | |||
of Object args as strings; previously only API-level usage of the | |||
equals condition allowed Object args, but Ant 1.8.x+ property | |||
evaluation may yield values of any type. | |||
Changes from Ant 1.8.0RC1 TO Ant 1.8.0 | |||
====================================== | |||
@@ -138,7 +138,7 @@ the tests succeed. | |||
</ul> | |||
<h4>equals</h4> | |||
<p>Tests whether the two given Strings are identical</p> | |||
<p>Tests whether the two given values are equal.</p> | |||
<table border="1" cellpadding="2" cellspacing="0"> | |||
<tr> | |||
<td valign="top"><b>Attribute</b></td> | |||
@@ -147,12 +147,12 @@ the tests succeed. | |||
</tr> | |||
<tr> | |||
<td valign="top">arg1</td> | |||
<td valign="top">First string to test.</td> | |||
<td valign="top">First value to test.</td> | |||
<td valign="top" align="center">Yes</td> | |||
</tr> | |||
<tr> | |||
<td valign="top">arg2</td> | |||
<td valign="top">Second string to test.</td> | |||
<td valign="top">Second value to test.</td> | |||
<td valign="top" align="center">Yes</td> | |||
</tr> | |||
<tr> | |||
@@ -167,6 +167,13 @@ the tests succeed. | |||
them. Default is false.</td> | |||
<td valign="top" align="center">No</td> | |||
</tr> | |||
<tr> | |||
<td valign="top">forcestring</td> | |||
<td valign="top">Force string comparison of <code>arg1/arg2</code>. | |||
Default is false. <em>Since Ant 1.8.1</em> | |||
</td> | |||
<td valign="top" align="center">No</td> | |||
</tr> | |||
</table> | |||
<h4>isset</h4> | |||
@@ -32,6 +32,7 @@ public class Equals implements Condition { | |||
private boolean trim = false; | |||
private boolean caseSensitive = true; | |||
private int args; | |||
private boolean forcestring = false; | |||
/** | |||
* Set the first argument | |||
@@ -106,6 +107,16 @@ public class Equals implements Condition { | |||
caseSensitive = b; | |||
} | |||
/** | |||
* Set whether to force string comparisons for non-equal, non-string objects. | |||
* This allows object properties (legal in Ant 1.8.x+) to be compared as strings. | |||
* @param forcestring value to set | |||
* @since Ant 1.8.1 | |||
*/ | |||
public void setForcestring(boolean forcestring) { | |||
this.forcestring = forcestring; | |||
} | |||
/** | |||
* @return true if the two strings are equal | |||
* @exception BuildException if the attributes are not set correctly | |||
@@ -114,7 +125,13 @@ public class Equals implements Condition { | |||
if ((args & REQUIRED) != REQUIRED) { | |||
throw new BuildException("both arg1 and arg2 are required in equals"); | |||
} | |||
if (arg1 == arg2 || arg1 != null && arg1.equals(arg2)) { | |||
return true; | |||
} | |||
if (forcestring) { | |||
arg1 = arg1 == null || arg1 instanceof String ? arg1 : arg1.toString(); | |||
arg2 = arg2 == null || arg2 instanceof String ? arg2 : arg2.toString(); | |||
} | |||
if (arg1 instanceof String && trim) { | |||
arg1 = ((String) arg1).trim(); | |||
} | |||
@@ -126,6 +143,6 @@ public class Equals implements Condition { | |||
String s2 = (String) arg2; | |||
return caseSensitive ? s1.equals(s2) : s1.equalsIgnoreCase(s2); | |||
} | |||
return arg1 == arg2 || arg1 != null && arg1.equals(arg2); | |||
return false; | |||
} | |||
} |
@@ -0,0 +1,80 @@ | |||
<?xml version="1.0"?> | |||
<!-- | |||
Licensed to the Apache Software Foundation (ASF) under one or more | |||
contributor license agreements. See the NOTICE file distributed with | |||
this work for additional information regarding copyright ownership. | |||
The ASF licenses this file to You 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. | |||
--> | |||
<project name="equals-test" xmlns:au="antlib:org.apache.ant.antunit" | |||
default="antunit"> | |||
<import file="../../antunit-base.xml" /> | |||
<target name="test-noforcestring"> | |||
<string id="s" value="foo" /> | |||
<au:assertFalse> | |||
<equals arg1="foo" arg2="${ant.refid:s}" /> | |||
</au:assertFalse> | |||
</target> | |||
<target name="test-forcestring"> | |||
<string id="s" value="foo" /> | |||
<au:assertTrue> | |||
<equals arg1="foo" arg2="${ant.refid:s}" forcestring="true" /> | |||
</au:assertTrue> | |||
</target> | |||
<target name="test-forcestring-notrim"> | |||
<string id="s" value=" foo " /> | |||
<au:assertFalse> | |||
<equals arg1="foo" arg2="${ant.refid:s}" forcestring="true" /> | |||
</au:assertFalse> | |||
</target> | |||
<target name="test-forcestring-trim"> | |||
<string id="s" value=" foo " /> | |||
<au:assertTrue> | |||
<equals arg1="foo" arg2="${ant.refid:s}" forcestring="true" trim="true" /> | |||
</au:assertTrue> | |||
</target> | |||
<target name="test-forcestring-cs"> | |||
<string id="s" value="Foo" /> | |||
<au:assertFalse> | |||
<equals arg1="foo" arg2="${ant.refid:s}" forcestring="true" /> | |||
</au:assertFalse> | |||
</target> | |||
<target name="test-forcestring-nocs"> | |||
<string id="s" value="Foo" /> | |||
<au:assertTrue> | |||
<equals arg1="foo" arg2="${ant.refid:s}" forcestring="true" casesensitive="false" /> | |||
</au:assertTrue> | |||
</target> | |||
<target name="test-forcestring-trim-cs"> | |||
<string id="s" value=" Foo " /> | |||
<au:assertFalse> | |||
<equals arg1="foo" arg2="${ant.refid:s}" forcestring="true" trim="true" /> | |||
</au:assertFalse> | |||
</target> | |||
<target name="test-forcestring-trim-nocs"> | |||
<string id="s" value=" Foo " /> | |||
<au:assertTrue> | |||
<equals arg1="foo" arg2="${ant.refid:s}" forcestring="true" | |||
trim="true" casesensitive="false" /> | |||
</au:assertTrue> | |||
</target> | |||
</project> |