FileDocCategorySizeDatePackage
BatchTest.javaAPI DocApache Ant 1.707639Wed Dec 13 06:16:20 GMT 2006org.apache.tools.ant.taskdefs.optional.junit

BatchTest

public final class BatchTest extends BaseTest

Create then run JUnitTest's based on the list of files given by the fileset attribute.

Every .java or .class file in the fileset is assumed to be a testcase. A JUnitTest is created for each of these named classes with basic setup inherited from the parent BatchTest.

see
JUnitTest

Fields Summary
private org.apache.tools.ant.Project
project
the reference to the project
private org.apache.tools.ant.types.resources.Resources
resources
the list of filesets containing the testcase filename rules
Constructors Summary
public BatchTest(org.apache.tools.ant.Project project)
create a new batchtest instance

param
project the project it depends on.


                         
       
        this.project = project;
    
Methods Summary
public voidadd(org.apache.tools.ant.types.ResourceCollection rc)
Add a new ResourceCollection instance to this batchtest. Whatever the collection is, only names that are .java or .class will be considered as 'candidates'.

param
rc the new ResourceCollection containing the rules to get the testcases.
since
Ant 1.7

        resources.add(rc);
    
public voidaddFileSet(org.apache.tools.ant.types.FileSet fs)
Add a new fileset instance to this batchtest. Whatever the fileset is, only filename that are .java or .class will be considered as 'candidates'.

param
fs the new fileset containing the rules to get the testcases.

        add(fs);

        // this one is here because the changes to support ResourceCollections
        // have broken Magic's JUnitTestTask.
        //
        // The task adds a FileSet to a BatchTest instance using the
        // Java API and without telling the FileSet about its project
        // instance.  The original code would pass in project on the
        // call to getDirectoryScanner - which is now hidden deep into
        // Resources.iterator() and not reachable.
        if (fs.getProject() == null) {
            fs.setProject(project);
        }
    
voidaddTestsTo(java.util.Vector v)
Convenient method to merge the JUnitTests of this batchtest to a Vector.

param
v the vector to which should be added all individual tests of this batch test.

        JUnitTest[] tests = createAllJUnitTest();
        v.ensureCapacity(v.size() + tests.length);
        for (int i = 0; i < tests.length; i++) {
            v.addElement(tests[i]);
        }
    
private JUnitTest[]createAllJUnitTest()
Create all JUnitTests based on the filesets. Each instance is configured to match this instance properties.

return
the array of all JUnitTests that belongs to this batch.

        String[] filenames = getFilenames();
        JUnitTest[] tests = new JUnitTest[filenames.length];
        for (int i = 0; i < tests.length; i++) {
            String classname = javaToClass(filenames[i]);
            tests[i] = createJUnitTest(classname);
        }
        return tests;
    
private JUnitTestcreateJUnitTest(java.lang.String classname)
Create a JUnitTest that has the same property as this BatchTest instance.

param
classname the name of the class that should be run as a JUnitTest. It must be a fully qualified name.
return
the JUnitTest over the given classname.

        JUnitTest test = new JUnitTest();
        test.setName(classname);
        test.setHaltonerror(this.haltOnError);
        test.setHaltonfailure(this.haltOnFail);
        test.setFiltertrace(this.filtertrace);
        test.setFork(this.fork);
        test.setIf(this.ifProperty);
        test.setUnless(this.unlessProperty);
        test.setTodir(this.destDir);
        test.setFailureProperty(failureProperty);
        test.setErrorProperty(errorProperty);
        Enumeration list = this.formatters.elements();
        while (list.hasMoreElements()) {
            test.addFormatter((FormatterElement) list.nextElement());
        }
        return test;
    
public java.util.Enumerationelements()
Return all JUnitTest instances obtain by applying the fileset rules.

return
an enumeration of all elements of this batchtest that are a JUnitTest instance.

        JUnitTest[] tests = createAllJUnitTest();
        return Enumerations.fromArray(tests);
    
private java.lang.String[]getFilenames()
Iterate over all filesets and return the filename of all files that end with .java or .class. This is to avoid wrapping a JUnitTest over an xml file for example. A Testcase is obviously a java file (compiled or not).

return
an array of filenames without their extension. As they should normally be taken from their root, filenames should match their fully qualified class name (If it is not the case it will fail when running the test). For the class org/apache/Whatever.class it will return org/apache/Whatever.

        Vector v = new Vector();
        Iterator iter = resources.iterator();
        while (iter.hasNext()) {
            Resource r = (Resource) iter.next();
            if (r.isExists()) {
                String pathname = r.getName();
                if (pathname.endsWith(".java")) {
                    v.addElement(pathname.substring(0, pathname.length() - ".java".length()));
                } else if (pathname.endsWith(".class")) {
                    v.addElement(pathname.substring(0, pathname.length() - ".class".length()));
                }
            }
        }

        String[] files = new String[v.size()];
        v.copyInto(files);
        return files;
    
public static java.lang.StringjavaToClass(java.lang.String filename)
Convenient method to convert a pathname without extension to a fully qualified classname. For example org/apache/Whatever will be converted to org.apache.Whatever

param
filename the filename to "convert" to a classname.
return
the classname matching the filename.

        return filename.replace(File.separatorChar, '.").replace('/", '.")
            .replace('\\", '.");