| @@ -0,0 +1,79 @@ | |||||
| <?xml version="1.0" encoding="ISO-8859-1"?> | |||||
| <project name="FindTask" basedir="." default="test"> | |||||
| <property name="src.dir" value="src"/> | |||||
| <property name="classes.dir" value="classes"/> | |||||
| <property name="ant.test.lib" value="ant-testutil.jar"/> | |||||
| <property name="report.dir" value="report"/> | |||||
| <property name="junit.out.dir.xml" value="${report.dir}/junit/xml"/> | |||||
| <property name="junit.out.dir.html" value="${report.dir}/junit/html"/> | |||||
| <path id="classpath.run"> | |||||
| <path path="${java.class.path}"/> | |||||
| <path location="${ant.project.name}.jar"/> | |||||
| </path> | |||||
| <path id="classpath.test"> | |||||
| <path refid="classpath.run"/> | |||||
| <path location="${ant.test.lib}"/> | |||||
| </path> | |||||
| <target name="clean" description="Delete all generated files"> | |||||
| <delete failonerror="false" includeEmptyDirs="true"> | |||||
| <fileset dir="." includes="${ant.project.name}.jar"/> | |||||
| <fileset dir="${classes.dir}"/> | |||||
| <fileset dir="${report.dir}"/> | |||||
| </delete> | |||||
| </target> | |||||
| <target name="compile" description="Compiles the Task"> | |||||
| <mkdir dir="${classes.dir}"/> | |||||
| <javac srcdir="${src.dir}" destdir="${classes.dir}" classpath="${ant.test.lib}"/> | |||||
| </target> | |||||
| <target name="jar" description="JARs the Task" depends="compile"> | |||||
| <jar destfile="${ant.project.name}.jar" basedir="${classes.dir}"/> | |||||
| </target> | |||||
| <target name="use.init" description="Taskdef´ the Find-Task" depends="jar"> | |||||
| <taskdef name="find" classname="Find" classpath="${ant.project.name}.jar"/> | |||||
| </target> | |||||
| <target name="use.simple" depends="use.init"> | |||||
| <find property="test" value="test-value"/> | |||||
| <find print="test"/> | |||||
| </target> | |||||
| <target name="junit" description="Runs the unit tests" depends="jar"> | |||||
| <delete dir="${junit.out.dir.xml}" /> | |||||
| <mkdir dir="${junit.out.dir.xml}" /> | |||||
| <junit printsummary="yes" haltonfailure="no"> | |||||
| <classpath refid="classpath.test"/> | |||||
| <formatter type="xml"/> | |||||
| <batchtest fork="yes" todir="${junit.out.dir.xml}"> | |||||
| <fileset dir="${src.dir}" includes="**/*Test.java"/> | |||||
| </batchtest> | |||||
| </junit> | |||||
| </target> | |||||
| <target name="junitreport" description="Create a report for the rest result"> | |||||
| <mkdir dir="${junit.out.dir.html}" /> | |||||
| <junitreport todir="${junit.out.dir.html}"> | |||||
| <fileset dir="${junit.out.dir.xml}"> | |||||
| <include name="*.xml"/> | |||||
| </fileset> | |||||
| <report format="frames" todir="${junit.out.dir.html}"/> | |||||
| </junitreport> | |||||
| </target> | |||||
| <target name="test" | |||||
| depends="junit,junitreport" | |||||
| description="Runs unit tests and creates a report" | |||||
| /> | |||||
| </project> | |||||
| @@ -0,0 +1,33 @@ | |||||
| import org.apache.tools.ant.Task; | |||||
| import org.apache.tools.ant.BuildException; | |||||
| public class Find extends Task { | |||||
| private String property; | |||||
| private String value; | |||||
| private String print; | |||||
| public void setProperty(String property) { | |||||
| this.property = property; | |||||
| } | |||||
| public void setValue(String value) { | |||||
| this.value = value; | |||||
| } | |||||
| public void setPrint(String print) { | |||||
| this.print = print; | |||||
| } | |||||
| public void execute() { | |||||
| if (print != null) { | |||||
| String propValue = getProject().getProperty(print); | |||||
| log(propValue); | |||||
| } else { | |||||
| if (property == null) throw new BuildException("property not set"); | |||||
| if (value == null) throw new BuildException("value not set"); | |||||
| getProject().setNewProperty(property, value); | |||||
| } | |||||
| } | |||||
| } | |||||
| @@ -0,0 +1,16 @@ | |||||
| import org.apache.tools.ant.BuildFileTest; | |||||
| public class FindTest extends BuildFileTest { | |||||
| public FindTest(String name) { | |||||
| super(name); | |||||
| } | |||||
| public void setUp() { | |||||
| configureProject("build.xml"); | |||||
| } | |||||
| public void testSimple() { | |||||
| expectLog("use.simple", "test-value"); | |||||
| } | |||||
| } | |||||
| @@ -0,0 +1,103 @@ | |||||
| <?xml version="1.0" encoding="ISO-8859-1"?> | |||||
| <project name="FindTask" basedir="." default="test"> | |||||
| <property name="src.dir" value="src"/> | |||||
| <property name="classes.dir" value="classes"/> | |||||
| <property name="ant.test.lib" value="ant-testutil.jar"/> | |||||
| <property name="report.dir" value="report"/> | |||||
| <property name="junit.out.dir.xml" value="${report.dir}/junit/xml"/> | |||||
| <property name="junit.out.dir.html" value="${report.dir}/junit/html"/> | |||||
| <path id="classpath.run"> | |||||
| <path path="${java.class.path}"/> | |||||
| <path location="${ant.project.name}.jar"/> | |||||
| </path> | |||||
| <path id="classpath.test"> | |||||
| <path refid="classpath.run"/> | |||||
| <path location="${ant.test.lib}"/> | |||||
| </path> | |||||
| <target name="clean" description="Delete all generated files"> | |||||
| <delete failonerror="false" includeEmptyDirs="true"> | |||||
| <fileset dir="." includes="${ant.project.name}.jar"/> | |||||
| <fileset dir="${classes.dir}"/> | |||||
| <fileset dir="${report.dir}"/> | |||||
| </delete> | |||||
| </target> | |||||
| <target name="compile" description="Compiles the Task"> | |||||
| <mkdir dir="${classes.dir}"/> | |||||
| <javac srcdir="${src.dir}" destdir="${classes.dir}" classpath="${ant.test.lib}"/> | |||||
| </target> | |||||
| <target name="jar" description="JARs the Task" depends="compile"> | |||||
| <jar destfile="${ant.project.name}.jar" basedir="${classes.dir}"/> | |||||
| </target> | |||||
| <target name="use.init" description="Taskdef´ the Find-Task" depends="jar"> | |||||
| <taskdef name="find" classname="Find" classpath="${ant.project.name}.jar"/> | |||||
| </target> | |||||
| <target name="use.simple" depends="use.init"> | |||||
| <find file="ant.jar" location="location.ant-jar"> | |||||
| <fileset dir="${ant.home}" includes="**/*.jar"/> | |||||
| </find> | |||||
| </target> | |||||
| <target name="testFileNotPresent" depends="use.init"> | |||||
| <find file="a-not-existing-file.jar" location="location.ant-jar"> | |||||
| <fileset dir="${ant.home}" includes="**/*.jar"/> | |||||
| </find> | |||||
| </target> | |||||
| <target name="testFilePresent" depends="use.init"> | |||||
| <find file="ant.jar" location="location.ant-jar"> | |||||
| <fileset dir="${ant.home}" includes="**/*.jar"/> | |||||
| </find> | |||||
| </target> | |||||
| <target name="junit" description="Runs the unit tests" depends="jar"> | |||||
| <delete dir="${junit.out.dir.xml}" /> | |||||
| <mkdir dir="${junit.out.dir.xml}" /> | |||||
| <junit printsummary="yes" haltonfailure="no"> | |||||
| <classpath refid="classpath.test"/> | |||||
| <sysproperty key="ant.home" value="${ant.home}"/> | |||||
| <formatter type="xml"/> | |||||
| <batchtest fork="yes" todir="${junit.out.dir.xml}"> | |||||
| <fileset dir="${src.dir}" includes="**/*Test.java"/> | |||||
| </batchtest> | |||||
| </junit> | |||||
| </target> | |||||
| <target name="junitreport" description="Create a report for the rest result"> | |||||
| <mkdir dir="${junit.out.dir.html}" /> | |||||
| <junitreport todir="${junit.out.dir.html}"> | |||||
| <fileset dir="${junit.out.dir.xml}"> | |||||
| <include name="*.xml"/> | |||||
| </fileset> | |||||
| <report format="frames" todir="${junit.out.dir.html}"/> | |||||
| </junitreport> | |||||
| </target> | |||||
| <target name="test" depends="jar"> | |||||
| <junit printsummary="no" haltonfailure="no"> | |||||
| <classpath refid="classpath.test"/> | |||||
| <sysproperty key="ant.home" value="${ant.home}"/> | |||||
| <formatter type="brief" usefile="false"/> | |||||
| <batchtest fork="true" todir="${junit.out.dir.xml}"> | |||||
| <fileset dir="${src.dir}" includes="**/*Test.java"/> | |||||
| </batchtest> | |||||
| </junit> | |||||
| </target> | |||||
| <target name="test2" | |||||
| depends="junit,junitreport" | |||||
| description="Runs unit tests and creates a report" | |||||
| /> | |||||
| </project> | |||||
| @@ -0,0 +1,55 @@ | |||||
| import org.apache.tools.ant.Task; | |||||
| import org.apache.tools.ant.BuildException; | |||||
| import org.apache.tools.ant.types.FileSet; | |||||
| import org.apache.tools.ant.DirectoryScanner; | |||||
| import java.util.Vector; | |||||
| import java.util.Iterator; | |||||
| import java.io.File; | |||||
| public class Find extends Task { | |||||
| private String file; | |||||
| private String location; | |||||
| private Vector filesets = new Vector(); | |||||
| public void setFile(String file) { | |||||
| this.file = file; | |||||
| } | |||||
| public void setLocation(String location) { | |||||
| this.location = location; | |||||
| } | |||||
| public void addFileset(FileSet fileset) { | |||||
| filesets.add(fileset); | |||||
| } | |||||
| protected void validate() { | |||||
| if (file==null) throw new BuildException("file not set"); | |||||
| if (location==null) throw new BuildException("location not set"); | |||||
| if (filesets.size()<1) throw new BuildException("fileset not set"); | |||||
| } | |||||
| public void execute2() { | |||||
| validate(); | |||||
| String foundLocation = null; | |||||
| for(Iterator itFSets = filesets.iterator(); itFSets.hasNext(); ) { | |||||
| FileSet fs = (FileSet)itFSets.next(); | |||||
| DirectoryScanner ds = fs.getDirectoryScanner(getProject()); | |||||
| String[] includedFiles = ds.getIncludedFiles(); | |||||
| for(int i=0; i<includedFiles.length; i++) { | |||||
| String filename = includedFiles[i].replace('\\','/'); | |||||
| filename = filename.substring(filename.lastIndexOf("/")+1); | |||||
| if (foundLocation==null && file.equals(filename)) { | |||||
| File base = ds.getBasedir(); | |||||
| File found = new File(base, includedFiles[i]); | |||||
| foundLocation = found.getAbsolutePath(); | |||||
| } | |||||
| } | |||||
| } | |||||
| if (foundLocation!=null) | |||||
| getProject().setNewProperty(location, foundLocation); | |||||
| } | |||||
| } | |||||
| @@ -0,0 +1,68 @@ | |||||
| import org.apache.tools.ant.BuildFileTest; | |||||
| import org.apache.tools.ant.types.FileSet; | |||||
| import org.apache.tools.ant.taskdefs.Property; | |||||
| import java.io.File; | |||||
| public class FindTest extends BuildFileTest { | |||||
| public FindTest(String name) { | |||||
| super(name); | |||||
| } | |||||
| public void setUp() { | |||||
| configureProject("build.xml"); | |||||
| } | |||||
| public void testMissingFile() { | |||||
| Find find = new Find(); | |||||
| try { | |||||
| find.execute(); | |||||
| fail("No 'no-file'-exception thrown."); | |||||
| } catch (Exception e) { | |||||
| // exception expected | |||||
| String expected = "file not set"; | |||||
| assertEquals("Wrong exception message.", expected, e.getMessage()); | |||||
| } | |||||
| } | |||||
| public void testMissingLocation() { | |||||
| Find find = new Find(); | |||||
| find.setFile("ant.jar"); | |||||
| try { | |||||
| find.execute(); | |||||
| fail("No 'no-location'-exception thrown."); | |||||
| } catch (Exception e) { | |||||
| // exception expected | |||||
| String expected = "location not set"; | |||||
| assertEquals("Wrong exception message.", expected, e.getMessage()); | |||||
| } | |||||
| } | |||||
| public void testMissingFileset() { | |||||
| Find find = new Find(); | |||||
| find.setFile("ant.jar"); | |||||
| find.setLocation("location.ant-jar"); | |||||
| try { | |||||
| find.execute(); | |||||
| fail("No 'no-fileset'-exception thrown."); | |||||
| } catch (Exception e) { | |||||
| // exception expected | |||||
| String expected = "fileset not set"; | |||||
| assertEquals("Wrong exception message.", expected, e.getMessage()); | |||||
| } | |||||
| } | |||||
| public void testFileNotPresent() { | |||||
| executeTarget("testFileNotPresent"); | |||||
| String result = getProject().getProperty("location.ant-jar"); | |||||
| assertNull("Property set to wrong value.", result); | |||||
| } | |||||
| public void testFilePresent() { | |||||
| executeTarget("testFilePresent"); | |||||
| String result = getProject().getProperty("location.ant-jar"); | |||||
| assertNotNull("Property not set.", result); | |||||
| assertTrue("Wrong file found.", result.endsWith("ant.jar")); | |||||
| } | |||||
| } | |||||
| @@ -0,0 +1,108 @@ | |||||
| <?xml version="1.0" encoding="ISO-8859-1"?> | |||||
| <project name="FindTask" basedir="." default="test"> | |||||
| <property name="src.dir" value="src"/> | |||||
| <property name="classes.dir" value="classes"/> | |||||
| <property name="ant.test.lib" value="ant-testutil.jar"/> | |||||
| <property name="report.dir" value="report"/> | |||||
| <property name="junit.out.dir.xml" value="${report.dir}/junit/xml"/> | |||||
| <property name="junit.out.dir.html" value="${report.dir}/junit/html"/> | |||||
| <path id="classpath.run"> | |||||
| <path path="${java.class.path}"/> | |||||
| <path location="${ant.project.name}.jar"/> | |||||
| </path> | |||||
| <path id="classpath.test"> | |||||
| <path refid="classpath.run"/> | |||||
| <path location="${ant.test.lib}"/> | |||||
| </path> | |||||
| <target name="clean" description="Delete all generated files"> | |||||
| <delete failonerror="false" includeEmptyDirs="true"> | |||||
| <fileset dir="." includes="${ant.project.name}.jar"/> | |||||
| <fileset dir="${classes.dir}"/> | |||||
| <fileset dir="${report.dir}"/> | |||||
| </delete> | |||||
| </target> | |||||
| <target name="compile" description="Compiles the Task"> | |||||
| <mkdir dir="${classes.dir}"/> | |||||
| <javac srcdir="${src.dir}" destdir="${classes.dir}" classpath="${ant.test.lib}"/> | |||||
| </target> | |||||
| <target name="jar" description="JARs the Task" depends="compile"> | |||||
| <jar destfile="${ant.project.name}.jar" basedir="${classes.dir}"/> | |||||
| </target> | |||||
| <target name="use.init" description="Taskdef´ the Find-Task" depends="jar"> | |||||
| <taskdef name="find" classname="Find" classpath="${ant.project.name}.jar"/> | |||||
| </target> | |||||
| <target name="use.simple" depends="use.init"> | |||||
| <find file="ant.jar" location="location.ant-jar"> | |||||
| <path> | |||||
| <fileset dir="${ant.home}" includes="**/*.jar"/> | |||||
| </path> | |||||
| </find> | |||||
| <echo>ant.jar found on ${location.ant-jar}</echo> | |||||
| </target> | |||||
| <target name="testFileNotPresent" depends="use.init"> | |||||
| <find file="a-not-existing-file.jar" location="location.ant-jar"> | |||||
| <path> | |||||
| <fileset dir="${ant.home}" includes="**/*.jar"/> | |||||
| </path> | |||||
| </find> | |||||
| </target> | |||||
| <target name="testFilePresent" depends="use.init"> | |||||
| <find file="ant.jar" location="location.ant-jar"> | |||||
| <path> | |||||
| <fileset dir="${ant.home}" includes="**/*.jar"/> | |||||
| </path> | |||||
| </find> | |||||
| </target> | |||||
| <target name="junit" description="Runs the unit tests" depends="jar"> | |||||
| <delete dir="${junit.out.dir.xml}" /> | |||||
| <mkdir dir="${junit.out.dir.xml}" /> | |||||
| <junit printsummary="yes" haltonfailure="no"> | |||||
| <classpath refid="classpath.test"/> | |||||
| <sysproperty key="ant.home" value="${ant.home}"/> | |||||
| <formatter type="xml"/> | |||||
| <batchtest fork="yes" todir="${junit.out.dir.xml}"> | |||||
| <fileset dir="${src.dir}" includes="**/*Test.java"/> | |||||
| </batchtest> | |||||
| </junit> | |||||
| </target> | |||||
| <target name="junitreport" description="Create a report for the rest result"> | |||||
| <mkdir dir="${junit.out.dir.html}" /> | |||||
| <junitreport todir="${junit.out.dir.html}"> | |||||
| <fileset dir="${junit.out.dir.xml}"> | |||||
| <include name="*.xml"/> | |||||
| </fileset> | |||||
| <report format="frames" todir="${junit.out.dir.html}"/> | |||||
| </junitreport> | |||||
| </target> | |||||
| <target name="test" depends="jar"> | |||||
| <junit printsummary="no" haltonfailure="no"> | |||||
| <classpath refid="classpath.test"/> | |||||
| <sysproperty key="ant.home" value="${ant.home}"/> | |||||
| <formatter type="brief" usefile="false"/> | |||||
| <batchtest fork="true" todir="${junit.out.dir.xml}"> | |||||
| <fileset dir="${src.dir}" includes="**/*Test.java"/> | |||||
| </batchtest> | |||||
| </junit> | |||||
| </target> | |||||
| <target name="test2" | |||||
| depends="junit,junitreport" | |||||
| description="Runs unit tests and creates a report" | |||||
| /> | |||||
| </project> | |||||
| @@ -0,0 +1,52 @@ | |||||
| import org.apache.tools.ant.Task; | |||||
| import org.apache.tools.ant.BuildException; | |||||
| import org.apache.tools.ant.types.Path; | |||||
| import org.apache.tools.ant.DirectoryScanner; | |||||
| import java.util.Vector; | |||||
| import java.util.Iterator; | |||||
| import java.io.File; | |||||
| public class Find extends Task { | |||||
| private String file; | |||||
| private String location; | |||||
| private Vector paths = new Vector(); | |||||
| public void setFile(String file) { | |||||
| this.file = file; | |||||
| } | |||||
| public void setLocation(String location) { | |||||
| this.location = location; | |||||
| } | |||||
| public void addPath(Path path) { | |||||
| paths.add(path); | |||||
| } | |||||
| protected void validate() { | |||||
| if (file==null) throw new BuildException("file not set"); | |||||
| if (location==null) throw new BuildException("location not set"); | |||||
| if (paths.size()<1) throw new BuildException("path not set"); | |||||
| } | |||||
| public void execute() { | |||||
| validate(); | |||||
| String foundLocation = null; | |||||
| for(Iterator itPaths = paths.iterator(); itPaths.hasNext(); ) { | |||||
| Path path = (Path)itPaths.next(); | |||||
| String[] includedFiles = path.list(); | |||||
| for(int i=0; i<includedFiles.length; i++) { | |||||
| String filename = includedFiles[i].replace('\\','/'); | |||||
| filename = filename.substring(filename.lastIndexOf("/")+1); | |||||
| if (foundLocation==null && file.equals(filename)) { | |||||
| foundLocation = includedFiles[i]; | |||||
| } | |||||
| } | |||||
| } | |||||
| if (foundLocation!=null) | |||||
| getProject().setNewProperty(location, foundLocation); | |||||
| } | |||||
| } | |||||
| @@ -0,0 +1,68 @@ | |||||
| import org.apache.tools.ant.BuildFileTest; | |||||
| import org.apache.tools.ant.types.FileSet; | |||||
| import org.apache.tools.ant.taskdefs.Property; | |||||
| import java.io.File; | |||||
| public class FindTest extends BuildFileTest { | |||||
| public FindTest(String name) { | |||||
| super(name); | |||||
| } | |||||
| public void setUp() { | |||||
| configureProject("build.xml"); | |||||
| } | |||||
| public void testMissingFile() { | |||||
| Find find = new Find(); | |||||
| try { | |||||
| find.execute(); | |||||
| fail("No 'no-file'-exception thrown."); | |||||
| } catch (Exception e) { | |||||
| // exception expected | |||||
| String expected = "file not set"; | |||||
| assertEquals("Wrong exception message.", expected, e.getMessage()); | |||||
| } | |||||
| } | |||||
| public void testMissingLocation() { | |||||
| Find find = new Find(); | |||||
| find.setFile("ant.jar"); | |||||
| try { | |||||
| find.execute(); | |||||
| fail("No 'no-location'-exception thrown."); | |||||
| } catch (Exception e) { | |||||
| // exception expected | |||||
| String expected = "location not set"; | |||||
| assertEquals("Wrong exception message.", expected, e.getMessage()); | |||||
| } | |||||
| } | |||||
| public void testMissingPath() { | |||||
| Find find = new Find(); | |||||
| find.setFile("ant.jar"); | |||||
| find.setLocation("location.ant-jar"); | |||||
| try { | |||||
| find.execute(); | |||||
| fail("No 'no-fileset'-exception thrown."); | |||||
| } catch (Exception e) { | |||||
| // exception expected | |||||
| String expected = "path not set"; | |||||
| assertEquals("Wrong exception message.", expected, e.getMessage()); | |||||
| } | |||||
| } | |||||
| public void testFileNotPresent() { | |||||
| executeTarget("testFileNotPresent"); | |||||
| String result = getProject().getProperty("location.ant-jar"); | |||||
| assertNull("Property set to wrong value.", result); | |||||
| } | |||||
| public void testFilePresent() { | |||||
| executeTarget("testFilePresent"); | |||||
| String result = getProject().getProperty("location.ant-jar"); | |||||
| assertNotNull("Property not set.", result); | |||||
| assertTrue("Wrong file found.", result.endsWith("ant.jar")); | |||||
| } | |||||
| } | |||||
| @@ -0,0 +1,162 @@ | |||||
| <?xml version="1.0" encoding="ISO-8859-1"?> | |||||
| <project name="FindTask" basedir="." default="test"> | |||||
| <property name="src.dir" value="src"/> | |||||
| <property name="classes.dir" value="classes"/> | |||||
| <property name="ant.test.lib" value="ant-testutil.jar"/> | |||||
| <property name="report.dir" value="report"/> | |||||
| <property name="junit.out.dir.xml" value="${report.dir}/junit/xml"/> | |||||
| <property name="junit.out.dir.html" value="${report.dir}/junit/html"/> | |||||
| <path id="classpath.run"> | |||||
| <path path="${java.class.path}"/> | |||||
| <path location="${ant.project.name}.jar"/> | |||||
| </path> | |||||
| <path id="classpath.test"> | |||||
| <path refid="classpath.run"/> | |||||
| <path location="${ant.test.lib}"/> | |||||
| </path> | |||||
| <target name="clean" description="Delete all generated files"> | |||||
| <delete failonerror="false" includeEmptyDirs="true"> | |||||
| <fileset dir="." includes="${ant.project.name}.jar"/> | |||||
| <fileset dir="${classes.dir}"/> | |||||
| <fileset dir="${report.dir}"/> | |||||
| </delete> | |||||
| </target> | |||||
| <target name="compile" description="Compiles the Task"> | |||||
| <mkdir dir="${classes.dir}"/> | |||||
| <javac srcdir="${src.dir}" destdir="${classes.dir}" classpath="${ant.test.lib}"/> | |||||
| </target> | |||||
| <target name="jar" description="JARs the Task" depends="compile"> | |||||
| <jar destfile="${ant.project.name}.jar" basedir="${classes.dir}"/> | |||||
| </target> | |||||
| <target name="use.init" description="Taskdef´ the Find-Task" depends="jar"> | |||||
| <taskdef name="find" classname="Find" classpath="${ant.project.name}.jar"/> | |||||
| </target> | |||||
| <target name="use.simple" depends="use.init"> | |||||
| <find file="ant.jar" location="location.ant-jar"> | |||||
| <path> | |||||
| <fileset dir="${ant.home}" includes="**/*.jar"/> | |||||
| <fileset dir="c:/seu" includes="ant*/**/*.jar"/> | |||||
| </path> | |||||
| </find> | |||||
| <echo>ant.jar found on ${location.ant-jar}</echo> | |||||
| </target> | |||||
| <target name="use.simple2" depends="use.init"> | |||||
| <find file="ant.jar" location="location.ant-jar" delimiter=";"> | |||||
| <path> | |||||
| <fileset dir="${ant.home}" includes="**/*.jar"/> | |||||
| <fileset dir="c:/seu" includes="ant*/**/*.jar"/> | |||||
| </path> | |||||
| </find> | |||||
| <echo>ant.jar found on ${location.ant-jar}</echo> | |||||
| </target> | |||||
| <target name="testFileNotPresent" depends="use.init"> | |||||
| <find file="a-not-existing-file.jar" location="location.ant-jar"> | |||||
| <path> | |||||
| <fileset dir="${ant.home}" includes="**/*.jar"/> | |||||
| </path> | |||||
| </find> | |||||
| </target> | |||||
| <target name="testFilePresent" depends="use.init"> | |||||
| <find file="ant.jar" location="location.ant-jar"> | |||||
| <path> | |||||
| <fileset dir="${ant.home}" includes="**/*.jar"/> | |||||
| </path> | |||||
| </find> | |||||
| </target> | |||||
| <target name="test.init"> | |||||
| <mkdir dir="test1/dir11/dir111"/> | |||||
| <mkdir dir="test1/dir11/dir112"/> | |||||
| <mkdir dir="test1/dir12/"/> | |||||
| <mkdir dir="test1/dir13/dir131"/> | |||||
| <mkdir dir="test1/dir13/dir132"/> | |||||
| <touch file="test1/dir11/dir111/test"/> | |||||
| <touch file="test1/dir11/dir111/not"/> | |||||
| <touch file="test1/dir11/dir111/not2"/> | |||||
| <touch file="test1/dir11/dir112/test"/> | |||||
| <touch file="test1/dir11/dir112/not"/> | |||||
| <touch file="test1/dir11/dir112/not2"/> | |||||
| <touch file="test1/dir12/test"/> | |||||
| <touch file="test1/dir12/not"/> | |||||
| <touch file="test1/dir12/not2"/> | |||||
| <touch file="test1/dir13/dir131/test"/> | |||||
| <touch file="test1/dir13/dir131/not"/> | |||||
| <touch file="test1/dir13/dir131/not2"/> | |||||
| <touch file="test1/dir13/dir132/test"/> | |||||
| <touch file="test1/dir13/dir132/not"/> | |||||
| <touch file="test1/dir13/dir132/not2"/> | |||||
| <mkdir dir="test2"/> | |||||
| <copy todir="test2"> | |||||
| <fileset dir="test1"/> | |||||
| </copy> | |||||
| </target> | |||||
| <target name="testMultipleFiles" depends="use.init,test.init"> | |||||
| <touch file="test1/dir11/dir111/test"/> | |||||
| <find file="test" location="location.test" delimiter=";"> | |||||
| <path> | |||||
| <fileset dir="test1"/> | |||||
| <fileset dir="test2"/> | |||||
| </path> | |||||
| </find> | |||||
| <delete> | |||||
| <fileset dir="test1"/> | |||||
| <fileset dir="test2"/> | |||||
| </delete> | |||||
| </target> | |||||
| <target name="junit" description="Runs the unit tests" depends="jar"> | |||||
| <delete dir="${junit.out.dir.xml}" /> | |||||
| <mkdir dir="${junit.out.dir.xml}" /> | |||||
| <junit printsummary="yes" haltonfailure="no"> | |||||
| <classpath refid="classpath.test"/> | |||||
| <sysproperty key="ant.home" value="${ant.home}"/> | |||||
| <formatter type="xml"/> | |||||
| <batchtest fork="yes" todir="${junit.out.dir.xml}"> | |||||
| <fileset dir="${src.dir}" includes="**/*Test.java"/> | |||||
| </batchtest> | |||||
| </junit> | |||||
| </target> | |||||
| <target name="junitreport" description="Create a report for the rest result"> | |||||
| <mkdir dir="${junit.out.dir.html}" /> | |||||
| <junitreport todir="${junit.out.dir.html}"> | |||||
| <fileset dir="${junit.out.dir.xml}"> | |||||
| <include name="*.xml"/> | |||||
| </fileset> | |||||
| <report format="frames" todir="${junit.out.dir.html}"/> | |||||
| </junitreport> | |||||
| </target> | |||||
| <target name="test" depends="jar"> | |||||
| <junit printsummary="no" haltonfailure="no"> | |||||
| <classpath refid="classpath.test"/> | |||||
| <sysproperty key="ant.home" value="${ant.home}"/> | |||||
| <formatter type="brief" usefile="false"/> | |||||
| <batchtest fork="true" todir="${junit.out.dir.xml}"> | |||||
| <fileset dir="${src.dir}" includes="**/*Test.java"/> | |||||
| </batchtest> | |||||
| </junit> | |||||
| </target> | |||||
| <target name="test2" | |||||
| depends="junit,junitreport" | |||||
| description="Runs unit tests and creates a report" | |||||
| /> | |||||
| </project> | |||||
| @@ -0,0 +1,81 @@ | |||||
| import org.apache.tools.ant.Task; | |||||
| import org.apache.tools.ant.BuildException; | |||||
| import org.apache.tools.ant.types.Path; | |||||
| import org.apache.tools.ant.DirectoryScanner; | |||||
| import java.util.Vector; | |||||
| import java.util.Iterator; | |||||
| import java.io.File; | |||||
| public class Find extends Task { | |||||
| // ===== internal attributes ===== | |||||
| private Vector foundFiles = new Vector(); | |||||
| // ===== attribute support ===== | |||||
| private String file; | |||||
| private String location; | |||||
| private Vector paths = new Vector(); | |||||
| private String delimiter = null; | |||||
| public void setFile(String file) { | |||||
| this.file = file; | |||||
| } | |||||
| public void setLocation(String location) { | |||||
| this.location = location; | |||||
| } | |||||
| public void addPath(Path path) { | |||||
| paths.add(path); | |||||
| } | |||||
| public void setDelimiter(String delim) { | |||||
| delimiter = delim; | |||||
| } | |||||
| // ===== the tasks work ===== | |||||
| protected void validate() { | |||||
| if (file==null) throw new BuildException("file not set"); | |||||
| if (location==null) throw new BuildException("location not set"); | |||||
| if (paths.size()<1) throw new BuildException("path not set"); | |||||
| } | |||||
| public void execute() { | |||||
| validate(); | |||||
| for(Iterator itPaths = paths.iterator(); itPaths.hasNext(); ) { | |||||
| Path path = (Path)itPaths.next(); | |||||
| String[] includedFiles = path.list(); | |||||
| for(int i=0; i<includedFiles.length; i++) { | |||||
| String filename = includedFiles[i].replace('\\','/'); | |||||
| filename = filename.substring(filename.lastIndexOf("/")+1); | |||||
| if (file.equals(filename) && !foundFiles.contains(includedFiles[i])) { | |||||
| foundFiles.add(includedFiles[i]); | |||||
| } | |||||
| } | |||||
| } | |||||
| String rv = null; | |||||
| if (foundFiles.size() > 0) { | |||||
| if (delimiter==null) { | |||||
| // only the first | |||||
| rv = (String)foundFiles.elementAt(0); | |||||
| } else { | |||||
| // create list | |||||
| StringBuffer list = new StringBuffer(); | |||||
| for(Iterator it=foundFiles.iterator(); it.hasNext(); ) { | |||||
| list.append(it.next()); | |||||
| if (it.hasNext()) list.append(delimiter); | |||||
| } | |||||
| rv = list.toString(); | |||||
| } | |||||
| } | |||||
| if (rv!=null) | |||||
| getProject().setNewProperty(location, rv); | |||||
| } | |||||
| } | |||||
| @@ -0,0 +1,78 @@ | |||||
| import org.apache.tools.ant.BuildFileTest; | |||||
| import org.apache.tools.ant.types.FileSet; | |||||
| import org.apache.tools.ant.taskdefs.Property; | |||||
| import java.io.File; | |||||
| public class FindTest extends BuildFileTest { | |||||
| public FindTest(String name) { | |||||
| super(name); | |||||
| } | |||||
| public void setUp() { | |||||
| configureProject("build.xml"); | |||||
| } | |||||
| public void testMissingFile() { | |||||
| Find find = new Find(); | |||||
| try { | |||||
| find.execute(); | |||||
| fail("No 'no-file'-exception thrown."); | |||||
| } catch (Exception e) { | |||||
| // exception expected | |||||
| String expected = "file not set"; | |||||
| assertEquals("Wrong exception message.", expected, e.getMessage()); | |||||
| } | |||||
| } | |||||
| public void testMissingLocation() { | |||||
| Find find = new Find(); | |||||
| find.setFile("ant.jar"); | |||||
| try { | |||||
| find.execute(); | |||||
| fail("No 'no-location'-exception thrown."); | |||||
| } catch (Exception e) { | |||||
| // exception expected | |||||
| String expected = "location not set"; | |||||
| assertEquals("Wrong exception message.", expected, e.getMessage()); | |||||
| } | |||||
| } | |||||
| public void testMissingPath() { | |||||
| Find find = new Find(); | |||||
| find.setFile("ant.jar"); | |||||
| find.setLocation("location.ant-jar"); | |||||
| try { | |||||
| find.execute(); | |||||
| fail("No 'no-fileset'-exception thrown."); | |||||
| } catch (Exception e) { | |||||
| // exception expected | |||||
| String expected = "path not set"; | |||||
| assertEquals("Wrong exception message.", expected, e.getMessage()); | |||||
| } | |||||
| } | |||||
| public void testFileNotPresent() { | |||||
| executeTarget("testFileNotPresent"); | |||||
| String result = getProject().getProperty("location.ant-jar"); | |||||
| assertNull("Property set to wrong value.", result); | |||||
| } | |||||
| public void testFilePresent() { | |||||
| executeTarget("testFilePresent"); | |||||
| String result = getProject().getProperty("location.ant-jar"); | |||||
| assertNotNull("Property not set.", result); | |||||
| assertTrue("Wrong file found.", result.endsWith("ant.jar")); | |||||
| } | |||||
| public void testMultipleFiles() { | |||||
| executeTarget("testMultipleFiles"); | |||||
| String result = getProject().getProperty("location.test"); | |||||
| assertNotNull("Property not set.", result); | |||||
| assertTrue("Only one file found.", result.indexOf(";") > -1); | |||||
| //assertTrue("Wrong file found.", result.endsWith("ant.jar")); | |||||
| } | |||||
| } | |||||
| @@ -0,0 +1,162 @@ | |||||
| <?xml version="1.0" encoding="ISO-8859-1"?> | |||||
| <project name="FindTask" basedir="." default="test"> | |||||
| <property name="src.dir" value="src"/> | |||||
| <property name="classes.dir" value="classes"/> | |||||
| <property name="ant.test.lib" value="ant-testutil.jar"/> | |||||
| <property name="report.dir" value="report"/> | |||||
| <property name="junit.out.dir.xml" value="${report.dir}/junit/xml"/> | |||||
| <property name="junit.out.dir.html" value="${report.dir}/junit/html"/> | |||||
| <path id="classpath.run"> | |||||
| <path path="${java.class.path}"/> | |||||
| <path location="${ant.project.name}.jar"/> | |||||
| </path> | |||||
| <path id="classpath.test"> | |||||
| <path refid="classpath.run"/> | |||||
| <path location="${ant.test.lib}"/> | |||||
| </path> | |||||
| <target name="clean" description="Delete all generated files"> | |||||
| <delete failonerror="false" includeEmptyDirs="true"> | |||||
| <fileset dir="." includes="${ant.project.name}.jar"/> | |||||
| <fileset dir="${classes.dir}"/> | |||||
| <fileset dir="${report.dir}"/> | |||||
| </delete> | |||||
| </target> | |||||
| <target name="compile" description="Compiles the Task"> | |||||
| <mkdir dir="${classes.dir}"/> | |||||
| <javac srcdir="${src.dir}" destdir="${classes.dir}" classpath="${ant.test.lib}"/> | |||||
| </target> | |||||
| <target name="jar" description="JARs the Task" depends="compile"> | |||||
| <jar destfile="${ant.project.name}.jar" basedir="${classes.dir}"/> | |||||
| </target> | |||||
| <target name="use.init" description="Taskdef´ the Find-Task" depends="jar"> | |||||
| <taskdef name="find" classname="Find" classpath="${ant.project.name}.jar"/> | |||||
| </target> | |||||
| <target name="use.simple" depends="use.init"> | |||||
| <find file="ant.jar" location="location.ant-jar"> | |||||
| <path> | |||||
| <fileset dir="${ant.home}" includes="**/*.jar"/> | |||||
| <fileset dir="c:/seu" includes="ant*/**/*.jar"/> | |||||
| </path> | |||||
| </find> | |||||
| <echo>ant.jar found on ${location.ant-jar}</echo> | |||||
| </target> | |||||
| <target name="use.simple2" depends="use.init"> | |||||
| <find file="ant.jar" location="location.ant-jar" delimiter=";"> | |||||
| <path> | |||||
| <fileset dir="${ant.home}" includes="**/*.jar"/> | |||||
| <fileset dir="c:/seu" includes="ant*/**/*.jar"/> | |||||
| </path> | |||||
| </find> | |||||
| <echo>ant.jar found on ${location.ant-jar}</echo> | |||||
| </target> | |||||
| <target name="testFileNotPresent" depends="use.init"> | |||||
| <find file="a-not-existing-file.jar" location="location.ant-jar"> | |||||
| <path> | |||||
| <fileset dir="${ant.home}" includes="**/*.jar"/> | |||||
| </path> | |||||
| </find> | |||||
| </target> | |||||
| <target name="testFilePresent" depends="use.init"> | |||||
| <find file="ant.jar" location="location.ant-jar"> | |||||
| <path> | |||||
| <fileset dir="${ant.home}" includes="**/*.jar"/> | |||||
| </path> | |||||
| </find> | |||||
| </target> | |||||
| <target name="test.init"> | |||||
| <mkdir dir="test1/dir11/dir111"/> | |||||
| <mkdir dir="test1/dir11/dir112"/> | |||||
| <mkdir dir="test1/dir12/"/> | |||||
| <mkdir dir="test1/dir13/dir131"/> | |||||
| <mkdir dir="test1/dir13/dir132"/> | |||||
| <touch file="test1/dir11/dir111/test"/> | |||||
| <touch file="test1/dir11/dir111/not"/> | |||||
| <touch file="test1/dir11/dir111/not2"/> | |||||
| <touch file="test1/dir11/dir112/test"/> | |||||
| <touch file="test1/dir11/dir112/not"/> | |||||
| <touch file="test1/dir11/dir112/not2"/> | |||||
| <touch file="test1/dir12/test"/> | |||||
| <touch file="test1/dir12/not"/> | |||||
| <touch file="test1/dir12/not2"/> | |||||
| <touch file="test1/dir13/dir131/test"/> | |||||
| <touch file="test1/dir13/dir131/not"/> | |||||
| <touch file="test1/dir13/dir131/not2"/> | |||||
| <touch file="test1/dir13/dir132/test"/> | |||||
| <touch file="test1/dir13/dir132/not"/> | |||||
| <touch file="test1/dir13/dir132/not2"/> | |||||
| <mkdir dir="test2"/> | |||||
| <copy todir="test2"> | |||||
| <fileset dir="test1"/> | |||||
| </copy> | |||||
| </target> | |||||
| <target name="testMultipleFiles" depends="use.init,test.init"> | |||||
| <touch file="test1/dir11/dir111/test"/> | |||||
| <find file="test" location="location.test" delimiter=";"> | |||||
| <path> | |||||
| <fileset dir="test1"/> | |||||
| <fileset dir="test2"/> | |||||
| </path> | |||||
| </find> | |||||
| <delete> | |||||
| <fileset dir="test1"/> | |||||
| <fileset dir="test2"/> | |||||
| </delete> | |||||
| </target> | |||||
| <target name="junit" description="Runs the unit tests" depends="jar"> | |||||
| <delete dir="${junit.out.dir.xml}" /> | |||||
| <mkdir dir="${junit.out.dir.xml}" /> | |||||
| <junit printsummary="yes" haltonfailure="no"> | |||||
| <classpath refid="classpath.test"/> | |||||
| <sysproperty key="ant.home" value="${ant.home}"/> | |||||
| <formatter type="xml"/> | |||||
| <batchtest fork="yes" todir="${junit.out.dir.xml}"> | |||||
| <fileset dir="${src.dir}" includes="**/*Test.java"/> | |||||
| </batchtest> | |||||
| </junit> | |||||
| </target> | |||||
| <target name="junitreport" description="Create a report for the rest result"> | |||||
| <mkdir dir="${junit.out.dir.html}" /> | |||||
| <junitreport todir="${junit.out.dir.html}"> | |||||
| <fileset dir="${junit.out.dir.xml}"> | |||||
| <include name="*.xml"/> | |||||
| </fileset> | |||||
| <report format="frames" todir="${junit.out.dir.html}"/> | |||||
| </junitreport> | |||||
| </target> | |||||
| <target name="test" depends="jar"> | |||||
| <junit printsummary="no" haltonfailure="no"> | |||||
| <classpath refid="classpath.test"/> | |||||
| <sysproperty key="ant.home" value="${ant.home}"/> | |||||
| <formatter type="brief" usefile="false"/> | |||||
| <batchtest fork="true" todir="${junit.out.dir.xml}"> | |||||
| <fileset dir="${src.dir}" includes="**/*Test.java"/> | |||||
| </batchtest> | |||||
| </junit> | |||||
| </target> | |||||
| <target name="test2" | |||||
| depends="junit,junitreport" | |||||
| description="Runs unit tests and creates a report" | |||||
| /> | |||||
| </project> | |||||
| @@ -0,0 +1,68 @@ | |||||
| <html> | |||||
| <head> | |||||
| <meta http-equiv="Content-Language" content="en-us"> | |||||
| <title> Find Task</title> | |||||
| </head> | |||||
| <body> | |||||
| <h2><a name="find">Find</a></h2> | |||||
| <h3>Description</h3> | |||||
| <p>Searchs in a given path for a file and returns the absolute to it as property. | |||||
| If delimiter is set this task returns all found locations.</p> | |||||
| <h3>Parameters</h3> | |||||
| <table border="1" cellpadding="2" cellspacing="0"> | |||||
| <tr> | |||||
| <td valign="top"><b>Attribute</b></td> | |||||
| <td valign="top"><b>Description</b></td> | |||||
| <td align="center" valign="top"><b>Required</b></td> | |||||
| </tr> | |||||
| <tr> | |||||
| <td valign="top">file</td> | |||||
| <td valign="top">The name of the file to search.</td> | |||||
| <td align="center" valign="top">yes</td> | |||||
| </tr> | |||||
| <tr> | |||||
| <td valign="top">location</td> | |||||
| <td valign="top">The name of the property where to store the location</td> | |||||
| <td align="center" valign="top">yes</td> | |||||
| </tr> | |||||
| <tr> | |||||
| <td valign="top">delimiter</td> | |||||
| <td valign="top">A delimiter to use when returning the list</td> | |||||
| <td align="center" valign="top">only if the list is required</td> | |||||
| </tr> | |||||
| </table> | |||||
| <h3>Parameters specified as nested elements</h3> | |||||
| <h4>path</h4> | |||||
| <p>The path where to search the file.</p> | |||||
| <h3>Examples</h3> | |||||
| <pre> | |||||
| <find file="ant.jar" location="loc"> | |||||
| <path> | |||||
| <fileset dir="${ant.home}"/> | |||||
| <path> | |||||
| </find> | |||||
| </pre> | |||||
| Searches in Ants home directory for a file <i>ant.jar</i> and stores its location in | |||||
| property <i>loc</i> (should be ANT_HOME/bin/ant.jar). | |||||
| <pre> | |||||
| <find file="ant.jar" location="loc" delimiter=";"> | |||||
| <path> | |||||
| <fileset dir="C:/"/> | |||||
| <path> | |||||
| </find> | |||||
| <echo>ant.jar found in: ${loc}</echo> | |||||
| </pre> | |||||
| Searches in Windows C: drive for all <i>ant.jar</i> and stores their locations in | |||||
| property <i>loc</i> delimited with <i>';'</i>. (should need a long time :-) | |||||
| After that it prints out the result (e.g. C:/ant-1.5.4/bin/ant.jar;C:/ant-1.6/bin/ant.jar). | |||||
| </body> | |||||
| </html> | |||||
| @@ -0,0 +1,141 @@ | |||||
| /* | |||||
| * The Apache Software License, Version 1.1 | |||||
| * | |||||
| * Copyright (c) 2000-2003 The Apache Software Foundation. All rights | |||||
| * reserved. | |||||
| * | |||||
| * Redistribution and use in source and binary forms, with or without | |||||
| * modification, are permitted provided that the following conditions | |||||
| * are met: | |||||
| * | |||||
| * 1. Redistributions of source code must retain the above copyright | |||||
| * notice, this list of conditions and the following disclaimer. | |||||
| * | |||||
| * 2. Redistributions in binary form must reproduce the above copyright | |||||
| * notice, this list of conditions and the following disclaimer in | |||||
| * the documentation and/or other materials provided with the | |||||
| * distribution. | |||||
| * | |||||
| * 3. The end-user documentation included with the redistribution, if | |||||
| * any, must include the following acknowlegement: | |||||
| * "This product includes software developed by the | |||||
| * Apache Software Foundation (http://www.apache.org/)." | |||||
| * Alternately, this acknowlegement may appear in the software itself, | |||||
| * if and wherever such third-party acknowlegements normally appear. | |||||
| * | |||||
| * 4. The names "Ant" and "Apache Software | |||||
| * Foundation" must not be used to endorse or promote products derived | |||||
| * from this software without prior written permission. For written | |||||
| * permission, please contact apache@apache.org. | |||||
| * | |||||
| * 5. Products derived from this software may not be called "Apache" | |||||
| * nor may "Apache" appear in their names without prior written | |||||
| * permission of the Apache Group. | |||||
| * | |||||
| * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED | |||||
| * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES | |||||
| * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE | |||||
| * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR | |||||
| * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, | |||||
| * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT | |||||
| * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF | |||||
| * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND | |||||
| * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, | |||||
| * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT | |||||
| * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF | |||||
| * SUCH DAMAGE. | |||||
| * ==================================================================== | |||||
| * | |||||
| * This software consists of voluntary contributions made by many | |||||
| * individuals on behalf of the Apache Software Foundation. For more | |||||
| * information on the Apache Software Foundation, please see | |||||
| * <http://www.apache.org/>. | |||||
| */ | |||||
| package org.apache.tools.ant.taskdefs; | |||||
| import org.apache.tools.ant.Task; | |||||
| import org.apache.tools.ant.BuildException; | |||||
| import org.apache.tools.ant.types.Path; | |||||
| import org.apache.tools.ant.DirectoryScanner; | |||||
| import java.util.Vector; | |||||
| import java.util.Iterator; | |||||
| import java.io.File; | |||||
| public class Find extends Task { | |||||
| // ===== internal attributes ===== | |||||
| private Vector foundFiles = new Vector(); | |||||
| // ===== attribute support ===== | |||||
| private String file; | |||||
| private String location; | |||||
| private Vector paths = new Vector(); | |||||
| private String delimiter = null; | |||||
| public void setFile(String file) { | |||||
| this.file = file; | |||||
| } | |||||
| public void setLocation(String location) { | |||||
| this.location = location; | |||||
| } | |||||
| public void addPath(Path path) { | |||||
| paths.add(path); | |||||
| } | |||||
| public void setDelimiter(String delim) { | |||||
| delimiter = delim; | |||||
| } | |||||
| // ===== the tasks work ===== | |||||
| protected void validate() { | |||||
| if (file==null) throw new BuildException("file not set"); | |||||
| if (location==null) throw new BuildException("location not set"); | |||||
| if (paths.size()<1) throw new BuildException("path not set"); | |||||
| } | |||||
| public void execute() { | |||||
| validate(); | |||||
| // find all files | |||||
| for(Iterator itPaths = paths.iterator(); itPaths.hasNext(); ) { | |||||
| Path path = (Path)itPaths.next(); | |||||
| String[] includedFiles = path.list(); | |||||
| for(int i=0; i<includedFiles.length; i++) { | |||||
| String filename = includedFiles[i].replace('\\','/'); | |||||
| filename = filename.substring(filename.lastIndexOf("/")+1); | |||||
| if (file.equals(filename) && !foundFiles.contains(includedFiles[i])) { | |||||
| foundFiles.add(includedFiles[i]); | |||||
| } | |||||
| } | |||||
| } | |||||
| // create the return value (list/single) | |||||
| String rv = null; | |||||
| if (foundFiles.size() > 0) { | |||||
| if (delimiter==null) { | |||||
| // only the first | |||||
| rv = (String)foundFiles.elementAt(0); | |||||
| } else { | |||||
| // create list | |||||
| StringBuffer list = new StringBuffer(); | |||||
| for(Iterator it=foundFiles.iterator(); it.hasNext(); ) { | |||||
| list.append(it.next()); | |||||
| if (it.hasNext()) list.append(delimiter); | |||||
| } | |||||
| rv = list.toString(); | |||||
| } | |||||
| } | |||||
| // create the property | |||||
| if (rv!=null) | |||||
| getProject().setNewProperty(location, rv); | |||||
| } | |||||
| } | |||||
| @@ -0,0 +1,134 @@ | |||||
| /* | |||||
| * The Apache Software License, Version 1.1 | |||||
| * | |||||
| * Copyright (c) 2000-2003 The Apache Software Foundation. All rights | |||||
| * reserved. | |||||
| * | |||||
| * Redistribution and use in source and binary forms, with or without | |||||
| * modification, are permitted provided that the following conditions | |||||
| * are met: | |||||
| * | |||||
| * 1. Redistributions of source code must retain the above copyright | |||||
| * notice, this list of conditions and the following disclaimer. | |||||
| * | |||||
| * 2. Redistributions in binary form must reproduce the above copyright | |||||
| * notice, this list of conditions and the following disclaimer in | |||||
| * the documentation and/or other materials provided with the | |||||
| * distribution. | |||||
| * | |||||
| * 3. The end-user documentation included with the redistribution, if | |||||
| * any, must include the following acknowlegement: | |||||
| * "This product includes software developed by the | |||||
| * Apache Software Foundation (http://www.apache.org/)." | |||||
| * Alternately, this acknowlegement may appear in the software itself, | |||||
| * if and wherever such third-party acknowlegements normally appear. | |||||
| * | |||||
| * 4. The names "Ant" and "Apache Software | |||||
| * Foundation" must not be used to endorse or promote products derived | |||||
| * from this software without prior written permission. For written | |||||
| * permission, please contact apache@apache.org. | |||||
| * | |||||
| * 5. Products derived from this software may not be called "Apache" | |||||
| * nor may "Apache" appear in their names without prior written | |||||
| * permission of the Apache Group. | |||||
| * | |||||
| * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED | |||||
| * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES | |||||
| * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE | |||||
| * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR | |||||
| * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, | |||||
| * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT | |||||
| * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF | |||||
| * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND | |||||
| * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, | |||||
| * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT | |||||
| * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF | |||||
| * SUCH DAMAGE. | |||||
| * ==================================================================== | |||||
| * | |||||
| * This software consists of voluntary contributions made by many | |||||
| * individuals on behalf of the Apache Software Foundation. For more | |||||
| * information on the Apache Software Foundation, please see | |||||
| * <http://www.apache.org/>. | |||||
| */ | |||||
| package org.apache.tools.ant.taskdefs; | |||||
| import org.apache.tools.ant.BuildFileTest; | |||||
| import org.apache.tools.ant.types.FileSet; | |||||
| import org.apache.tools.ant.taskdefs.Property; | |||||
| import java.io.File; | |||||
| public class FindTest extends BuildFileTest { | |||||
| public FindTest(String name) { | |||||
| super(name); | |||||
| } | |||||
| public void setUp() { | |||||
| configureProject("build.xml"); | |||||
| } | |||||
| public void testMissingFile() { | |||||
| Find find = new Find(); | |||||
| try { | |||||
| find.execute(); | |||||
| fail("No 'no-file'-exception thrown."); | |||||
| } catch (Exception e) { | |||||
| // exception expected | |||||
| String expected = "file not set"; | |||||
| assertEquals("Wrong exception message.", expected, e.getMessage()); | |||||
| } | |||||
| } | |||||
| public void testMissingLocation() { | |||||
| Find find = new Find(); | |||||
| find.setFile("ant.jar"); | |||||
| try { | |||||
| find.execute(); | |||||
| fail("No 'no-location'-exception thrown."); | |||||
| } catch (Exception e) { | |||||
| // exception expected | |||||
| String expected = "location not set"; | |||||
| assertEquals("Wrong exception message.", expected, e.getMessage()); | |||||
| } | |||||
| } | |||||
| public void testMissingPath() { | |||||
| Find find = new Find(); | |||||
| find.setFile("ant.jar"); | |||||
| find.setLocation("location.ant-jar"); | |||||
| try { | |||||
| find.execute(); | |||||
| fail("No 'no-fileset'-exception thrown."); | |||||
| } catch (Exception e) { | |||||
| // exception expected | |||||
| String expected = "path not set"; | |||||
| assertEquals("Wrong exception message.", expected, e.getMessage()); | |||||
| } | |||||
| } | |||||
| public void testFileNotPresent() { | |||||
| executeTarget("testFileNotPresent"); | |||||
| String result = getProject().getProperty("location.ant-jar"); | |||||
| assertNull("Property set to wrong value.", result); | |||||
| } | |||||
| public void testFilePresent() { | |||||
| executeTarget("testFilePresent"); | |||||
| String result = getProject().getProperty("location.ant-jar"); | |||||
| assertNotNull("Property not set.", result); | |||||
| assertTrue("Wrong file found.", result.endsWith("ant.jar")); | |||||
| } | |||||
| public void testMultipleFiles() { | |||||
| executeTarget("testMultipleFiles"); | |||||
| String result = getProject().getProperty("location.test"); | |||||
| assertNotNull("Property not set.", result); | |||||
| assertTrue("Only one file found.", result.indexOf(";") > -1); | |||||
| } | |||||
| } | |||||
| @@ -0,0 +1,103 @@ | |||||
| <?xml version="1.0" encoding="ISO-8859-1"?> | |||||
| <project name="MyTask" basedir="." default="test"> | |||||
| <property name="src.dir" value="src"/> | |||||
| <property name="classes.dir" value="classes"/> | |||||
| <property name="ant.test.lib" value="ant-testutil.jar"/> | |||||
| <property name="report.dir" value="report"/> | |||||
| <property name="junit.out.dir.xml" value="${report.dir}/junit/xml"/> | |||||
| <property name="junit.out.dir.html" value="${report.dir}/junit/html"/> | |||||
| <path id="classpath.run"> | |||||
| <path path="${java.class.path}"/> | |||||
| <path location="${ant.project.name}.jar"/> | |||||
| </path> | |||||
| <path id="classpath.test"> | |||||
| <path refid="classpath.run"/> | |||||
| <path location="${ant.test.lib}"/> | |||||
| </path> | |||||
| <target name="clean" description="Delete all generated files"> | |||||
| <delete failonerror="false" includeEmptyDirs="true"> | |||||
| <fileset dir="." includes="${ant.project.name}.jar"/> | |||||
| <fileset dir="${classes.dir}"/> | |||||
| <fileset dir="${report.dir}"/> | |||||
| </delete> | |||||
| </target> | |||||
| <target name="compile" description="Compiles the Task"> | |||||
| <mkdir dir="${classes.dir}"/> | |||||
| <javac srcdir="${src.dir}" destdir="${classes.dir}" classpath="${ant.test.lib}"/> | |||||
| </target> | |||||
| <target name="jar" description="JARs the Task" depends="compile"> | |||||
| <jar destfile="${ant.project.name}.jar" basedir="${classes.dir}"/> | |||||
| </target> | |||||
| <target name="use.init" description="Taskdef´ the HelloWorld-Task" depends="jar"> | |||||
| <taskdef name="helloworld" classname="HelloWorld" classpath="${ant.project.name}.jar"/> | |||||
| </target> | |||||
| <target name="use.without" description="Use without any" depends="use.init"> | |||||
| <helloworld/> | |||||
| </target> | |||||
| <target name="use.message" description="Use with attribute 'message'" depends="use.init"> | |||||
| <helloworld message="attribute-text"/> | |||||
| </target> | |||||
| <target name="use.fail" description="Use with attribute 'fail'" depends="use.init"> | |||||
| <helloworld fail="true"/> | |||||
| </target> | |||||
| <target name="use.nestedText" description="Use with nested text" depends="use.init"> | |||||
| <helloworld>nested-text</helloworld> | |||||
| </target> | |||||
| <target name="use.nestedElement" description="Use with nested 'message'" depends="use.init"> | |||||
| <helloworld> | |||||
| <message msg="Nested Element 1"/> | |||||
| <message msg="Nested Element 2"/> | |||||
| </helloworld> | |||||
| </target> | |||||
| <target name="use" | |||||
| description="Try all (w/out use.fail)" | |||||
| depends="use.without,use.message,use.nestedText,use.nestedElement" | |||||
| /> | |||||
| <target name="junit" description="Runs the unit tests" depends="jar"> | |||||
| <delete dir="${junit.out.dir.xml}" /> | |||||
| <mkdir dir="${junit.out.dir.xml}" /> | |||||
| <junit printsummary="yes" haltonfailure="no"> | |||||
| <classpath refid="classpath.test"/> | |||||
| <formatter type="xml"/> | |||||
| <batchtest fork="yes" todir="${junit.out.dir.xml}"> | |||||
| <fileset dir="${src.dir}" includes="**/*Test.java"/> | |||||
| </batchtest> | |||||
| </junit> | |||||
| </target> | |||||
| <target name="junitreport" description="Create a report for the rest result"> | |||||
| <mkdir dir="${junit.out.dir.html}" /> | |||||
| <junitreport todir="${junit.out.dir.html}"> | |||||
| <fileset dir="${junit.out.dir.xml}"> | |||||
| <include name="*.xml"/> | |||||
| </fileset> | |||||
| <report format="frames" todir="${junit.out.dir.html}"/> | |||||
| </junitreport> | |||||
| </target> | |||||
| <target name="test" | |||||
| depends="junit,junitreport" | |||||
| description="Runs unit tests and creates a report" | |||||
| /> | |||||
| </project> | |||||
| @@ -0,0 +1,70 @@ | |||||
| import org.apache.tools.ant.Task; | |||||
| import org.apache.tools.ant.BuildException; | |||||
| import java.util.Vector; | |||||
| import java.util.Iterator; | |||||
| /** | |||||
| * The task of the tutorial. | |||||
| * Prints a message or let the build fail. | |||||
| * @author Jan Matérne | |||||
| * @since 2003-08-19 | |||||
| */ | |||||
| public class HelloWorld extends Task { | |||||
| /** The message to print. As attribute. */ | |||||
| String message; | |||||
| public void setMessage(String msg) { | |||||
| message = msg; | |||||
| } | |||||
| /** Should the build fail? Defaults to <i>false</i>. As attribute. */ | |||||
| boolean fail = false; | |||||
| public void setFail(boolean b) { | |||||
| fail = b; | |||||
| } | |||||
| /** Support for nested text. */ | |||||
| public void addText(String text) { | |||||
| message = text; | |||||
| } | |||||
| /** Do the work. */ | |||||
| public void execute() { | |||||
| // handle attribute 'fail' | |||||
| if (fail) throw new BuildException("Fail requested."); | |||||
| // handle attribute 'message' and nested text | |||||
| if (message!=null) log(message); | |||||
| // handle nested elements | |||||
| for (Iterator it=messages.iterator(); it.hasNext(); ) { | |||||
| Message msg = (Message)it.next(); | |||||
| log(msg.getMsg()); | |||||
| } | |||||
| } | |||||
| /** Store nested 'message's. */ | |||||
| Vector messages = new Vector(); | |||||
| /** Factory method for creating nested 'message's. */ | |||||
| public Message createMessage() { | |||||
| Message msg = new Message(); | |||||
| messages.add(msg); | |||||
| return msg; | |||||
| } | |||||
| /** A nested 'message'. */ | |||||
| public class Message { | |||||
| // Bean constructor | |||||
| public Message() {} | |||||
| /** Message to print. */ | |||||
| String msg; | |||||
| public void setMsg(String msg) { this.msg = msg; } | |||||
| public String getMsg() { return msg; } | |||||
| } | |||||
| } | |||||
| @@ -0,0 +1,40 @@ | |||||
| import org.apache.tools.ant.BuildFileTest; | |||||
| public class HelloWorldTest extends BuildFileTest { | |||||
| public HelloWorldTest(String s) { | |||||
| super(s); | |||||
| } | |||||
| public void setUp() { | |||||
| // initialize Ant | |||||
| configureProject("build.xml"); | |||||
| } | |||||
| public void testWithout() { | |||||
| executeTarget("use.without"); | |||||
| assertEquals("Message was logged but should not.", getLog(), ""); | |||||
| } | |||||
| public void testMessage() { | |||||
| // execute target 'use.nestedText' and expect a message | |||||
| // 'attribute-text' in the log | |||||
| expectLog("use.message", "attribute-text"); | |||||
| } | |||||
| public void testFail() { | |||||
| // execute target 'use.fail' and expect a BuildException | |||||
| // with text 'Fail requested.' | |||||
| expectBuildException("use.fail", "Fail requested."); | |||||
| } | |||||
| public void testNestedText() { | |||||
| expectLog("use.nestedText", "nested-text"); | |||||
| } | |||||
| public void testNestedElement() { | |||||
| executeTarget("use.nestedElement"); | |||||
| assertLogContaining("Nested Element 1"); | |||||
| assertLogContaining("Nested Element 2"); | |||||
| } | |||||
| } | |||||