You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@ant.apache.org by mb...@apache.org on 2007/05/14 18:14:45 UTC
svn commit: r537899 - in /ant/core/trunk/src:
main/org/apache/tools/ant/taskdefs/condition/ResourceContains.java
tests/antunit/taskdefs/condition/resourcecontains-test.xml
Author: mbenson
Date: Mon May 14 09:14:43 2007
New Revision: 537899
URL: http://svn.apache.org/viewvc?view=rev&rev=537899
Log:
make resourcecontains handle refids
Modified:
ant/core/trunk/src/main/org/apache/tools/ant/taskdefs/condition/ResourceContains.java
ant/core/trunk/src/tests/antunit/taskdefs/condition/resourcecontains-test.xml
Modified: ant/core/trunk/src/main/org/apache/tools/ant/taskdefs/condition/ResourceContains.java
URL: http://svn.apache.org/viewvc/ant/core/trunk/src/main/org/apache/tools/ant/taskdefs/condition/ResourceContains.java?view=diff&rev=537899&r1=537898&r2=537899
==============================================================================
--- ant/core/trunk/src/main/org/apache/tools/ant/taskdefs/condition/ResourceContains.java (original)
+++ ant/core/trunk/src/main/org/apache/tools/ant/taskdefs/condition/ResourceContains.java Mon May 14 09:14:43 2007
@@ -25,6 +25,7 @@
import org.apache.tools.ant.BuildException;
import org.apache.tools.ant.Project;
import org.apache.tools.ant.types.Resource;
+import org.apache.tools.ant.types.ResourceCollection;
import org.apache.tools.ant.types.resources.FileResource;
import org.apache.tools.ant.util.FileUtils;
@@ -38,6 +39,7 @@
private Project project;
private String substring;
private Resource resource;
+ private String refid;
private boolean casesensitive = true;
/**
@@ -65,6 +67,38 @@
}
/**
+ * Sets the refid to search; should indicate a resource directly
+ * or by way of a single-element ResourceCollection.
+ * @param refid
+ */
+ public void setRefid(String refid) {
+ this.refid = refid;
+ }
+
+ private void resolveRefid() {
+ try {
+ if (getProject() == null) {
+ throw new BuildException("Cannot retrieve refid; project unset");
+ }
+ Object o = getProject().getReference(refid);
+ if (!(o instanceof Resource)) {
+ if (o instanceof ResourceCollection) {
+ ResourceCollection rc = (ResourceCollection) o;
+ if (rc.size() == 1) {
+ o = rc.iterator().next();
+ }
+ } else {
+ throw new BuildException("Illegal value at '" + refid +"': "
+ + String.valueOf(o));
+ }
+ }
+ this.resource = (Resource) o;
+ } finally {
+ refid = null;
+ }
+ }
+
+ /**
* Sets the substring to look for
* @param substring
*/
@@ -80,23 +114,32 @@
this.casesensitive = casesensitive;
}
- /**
- * Evaluates
- * Returns true if the substring is contained in the resource
- */
- public boolean eval() throws BuildException {
+ private void validate() {
+ if (resource != null && refid != null) {
+ throw new BuildException("Cannot set both resource and refid");
+ }
+ if (resource == null && refid != null) {
+ resolveRefid();
+ }
if (resource == null || substring == null) {
throw new BuildException("both resource and substring are required "
+ "in <resourcecontains>");
}
+ }
+
+ /**
+ * Evaluates
+ * Returns true if the substring is contained in the resource
+ */
+ public synchronized boolean eval() throws BuildException {
+ validate();
if (substring.length() == 0) {
if (getProject() != null) {
- getProject().log("ResourceContains: substring is empty; returning true", Project.MSG_VERBOSE);
+ getProject().log("Substring is empty; returning true", Project.MSG_VERBOSE);
}
return true;
}
-
if (resource.getSize() == 0) {
return false;
}
Modified: ant/core/trunk/src/tests/antunit/taskdefs/condition/resourcecontains-test.xml
URL: http://svn.apache.org/viewvc/ant/core/trunk/src/tests/antunit/taskdefs/condition/resourcecontains-test.xml?view=diff&rev=537899&r1=537898&r2=537899
==============================================================================
--- ant/core/trunk/src/tests/antunit/taskdefs/condition/resourcecontains-test.xml (original)
+++ ant/core/trunk/src/tests/antunit/taskdefs/condition/resourcecontains-test.xml Mon May 14 09:14:43 2007
@@ -66,4 +66,61 @@
<resourcecontains resource="${file}" substring="futurama"/>
</au:assertFalse>
</target>
+
+ <target name="testFileRefContains">
+ <file id="file" file="${file}" />
+ <au:assertTrue message="Should have found the text in the resource">
+ <resourcecontains refid="file" substring="text"/>
+ </au:assertTrue>
+ </target>
+
+ <target name="testStringRefContains">
+ <string id="string">loads of text!</string>
+ <au:assertTrue message="Should have found the text in the resource">
+ <resourcecontains refid="string" substring="text"/>
+ </au:assertTrue>
+ </target>
+
+ <target name="testTextConcatRefContains">
+ <resources id="concat">
+ <concat>loads of text!</concat>
+ </resources>
+ <au:assertTrue message="Should have found the text in the resource">
+ <resourcecontains refid="concat" substring="text"/>
+ </au:assertTrue>
+ </target>
+
+ <target name="testFileConcatRefContains">
+ <resources id="concat">
+ <concat><file file="${file}" /></concat>
+ </resources>
+ <au:assertTrue message="Should have found the text in the resource">
+ <resourcecontains refid="concat" substring="text"/>
+ </au:assertTrue>
+ </target>
+
+ <target name="testMultiConcatRefContains">
+ <resources id="concat">
+ <concat>
+ <header>HEADER</header>
+ <footer>FOOTER</footer>
+ <string>foo</string>
+ <file file="${file}" />
+ <string>bar</string>
+ </concat>
+ </resources>
+ <au:assertTrue message="Should have found the text in the resource">
+ <resourcecontains refid="concat" substring="text"/>
+ </au:assertTrue>
+ </target>
+
+ <target name="testFirstRefContains">
+ <first id="first">
+ <fileset dir="${basedir}" includes="*-test.xml" />
+ </first>
+ <au:assertTrue message="Should have found the text in the resource">
+ <resourcecontains refid="first" substring="project"/>
+ </au:assertTrue>
+ </target>
+
</project>
---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@ant.apache.org
For additional commands, e-mail: dev-help@ant.apache.org